public static function archiveByArticle(MMSynchArticle $article)
    {
        $warnings = self::archive($article->remoteId());

        foreach($warnings as $warning)
        {
            $article->addWarning($warning);
        }
    }
                // related_media
                $relatedObjectIds = array();
                $relatedMedia = array(
                    'a_related_image' => 'MMSynchMediaImage',
                    'a_related_video' => 'MMSynchMediaVideo',
                    'a_related_audio' => 'MMSynchMediaAudio',
                    'a_related_link'  => 'MMSynchMediaLink',
                    'a_related_pdf'   => 'MMSynchMediaPDF'
                );

                foreach($relatedMedia as $field => $class)
                {
                    if ($article->source[$field])
                    {
                        $objectIds = MMSynchArticle::fetchIdsToObjectIds($class, explode(',', $article->source[$field]));

                        if (count($objectIds))
                        {
                            $relatedObjectIds = array_merge($relatedObjectIds, $objectIds);
                        }
                    }
                }

                $str = implode('-', array_unique($relatedObjectIds));
                if ($str != $dataMap['media_content']->toString())
                {
                    $cli->output(sprintf($logPrefix . ' change media_content %s => %s', $dataMap['media_content']->toString(), $str));
                    if ($options['apply'] == true)
                    {
                        $dataMap['media_content']->fromString(implode('-', array_unique($relatedObjectIds)));
    OR a.forbidden_article IS NOT NULL
    HAVING st_version=st_last_version;
';

$result = MMSynchronizer::instance()->db->arrayQuery($query);
$cli->output(sprintf('%s article to check', count($result)));

while(list(,$row) = each($result))
{
    $article = false;

    try
    {
        $db->begin();

        $article = MMSynchArticle::fetch($row['a_id']);
        if ($article)
        {
            $remoteId = $article->remoteId();
            $object   = eZContentObject::fetchByRemoteID($remoteId, true);

            if ($object)
            {
                $logPrefix  = sprintf('Synchronize object[%s] %s with article %s', $row['a_language'], $object->ID, $row['a_id'] );
                $dataMap    = $object->fetchDataMap(false, $row['a_language']);

                if (!$dataMap)
                    throw new Exception(sprintf('DataMap not fetchable for object[%s] %s with article %s', $row['a_language'], $object->ID, $row['a_id']));

                $map = array(
                    'publisher_parent_id' => array('name' => 'a_publisher_parent_id', 'default' => ''),
Example #4
0
SQLIContentPublisher::getInstance()->setOptions(new SQLIContentPublishOptions(array(
    'modification_check' => false,
    'update_null_field'  => false
)));

MMSynchMonitor::start();

// Import one article
unlink($lockFileName);
try
{
    $db->begin();

    MMSynchronizer::instance()->test = true;

    $article = MMSynchArticle::import($options['article'], $options['force']);

    if ($article)
    {
        $cli->output('Node Id = ' . $article->getContent()->defaultLocation->getNodeId());
    }

    $db->commit();
    $iteration++;
}
catch (Exception $e)
{
    $db->rollback();
    $cli->error($e->getMessage());
}
    public function process( $row )
    {
        $db = eZDB::instance();

        // Récupéraiton de l'article
        $article        = MMSynchArticle::fetch($row['a_id']);
        $contentObject  = eZContentObject::fetchByRemoteID( $article->remoteId() );

        if (!$contentObject)
        {
            $this->cli->notice(sprintf(' Synchronization problem for Article %s ', $row['a_id']));
            return false;
        }

        // Récupération des publisher_internal_id
        $referenceArticleIds = array();
        if (trim($article->source['a_referencearticleid']) != '')
        {
            $referenceArticleIds = array_unique(explode('|', trim($article->source['a_referencearticleid'])));
        }

        $db->begin();

        try
        {
            if (count($referenceArticleIds) > 0)
            {
                $query = sprintf("
                    SELECT  a.id as a_id
                    FROM    article a,
                            content c
                    WHERE   a.content_id = c.id
                    AND     a.language = '%s'
                    AND     a.publisher_internal_id IN (%s)
                    AND     c.publisher_folder_id = %s
                    ",
                    $row['a_language'],
                    implode(', ', $referenceArticleIds),
                    $article->source['c_publisher_folder_id']
                );
                $referenceArticles = MMSynchronizer::instance()->db->arrayQuery($query);

                if (count($referenceArticles) > 0)
                {
                    $referenceArticlesObjectIds = array();

                    // Fetch des object correspondant au publisher_internal_id
                    while(list(,$referenceArticleRow) = each($referenceArticles))
                    {
                        $referenceArticle       = MMSynchArticle::fetch($referenceArticleRow['a_id']);
                        $referenceContentObject = eZContentObject::fetchByRemoteID( $referenceArticle->remoteId() );

                        if ($referenceContentObject)
                        {
                            $referenceArticlesObjectIds[] = $referenceContentObject->attribute('id');
                        }
                        else
                        {
                            $this->cli->notice(sprintf(' Synchronization problem for Article %s', $referenceArticleRow['a_id']));
                        }
                    }

                    if (count($referenceArticlesObjectIds))
                    {
                        $dataMap    = $contentObject->fetchDataMap(false, $row['a_language']);
                        $attribute  = $dataMap['reference_articles'];

                        $attribute->fromString(implode('-', array_unique($referenceArticlesObjectIds)));
                        $attribute->store();

                        if (count($referenceArticlesObjectIds) == count($referenceArticleIds))
                        {
                            $this->updateStatus($row);
                        }
                        else
                        {
                            $this->cli->notice(sprintf(' Relationships among the missing publisher_internal_id %s', implode(', ', $referenceArticleIds)));
                        }
                    }
                }
                else
                {
                    $this->cli->notice(sprintf(' No items synchronized among publisher_internal_id %s', implode(', ', $referenceArticleIds)));
                }
            }
            else
            {
                $dataMap    = $contentObject->fetchDataMap(false, $row['a_language']);
                $attribute  = $dataMap['reference_articles'];

                if ($attribute && $attribute->hasContent())
                {
                    $attribute->fromString('');
                    $attribute->store();
                }

                $this->updateStatus($row);
            }

            $db->commit();
        }
        catch (Exception $e)
        {
            $db->rollback();
        }

        eZContentObject::clearCache();
    }
    public function process( $id )
    {
        $article = MMSynchArticle::import($id, $this->force);

        if (isset($this->options['id']) && $article)
        {
            $this->cli->output('Main node id : ' . $article->getContent()->defaultLocation->getNodeId());
        }

        unset($article);
    }