Dotclear

source: plugins/maintenance/inc/tasks/class.dc.maintenance.synchpostsmeta.php @ 3731:3770620079d4

Revision 3731:3770620079d4, 2.7 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Simplify licence block at the beginning of each file

Line 
1<?php
2/**
3 * @brief maintenance, a plugin for Dotclear 2
4 *
5 * @package Dotclear
6 * @subpackage Plugins
7 *
8 * @copyright Olivier Meunier & Association Dotclear
9 * @copyright GPL-2.0-only
10 */
11
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 ?: 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