/** * {@inheritDoc} * @return mixed */ public function process() { if ($this->modx->getOption('site_start') == $this->resource->get('id')) { return $this->failure($this->modx->lexicon('resource_err_delete_sitestart')); } if ($this->modx->getOption('site_unavailable_page') == $this->resource->get('id')) { return $this->failure($this->modx->lexicon('resource_err_delete_siteunavailable')); } /* check for locks on resource */ if (!$this->addLock()) { return $this->failure($this->modx->lexicon('resource_locked_by', array('id' => $this->resource->get('id'), 'user' => $this->lockedUser->get('username')))); } $childrenIds = $this->getChildrenIds(); $this->fireBeforeDelete($childrenIds); /* delete children */ $this->deleteChildren(); /* delete the document. */ $this->resource->set('deleted', true); $this->resource->set('deletedby', $this->modx->user->get('id')); $this->resource->set('deletedon', $this->deletedTime); if ($this->resource->save() == false) { $this->resource->removeLock(); return $this->failure($this->modx->lexicon('resource_err_delete')); } $this->fireAfterDelete($childrenIds); /* log manager action */ $this->logManagerAction(); $this->resource->removeLock(); /* empty cache */ $this->clearCache(); return $this->success('', $this->resource->get(array('id', 'deleted', 'deletedby', 'deletedon'))); }
/** * Custom logic code here for setting placeholders, etc * @param array $scriptProperties * @return mixed */ public function process(array $scriptProperties = array()) { $placeholders = array(); $this->resource = $this->modx->getObject('modResource', $scriptProperties['id']); if ($this->resource == null) { return $this->failure(sprintf($this->modx->lexicon('resource_with_id_not_found'), $scriptProperties['id'])); } if (!$this->resource->checkPolicy('view')) { return $this->failure($this->modx->lexicon('access_denied')); } $this->resource->getOne('CreatedBy'); $this->resource->getOne('EditedBy'); $this->resource->getOne('Template'); $server_offset_time = intval($this->modx->getOption('server_offset_time', null, 0)); $this->resource->set('createdon_adjusted', strftime('%c', $this->resource->get('createdon') + $server_offset_time)); $this->resource->set('editedon_adjusted', strftime('%c', $this->resource->get('editedon') + $server_offset_time)); $this->resource->_contextKey = $this->resource->get('context_key'); $buffer = $this->modx->cacheManager->get($this->resource->getCacheKey(), array(xPDO::OPT_CACHE_KEY => $this->modx->getOption('cache_resource_key', null, 'resource'), xPDO::OPT_CACHE_HANDLER => $this->modx->getOption('cache_resource_handler', null, $this->modx->getOption(xPDO::OPT_CACHE_HANDLER)), xPDO::OPT_CACHE_FORMAT => (int) $this->modx->getOption('cache_resource_format', null, $this->modx->getOption(xPDO::OPT_CACHE_FORMAT, null, xPDOCacheManager::CACHE_PHP)))); if ($buffer) { $placeholders['buffer'] = htmlspecialchars($buffer['resource']['_content']); } /* assign resource to smarty */ $placeholders['resource'] = $this->resource; /* make preview url */ $this->getPreviewUrl(); $placeholders['_ctx'] = $this->resource->get('context_key'); return $placeholders; }
private function moveFilesUnderCorrectResource(&$md, $field) { $matches = array(); preg_match_all('~' . $this->uploadURL . '0/(?<file>[^ "\\)]+)~', $md, $matches); $path = $this->uploadPath . '0/'; $correctPath = $this->uploadPath . $this->resource->id . '/'; if (!is_dir($correctPath)) { mkdir($correctPath); } $files = $matches['file']; if (!empty($files)) { $files = array_map('trim', $files); $files = array_keys(array_flip($files)); $files = array_filter($files); foreach ($files as $file) { rename($path . $file, $correctPath . $file); } $md = str_replace($this->uploadURL . '0/', $this->uploadURL . $this->resource->id . '/', $md); if (strpos($field, 'tv')) { $tvID = str_replace('tv', '', $field); $content = str_replace($this->uploadURL . '0/', $this->uploadURL . $this->resource->id . '/', $this->resource->getTVValue($tvID)); $this->resource->setTVValue($tvID, $content); } else { if ($field == 'ta') { $field = 'content'; } $content = str_replace($this->uploadURL . '0/', $this->uploadURL . $this->resource->id . '/', $this->resource->get($field)); $this->resource->set($field, $content); $this->resource->save(); } } }
public function process() { if (!$this->addLock()) { return $this->failure($this->modx->lexicon('resource_locked_by', array('id' => $this->resource->get('id'), 'user' => $this->lockedUser->get('username')))); } /* 'undelete' the resource. */ $this->resource->set('deleted', false); $this->resource->set('deletedby', 0); $this->resource->set('deletedon', 0); if ($this->resource->save() == false) { $this->resource->removeLock(); return $this->failure($this->modx->lexicon('resource_err_undelete')); } $this->unDeleteChildren($this->resource->get('id'), $this->resource->get('deletedon')); $this->fireAfterUnDeleteEvent(); /* log manager action */ $this->logManagerAction(); /* empty cache */ $skipClearCache = $this->getProperty('skipClearCache', false); if ($skipClearCache == false) { $this->clearCache(); } $this->removeLock(); $deletedCount = $this->modx->getCount('modResource', array('deleted' => 1)); $outputArray = $this->resource->get(array('id')); $outputArray['deletedCount'] = $deletedCount; return $this->modx->error->success('', $outputArray); }
public function beforeSave() { /** @var modResource $parent */ $parent = $this->modx->getObject('modResource', $this->object->parent); if ($parent && $parent->class_key == 'CollectionContainer') { $this->object->set('show_in_tree', 0); } else { $this->object->set('show_in_tree', 1); } return parent::beforeSave(); }
/** * @param \modResource $parent * @param \modResource $resource * @param \modResource $originalParent */ protected function handleOriginalParent($parent, $resource, $originalParent) { if ($originalParent->class_key == 'CollectionContainer') { if ($parent->class_key != 'CollectionContainer') { $resource->set('show_in_tree', 1); } } else { /** @var \modResource $originalGreatParent */ $originalGreatParent = $originalParent->Parent; if ($originalGreatParent && $originalGreatParent->class_key == 'CollectionContainer') { $resource->set('show_in_tree', 1); } } }
public function process() { if (!$this->addLock()) { return $this->failure($this->modx->lexicon('resource_locked_by', array('id' => $this->resource->get('id'), 'user' => $this->lockedUser->get('username')))); } if ($this->isSiteStart()) { return $this->failure($this->modx->lexicon('resource_err_unpublish_sitestart')); } $this->resource->set('published', false); $this->resource->set('pub_date', false); $this->resource->set('unpub_date', false); $this->resource->set('editedby', $this->modx->user->get('id')); $this->resource->set('editedon', time(), 'integer'); $this->resource->set('publishedby', false); $this->resource->set('publishedon', false); if ($this->resource->save() == false) { $this->resource->removeLock(); return $this->failure($this->modx->lexicon('resource_err_unpublish')); } $this->fireAfterUnPublishEvent(); $this->logManagerAction(); $skipClearCache = $this->getProperty('skipClearCache', false); if ($skipClearCache == false) { $this->clearCache(); } return $this->success('', $this->resource->get(array('id'))); }
public function process() { if (!$this->addLock()) { return $this->failure($this->modx->lexicon('resource_locked_by', array('id' => $this->resource->get('id'), 'user' => $this->lockedUser->get('username')))); } $duplicateAlias = $this->checkForDuplicateAlias(); if ($duplicateAlias !== false) { return $this->failure($duplicateAlias); } /* publish resource */ $this->resource->set('published', true); $this->resource->set('pub_date', false); $this->resource->set('unpub_date', false); $this->resource->set('editedby', $this->modx->user->get('id')); $this->resource->set('editedon', time(), 'integer'); $this->resource->set('publishedby', $this->modx->user->get('id')); $this->resource->set('publishedon', time()); $saved = $this->resource->save(); $this->resource->removeLock(); if (!$saved) { return $this->failure($this->modx->lexicon('resource_err_publish')); } $this->fireAfterPublish(); $this->logManagerAction(); $this->clearCache(); return $this->success('', $this->resource->get(array('id', 'pub_date', 'unpub_date', 'editedby', 'editedon', 'publishedby', 'publishedon'))); }
public function setup() { $this->modx->lexicon->load('default', 'resource'); if (empty($this->config['gpc']['id'])) { return $this->modx->lexicon('resource_err_nf'); } $this->resource = $this->modx->getObject('modResource', intval($this->config['gpc']['id'])); if (empty($this->resource)) { return $this->modx->lexicon('resource_err_nfs', array('id' => intval($this->config['gpc']['id']))); } $this->resource->set('editedby', $this->modx->user->get('id')); $this->resource->set('editedon', strftime('%Y-%m-%d %H:%M:%S')); $this->template = $this->resource->getOne('Template'); return true; }
/** * @param \modResource $originalParent */ protected function handleOriginalParent($originalParent) { $originalGreatParent = $originalParent->Parent; if ($originalGreatParent && $originalGreatParent->class_key == 'CollectionContainer' && $originalParent->hasChildren() == 0) { $originalParent->set('show_in_tree', 0); $originalParent->save(); } }
/** * Quick check to make sure it's not site_start, if so, publish if not published to prevent site error * * @return boolean */ public function checkIfSiteStart() { $saved = false; if ($this->object->get('id') == $this->workingContext->getOption('site_start') && !$this->object->get('published')) { $this->object->set('published', true); $saved = $this->object->save(); } return $saved; }
/** * Get the Resource associated * * @return modResource|string */ public function getResource() { $resourceId = $this->getProperty('resource', 0); if (empty($resourceId)) { $this->resource = $this->modx->newObject('modResource'); $this->resource->set('id', 0); } else { $this->resource = $this->modx->getObject('modResource', $resourceId); if (empty($this->resource)) { return $this->modx->lexicon('resource_err_nfs', array('id' => $resourceId)); } /* check access */ if (!$this->resource->checkPolicy('view')) { return $this->modx->lexicon('permission_denied'); } } return $this->resource; }
public function process(array $scriptProperties = array()) { $placeholders = array(); $reloadData = $this->getReloadData(); $loaded = $this->getResource(); if ($loaded !== true) { return $this->failure($loaded); } if (is_array($reloadData) && !empty($reloadData)) { $this->resource->fromArray($reloadData); } /* get context */ $this->setContext(); /* check for locked status */ $this->checkForLocks(); /* set template overrides */ if (isset($scriptProperties['template'])) { $this->resource->set('template', $scriptProperties['template']); } $this->setParent(); /* invoke OnDocFormRender event */ $this->fireOnRenderEvent(); /* check permissions */ $this->setPermissions(); /* register FC rules */ $this->resourceArray = $this->resource->toArray(); $overridden = $this->checkFormCustomizationRules($this->resource); $this->resourceArray = array_merge($this->resourceArray, $overridden); $this->resourceArray['published'] = intval($this->resourceArray['published']) == 1 ? true : false; $this->resourceArray['hidemenu'] = intval($this->resourceArray['hidemenu']) == 1 ? true : false; $this->resourceArray['isfolder'] = intval($this->resourceArray['isfolder']) == 1 ? true : false; $this->resourceArray['richtext'] = intval($this->resourceArray['richtext']) == 1 ? true : false; $this->resourceArray['searchable'] = intval($this->resourceArray['searchable']) == 1 ? true : false; $this->resourceArray['cacheable'] = intval($this->resourceArray['cacheable']) == 1 ? true : false; $this->resourceArray['deleted'] = intval($this->resourceArray['deleted']) == 1 ? true : false; $this->resourceArray['uri_override'] = intval($this->resourceArray['uri_override']) == 1 ? true : false; if (!empty($this->resourceArray['parent'])) { if ($this->parent->get('id') == $this->resourceArray['parent']) { $this->resourceArray['parent_pagetitle'] = $this->parent->get('pagetitle'); } else { $overriddenParent = $this->modx->getObject('modResource', $this->resourceArray['parent']); if ($overriddenParent) { $this->resourceArray['parent_pagetitle'] = $overriddenParent->get('pagetitle'); } } } /* get TVs */ $this->resource->set('template', $this->resourceArray['template']); $this->prepareResource(); $this->loadTVs($reloadData); $this->getPreviewUrl(); /* single-use token for reloading resource */ $this->setResourceToken(); $this->setPlaceholder('resource', $this->resource); return $placeholders; }
/** * Set the parents isfolder status based upon remaining children * * @TODO Debate whether or not this should be default functionality * * @return void */ public function fixParents() { if (!empty($this->oldParent) && !empty($this->newParent)) { $oldParentChildrenCount = $this->modx->getCount('modResource', array('parent' => $this->oldParent->get('id'))); if ($oldParentChildrenCount <= 0 || $oldParentChildrenCount == null) { $this->oldParent->set('isfolder', false); $this->oldParent->save(); } $this->newParent->set('isfolder', true); } }
/** * Process this page, load the resource, and present its values * @return void */ public function process() { $data = $this->processInput($this->config['gpc']); /* @var modProcessorResponse $response */ $response = $this->modx->runProcessor('resource/create', $data); if (!$response->isError()) { $tempRes = $response->getObject(); $this->resource = $this->modx->getObject('modResource', $tempRes['id']); /* Make sure the createdby column is set */ $cb = $this->resource->get('createdby'); if (empty($cb)) { $this->resource->set('createdby', $this->modx->user->get('id')); $this->resource->save(); } $this->setPlaceholders(array('message' => 'Resource created.', 'resid' => $this->resource->get('id'), 'ctx' => $this->resource->get('context_key'))); } else { $error = $response->getAllErrors(); $this->setPlaceholder('message', 'Something went wrong creating the Resource: ' . implode(', ', $error)); } }
public function set($k, $v = null, $vType = '') { $oldAlias = false; if ($k == 'alias') { $oldAlias = $this->get('alias'); } $set = parent::set($k, $v, $vType); if ($this->isDirty('alias') && !empty($oldAlias)) { $this->oldAlias = $oldAlias; } return $set; }
/** * Set the parents isfolder status based upon remaining children * * @return void */ public function fixParents() { $autoIsFolder = $this->modx->getOption('auto_isfolder', null, true); if (!$autoIsFolder) { return; } if (!empty($this->oldParent)) { $oldParentChildrenCount = $this->modx->getCount('modResource', array('parent' => $this->oldParent->get('id'))); if ($oldParentChildrenCount <= 0 || $oldParentChildrenCount == null) { $this->oldParent->set('isfolder', false); $this->oldParent->save(); } } if (!empty($this->newParent)) { $this->newParent->set('isfolder', true); $this->newParent->save(); } }
/** * Get and set the parent for this resource * @return string The pagetitle of the parent */ public function setParent() { /* handle default parent */ $parentName = $this->context->getOption('site_name', '', $this->modx->_userConfig); $parentId = !empty($this->scriptProperties['parent']) ? $this->scriptProperties['parent'] : $this->resource->get('parent'); if ($parentId == 0) { $parentName = $this->context->getOption('site_name', '', $this->modx->_userConfig); } else { $this->parent = $this->modx->getObject('modResource', $parentId); if ($this->parent !== null) { $parentName = $this->parent->get('pagetitle'); $this->resource->set('parent', $parentId); } } if ($this->parent === null) { $this->parent = $this->modx->newObject($this->resourceClass); $this->parent->set('id', 0); $this->parent->set('parent', 0); } return $parentName; }
/** * @param string $k * @param null $v * @param string $vType * * @return bool */ public function set($k, $v = null, $vType = '') { if (is_string($k) && ($k == 'alias' || $k == 'uri')) { $this->_oldUri = parent::get('uri'); } elseif (is_string($k) && $k == 'properties' && empty($this->_oldRatings)) { if ($properties = parent::get('properties')) { if (!empty($properties['ratings'])) { $this->_oldRatings = implode(array_values($properties['ratings'])); } } } return parent::set($k, $v, $vType); }
/** * @param modManagerController $controller * @param modResource $resource */ public function loadManagerFiles(modManagerController $controller, modResource $resource) { $modx23 = (int) $this->systemVersion(); $cssUrl = $this->config['cssUrl'] . 'mgr/'; $jsUrl = $this->config['jsUrl'] . 'mgr/'; $properties = $resource->getProperties('ms2gallery'); if (empty($properties['media_source'])) { if (!($source_id = $resource->getTVValue('ms2Gallery'))) { /** @var modContextSetting $setting */ $setting = $this->modx->getObject('modContextSetting', array('key' => 'ms2gallery_source_default', 'context_key' => $resource->get('context_key'))); $source_id = !empty($setting) ? $setting->get('value') : $this->modx->getOption('ms2gallery_source_default'); } $resource->setProperties(array('media_source' => $source_id), 'ms2gallery'); $resource->save(); } else { $source_id = $properties['media_source']; } if (empty($source_id)) { $source_id = $this->modx->getOption('ms2gallery_source_default'); } $resource->set('media_source', $source_id); $controller->addLexiconTopic('ms2gallery:default'); $controller->addJavascript($jsUrl . 'ms2gallery.js'); $controller->addLastJavascript($jsUrl . 'misc/ms2.combo.js'); $controller->addLastJavascript($jsUrl . 'misc/ms2.utils.js'); $controller->addLastJavascript($jsUrl . 'misc/plupload/plupload.full.js'); $controller->addLastJavascript($jsUrl . 'misc/ext.ddview.js'); $controller->addLastJavascript($jsUrl . 'gallery.view.js'); $controller->addLastJavascript($jsUrl . 'gallery.window.js'); $controller->addLastJavascript($jsUrl . 'gallery.toolbar.js'); $controller->addLastJavascript($jsUrl . 'gallery.panel.js'); $controller->addCss($cssUrl . 'main.css'); if (!$modx23) { $controller->addCss($cssUrl . 'font-awesome.min.css'); } $source_config = array(); /** @var modMediaSource $source */ if ($source = $this->modx->getObject('modMediaSource', $source_id)) { $tmp = $source->getProperties(); foreach ($tmp as $v) { $source_config[$v['name']] = $v['value']; } } $controller->addHtml(' <script type="text/javascript"> MODx.modx23 = ' . $modx23 . '; ms2Gallery.config = ' . $this->modx->toJSON($this->config) . '; ms2Gallery.config.media_source = ' . $this->modx->toJSON($source_config) . '; </script>'); if ($this->modx->getOption('ms2gallery_new_tab_mode', null, true)) { $controller->addLastJavascript($jsUrl . 'tab.js'); } else { $insert = ' tabs.add({ xtype: "ms2gallery-page", id: "ms2gallery-page", title: _("ms2gallery"), record: { id: ' . $resource->get('id') . ', source: ' . $source_id . ', } }); '; if ($this->modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) { $controller->addHtml(' <script type="text/javascript"> Ext.onReady(function() { window.setTimeout(function() { var tabs = Ext.getCmp("modx-resource-tabs"); if (tabs) { ' . $insert . ' } }, 10); }); </script>'); } else { $controller->addHtml(' <script type="text/javascript"> Ext.ComponentMgr.onAvailable("modx-resource-tabs", function() { var tabs = this; tabs.on("beforerender", function() { ' . $insert . ' }); }); </script>'); } } }
/** * Parse values of resource fields and TVs. Set resource fields and return TVs. * @param modResource $resource * @param $file * @param array $elements * @return array */ public function parseElements(modResource &$resource, $file, $elements = array()) { if (empty($elements)) { return false; } $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; $doc->loadHTML($file); $xpath = new DOMXPath($doc); $body = $doc->documentElement; $tvs = array(); foreach ($elements as $field => $selector) { if ($resource->getField($field, true)) { $fieldValue = $this->getFieldValue($selector, $body, $xpath); if ($fieldValue !== false) { $resource->set($field, $fieldValue); } } else { $tv = $this->modx->getObject('modTemplateVar', array('name' => $field)); if ($tv) { $tvs[$field] = $this->getFieldValue($selector, $body, $xpath); } } } return $tvs; }
/** * @param string $k * @param null $v * @param string $vType * * @return bool */ public function set($k, $v = null, $vType = '') { if (is_string($k) && $k == 'createdby' && empty($this->_oldAuthor)) { $this->_oldAuthor = parent::get('createdby'); } return parent::set($k, $v, $vType); }
/** * Set the new Articles-based URI * @param modResource $resource */ public function setResourceUri(modResource &$resource) { $date = $resource->get('published') ? $resource->get('publishedon') : $resource->get('createdon'); $year = date('Y', strtotime($date)); $month = date('m', strtotime($date)); $day = date('d', strtotime($date)); $containerUri = $this->container->get('uri'); if (empty($containerUri)) { $containerUri = $this->container->get('alias'); } $uri = rtrim($containerUri, '/') . '/' . $year . '/' . $month . '/' . $day . '/' . $resource->get('alias'); $resource->set('uri', rtrim($uri, '/') . '/'); $resource->set('uri_override', true); }
/** * {@inheritdoc} */ public function set($k, $v = null, $vType = '') { if (in_array($k, $this->dataFields)) { if (!is_object($this->data)) { $this->loadData(); } $fieldType = $this->data->_getPHPType($k); if ($fieldType == 'float') { return $this->data->_setRaw($k, $v); } else { return $this->data->set($k, $v, $vType); } } else { return parent::set($k, $v, $vType); } }