예제 #1
0
 /**
  * {@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')));
 }
예제 #2
0
 /**
  * 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;
 }
예제 #3
0
 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();
         }
     }
 }
예제 #4
0
 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);
 }
예제 #5
0
 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);
         }
     }
 }
예제 #7
0
 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')));
 }
예제 #8
0
 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')));
 }
예제 #9
0
 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();
     }
 }
예제 #11
0
 /**
  * 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;
 }
예제 #12
0
 /**
  * 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;
 }
예제 #13
0
 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;
 }
예제 #14
0
 /**
  * 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);
     }
 }
예제 #15
0
 /**
  * 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;
 }
예제 #17
0
 /**
  * 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();
     }
 }
예제 #18
0
 /**
  * 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;
 }
예제 #19
0
 /**
  * @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);
 }
예제 #20
0
    /**
     * @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;
 }
예제 #22
0
 /**
  * @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);
 }
예제 #24
0
 /**
  * {@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);
     }
 }