Exemple #1
0
 /**
  * FenomX constructor.
  *
  * @param pdoTools $pdoTools
  */
 public function __construct(pdoTools $pdoTools)
 {
     if (!class_exists('modChunkProvider')) {
         require dirname(dirname(__FILE__)) . '/fenom/Providers/ModChunk.php';
         require dirname(dirname(__FILE__)) . '/fenom/Providers/ModTemplate.php';
         require dirname(dirname(__FILE__)) . '/fenom/Providers/ModFile.php';
     }
     $provider = new modChunkProvider($pdoTools);
     parent::__construct($provider);
     $this->setCompileDir(rtrim($pdoTools->config['cachePath'], '/') . '/file');
     $this->addProvider('template', new modTemplateProvider($pdoTools));
     $this->addProvider('file', new modFileProvider($pdoTools));
     $default_options = array('disable_cache' => !$pdoTools->config['useFenomCache'], 'force_compile' => !$pdoTools->config['useFenomCache'], 'force_include' => !$pdoTools->config['useFenomCache'], 'auto_reload' => $pdoTools->config['useFenomCache']);
     if ($options = $pdoTools->modx->fromJSON($pdoTools->modx->getOption('pdotools_fenom_options'))) {
         $options = array_merge($default_options, $options);
     } else {
         $options = $default_options;
     }
     if (!$pdoTools->config['useFenomPHP']) {
         $this->removeAccessor('php');
         $options['disable_native_funcs'] = true;
     }
     $this->setOptions($options);
     $this->pdoTools = $pdoTools;
     $this->modx = $pdoTools->modx;
     $this->_addDefaultModifiers();
     $this->modx->invokeEvent('pdoToolsOnFenomInit', array('fenom' => $this, 'config' => $pdoTools->config));
 }
 /**
  * Collects and processes any set of tags as defined by a prefix and suffix.
  *
  * @param string $parentTag The tag representing the element processing this
  * tag.  Pass an empty string to allow parsing without this recursion check.
  * @param string $content The content to process and act on (by reference).
  * @param boolean $processUncacheable Determines if noncacheable tags are to
  * be processed (default= false).
  * @param boolean $removeUnprocessed Determines if unprocessed tags should
  * be left in place in the content, or stripped out (default= false).
  * @param string $prefix The characters that define the start of a tag
  * (default= "[[").
  * @param string $suffix The characters that define the end of a tag
  * (default= "]]").
  * @param array $tokens Indicates that the parser should only process tags
  * with the tokens included in this array.
  * @param integer $depth The maximum iterations to recursively process tags
  * returned by prior passes, 0 by default.
  * @return int The number of processed tags
  */
 public function processElementTags($parentTag, &$content, $processUncacheable = false, $removeUnprocessed = false, $prefix = "[[", $suffix = "]]", $tokens = array(), $depth = 0)
 {
     $_processingTag = $this->_processingTag;
     $_processingUncacheable = $this->_processingUncacheable;
     $_removingUnprocessed = $this->_removingUnprocessed;
     $this->_processingTag = true;
     $this->_processingUncacheable = (bool) $processUncacheable;
     $this->_removingUnprocessed = (bool) $removeUnprocessed;
     $depth = $depth > 0 ? $depth - 1 : 0;
     $processed = 0;
     $tags = array();
     /* invoke OnParseDocument event */
     $this->modx->documentOutput = $content;
     $this->modx->invokeEvent('OnParseDocument', array('content' => &$content));
     $content = $this->modx->documentOutput;
     unset($this->modx->documentOutput);
     if ($collected = $this->collectElementTags($content, $tags, $prefix, $suffix, $tokens)) {
         $tagMap = array();
         foreach ($tags as $tag) {
             $token = substr($tag[1], 0, 1);
             if (!$processUncacheable && $token === '!') {
                 if ($removeUnprocessed) {
                     $tagMap[$tag[0]] = '';
                 }
             } elseif (!empty($tokens) && !in_array($token, $tokens)) {
                 $collected--;
                 continue;
             }
             if ($tag[0] === $parentTag) {
                 $tagMap[$tag[0]] = '';
                 $processed++;
                 continue;
             }
             $tagOutput = $this->processTag($tag, $processUncacheable);
             if (($tagOutput === null || $tagOutput === false) && $removeUnprocessed) {
                 $tagMap[$tag[0]] = '';
                 $processed++;
             } elseif ($tagOutput !== null && $tagOutput !== false) {
                 $tagMap[$tag[0]] = $tagOutput;
                 if ($tag[0] !== $tagOutput) {
                     $processed++;
                 }
             }
         }
         $this->mergeTagOutput($tagMap, $content);
         if ($depth > 0) {
             $processed += $this->processElementTags($parentTag, $content, $processUncacheable, $removeUnprocessed, $prefix, $suffix, $tokens, $depth);
         }
     }
     $this->_removingUnprocessed = $_removingUnprocessed;
     $this->_processingUncacheable = $_processingUncacheable;
     $this->_processingTag = $_processingTag;
     return $processed;
 }
 /**
  * Change the user password.
  *
  * @access public
  * @param string $newPassword Password to set.
  * @param string $oldPassword Current password for validation.
  * @return boolean Indicates if password was successfully changed.
  * @todo Add support for configurable password encoding.
  */
 public function changePassword($newPassword, $oldPassword)
 {
     $changed = false;
     if ($this->passwordMatches($oldPassword)) {
         if (!empty($newPassword)) {
             $this->set('password', $newPassword);
             $changed = $this->save();
             if ($changed) {
                 $this->xpdo->invokeEvent('OnUserChangePassword', array('user' => &$this, 'newpassword' => $newPassword, 'oldpassword' => $oldPassword, 'userid' => $this->get('id'), 'username' => $this->get('username'), 'userpassword' => $newPassword));
             }
         }
     }
     return $changed;
 }
 /**
  * Get a modElement instance taking advantage of the modX::$sourceCache.
  *
  * @param string $class The modElement derivative class to load.
  * @param string $name An element name or raw tagName to identify the modElement instance.
  * @return modElement|null An instance of the specified modElement derivative class.
  */
 public function getElement($class, $name)
 {
     $realname = $this->realname($name);
     if (array_key_exists($class, $this->modx->sourceCache) && array_key_exists($realname, $this->modx->sourceCache[$class])) {
         /** @var modElement $element */
         $element = $this->modx->newObject($class);
         $element->fromArray($this->modx->sourceCache[$class][$realname]['fields'], '', true, true);
         $element->setPolicies($this->modx->sourceCache[$class][$realname]['policies']);
         if (!empty($this->modx->sourceCache[$class][$realname]['source'])) {
             if (!empty($this->modx->sourceCache[$class][$realname]['source']['class_key'])) {
                 $sourceClassKey = $this->modx->sourceCache[$class][$realname]['source']['class_key'];
                 $this->modx->loadClass('sources.modMediaSource');
                 /* @var modMediaSource $source */
                 $source = $this->modx->newObject($sourceClassKey);
                 $source->fromArray($this->modx->sourceCache[$class][$realname]['source'], '', true, true);
                 $element->addOne($source, 'Source');
             }
         }
     } else {
         /** @var modElement $element */
         $element = $this->modx->getObjectGraph($class, array('Source' => array()), array('name' => $realname), true);
         if ($element && array_key_exists($class, $this->modx->sourceCache)) {
             $this->modx->sourceCache[$class][$realname] = array('fields' => $element->toArray(), 'policies' => $element->getPolicies(), 'source' => $element->Source ? $element->Source->toArray() : array());
         } elseif (!$element) {
             $evtOutput = $this->modx->invokeEvent('OnElementNotFound', array('class' => $class, 'name' => $realname));
             $element = false;
             if ($evtOutput != false) {
                 foreach ((array) $evtOutput as $elm) {
                     if (!empty($elm) && is_string($elm)) {
                         $element = $this->modx->newObject($class, array('name' => $realname, 'snippet' => $elm));
                     } elseif ($elm instanceof modElement) {
                         $element = $elm;
                     }
                     if ($element) {
                         break;
                     }
                 }
             }
         }
     }
     if ($element instanceof modElement) {
         $element->set('name', $name);
     }
     return $element;
 }
 /**
  * Finds the correct directories for renders
  *
  * @param string $event The plugin event to fire
  * @param string $subdir The subdir to search
  * @return array The found render directories
  */
 public function getRenderDirectories($event, $subdir)
 {
     $context = $this->xpdo->context->get('key');
     $renderPath = $this->xpdo->getOption('processors_path') . 'element/tv/renders/' . $context . '/' . $subdir . '/';
     $renderDirectories = array($renderPath, $this->xpdo->getOption('processors_path') . 'element/tv/renders/' . ($subdir == 'input' ? 'mgr' : 'web') . '/' . $subdir . '/');
     $pluginResult = $this->xpdo->invokeEvent($event, array('context' => $context));
     $pathsKey = serialize($pluginResult) . $context . $event . $subdir;
     /* return cached value if exists */
     if (isset(self::$_renderPaths[$pathsKey])) {
         return self::$_renderPaths[$pathsKey];
     }
     /* process if there is no cached value */
     if (!is_array($pluginResult) && !empty($pluginResult)) {
         $pluginResult = array($pluginResult);
     }
     if (!empty($pluginResult)) {
         foreach ($pluginResult as $result) {
             if (empty($result)) {
                 continue;
             }
             $renderDirectories[] = $result;
         }
     }
     /* search directories */
     $renderPaths = array();
     foreach ($renderDirectories as $renderDirectory) {
         if (empty($renderDirectory) || !is_dir($renderDirectory)) {
             continue;
         }
         try {
             $dirIterator = new DirectoryIterator($renderDirectory);
             foreach ($dirIterator as $file) {
                 if (!$file->isReadable() || !$file->isFile()) {
                     continue;
                 }
                 $renderPaths[] = dirname($file->getPathname()) . '/';
             }
         } catch (UnexpectedValueException $e) {
         }
     }
     self::$_renderPaths[$pathsKey] = array_unique($renderPaths);
     return self::$_renderPaths[$pathsKey];
 }
 /**
  * Shorthand for original modX::invokeEvent() method with some useful additions.
  *
  * @param $eventName
  * @param array $params
  * @param $glue
  *
  * @return array
  */
 public function invokeEvent($eventName, array $params = array(), $glue = '<br/>')
 {
     if (isset($this->modx->event->returnedValues)) {
         $this->modx->event->returnedValues = null;
     }
     $response = $this->modx->invokeEvent($eventName, $params);
     if (is_array($response) && count($response) > 1) {
         foreach ($response as $k => $v) {
             if (empty($v)) {
                 unset($response[$k]);
             }
         }
     }
     $message = is_array($response) ? implode($glue, $response) : trim((string) $response);
     if (isset($this->modx->event->returnedValues) && is_array($this->modx->event->returnedValues)) {
         $params = array_merge($params, $this->modx->event->returnedValues);
     }
     return array('success' => empty($message), 'message' => $message, 'data' => $params);
 }
Exemple #7
0
 /**
  * Instantiate the appropriate RTE class/handler
  *
  * @return void
  */
 public function load()
 {
     $this->editor = str_replace(' ', '', $this->getEditorName());
     if (!$this->editor || empty($this->editor)) {
         return;
     }
     $supported = $this->getSupportedRTEs();
     if (in_array($this->editor, $supported)) {
         $this->rtePrefix = $this->getRTEPrefix();
         $editor = '\\Melting\\MODX\\RTE\\Type\\' . $this->editor;
         /** @var BaseRTE $rte */
         $rte = new $editor($this);
         $options = $rte->getOptions();
         $result = $this->modx->invokeEvent('OnRichTextEditorInit', $options);
         if (!empty($result)) {
             if (is_array($result)) {
                 $result = implode('', $result);
             }
             $this->modx->controller->addHtml($result);
         }
         $rte->loadOverrides();
     }
 }
 /**
  * Finds the correct directories for renders
  *
  * @param string $event The plugin event to fire
  * @param string $subdir The subdir to search
  * @return array The found render directories
  */
 public function getRenderDirectories($event, $subdir)
 {
     $renderPath = $this->xpdo->getOption('processors_path') . 'element/tv/renders/' . $this->xpdo->context->get('key') . '/' . $subdir . '/';
     $renderDirectories = array($renderPath, $this->xpdo->getOption('processors_path') . 'element/tv/renders/' . ($subdir == 'input' ? 'mgr' : 'web') . '/' . $subdir . '/');
     $pluginResult = $this->xpdo->invokeEvent($event, array('context' => $this->xpdo->context->get('key')));
     if (!is_array($pluginResult) && !empty($pluginResult)) {
         $pluginResult = array($pluginResult);
     }
     if (!empty($pluginResult)) {
         foreach ($pluginResult as $result) {
             if (empty($result)) {
                 continue;
             }
             $renderDirectories[] = $result;
         }
     }
     /* search directories */
     $types = array();
     $renderPaths = array();
     foreach ($renderDirectories as $renderDirectory) {
         if (empty($renderDirectory) || !is_dir($renderDirectory)) {
             continue;
         }
         try {
             $dirIterator = new DirectoryIterator($renderDirectory);
             foreach ($dirIterator as $file) {
                 if (!$file->isReadable() || !$file->isFile()) {
                     continue;
                 }
                 $renderPaths[] = dirname($file->getPathname()) . '/';
             }
         } catch (UnexpectedValueException $e) {
         }
     }
     $renderPaths = array_unique($renderPaths);
     return $renderPaths;
 }
 /**
  * Get the properties on this source
  * @param boolean $parsed
  * @return array
  */
 public function getProperties($parsed = false)
 {
     $properties = $this->get('properties');
     $defaultProperties = $this->getDefaultProperties();
     if (!empty($properties) && is_array($properties)) {
         foreach ($properties as &$property) {
             $property['overridden'] = 0;
             if (array_key_exists($property['name'], $defaultProperties)) {
                 if ($defaultProperties[$property['name']]['value'] != $property['value']) {
                     $property['overridden'] = 1;
                 }
             } else {
                 $property['overridden'] = 2;
             }
         }
         $properties = array_merge($defaultProperties, $properties);
     } else {
         $properties = $defaultProperties;
     }
     /** @var array $results Allow manipulation of media source properties via event */
     $results = $this->xpdo->invokeEvent('OnMediaSourceGetProperties', array('properties' => $this->xpdo->toJSON($properties)));
     if (!empty($results)) {
         foreach ($results as $result) {
             $result = is_array($result) ? $result : $this->xpdo->fromJSON($result);
             $properties = array_merge($properties, $result);
         }
     }
     if ($parsed) {
         $properties = $this->parseProperties($properties);
     }
     return $this->prepareProperties($properties);
 }
 /**
  * Gets a requested resource and all required data.
  *
  * @param string $method The method, 'id', or 'alias', by which to perform
  * the resource lookup.
  * @param string|integer $identifier The identifier with which to search.
  * @param array $options An array of options for the resource fetching
  * @return modResource The requested modResource instance or request
  * is forwarded to the error page, or unauthorized page.
  */
 public function getResource($method, $identifier, array $options = array())
 {
     $resource = null;
     if ($method == 'alias') {
         $resourceId = $this->modx->aliasMap[$identifier];
     } else {
         $resourceId = $identifier;
     }
     if (!is_numeric($resourceId)) {
         $this->modx->sendErrorPage();
     }
     $isForward = array_key_exists('forward', $options) && !empty($options['forward']);
     $fromCache = false;
     $cacheKey = $this->modx->context->get('key') . "/resources/{$resourceId}";
     $cachedResource = $this->modx->cacheManager->get($cacheKey, 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 (is_array($cachedResource) && array_key_exists('resource', $cachedResource) && is_array($cachedResource['resource'])) {
         /** @var modResource $resource */
         $resource = $this->modx->newObject($cachedResource['resourceClass']);
         if ($resource) {
             $resource->fromArray($cachedResource['resource'], '', true, true, true);
             $resource->_content = $cachedResource['resource']['_content'];
             $resource->_isForward = isset($cachedResource['resource']['_isForward']) && !empty($cachedResource['resource']['_isForward']);
             if (isset($cachedResource['contentType'])) {
                 $contentType = $this->modx->newObject('modContentType');
                 $contentType->fromArray($cachedResource['contentType'], '', true, true, true);
                 $resource->addOne($contentType, 'ContentType');
             }
             if (isset($cachedResource['resourceGroups'])) {
                 $rGroups = array();
                 foreach ($cachedResource['resourceGroups'] as $rGroupKey => $rGroup) {
                     $rGroups[$rGroupKey] = $this->modx->newObject('modResourceGroupResource', $rGroup);
                 }
                 $resource->addMany($rGroups);
             }
             if (isset($cachedResource['policyCache'])) {
                 $resource->setPolicies(array($this->modx->context->get('key') => $cachedResource['policyCache']));
             }
             if (isset($cachedResource['elementCache'])) {
                 $this->modx->elementCache = $cachedResource['elementCache'];
             }
             if (isset($cachedResource['sourceCache'])) {
                 $this->modx->sourceCache = $cachedResource['sourceCache'];
             }
             if ($resource->get('_jscripts')) {
                 $this->modx->jscripts = $this->modx->jscripts + $resource->get('_jscripts');
             }
             if ($resource->get('_sjscripts')) {
                 $this->modx->sjscripts = $this->modx->sjscripts + $resource->get('_sjscripts');
             }
             if ($resource->get('_loadedjscripts')) {
                 $this->modx->loadedjscripts = array_merge($this->modx->loadedjscripts, $resource->get('_loadedjscripts'));
             }
             $isForward = $resource->_isForward;
             $resource->setProcessed(true);
             $fromCache = true;
         }
     }
     if (!$fromCache || !is_object($resource)) {
         $criteria = $this->modx->newQuery('modResource');
         $criteria->select(array($this->modx->escape('modResource') . '.*'));
         $criteria->where(array('id' => $resourceId, 'deleted' => '0'));
         if (!$this->modx->hasPermission('view_unpublished') || $this->modx->getSessionState() !== modX::SESSION_STATE_INITIALIZED) {
             $criteria->where(array('published' => 1));
         }
         if ($resource = $this->modx->getObject('modResource', $criteria)) {
             if ($resource instanceof modResource) {
                 if ($resource->get('context_key') !== $this->modx->context->get('key')) {
                     if (!$isForward || $isForward && !$this->modx->getOption('allow_forward_across_contexts', $options, false)) {
                         if (!$this->modx->getCount('modContextResource', array($this->modx->context->get('key'), $resourceId))) {
                             return null;
                         }
                     }
                 }
                 $resource->_isForward = $isForward;
                 if (!$resource->checkPolicy('view')) {
                     $this->modx->sendUnauthorizedPage();
                 }
                 if ($tvs = $resource->getMany('TemplateVars', 'all')) {
                     /** @var modTemplateVar $tv */
                     foreach ($tvs as $tv) {
                         $resource->set($tv->get('name'), array($tv->get('name'), $tv->getValue($resource->get('id')), $tv->get('display'), $tv->get('display_params'), $tv->get('type')));
                     }
                 }
                 $this->modx->resourceGenerated = true;
             }
         }
     } elseif ($fromCache && $resource instanceof modResource && !$resource->get('deleted')) {
         if ($resource->checkPolicy('load') && ($resource->get('published') || $this->modx->getSessionState() === modX::SESSION_STATE_INITIALIZED && $this->modx->hasPermission('view_unpublished'))) {
             if ($resource->get('context_key') !== $this->modx->context->get('key')) {
                 if (!$isForward || $isForward && !$this->modx->getOption('allow_forward_across_contexts', $options, false)) {
                     if (!$this->modx->getCount('modContextResource', array($this->modx->context->get('key'), $resourceId))) {
                         return null;
                     }
                 }
             }
             if (!$resource->checkPolicy('view')) {
                 $this->modx->sendUnauthorizedPage();
             }
         } else {
             return null;
         }
         $this->modx->invokeEvent('OnLoadWebPageCache');
     }
     return $resource;
 }
 /**
  * Prepare the final response after the resource has been processed.
  *
  * @param array $options Various options that can be set.
  */
 public function outputContent(array $options = array())
 {
     if (!($this->contentType = $this->modx->resource->getOne('ContentType'))) {
         if ($this->modx->getDebug() === true) {
             $this->modx->log(modX::LOG_LEVEL_DEBUG, "No valid content type for RESOURCE: " . print_r($this->modx->resource->toArray(), true));
         }
         $this->modx->log(modX::LOG_LEVEL_FATAL, "The requested resource has no valid content type specified.");
     }
     if (!$this->contentType->get('binary')) {
         $this->modx->resource->_output = $this->modx->resource->process();
         $this->modx->resource->_jscripts = $this->modx->jscripts;
         $this->modx->resource->_sjscripts = $this->modx->sjscripts;
         $this->modx->resource->_loadedjscripts = $this->modx->loadedjscripts;
         /* collect any uncached element tags in the content and process them */
         $this->modx->getParser();
         $maxIterations = intval($this->modx->getOption('parser_max_iterations', $options, 10));
         $this->modx->parser->processElementTags('', $this->modx->resource->_output, true, false, '[[', ']]', array(), $maxIterations);
         $this->modx->parser->processElementTags('', $this->modx->resource->_output, true, true, '[[', ']]', array(), $maxIterations);
         /*FIXME: only do this for HTML content ?*/
         if (strpos($this->contentType->get('mime_type'), 'text/html') !== false) {
             /* Insert Startup jscripts & CSS scripts into template - template must have a </head> tag */
             if (($js = $this->modx->getRegisteredClientStartupScripts()) && strpos($this->modx->resource->_output, '</head>') !== false) {
                 /* change to just before closing </head> */
                 $this->modx->resource->_output = preg_replace("/(<\\/head>)/i", $js . "\n\\1", $this->modx->resource->_output, 1);
             }
             /* Insert jscripts & html block into template - template must have a </body> tag */
             if (strpos($this->modx->resource->_output, '</body>') !== false && ($js = $this->modx->getRegisteredClientScripts())) {
                 $this->modx->resource->_output = preg_replace("/(<\\/body>)/i", $js . "\n\\1", $this->modx->resource->_output, 1);
             }
         }
         $this->modx->beforeRender();
         /* invoke OnWebPagePrerender event */
         if (!isset($options['noEvent']) || empty($options['noEvent'])) {
             $this->modx->invokeEvent('OnWebPagePrerender');
         }
         $totalTime = $this->modx->getMicroTime() - $this->modx->startTime;
         $queryTime = $this->modx->queryTime;
         $queryTime = sprintf("%2.4f s", $queryTime);
         $queries = isset($this->modx->executedQueries) ? $this->modx->executedQueries : 0;
         $totalTime = sprintf("%2.4f s", $totalTime);
         $phpTime = $totalTime - $queryTime;
         $phpTime = sprintf("%2.4f s", $phpTime);
         $source = $this->modx->resourceGenerated ? "database" : "cache";
         $this->modx->resource->_output = str_replace("[^q^]", $queries, $this->modx->resource->_output);
         $this->modx->resource->_output = str_replace("[^qt^]", $queryTime, $this->modx->resource->_output);
         $this->modx->resource->_output = str_replace("[^p^]", $phpTime, $this->modx->resource->_output);
         $this->modx->resource->_output = str_replace("[^t^]", $totalTime, $this->modx->resource->_output);
         $this->modx->resource->_output = str_replace("[^s^]", $source, $this->modx->resource->_output);
     } else {
         $this->modx->beforeRender();
         /* invoke OnWebPagePrerender event */
         if (!isset($options['noEvent']) || empty($options['noEvent'])) {
             $this->modx->invokeEvent("OnWebPagePrerender");
         }
     }
     /* send out content-type, content-disposition, and custom headers from the content type */
     if ($this->modx->getOption('set_header')) {
         $type = $this->contentType->get('mime_type') ? $this->contentType->get('mime_type') : 'text/html';
         $header = 'Content-Type: ' . $type;
         if (!$this->contentType->get('binary')) {
             $charset = $this->modx->getOption('modx_charset', null, 'UTF-8');
             $header .= '; charset=' . $charset;
         }
         header($header);
         if (!$this->checkPreview()) {
             $dispositionSet = false;
             if ($customHeaders = $this->contentType->get('headers')) {
                 foreach ($customHeaders as $headerKey => $headerString) {
                     header($headerString);
                     if (strpos($headerString, 'Content-Disposition:') !== false) {
                         $dispositionSet = true;
                     }
                 }
             }
             if (!$dispositionSet && $this->modx->resource->get('content_dispo')) {
                 if ($alias = array_search($this->modx->resourceIdentifier, $this->modx->aliasMap)) {
                     $name = basename($alias);
                 } elseif ($this->modx->resource->get('alias')) {
                     $name = $this->modx->resource->get('alias');
                     if ($ext = $this->contentType->getExtension()) {
                         $name .= ".{$ext}";
                     }
                 } elseif ($name = $this->modx->resource->get('pagetitle')) {
                     $name = $this->modx->resource->cleanAlias($name);
                     if ($ext = $this->contentType->getExtension()) {
                         $name .= ".{$ext}";
                     }
                 } else {
                     $name = 'download';
                     if ($ext = $this->contentType->getExtension()) {
                         $name .= ".{$ext}";
                     }
                 }
                 $header = 'Cache-Control: public';
                 header($header);
                 $header = 'Content-Disposition: attachment; filename=' . $name;
                 header($header);
                 $header = 'Vary: User-Agent';
                 header($header);
             }
         }
     }
     /* tell PHP to call _postProcess after returning the response (for caching) */
     register_shutdown_function(array(&$this->modx, "_postProcess"));
     if ($this->modx->resource instanceof modStaticResource && $this->contentType->get('binary')) {
         $this->modx->resource->process();
     } else {
         if ($this->contentType->get('binary')) {
             $this->modx->resource->_output = $this->modx->resource->process();
         }
         @session_write_close();
         echo $this->modx->resource->_output;
         while (@ob_end_flush()) {
         }
         flush();
         exit;
     }
 }
Exemple #12
0
 /**
  * Parse and return the signature for this user
  * @return string
  */
 public function parseSignature()
 {
     $message = $this->get('signature');
     $maxLength = $this->xpdo->getOption('discuss.signatures.max_length', null, 2000);
     if (strlen($message) > $maxLength) {
         $message = substr($message, 0, $maxLength);
     }
     if (!empty($message)) {
         $message = str_replace(array('&#91;', '&#93;'), array('[', ']'), $message);
         /* Check custom content parser setting */
         if ($this->xpdo->getOption('discuss.use_custom_post_parser', null, false)) {
             /* Load custom parser */
             $parsed = $this->xpdo->invokeEvent('OnDiscussPostCustomParser', array('content' => &$message));
             if (is_array($parsed)) {
                 foreach ($parsed as $msg) {
                     if (!empty($msg)) {
                         $message = $msg;
                     }
                 }
             } else {
                 if (!empty($parsed)) {
                     $message = $parsed;
                 }
             }
         } else {
             if (true) {
                 $message = $this->parseBBCode($message);
             }
         }
         /* Allow for plugin to change content of posts after it has been parsed */
         $rs = $this->xpdo->invokeEvent('OnDiscussPostFetchContent', array('content' => &$message));
         if (is_array($rs)) {
             foreach ($rs as $msg) {
                 if (!empty($msg)) {
                     $message = $msg;
                 }
             }
         } else {
             if (!empty($rs)) {
                 $message = $rs;
             }
         }
     }
     return $message;
 }
Exemple #13
0
 * Shopkeeper frontend connector
 *
 * @package shopkeeper
 */
//ini_set( 'display_errors', 1 );
//error_reporting( E_ALL );
//if( !isset( $_POST['shk_action'] ) ) exit;
require dirname(dirname(dirname(dirname(__FILE__)))) . "/config.core.php";
if (!defined('MODX_CORE_PATH')) {
    require_once '../../../config.core.php';
}
require_once MODX_CORE_PATH . 'config/' . MODX_CONFIG_KEY . '.inc.php';
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->invokeEvent("OnLoadWebDocument");
define('SHOPKEEPER_PATH', MODX_BASE_PATH . "core/components/shopkeeper3/");
define('SHOPKEEPER_URL', MODX_BASE_URL . "core/components/shopkeeper3/");
$manager_language = $modx->config['manager_language'];
$charset = $modx->config['modx_charset'];
header("Content-Type: text/html; charset={$charset}");
require_once SHOPKEEPER_PATH . "model/shopkeeper.class.php";
//Определяем параметры сниппета Shopkeeper
$sys_property_sets = $modx->getOption('shk3.property_sets', null, 'default');
$sys_property_sets = explode(',', $sys_property_sets);
$sys_property_sets = array_map('trim', $sys_property_sets);
$propertySerNum = isset($_POST['psn']) && is_numeric($_POST['psn']) ? intval($_POST['psn']) : 1;
$propertySetName = isset($sys_property_sets[$propertySerNum - 1]) ? $sys_property_sets[$propertySerNum - 1] : $sys_property_sets[0];
$snippet = $modx->getObject('modSnippet', array('name' => 'Shopkeeper3'));
$properties = $snippet->getProperties();
if ($propertySetName != 'default' && $modx->getCount('modPropertySet', array('name' => $propertySetName)) > 0) {
     $modx = new modX();
     $modx->initialize('web');
     $modx->addPackage('shopkeeper3', $modx->getOption('core_path') . 'components/shopkeeper3/model/');
     $order_id = $_POST['m_orderid'];
     $order = $modx->getObject('shk_order', $order_id);
     if (!(isset($order) && $order > 0)) {
         $message .= "ордер не существует\n";
         $err = true;
     } else {
         // проверка статуса
         switch ($_POST['m_status']) {
             case 'success':
                 $status = 5;
                 $change_status = $order->set('status', $status);
                 $order->save();
                 $modx->invokeEvent('OnSHKChangeStatus', array('order_id' => $order_id, 'status' => $status));
                 break;
             default:
                 $message .= " - статус платежа не является success\n";
                 $err = true;
                 break;
         }
     }
 }
 if ($err) {
     $to = PAYEER_EMAILERR;
     if (!empty($to)) {
         $message = "Не удалось провести платёж через систему Payeer по следующим причинам:\n\n" . $message . "\n" . $log_text;
         $headers = "From: no-reply@" . $_SERVER['HTTP_HOST'] . "\r\n" . "Content-type: text/plain; charset=utf-8 \r\n";
         mail($to, 'Ошибка оплаты', $message, $headers);
     }
Exemple #15
0
//get resource
$criteria = $modx->newQuery('modResource');
$criteria->select(array($modx->escape('modResource') . '.*'));
$criteria->where(array('id' => $resource_id, 'deleted' => false, 'published' => true));
$modx->resource = $modx->getObject('modResource', $criteria);
if (!is_object($modx->resource) || !$modx->resource->checkPolicy('view')) {
    echo json_encode($output);
    exit;
}
$modx->resourceIdentifier = $modx->resource->get('id');
$modx->getService('error', 'error.modError');
$modx->getRequest();
$modx->getParser();
$modx->resourceMethod = 'id';
$modx->resource->_contextKey = $modx->context->get('key');
$modx->invokeEvent('OnLoadWebDocument');
require_once MODX_CORE_PATH . "components/tag_manager2/model/tm_base.class.php";
$tag_manager = new tagManagerBase($modx);
$properties = $tag_manager->getSnippetProperties();
$output['prod_list'] = $modx->runSnippet('tmCatalog', $properties);
$output['prod_list'] .= '<div class="clearfix"></div>';
$output['onPageLimit'] = intval($properties['limit']);
if (isset($modx->placeholders[$properties['pageNavVar']])) {
    $output['pages'] = $modx->placeholders[$properties['pageNavVar']];
    if (isset($modx->sanitizePatterns['tags1'])) {
        $output['pages'] = preg_replace($modx->sanitizePatterns['tags1'], '', $output['pages']);
    }
    if (isset($modx->sanitizePatterns['tags2'])) {
        $output['pages'] = preg_replace($modx->sanitizePatterns['tags2'], '', $output['pages']);
    }
}