Dotclear

source: plugins/maintenance/inc/tasks/class.dc.maintenance.synchpostsmeta.php @ 2044:4a3330bc8bd5

Revision 2044:4a3330bc8bd5, 2.5 KB checked in by Denis Jean-Chirstian <contact@…>, 12 years ago (diff)

Revamp plugin maintenance, final setp (perhaps still some typo), addresses #1484, fixes #1208, fixes #999

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14class dcMaintenanceSynchpostsmeta extends dcMaintenanceTask
15{
16     protected $ajax = true;
17     protected $group = 'index';
18     protected $limit = 100;
19     protected $step_task;
20
21     protected function init()
22     {
23          $this->name         = __('Entries metadata');
24          $this->task         = __('Synchronize entries metadata');
25          $this->step_task    = __('Next');
26          $this->step         = __('Synchronize entry %d to %d.');
27          $this->success           = __('Entries metadata synchronize done.');
28          $this->error        = __('Failed to synchronize entries metadata.');
29
30          $this->description = __('Synchronize all entries metadata could be useful after importing content in your blog or do bad operation on database tables.');
31     }
32
33     public function execute()
34     {
35          $this->code = $this->synchronizeAllPostsmeta($this->code, $this->limit);
36
37          return $this->code ? $this->code : true;
38     }
39
40     public function task()
41     {
42          return $this->code ? $this->step_task : $this->task;
43     }
44
45     public function step()
46     {
47          return $this->code ? sprintf($this->step, $this->code - $this->limit, $this->code) : null;
48     }
49
50     public function success()
51     {
52          return $this->code ? sprintf($this->step, $this->code - $this->limit, $this->code) : $this->success;
53     }
54
55     protected function synchronizeAllPostsmeta($start=null,$limit=null)
56     {
57          // Get number of posts
58          $rs = $this->core->con->select('SELECT COUNT(post_id) FROM '.$this->core->prefix.'post');
59          $count = $rs->f(0);
60
61          // Get posts ids to update
62          $req_limit = $start !== null && $limit !== null ? $this->core->con->limit($start, $limit) : '';
63          $rs = $this->core->con->select('SELECT post_id FROM '.$this->core->prefix.'post '.$req_limit, true);
64
65          // Update posts meta
66          while ($rs->fetch()) {
67               $rs_meta = $this->core->con->select('SELECT meta_id, meta_type FROM '.$this->core->prefix.'meta WHERE post_id = '.$rs->post_id.' ');
68
69               $meta = array();
70               while ($rs_meta->fetch()) {
71                    $meta[$rs_meta->meta_type][] = $rs_meta->meta_id;
72               }
73
74               $cur = $this->core->con->openCursor($this->core->prefix.'post');
75               $cur->post_meta = serialize($meta);
76               $cur->update('WHERE post_id = '.$rs->post_id);
77          }
78          $this->core->blog->triggerBlog();
79
80          // Return next step
81          return $start + $limit > $count ? null : $start + $limit;
82     }
83}
Note: See TracBrowser for help on using the repository browser.

Sites map