/** * {@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(); }
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); } } }
/** * @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); }
/** * 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); } } }
/** * {@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); } }
/** * 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; }