예제 #1
0
 protected function fetchMaxChildTreeID(Node $myNode, TagDef $treeOriginTagDef, TagPartial $treeOriginPartial, $parentTreeID = '')
 {
     $nq = new NodeQuery();
     $nq->setParameter('Status.all', true);
     $nq->setParameter('TreeID.childOf', $parentTreeID);
     $nq->setParameter('Elements.in', $myNode->getNodeRef()->getElement()->getSlug());
     if ($treeOriginTagDef->Direction == 'out') {
         $nq->setParameter('OutTags.exist', $treeOriginPartial->toString());
     } else {
         $nq->setParameter('InTags.exist', $treeOriginPartial->toString());
     }
     $nq->setOrderBy('TreeID', 'DESC');
     $nq->setLimit(1);
     $result = $this->NodeFindAllDAO->findAll($nq, true)->getResult();
     if (!empty($result)) {
         $lastNodeTreeID = $result['TreeID'];
         // if on the same level, return blank, in order to append as first child
         if (strcmp($lastNodeTreeID, $parentTreeID) === 0) {
             //                error_log('No children, same level');
             return '';
         } else {
             if (empty($parentTreeID)) {
                 return substr($lastNodeTreeID, 0, 4);
             }
         }
         //            error_log('Last TreeID = '.$lastNodeTreeID);
         return $lastNodeTreeID;
     }
     return '';
 }
 protected function elementHasRecords($slug)
 {
     $nq = new NodeQuery();
     $nq->setParameter('Elements.in', $slug);
     //        $nq->setParameter('Status.all', true);
     $nq->setLimit(1);
     $count = $this->NodeService->findAll($nq)->getResult();
     return $count !== null;
 }
 public function tagGalleryPhotos()
 {
     $galleryNodeRef = $this->NodeRefService->parseFromString('media-gallery:test-gallery');
     $interval = 25;
     $offset = 0;
     $nq = new NodeQuery();
     $nq->setParameter('Elements.in', 'image');
     $nq->setParameter('NodeRefs.only', true);
     $nq->setOrderBy('ActiveDate', 'DESC');
     $nq->setLimit($interval);
     $nq->setOffset($offset);
     $nq = $this->NodeService->findAll($nq, true);
     $nodes = $nq->getResults();
     while (count($nodes) > 0) {
         foreach ($nodes as $node) {
             $tag = new Tag($node->getElement()->getSlug(), $node->getSlug(), '#media-gallery-items');
             try {
                 $this->NodeService->addOutTag($galleryNodeRef, $tag);
                 echo $node->Slug . "\n";
             } catch (Exception $e) {
                 echo $node->Slug . " error: " . $e->getMessage() . "\n";
             }
         }
         $offset = $offset + $interval;
         unset($nodes);
         $nq->setLimit($interval);
         $nq->setOffset($offset);
         $nq->clearResults();
         $nq = $this->NodeService->findAll($nq, true);
         $nodes = $nq->getResults();
     }
 }
 protected function single()
 {
     $dto = new NodeQuery();
     $dto->setLimit(1);
     if ($this->getTemplateVariable('Site.all') == null) {
         if ($this->getTemplateVariable('Sites.in') == null) {
             $site = $this->RequestContext->getSite();
             $dto->setParameter('Sites.in', $site->getSlug());
         }
         $this->passthruTemplateVariable($dto, 'Sites.in');
         //$this->passthruTemplateVariable($dto, 'SiteIDs.in');
     }
     $this->passthruTemplateVariable($dto, 'Elements.in');
     //        $this->passthruTemplateVariable($dto, 'Slugs.in');
     $this->passthruTemplateVariable($dto, 'Meta.select');
     $this->passthruTemplateVariable($dto, 'OutTags.select');
     $this->passthruTemplateVariable($dto, 'InTags.select');
     //        $this->passthruTemplateVariable($dto, 'Sections.select');
     //        $this->passthruTemplateVariable($dto, 'Title.like');
     //        $this->passthruTemplateVariable($dto, 'Title.ieq');
     //        $this->passthruTemplateVariable($dto, 'Title.eq');
     //        $this->passthruTemplateVariable($dto, 'Title.firstChar');
     //
     //        if(!$this->Permissions->checkPermission('cms-view')) {
     //            $dto->setParameter('Status.isActive', true);
     //        }
     //        $this->passthruTemplateVariable($dto, 'ActiveDate.before');
     //        $this->passthruTemplateVariable($dto, 'ActiveDate.after');
     //        $this->passthruTemplateVariable($dto, 'ActiveDate.start');
     //        $this->passthruTemplateVariable($dto, 'ActiveDate.end');
     //
     //        $this->passthruTemplateVariable($dto, 'CreationDate.before');
     //        $this->passthruTemplateVariable($dto, 'CreationDate.after');
     //        $this->passthruTemplateVariable($dto, 'CreationDate.start');
     //        $this->passthruTemplateVariable($dto, 'CreationDate.end');
     //
     //        $this->passthruTemplateVariable($dto, 'OutTags.exist');
     //        $this->passthruTemplateVariable($dto, 'InTags.exist');
     //        $this->passthruTemplateVariable($dto, 'Meta.exist');
     //        $this->passthruTemplateVariable($dto, 'Sections.exist');
     //
     //        foreach($this->templateVars as $name => $value)
     //        {
     //            if(strpos($name, '#') === 0)
     //                $dto->setParameter($name, $value);
     //        }
     $slug = $this->getTemplateVariable('Slugs.in');
     if ($slug != null) {
         $dto->setParameter('Slugs.in', $slug);
         $dto = $this->NodeRefService->normalizeNodeQuery($dto);
         $nodeRefs = $dto->getParameter('NodeRefs.normalized');
         $nodePartials = $dto->getParameter('NodePartials.eq');
         $allFullyQualified = $dto->getParameter('NodeRefs.fullyQualified');
         if (!$allFullyQualified || count($nodeRefs) > 1) {
             $this->Logger->debug('node-single query is not fully-qualified NodeRef or more than 1 node is being returned');
             $dto->setResults(array());
         } else {
             $row = $this->RegulatedNodeService->getByNodeRef(current($nodeRefs), $nodePartials, $this->getTemplateVariable('ForceReadWrite') != null ? StringUtils::strToBool($this->getTemplateVariable('ForceReadWrite')) : false);
             $showPending = StringUtils::strToBool($this->getTemplateVariable('Status.allowInactive')) || $this->Permissions->checkPermission('cms-view');
             //Allow draft records to be viewed if exact URL is known.
             if (empty($row)) {
                 $this->Logger->debug('Row not found');
                 $dto->setResults(array());
             } else {
                 if ($row->Status == 'deleted') {
                     $this->Logger->debug('Node status is deleted');
                     $dto->setResults(array());
                 } else {
                     if (!$row->isIsActive() && !$showPending) {
                         $this->Logger->debug('Record is not active (and user is not permitted to see pending status)');
                         $dto->setResults(array());
                     } else {
                         $this->Logger->debug('Found node [' . $row->getNodeRef() . ']');
                         $this->Events->trigger('NodeWebController.single', $this->templateVars, $row);
                         foreach ((array) $row->getNodeRef()->getElement()->getAspects() as $aspect) {
                             $this->Events->trigger('NodeWebController' . '.@' . $aspect->Slug . '.' . 'single', $this->templateVars, $row);
                         }
                         $dto->setResults(array($row));
                     }
                 }
             }
         }
     } else {
         $dto->setResults(array());
     }
     return $this->readNodeQuery($dto);
 }
 protected function purgeAll()
 {
     $interval = 1000;
     // Allow the caller to specify a delay in ms between purge calls.
     // (to keep database load to a minimum if running this over a long period of time...)
     $delay = $this->Request->getParameter('delay');
     if (!empty($delay)) {
         $delay = intval($delay) * 1000;
     }
     $elements = array();
     $elementSlugs = $this->Request->getRequiredParameter('elements');
     if ($elementSlugs == 'all') {
         $elements = $this->ElementService->findAll()->getResults();
     } else {
         $elementSlugs = StringUtils::smartExplode($elementSlugs);
         foreach ($elementSlugs as $slug) {
             $elements[] = $this->ElementService->getBySlug($slug);
         }
     }
     // Support passing a list of element slugs that will not be purged, even if the "elements" attribute is "all".
     $ignoreElementSlugs = $this->Request->getParameter('ignore_elements');
     if (!empty($ignoreElementSlugs)) {
         $ignoreElementSlugs = StringUtils::smartExplode($ignoreElementSlugs);
         foreach ($ignoreElementSlugs as $slug) {
             // Do this step just to validate that the user has passed in real element slugs and not made any typos.
             $this->ElementService->getBySlug($slug);
         }
     }
     foreach ($elements as $element) {
         // Skip over any elements we've been told to ignore.
         if (!empty($ignoreElementSlugs) && in_array($element->getSlug(), $ignoreElementSlugs)) {
             continue;
         }
         $nq = new NodeQuery();
         $nq->setParameter('NodeRefs.only', true);
         $nq->setParameter('Elements.in', $element->getSlug());
         $nq->setParameter('Status.eq', 'deleted');
         $nq->setLimit($interval);
         $nq = $this->NodeService->findAll($nq, true);
         $nodes = $nq->getResults();
         $count = 0;
         while (count($nodes) > 0) {
             foreach ($nodes as $nodeRef) {
                 ++$count;
                 try {
                     $this->NodeService->purge($nodeRef);
                     echo $count, ". " . $nodeRef, " purged\n";
                     if ($count % 10 == 0) {
                         $this->TransactionManager->commit()->begin();
                         echo "commit\n";
                     }
                 } catch (Exception $e) {
                     echo "Exception caught: " . $e->getMessage() . "\n";
                 }
                 unset($nodeRef);
                 if ($delay > 0) {
                     usleep($delay);
                 }
             }
             $this->TransactionManager->commit()->begin();
             $nq->clearResults();
             $nodes = $this->NodeService->findAll($nq, true)->getResults();
         }
     }
 }
 public function populateDefaults($elements = 'all')
 {
     $log = '';
     if ($elements == 'all') {
         $elements = $this->ElementService->findAll()->getResults();
     } else {
         $elementSlugs = StringUtils::smartExplode($elements);
         $elements = array();
         foreach ($elementSlugs as $eSlug) {
             $elements[] = $this->ElementService->getBySlug($eSlug);
         }
     }
     foreach ($elements as $element) {
         $offset = 0;
         $nq = new NodeQuery();
         $nq->setParameter('Elements.in', $element->getSlug());
         $nq->setParameter('Meta.select', 'all');
         $nq->setLimit(1000);
         $nq->setOffset($offset);
         $nq->asObjects();
         $nq->isRetrieveTotalRecords(true);
         $nq = $this->NodeService->findAll($nq, true);
         $nodes = $nq->getResults();
         $tCount = $nq->getTotalRecords();
         $count = 0;
         while (count($nodes) > 0) {
             foreach ($nodes as $node) {
                 $this->NodeMapper->defaultsOnNode($node);
                 $this->NodeService->edit($node);
                 ++$count;
             }
             $offset += 1000;
             $nq = new NodeQuery();
             $nq->setParameter('Elements.in', $element->getSlug());
             $nq->setParameter('Meta.select', 'all');
             $nq->setLimit(1000);
             $nq->setOffset($offset);
             $nq->asObjects();
             $nodes = $this->NodeService->findAll($nq)->getResults();
         }
         $log .= 'Updated defaults on ' . $count . ' of ' . $tCount . ' ' . $element->getSlug() . " nodes.\n";
     }
     return $log;
 }