Seditio Source
Root |
./othercms/dotclear-2.22/plugins/maintenance/inc/tasks/class.dc.maintenance.synchpostsmeta.php
<?php
/**
 * @brief maintenance, a plugin for Dotclear 2
 *
 * @package Dotclear
 * @subpackage Plugins
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */
if (!defined('DC_RC_PATH')) {
    return;
}

class
dcMaintenanceSynchpostsmeta extends dcMaintenanceTask
{
    protected
$ajax  = true;
    protected
$group = 'index';
    protected
$limit = 100;
    protected
$step_task;

    protected function
init()
    {
       
$this->name      = __('Entries metadata');
       
$this->task      = __('Synchronize entries metadata');
       
$this->step_task = __('Next');
       
$this->step      = __('Synchronize entry %d to %d.');
       
$this->success   = __('Entries metadata synchronize done.');
       
$this->error     = __('Failed to synchronize entries metadata.');

       
$this->description = __('Synchronize all entries metadata could be useful after importing content in your blog or do bad operation on database tables.');
    }

    public function
execute()
    {
       
$this->code = $this->synchronizeAllPostsmeta($this->code, $this->limit);

        return
$this->code ?: true;
    }

    public function
task()
    {
        return
$this->code ? $this->step_task : $this->task;
    }

    public function
step()
    {
        return
$this->code ? sprintf($this->step, $this->code - $this->limit, $this->code) : null;
    }

    public function
success()
    {
        return
$this->code ? sprintf($this->step, $this->code - $this->limit, $this->code) : $this->success;
    }

    protected function
synchronizeAllPostsmeta($start = null, $limit = null)
    {
       
// Get number of posts
       
$rs    = $this->core->con->select('SELECT COUNT(post_id) FROM ' . $this->core->prefix . 'post');
       
$count = $rs->f(0);

       
// Get posts ids to update
       
$req_limit = $start !== null && $limit !== null ? $this->core->con->limit($start, $limit) : '';
       
$rs        = $this->core->con->select('SELECT post_id FROM ' . $this->core->prefix . 'post ' . $req_limit, true);

       
// Update posts meta
       
while ($rs->fetch()) {
           
$rs_meta = $this->core->con->select('SELECT meta_id, meta_type FROM ' . $this->core->prefix . 'meta WHERE post_id = ' . $rs->post_id . ' ');

           
$meta = [];
            while (
$rs_meta->fetch()) {
               
$meta[$rs_meta->meta_type][] = $rs_meta->meta_id;
            }

           
$cur            = $this->core->con->openCursor($this->core->prefix . 'post');
           
$cur->post_meta = serialize($meta);
           
$cur->update('WHERE post_id = ' . $rs->post_id);
        }
       
$this->core->blog->triggerBlog();

       
// Return next step
       
return $start + $limit > $count ? null : $start + $limit;
    }
}