コード例 #1
0
 /**
  * Returns an array with the log entries of the given action with a limiter for the paging. It is used for the content workflow overview.
  * The log entries are filtered by the page object.
  *
  * @param   string  $action
  * @param   int     $offset
  * @param   int     $limit
  *
  * @return  array   $result
  */
 public function getLogs($action = '', $offset, $limit)
 {
     $result = array();
     $qb = $this->em->createQueryBuilder();
     $sqb = $this->em->createQueryBuilder();
     $qb->select('l.objectId, l.action, l.loggedAt, l.version, l.username')->from('Cx\\Core\\ContentManager\\Model\\Entity\\LogEntry', 'l')->where('l.action = :action')->andWhere('l.objectClass = :objectClass')->andWhere($qb->expr()->eq('l.version', '(' . $sqb->select('MAX(sl.version) AS version')->from('Cx\\Core\\ContentManager\\Model\\Entity\\LogEntry', 'sl')->where($sqb->expr()->eq('l.objectId', 'sl.objectId'))->getDQL() . ')'))->orderBy('l.loggedAt', 'DESC')->setParameter('objectClass', 'Cx\\Core\\ContentManager\\Model\\Entity\\Page');
     switch ($action) {
         case 'deleted':
             $qb->setParameter('action', 'remove');
             break;
         case 'unvalidated':
             $editingStatus = 'hasDraftWaiting';
             $qb->orWhere('l.action = :orAction')->setParameter('action', 'create')->setParameter('orAction', 'update');
             break;
         case 'updated':
             $editingStatus = '';
             $qb->setParameter('action', 'update');
             break;
         default:
             // create
             $editingStatus = '';
             $qb->setParameter('action', 'create');
     }
     switch ($action) {
         case 'deleted':
             $qb->setFirstResult($offset)->setMaxResults($limit);
             $logs = $qb->getQuery()->getResult();
             $logsByNodeId = array();
             // Structure the logs by node id and language
             foreach ($logs as $log) {
                 $page = new \Cx\Core\ContentManager\Model\Entity\Page();
                 $page->setId($log['objectId']);
                 $this->revert($page, $log['version'] - 1);
                 $result[$page->getNodeIdShadowed()][$page->getLang()] = $log;
             }
             break;
         default:
             // create, update and unvalidated
             // If setFirstResult() is called, setMaxResult must be also called. Otherwise there is a fatal error.
             // The parameter for setMaxResult() method is a custom value set to 999999, because we need all pages.
             $qb->setFirstResult($offset)->setMaxResults(999999);
             $logs = $qb->getQuery()->getResult();
             $i = 0;
             foreach ($logs as $log) {
                 $page = $this->pageRepo->findOneById($log['objectId']);
                 if (!$page) {
                     continue;
                 }
                 if ($page->getEditingStatus() == $editingStatus) {
                     $result[] = $log;
                     $i++;
                 }
                 if ($i >= $limit) {
                     break;
                 }
             }
     }
     return $result;
 }
コード例 #2
0
 /**
  * Returns an array with the page translations of the given page id.
  * 
  * @param  int  $pageId
  * @param  int  $historyId  If the page does not exist, we need the history id to revert them.
  */
 public function getPageTranslations($pageId, $historyId)
 {
     $pages = array();
     $pageTranslations = array();
     $currentPage = $this->findOneById($pageId);
     // If page is deleted
     if (!is_object($currentPage)) {
         $currentPage = new \Cx\Core\ContentManager\Model\Entity\Page();
         $currentPage->setId($pageId);
         $logRepo = $this->em->getRepository('Cx\\Core\\ContentManager\\Model\\Entity\\LogEntry');
         $logRepo->revert($currentPage, $historyId);
         $logs = $logRepo->getLogsByAction('remove');
         foreach ($logs as $log) {
             $page = new \Cx\Core\ContentManager\Model\Entity\Page();
             $page->setId($log->getObjectId());
             $logRepo->revert($page, $log->getVersion() - 1);
             if ($page->getNodeIdShadowed() == $currentPage->getNodeIdShadowed()) {
                 $pages[] = $page;
             }
         }
     } else {
         // Page exists
         $pages = $this->findByNodeIdShadowed($currentPage->getNodeIdShadowed());
     }
     foreach ($pages as $page) {
         $pageTranslations[$page->getLang()] = \FWLanguage::getLanguageCodeById($page->getLang());
     }
     return $pageTranslations;
 }
コード例 #3
0
 private function revertPage($pageId)
 {
     $page = new \Cx\Core\ContentManager\Model\Entity\Page();
     $page->setId($pageId);
     $logs = $this->logRepo->getLogEntries($page);
     $this->logRepo->revert($page, $logs[1]->getVersion());
     $page->setId(0);
     return array('page' => $page, 'logs' => $logs);
 }