/** * 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); }
/** * 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; } }
/** * 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('[', ']'), 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; }
* 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); }
//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']); } }