예제 #1
0
 /**
  * {@inheritDoc}
  * @return mixed
  */
 public function process()
 {
     if (!$this->resource->checkPolicy('delete')) {
         return $this->failure($this->modx->lexicon('resource_err_delete'));
     }
     $resources = array($this->resource);
     $ids = array($this->resource->id);
     $this->modx->invokeEvent('OnBeforeEmptyTrash', array('ids' => &$ids, 'resources' => &$resources));
     $this->handleChildren();
     /** @var modResourceGroupResource[] $resourceGroupResources */
     $resourceGroupResources = $this->resource->getMany('ResourceGroupResources');
     /** @var modTemplateVarResource[] $templateVarResources */
     $templateVarResources = $this->resource->getMany('TemplateVarResources');
     foreach ($resourceGroupResources as $resourceGroupResource) {
         $resourceGroupResource->remove();
     }
     foreach ($templateVarResources as $templateVarResource) {
         $templateVarResource->remove();
     }
     $this->modx->removeCollection('CollectionSelection', array('resource' => $this->resource->id));
     if ($this->resource->remove() == false) {
         return $this->failure($this->modx->lexicon('resource_err_delete'));
     }
     $this->modx->invokeEvent('OnEmptyTrash', array('num_deleted' => 1, 'resources' => &$resources, 'ids' => &$ids));
     $this->logManagerAction();
     $skipClearCache = $this->getProperty('skipClearCache', false);
     if ($skipClearCache == false) {
         $this->clearCache();
     }
     return $this->success();
 }
예제 #2
0
function modresource_populate_children(\Teleport\Action\Extract &$extract, modResource &$object, $criteria, $graph, $graphCriteria, $vehicle, &$vehicleCount)
{
    unset($criteria['parent']);
    $children = $object->getMany('Children', null, false);
    if ($children) {
        foreach ($children as &$child) {
            /** @var modResource $child */
            if ($graph !== null) {
                $child->getGraph($graph, $graphCriteria);
            }
            if ($extract->package->put($child, $vehicle['attributes'])) {
                $vehicleCount++;
            }
            modresource_populate_children($extract, $child, $criteria, $graph, $graphCriteria, $vehicle, $vehicleCount);
        }
    }
}
예제 #3
0
 /**
  * @param string $alias
  * @param null $criteria
  * @param bool $cacheFlag
  *
  * @return array
  */
 public function &getMany($alias, $criteria = null, $cacheFlag = true)
 {
     if ($alias == 'Files' || $alias == 'Votes') {
         $criteria = array('class' => $this->class_key);
     }
     return parent::getMany($alias, $criteria, $cacheFlag);
 }
예제 #4
0
 /**
  * Helper method for getChildrenIds for getting Children recursively
  *
  * @see getChildrenIds
  * @param modResource $parent
  * @return void
  */
 protected function getChildren(modResource $parent)
 {
     $childResources = $parent->getMany('Children');
     if (count($childResources) > 0) {
         /** @var modResource $child */
         foreach ($childResources as $child) {
             if ($child->get('id') == $this->modx->getOption('site_start')) {
                 continue;
             }
             if ($child->get('id') == $this->modx->getOption('site_unavailable_page')) {
                 continue;
             }
             $this->children[] = $child;
             /* recursively loop through tree */
             $this->getChildren($child);
         }
     }
 }
예제 #5
0
 /**
  * {@inheritdoc}
  * */
 public function &getMany($alias, $criteria = null, $cacheFlag = false)
 {
     if (in_array($alias, $this->dataRelated)) {
         if (!is_object($this->data)) {
             $this->loadData();
         }
         return $this->data->getMany($alias, $criteria, $cacheFlag);
     } else {
         return parent::getMany($alias, $criteria, $cacheFlag);
     }
 }
예제 #6
0
 /**
  * Creates a duplicate of the specified resource in the specified context.
  * 
  * @param modResource $resource
  * @param string $contextKey
  */
 public function duplicateResource(&$resource, $contextKey)
 {
     /* determine parent id of new resource */
     $newParentId = null;
     $parentId = $resource->get('parent');
     if ($parentId != null) {
         $linkedParentResources = $this->getLinkedResources($parentId);
         if (isset($linkedParentResources[$contextKey])) {
             $newParentId = $linkedParentResources[$contextKey];
         }
     }
     /* create new resource */
     $newResource = $this->modx->newObject($resource->get('class_key'));
     $newResource->fromArray($resource->toArray('', true), '', false, true);
     $newResource->set('id', 0);
     $newResource->set('pagetitle', $resource->get('pagetitle') . ' ' . $this->modx->lexicon('babel.translation_pending'));
     $newResource->set('parent', intval($newParentId));
     $newResource->set('createdby', $this->modx->user->get('id'));
     $newResource->set('createdon', time());
     $newResource->set('editedby', 0);
     $newResource->set('editedon', 0);
     $newResource->set('deleted', false);
     $newResource->set('deletedon', 0);
     $newResource->set('deletedby', 0);
     $newResource->set('published', false);
     $newResource->set('publishedon', 0);
     $newResource->set('publishedby', 0);
     $newResource->set('context_key', $contextKey);
     if ($newResource->save()) {
         /* copy all TV values */
         $templateVarResources = $resource->getMany('TemplateVarResources');
         foreach ($templateVarResources as $oldTemplateVarResource) {
             $newTemplateVarResource = $this->modx->newObject('modTemplateVarResource');
             $newTemplateVarResource->set('contentid', $newResource->get('id'));
             $newTemplateVarResource->set('tmplvarid', $oldTemplateVarResource->get('tmplvarid'));
             $newTemplateVarResource->set('value', $oldTemplateVarResource->get('value'));
             $newTemplateVarResource->save();
         }
         /* set parent of duplicate as a folder */
         if ($newParentId) {
             $newParent = $this->modx->getObject('modResource', $newParentId);
             if ($newParent) {
                 $newParent->set('is_folder', 1);
                 $newParent->save();
             }
         }
     } else {
         $this->modx->log(modX::LOG_LEVEL_ERROR, 'Could not duplicate resource: ' . $resource->get('id') . ' in context: ' . $contextKey);
         $newResource = null;
     }
     return $newResource;
 }