/** * Show the last run's crawler result * * @global array $_ARRAYLANG */ public function showCrawlerResult() { global $_ARRAYLANG; \JS::activate('cx'); $objCx = \ContrexxJavascript::getInstance(); $objCx->setVariable(array('updateSuccessMsg' => $_ARRAYLANG['TXT_CORE_MODULE_LINKMANAGER_UPDATE_SUCCESS_MSG'], 'loadingLabel' => $_ARRAYLANG['TXT_CORE_MODULE_LINKMANAGER_LABEL_LOADING']), 'LinkManager'); if (isset($_POST['checkAgain'])) { $this->recheckSelectedLinks(); } //show crawler results //get parameters $pos = isset($_GET['pos']) ? $_GET['pos'] : 0; //set the settings value from DB \Cx\Core\Setting\Controller\Setting::init('LinkManager', 'config'); $pageLimit = \Cx\Core\Setting\Controller\Setting::getValue('entriesPerPage', 'LinkManager'); $parameter = './index.php?cmd=' . $this->moduleName . '&act=crawlerResult'; $this->template->setVariable('ENTRIES_PAGING', \Paging::get($parameter, $_ARRAYLANG['TXT_CORE_MODULE_LINKMANAGER_LINKS'], $this->linkRepository->brokenLinkCount(), $pageLimit, true, $pos, 'pos')); $brokenLinks = $this->linkRepository->getBrokenLinks($pos, $pageLimit); $i = 1; $objUser = new \Cx\Core_Modules\LinkManager\Controller\User(); if ($brokenLinks && $brokenLinks->count() > 0) { foreach ($brokenLinks as $brokenLink) { $this->template->setVariable(array($this->moduleNameLang . '_BROKEN_LINK_ID' => contrexx_raw2xhtml($brokenLink->getId()), $this->moduleNameLang . '_BROKEN_LINK_IMAGE' => $brokenLink->getBrokenLinkText() == $_ARRAYLANG['TXT_CORE_MODULE_LINKMANAGER_NO_IMAGE'] ? 'brokenImage' : 'brokenLinkImage', $this->moduleNameLang . '_BROKEN_LINK_TEXT' => $brokenLink->getBrokenLinkText(), $this->moduleNameLang . '_BROKEN_LINK_URL' => contrexx_raw2xhtml($brokenLink->getRequestedPath()), $this->moduleNameLang . '_BROKEN_LINK_REFERER' => contrexx_raw2xhtml($brokenLink->getLeadPath()) . '&pos=' . $pos . '&csrf=' . \Cx\Core\Csrf\Controller\Csrf::code(), $this->moduleNameLang . '_BROKEN_LINK_MODULE_NAME' => contrexx_raw2xhtml($brokenLink->getModuleName()), $this->moduleNameLang . '_BROKEN_LINK_ENTRY_TITLE' => contrexx_raw2xhtml($brokenLink->getEntryTitle()), $this->moduleNameLang . '_BROKEN_LINK_STATUS_CODE' => $brokenLink->getLinkStatusCode() == 0 ? $_ARRAYLANG['TXT_CORE_MODULE_LINKMANAGER_NON_EXISTING_DOMAIN'] : contrexx_raw2xhtml($brokenLink->getLinkStatusCode()), $this->moduleNameLang . '_BROKEN_LINK_STATUS' => $brokenLink->getLinkStatus() ? $brokenLink->getLinkStatus() : 0, $this->moduleNameLang . '_BROKEN_LINK_STATUS_CHECKED' => $brokenLink->getLinkStatus() ? 'checked' : '', $this->moduleNameLang . '_BROKEN_LINK_DETECTED' => \Cx\Core_Modules\LinkManager\Controller\DateTime::formattedDateAndTime($brokenLink->getDetectedTime()), $this->moduleNameLang . '_BROKEN_LINK_UPDATED_BY' => $brokenLink->getUpdatedBy() ? contrexx_raw2xhtml($objUser->getUpdatedUserName($brokenLink->getUpdatedBy(), 0)) : '', $this->moduleNameLang . '_CRAWLER_BROKEN_LINK' => $brokenLink->getLinkRecheck() && $brokenLink->getLinkStatus() ? 'brokenLink' : '', $this->moduleNameLang . '_CRAWLER_RUN_ROW' => 'row' . (++$i % 2 + 1))); $this->template->parse($this->moduleName . 'CrawlerResultList'); } $this->template->hideBlock('LinkManagerNoCrawlerResultFound'); } else { $this->template->touchBlock('LinkManagerNoCrawlerResultFound'); } }
/** * Show all the runs and last runs detail * * @global array $_ARRAYLANG */ public function showCrawlerRuns() { global $_ARRAYLANG; //show the last runs details $lastRunResult = $this->crawlerRepository->getLatestRunDetails(); if ($lastRunResult) { $this->template->setVariable(array($this->moduleNameLang . '_LAST_RUN_STARTTIME' => \Cx\Core_Modules\LinkManager\Controller\DateTime::formattedDateAndTime($lastRunResult[0]->getStartTime()), $this->moduleNameLang . '_LAST_RUN_ENDTIME' => \Cx\Core_Modules\LinkManager\Controller\DateTime::formattedDateAndTime($lastRunResult[0]->getEndTime()), $this->moduleNameLang . '_LAST_RUN_DURATION' => \Cx\Core_Modules\LinkManager\Controller\DateTime::diffTime($lastRunResult[0]->getStartTime(), $lastRunResult[0]->getEndTime()), $this->moduleNameLang . '_LAST_RUN_TOTAL_LINKS' => $lastRunResult[0]->getTotalLinks(), $this->moduleNameLang . '_LAST_RUN_BROKEN_LINKS' => $lastRunResult[0]->getTotalBrokenLinks())); } else { if ($this->template->blockExists('showLastRun')) { $this->template->hideBlock('showLastRun'); } } //show Crawler Runs table //get parameters $pos = isset($_GET['pos']) ? $_GET['pos'] : 0; $langArray = \FWLanguage::getLanguageArray(); //set the settings value from DB \Cx\Core\Setting\Controller\Setting::init('LinkManager', 'config'); $pageLimit = \Cx\Core\Setting\Controller\Setting::getValue('entriesPerPage', 'LinkManager'); $parameter = './index.php?cmd=' . $this->moduleName; $this->template->setVariable('ENTRIES_PAGING', \Paging::get($parameter, $_ARRAYLANG['TXT_CORE_MODULE_LINKMANAGER_LINKS'], $this->crawlerRepository->crawlerEntryCount(), $pageLimit, true, $pos, 'pos')); $crawlers = $this->crawlerRepository->getCrawlerRunEntries($pos, $pageLimit); $i = 1; if ($crawlers && $crawlers->count() > 0) { foreach ($crawlers as $crawler) { $this->template->setVariable(array($this->moduleNameLang . '_CRAWLER_RUN_ID' => $crawler->getId(), $this->moduleNameLang . '_CRAWLER_RUN_LANGUAGE' => $langArray[$crawler->getLang()]['name'], $this->moduleNameLang . '_CRAWLER_RUN_STARTTIME' => \Cx\Core_Modules\LinkManager\Controller\DateTime::formattedDateAndTime($crawler->getStartTime()), $this->moduleNameLang . '_CRAWLER_RUN_ENDTIME' => \Cx\Core_Modules\LinkManager\Controller\DateTime::formattedDateAndTime($crawler->getEndTime()), $this->moduleNameLang . '_CRAWLER_RUN_DURATION' => \Cx\Core_Modules\LinkManager\Controller\DateTime::diffTime($crawler->getStartTime(), $crawler->getEndTime()), $this->moduleNameLang . '_CRAWLER_RUN_TOTAL_LINKS' => $crawler->getTotalLinks(), $this->moduleNameLang . '_CRAWLER_RUN_BROKEN_LINKS' => $crawler->getTotalBrokenLinks(), $this->moduleNameLang . '_CRAWLER_RUN_STATUS' => ucfirst($crawler->getRunStatus()), $this->moduleNameLang . '_CRAWLER_RUN_ROW' => 'row' . (++$i % 2 + 1))); $this->template->parse($this->moduleName . 'CrawlerRuns'); } $this->template->hideBlock($this->moduleName . 'NoCrawlerRunsFound'); } else { $this->template->touchBlock($this->moduleName . 'NoCrawlerRunsFound'); } }
/** * Loads backend view Controllers (BETA) * @param \Cx\Core\ContentManager\Model\Entity\Page $page * @todo YAML assistant * @todo Cx/Module sandbox * @todo Language var checker (/translation helper) * @todo Component analysis (/testing) */ public function load(\Cx\Core\ContentManager\Model\Entity\Page $page) { $objTemplate = $this->cx->getTemplate(); $cachedRoot = $this->cx->getTemplate()->getRoot(); $this->cx->getTemplate()->setRoot(ASCMS_CORE_PATH . '/Core/View/Template/Backend'); $this->cx->getTemplate()->addBlockfile('CONTENT_OUTPUT', 'content_master', 'ContentMaster.html'); $this->cx->getTemplate()->setRoot($cachedRoot); $_ARRAYLANG = \Env::get('init')->loadLanguageData($this->getName()); // Initialize if (!isset($_GET['act'])) { $_GET['act'] = ''; } $cmd = explode('/', $_GET['act']); if (!isset($cmd[0])) { $cmd[0] = 'development'; } $controller = $cmd[0]; if (!isset($cmd[1])) { $cmd[1] = ''; } $act = $cmd[1]; // Load controller specific things switch ($controller) { case 'sandbox': // The following code is for sandbox only: if ($act == '') { $act = 'dql'; } $navEntries = array('index.php?cmd=Workbench&act=sandbox/dql' => 'DQL', 'index.php?cmd=Workbench&act=sandbox/php' => 'PHP'); $objTemplate->setVariable('ADMIN_CONTENT', new Sandbox($_ARRAYLANG, $act, $_POST)); break; case 'development': if ($act == '') { $act = 'yaml'; } default: $navEntries = array('index.php?cmd=Workbench&act=development/yaml' => 'YAML', 'index.php?cmd=Workbench&act=development/components' => 'Components'); $objTemplate->setVariable('ADMIN_CONTENT', new Toolbox($_ARRAYLANG, $act, $_POST)); break; } // set tabs $navigation = new \Cx\Core\Html\Sigma(ASCMS_CORE_PATH . '/Core/View/Template/Backend'); $navigation->loadTemplateFile('Navigation.html'); foreach ($navEntries as $href => $title) { $navigation->setVariable(array('HREF' => $href, 'TITLE' => $title)); if (strtolower($title) == $act) { $navigation->touchBlock('tab_active'); } $navigation->parse('tab_entry'); } $objTemplate->setVariable('CONTENT_NAVIGATION', $navigation->get()); }
/** * Set the language list page * * @global array * @global ADONewConnection * @global \Cx\Core\Html\Sigma * @return void */ function languageOverview() { global $_ARRAYLANG, $objDatabase; // init vars $i = 0; \JS::activate('cx'); $cxjs = \ContrexxJavascript::getInstance(); $cxjs->setVariable('copyTitle', $_ARRAYLANG['TXT_LANGUAGE_COPY_TITLE'], 'language/lang'); $cxjs->setVariable('copyText', $_ARRAYLANG['TXT_LANGUAGE_COPY_TEXT'], 'language/lang'); $cxjs->setVariable('copySuccess', $_ARRAYLANG['TXT_LANGUAGE_COPY_SUCCESS'], 'language/lang'); $cxjs->setVariable('linkTitle', $_ARRAYLANG['TXT_LANGUAGE_LINK_TITLE'], 'language/lang'); $cxjs->setVariable('linkText', $_ARRAYLANG['TXT_LANGUAGE_LINK_TEXT'], 'language/lang'); $cxjs->setVariable('linkSuccess', $_ARRAYLANG['TXT_LANGUAGE_LINK_SUCCESS'], 'language/lang'); $cxjs->setVariable('warningTitle', $_ARRAYLANG['TXT_LANGUAGE_WARNING_TITLE'], 'language/lang'); $cxjs->setVariable('warningText', $_ARRAYLANG['TXT_LANGUAGE_WARNING_TEXT'], 'language/lang'); $cxjs->setVariable('waitTitle', $_ARRAYLANG['TXT_LANGUAGE_WAIT_TITLE'], 'language/lang'); $cxjs->setVariable('waitText', $_ARRAYLANG['TXT_LANGUAGE_WAIT_TEXT'], 'language/lang'); $cxjs->setVariable('yesOption', $_ARRAYLANG['TXT_YES'], 'language/lang'); $cxjs->setVariable('noOption', $_ARRAYLANG['TXT_NO'], 'language/lang'); $cxjs->setVariable('langRemovalLabel', $_ARRAYLANG['TXT_LANGUAGE_MANAGER_LABEL_LANG_REMOVAL'], 'language/lang'); $cxjs->setVariable('langRemovalContent', $_ARRAYLANG['TXT_LANGUAGE_MANAGER_LANG_REMOVAL_CONTENT'], 'language/lang'); $this->template->loadTemplateFile('language_langlist.html'); $this->pageTitle = $_ARRAYLANG['TXT_LANGUAGE_LIST']; if (!$this->isInFullMode()) { $this->hideVariables = true; $this->template->hideBlock('extendedTitles'); $this->template->hideBlock('extendedHeaders'); } else { $this->template->touchBlock('extendedTitles'); } //begin language variables $this->template->setVariable(array('TXT_ADD_NEW_LANGUAGE' => $_ARRAYLANG['TXT_ADD_NEW_LANGUAGE'], 'TXT_NAME' => $_ARRAYLANG['TXT_NAME'], 'TXT_SHORT_NAME' => $_ARRAYLANG['TXT_SHORT_NAME'], 'TXT_CHARSET' => $_ARRAYLANG['TXT_CHARSET'], 'TXT_ADD' => $_ARRAYLANG['TXT_ADD'], 'TXT_LANGUAGE_LIST' => $_ARRAYLANG['TXT_LANGUAGE_LIST'], 'TXT_ID' => $_ARRAYLANG['TXT_ID'], 'TXT_SHORT_FORM' => $_ARRAYLANG['TXT_SHORT_FORM'], 'TXT_STANDARD_LANGUAGE' => $_ARRAYLANG['TXT_STANDARD_LANGUAGE'], 'TXT_ACTION' => $_ARRAYLANG['TXT_ACTION'], 'TXT_ACCEPT_CHANGES' => $_ARRAYLANG['TXT_ACCEPT_CHANGES'], 'TXT_REMARK' => $_ARRAYLANG['TXT_REMARK'], 'TXT_ADD_DELETE_LANGUAGE_REMARK' => $_ARRAYLANG['TXT_ADD_DELETE_LANGUAGE_REMARK'], 'TXT_CONFIRM_DELETE_DATA' => $_ARRAYLANG['TXT_CONFIRM_DELETE_DATA'], 'TXT_ACTION_IS_IRREVERSIBLE' => $_ARRAYLANG['TXT_ACTION_IS_IRREVERSIBLE'], 'TXT_VALUE' => $_ARRAYLANG['TXT_VALUE'], 'TXT_MODULE' => $_ARRAYLANG['TXT_MODULE'], 'TXT_LANGUAGE' => $_ARRAYLANG['TXT_LANGUAGE'], 'TXT_STATUS' => $_ARRAYLANG['TXT_STATUS'], 'TXT_VIEW' => $_ARRAYLANG['TXT_VIEW'], 'TXT_CONTROLLED' => $_ARRAYLANG['TXT_CONTROLLED'], 'TXT_OPEN_ISSUE' => $_ARRAYLANG['TXT_OPEN_ISSUE'], 'TXT_SHORT_NAME' => $_ARRAYLANG['TXT_SHORT_NAME'], 'TXT_LANGUAGE_DEPENDANT_SYSTEM_VARIABLES' => $_ARRAYLANG['TXT_LANGUAGE_DEPENDANT_SYSTEM_VARIABLES'], 'TXT_ADMINISTRATION_PAGES' => $_ARRAYLANG['TXT_ADMINISTRATION_PAGES'], 'TXT_WEB_PAGES' => $_ARRAYLANG['TXT_WEB_PAGES'], 'TXT_SECTION' => $_ARRAYLANG['TXT_SECTION'], 'TXT_CORE_FALLBACK' => $_ARRAYLANG['TXT_CORE_FALLBACK'], 'TXT_LANGUAGE_MANAGER_OK' => $_ARRAYLANG['TXT_LANGUAGE_MANAGER_OK'])); $this->template->setGlobalVariable(array('TXT_DEFAULT_LANGUAGE' => $_ARRAYLANG['TXT_STANDARD_LANGUAGE'], 'TXT_CORE_NONE' => $_ARRAYLANG['TXT_CORE_NONE'], 'CMD' => contrexx_input2xhtml($_GET['cmd']), 'TXT_LANGUAGE_ACTION_COPY' => $_ARRAYLANG['TXT_LANGUAGE_ACTION_COPY'], 'TXT_LANGUAGE_ACTION_LINK' => $_ARRAYLANG['TXT_LANGUAGE_ACTION_LINK'])); //end language variables if ($this->hideVariables == true) { $this->template->setGlobalVariable(array('LANGUAGE_ADMIN_STYLE' => 'display: none')); } else { $this->template->setGlobalVariable(array('LANGUAGE_ADMIN_STYLE' => 'display: block')); } $arrLanguages = \FWLanguage::getActiveFrontendLanguages(); $this->template->setVariable('LANGUAGE_MANAGER_ACTIVE_LANGIDS', implode(', ', array_keys($arrLanguages))); $objResult = $objDatabase->Execute("SELECT * FROM " . DBPREFIX . "languages ORDER BY id"); if ($objResult !== false) { while (!$objResult->EOF) { $checked = ""; if ($objResult->fields['is_default'] == "true") { $checked = "checked"; } $status = "<input type='radio' name='langDefaultStatus' onchange='updateCurrent();' value='" . $objResult->fields['id'] . "' {$checked} />"; $checked = ""; if ($objResult->fields['frontend'] == 1) { $checked = "checked"; } $activeStatus = "<input type='checkbox' name='langActiveStatus[" . $objResult->fields['id'] . "]' onchange='updateCurrent();' value='1' {$checked} />"; $checked = ""; if ($objResult->fields['backend'] == 1) { $checked = "checked"; } $selectedLang = ''; switch ($objResult->fields['fallback']) { case '': $this->template->setVariable('NONE_SELECTED', 'selected="selected"'); break; case '0': $this->template->setVariable('LANGUAGE_DEFAULT_SELECTED', 'selected="selected"'); break; default: $selectedLang = $objResult->fields['fallback']; } // set fallback language drop down foreach ($arrLanguages as $langId => $arrLanguage) { $selected = $langId == $selectedLang ? 'selected="selected"' : ''; $this->template->setVariable(array('LANGUAGE_LANG_ID' => $langId, 'LANGUAGE_LANG_OPTION' => contrexx_raw2xhtml($arrLanguage['name']), 'LANGUAGE_OPTION_SELECTED' => $selected)); $this->template->parse('fallbackLanguages'); } $adminStatus = "<input type='checkbox' name='langAdminStatus[" . $objResult->fields['id'] . "]' value='1' {$checked} />"; $this->template->setVariable(array('LANGUAGE_ROWCLASS' => 'row' . ($i++ % 2 + 1), 'LANGUAGE_LANG_ID' => $objResult->fields['id'], 'LANGUAGE_LANG_NAME' => $objResult->fields['name'], 'LANGUAGE_LANG_SHORTNAME' => $objResult->fields['lang'], 'LANGUAGE_LANG_CHARSET' => $objResult->fields['charset'], 'LANGUAGE_LANG_STATUS' => $status, 'LANGUAGE_ACTIVE_STATUS' => $activeStatus, 'LANGUAGE_ADMIN_STATUS' => $adminStatus)); if (!$this->isInFullMode()) { $this->template->hideBlock('extendedOptions'); } $this->template->parse('languageRow'); $objResult->MoveNext(); } } }
/** * Sets up the JavsScript cart * * Searches all $themesPages elements for the first occurrence of the * "shopJsCart" template block. * Generates the structure of the Javascript cart, puts it in the template, * and registers all required JS code. * Note that this is only ever called when the JS cart is enabled in the * extended settings! * @access public * @global array $_ARRAYLANG Language array * @global array $themesPages Theme template array * @return void * @static */ static function setJsCart() { global $_ARRAYLANG, $themesPages; if (!\Cx\Core\Setting\Controller\Setting::getValue('use_js_cart', 'Shop')) { return; } $objTemplate = new \Cx\Core\Html\Sigma('.'); $objTemplate->setErrorHandling(PEAR_ERROR_DIE); $match = null; $div_cart = $div_product = ''; foreach ($themesPages as $index => $content) { //\DBG::log("Shop::setJsCart(): Section $index"); $objTemplate->setTemplate($content, false, false); if (!$objTemplate->blockExists('shopJsCart')) { continue; } //\DBG::log("Shop::setJsCart(): In themespage $index: {$themesPages[$index]}"); $objTemplate->setCurrentBlock('shopJsCart'); // Set all language entries and replace formats $objTemplate->setGlobalVariable($_ARRAYLANG); if ($objTemplate->blockExists('shopJsCartProducts')) { $objTemplate->parse('shopJsCartProducts'); $div_product = $objTemplate->get('shopJsCartProducts'); //\DBG::log("Shop::setJsCart(): Got Product: $div_product"); $objTemplate->replaceBlock('shopJsCartProducts', '[[SHOP_JS_CART_PRODUCTS]]'); } $objTemplate->touchBlock('shopJsCart'); $objTemplate->parse('shopJsCart'); $div_cart = $objTemplate->get('shopJsCart'); //\DBG::log("Shop::setJsCart(): Got Cart: $div_cart"); if (preg_match('#^([\\n\\r]?[^<]*<.*id=["\']shopJsCart["\'][^>]*>)(([\\n\\r].*)*)(</[^>]*>[^<]*[\\n\\r]?)$#', $div_cart, $match)) { //\DBG::log("Shop::setJsCart(): Matched DIV {$match[1]}, content: {$match[2]}"); $themesPages[$index] = preg_replace('@(<!--\\s*BEGIN\\s+(shopJsCart)\\s*-->.*?<!--\\s*END\\s+\\2\\s*-->)@s', $match[1] . $_ARRAYLANG['TXT_SHOP_CART_IS_LOADING'] . $match[4], $content); /* // Template use won't work, because it kills the remaining <!-- blocks -->! $objTemplate->setTemplate($content, false, false); $objTemplate->replaceBlock('shopJsCart', $match[1]. $_ARRAYLANG['TXT_SHOP_CART_IS_LOADING']. $match[4]); $themesPages[$index] = $objTemplate->get(); */ //\DBG::log("Shop::setJsCart(): Out themespage $index: {$themesPages[$index]}"); } // One instance only (mind that there's a unique id attribute) self::$use_js_cart = true; break; } if (!self::$use_js_cart) { return; } self::registerJavascriptCode(); \ContrexxJavascript::getInstance()->setVariable('TXT_SHOP_CART_IS_LOADING', $_ARRAYLANG['TXT_SHOP_CART_IS_LOADING'], 'shop/cart'); \ContrexxJavascript::getInstance()->setVariable('TXT_SHOP_COULD_NOT_LOAD_CART', $_ARRAYLANG['TXT_SHOP_COULD_NOT_LOAD_CART'], 'shop/cart'); \ContrexxJavascript::getInstance()->setVariable('TXT_EMPTY_SHOPPING_CART', $_ARRAYLANG['TXT_EMPTY_SHOPPING_CART'], 'shop/cart'); \ContrexxJavascript::getInstance()->setVariable("url", (string) \Cx\Core\Routing\URL::fromModuleAndCMd('Shop' . MODULE_INDEX, 'cart', FRONTEND_LANG_ID, array('remoteJs' => 'addProduct')), 'shop/cart'); \JS::registerJS(substr(\Cx\Core\Core\Controller\Cx::instanciate()->getModuleFolderName() . '/Shop/View/Script/cart.js', 1)); \JS::registerCode("cartTpl = '" . preg_replace(array('/\'/', '/[\\n\\r]/', '/\\//'), array('\\\'', '\\n', '\\/'), $div_cart) . "';\n" . "cartProductsTpl = '" . preg_replace(array('/\'/', '/[\\n\\r]/', '/\\//'), array('\\\'', '\\n', '\\/'), $div_product) . "';\n"); }
/** * Adds an external settings view to the current template * * The content must contain the full view, including the surrounding form * tags and submit button. * Note that these are always appended on the right end of the tab list. * @param \Cx\Core\Html\Sigma $objTemplateLocal Template object * @param string $tab_name The tab name to add * @param string $content The external content * @return boolean True on success */ static function show_external(&$objTemplateLocal, $tab_name, $content) { if (empty($objTemplateLocal) || !$objTemplateLocal->blockExists('core_setting_row')) { $objTemplateLocal = new \Cx\Core\Html\Sigma(\Env::get('cx')->getCodeBaseDocumentRootPath() . '/core/Setting/View/Template/Generic'); if (!$objTemplateLocal->loadTemplateFile('Form.html')) { die("Failed to load template Form.html"); } } $active_tab = isset($_REQUEST['active_tab']) ? $_REQUEST['active_tab'] : 1; // The tabindex must be set in the form name in any case $objTemplateLocal->setGlobalVariable(array('CORE_SETTING_TAB_INDEX' => self::$tab_index, 'CORE_SETTING_EXTERNAL' => $content)); // Set up the tab, if any if (!empty($tab_name)) { $objTemplateLocal->setGlobalVariable(array('CORE_SETTING_TAB_NAME' => $tab_name, 'CORE_SETTING_TAB_INDEX' => self::$tab_index, 'CORE_SETTING_TAB_CLASS' => self::$tab_index == $active_tab ? 'active' : '', 'CORE_SETTING_TAB_DISPLAY' => self::$tab_index++ == $active_tab ? 'block' : 'none', 'CORE_SETTING_CURRENT_TAB' => 'tab-' . $active_tab)); $objTemplateLocal->touchBlock('core_setting_tab_row'); $objTemplateLocal->parse('core_setting_tab_row'); $objTemplateLocal->touchBlock('core_setting_tab_div_external'); $objTemplateLocal->parse('core_setting_tab_div_external'); } return true; }
/** * Sets up the Order statistics * @param \Cx\Core\Html\Sigma $objTemplate The optional Template, * by reference * @global ADONewConnection $objDatabase * @global array $_ARRAYLANG * @todo Rewrite the statistics in a seperate class, extending Order * @static */ static function view_statistics(&$objTemplate = null) { global $objDatabase, $_ARRAYLANG; if (!$objTemplate || !$objTemplate->blockExists('no_order')) { $objTemplate = new \Cx\Core\Html\Sigma(\Cx\Core\Core\Controller\Cx::instanciate()->getCodeBaseModulePath() . '/Shop/View/Template/Backend'); $objTemplate->loadTemplateFile('module_shop_statistic.html'); } $objTemplate->setGlobalVariable($_ARRAYLANG); // Get the first order date; if its empty, no order has been placed yet $time_first_order = Order::getFirstOrderTime(); if (!$time_first_order) { $objTemplate->touchBlock('no_order'); return $objTemplate; } $year_first_order = date('Y', $time_first_order); $month_first_order = date('m', $time_first_order); $start_month = $end_month = $start_year = $end_year = NULL; if (isset($_REQUEST['submitdate'])) { // A range is requested $start_month = intval($_REQUEST['startmonth']); $end_month = intval($_REQUEST['stopmonth']); $start_year = intval($_REQUEST['startyear']); $end_year = intval($_REQUEST['stopyear']); } else { // Default range to one year, or back to the first order if less $start_month = $month_first_order; $end_month = Date('m'); $start_year = $end_year = Date('Y'); if ($year_first_order < $start_year) { $start_year -= 1; if ($year_first_order < $start_year || $month_first_order < $start_month) { $start_month = $end_month; } } } $objTemplate->setVariable(array('SHOP_START_MONTH' => Shopmanager::getMonthDropdownMenu($start_month), 'SHOP_END_MONTH' => Shopmanager::getMonthDropdownMenu($end_month), 'SHOP_START_YEAR' => Shopmanager::getYearDropdownMenu($start_year, $year_first_order), 'SHOP_END_YEAR' => Shopmanager::getYearDropdownMenu($end_year, $year_first_order))); $start_date = date(ASCMS_DATE_FORMAT_INTERNATIONAL_DATETIME, mktime(0, 0, 0, $start_month, 1, $start_year)); // mktime() will fix the month from 13 to 01, see example 2 // on http://php.net/manual/de/function.mktime.php. // Mind that this is exclusive and only used in the queries below // so that Order date < $end_date! $end_date = date(ASCMS_DATE_FORMAT_INTERNATIONAL_DATETIME, mktime(0, 0, 0, $end_month + 1, 1, $end_year)); $selectedStat = isset($_REQUEST['selectstats']) ? intval($_REQUEST['selectstats']) : 0; if ($selectedStat == 2) { // Product statistic $objTemplate->setVariable(array('TXT_COLUMN_1_DESC' => $_ARRAYLANG['TXT_PRODUCT_NAME'], 'TXT_COLUMN_2_DESC' => $_ARRAYLANG['TXT_COUNT_ARTICLES'], 'TXT_COLUMN_3_DESC' => $_ARRAYLANG['TXT_STOCK'], 'SHOP_ORDERS_SELECTED' => '', 'SHOP_ARTICLES_SELECTED' => \Html::ATTRIBUTE_SELECTED, 'SHOP_CUSTOMERS_SELECTED' => '')); $arrSql = \Text::getSqlSnippets('`B`.`id`', FRONTEND_LANG_ID, 'Shop', array('title' => Product::TEXT_NAME)); $query = "\n SELECT A.product_id AS id,\n A.quantity AS shopColumn2,\n A.price AS sum,\n B.stock AS shopColumn3,\n C.currency_id, " . $arrSql['field'] . "\n FROM " . DBPREFIX . "module_shop" . MODULE_INDEX . "_order_items AS A\n JOIN " . DBPREFIX . "module_shop" . MODULE_INDEX . "_orders AS C\n ON A.order_id=C.id\n JOIN " . DBPREFIX . "module_shop" . MODULE_INDEX . "_products AS B\n ON A.product_id=B.id" . $arrSql['join'] . "\n WHERE C.date_time>='{$start_date}'\n AND C.date_time<'{$end_date}'\n AND ( C.status=" . Order::STATUS_CONFIRMED . "\n OR C.status=" . Order::STATUS_COMPLETED . ")\n ORDER BY shopColumn2 DESC"; } elseif ($selectedStat == 3) { // Customer statistic $objTemplate->setVariable(array('TXT_COLUMN_1_DESC' => $_ARRAYLANG['TXT_NAME'], 'TXT_COLUMN_2_DESC' => $_ARRAYLANG['TXT_COMPANY'], 'TXT_COLUMN_3_DESC' => $_ARRAYLANG['TXT_COUNT_ARTICLES'], 'SHOP_ORDERS_SELECTED' => '', 'SHOP_ARTICLES_SELECTED' => '', 'SHOP_CUSTOMERS_SELECTED' => \Html::ATTRIBUTE_SELECTED)); $query = "\n SELECT A.sum AS sum,\n A.currency_id AS currency_id,\n sum(B.quantity) AS shopColumn3,\n A.customer_id AS id\n FROM " . DBPREFIX . "module_shop" . MODULE_INDEX . "_orders AS A\n JOIN " . DBPREFIX . "module_shop" . MODULE_INDEX . "_order_items AS B\n ON A.id=B.order_id\n WHERE A.date_time>='{$start_date}'\n AND A.date_time<'{$end_date}'\n AND ( A.status=" . Order::STATUS_CONFIRMED . "\n OR A.status=" . Order::STATUS_COMPLETED . ")\n GROUP BY B.order_id\n ORDER BY sum DESC"; } else { // Order statistic (default); sales per month $objTemplate->setVariable(array('TXT_COLUMN_1_DESC' => $_ARRAYLANG['TXT_DATE'], 'TXT_COLUMN_2_DESC' => $_ARRAYLANG['TXT_COUNT_ORDERS'], 'TXT_COLUMN_3_DESC' => $_ARRAYLANG['TXT_COUNT_ARTICLES'], 'SHOP_ORDERS_SELECTED' => \Html::ATTRIBUTE_SELECTED, 'SHOP_ARTICLES_SELECTED' => '', 'SHOP_CUSTOMERS_SELECTED' => '')); $query = "\n SELECT SUM(A.quantity) AS shopColumn3,\n COUNT(A.order_id) AS shopColumn2,\n B.currency_id,\n B.sum AS sum,\n DATE_FORMAT(B.date_time, '%m') AS month,\n DATE_FORMAT(B.date_time, '%Y') AS year\n FROM " . DBPREFIX . "module_shop" . MODULE_INDEX . "_order_items AS A,\n " . DBPREFIX . "module_shop" . MODULE_INDEX . "_orders AS B\n WHERE A.order_id=B.id\n AND B.date_time>='{$start_date}'\n AND B.date_time<'{$end_date}'\n AND ( B.status=" . Order::STATUS_CONFIRMED . "\n OR B.status=" . Order::STATUS_COMPLETED . ")\n GROUP BY B.id\n ORDER BY year DESC, month DESC"; } $arrayResults = array(); $objResult = $objDatabase->Execute($query); if (!$objResult) { return Order::errorHandler(); } $sumColumn3 = $sumColumn4 = 0; $sumColumn2 = ''; if ($selectedStat == 2) { // Product statistc while (!$objResult->EOF) { // set currency id Currency::setActiveCurrencyId($objResult->fields['currency_id']); $key = $objResult->fields['id']; if (!isset($arrayResults[$key])) { $arrayResults[$key] = array('column1' => '<a href="index.php?cmd=Shop' . MODULE_INDEX . '&act=products&tpl=manage&id=' . $objResult->fields['id'] . '" title="' . $objResult->fields['title'] . '">' . $objResult->fields['title'] . '</a>', 'column2' => 0, 'column3' => $objResult->fields['shopColumn3'], 'column4' => 0); } $arrayResults[$key]['column2'] += +$objResult->fields['shopColumn2']; $arrayResults[$key]['column4'] += +$objResult->fields['shopColumn2'] * Currency::getDefaultCurrencyPrice($objResult->fields['sum']); $objResult->MoveNext(); } if (is_array($arrayResults)) { foreach ($arrayResults as $entry) { $sumColumn2 = $sumColumn2 + $entry['column2']; $sumColumn3 = $sumColumn3 + $entry['column3']; $sumColumn4 = $sumColumn4 + $entry['column4']; } rsort($arrayResults); } } elseif ($selectedStat == 3) { // Customer statistic while (!$objResult->EOF) { Currency::setActiveCurrencyId($objResult->fields['currency_id']); $key = $objResult->fields['id']; if (!isset($arrayResults[$key])) { $objUser = \FWUser::getFWUserObject()->objUser; $objUser = $objUser->getUser($key); $company = ''; $name = $_ARRAYLANG['TXT_SHOP_CUSTOMER_NOT_FOUND']; if ($objUser) { $company = $objUser->getProfileAttribute('company'); $name = $objUser->getProfileAttribute('firstname') . ' ' . $objUser->getProfileAttribute('lastname'); } $arrayResults[$key] = array('column1' => '<a href="index.php?cmd=Shop' . MODULE_INDEX . '&act=customerdetails&customer_id=' . $objResult->fields['id'] . '">' . $name . '</a>', 'column2' => $company, 'column3' => 0, 'column4' => 0); } $arrayResults[$key]['column3'] += $objResult->fields['shopColumn3']; $arrayResults[$key]['column4'] += Currency::getDefaultCurrencyPrice($objResult->fields['sum']); $sumColumn3 += $objResult->fields['shopColumn3']; $sumColumn4 += Currency::getDefaultCurrencyPrice($objResult->fields['sum']); $objResult->MoveNext(); } } else { // Order statistic (default) $arrayMonths = explode(',', $_ARRAYLANG['TXT_MONTH_ARRAY']); while (!$objResult->EOF) { $key = $objResult->fields['year'] . '.' . $objResult->fields['month']; if (!isset($arrayResults[$key])) { $arrayResults[$key] = array('column1' => '', 'column2' => 0, 'column3' => 0, 'column4' => 0); } $arrayResults[$key]['column1'] = $arrayMonths[intval($objResult->fields['month']) - 1] . ' ' . $objResult->fields['year']; $arrayResults[$key]['column2'] = $arrayResults[$key]['column2'] + 1; $arrayResults[$key]['column3'] = $arrayResults[$key]['column3'] + $objResult->fields['shopColumn3']; $arrayResults[$key]['column4'] = $arrayResults[$key]['column4'] + Currency::getDefaultCurrencyPrice($objResult->fields['sum']); $sumColumn2 = $sumColumn2 + 1; $sumColumn3 = $sumColumn3 + $objResult->fields['shopColumn3']; $sumColumn4 = $sumColumn4 + Currency::getDefaultCurrencyPrice($objResult->fields['sum']); $objResult->MoveNext(); } krsort($arrayResults, SORT_NUMERIC); } $objTemplate->setCurrentBlock('statisticRow'); $i = 0; if (is_array($arrayResults)) { foreach ($arrayResults as $entry) { $objTemplate->setVariable(array('SHOP_ROWCLASS' => 'row' . (++$i % 2 + 1), 'SHOP_COLUMN_1' => $entry['column1'], 'SHOP_COLUMN_2' => $entry['column2'], 'SHOP_COLUMN_3' => $entry['column3'], 'SHOP_COLUMN_4' => Currency::formatPrice($entry['column4']) . ' ' . Currency::getDefaultCurrencySymbol())); $objTemplate->parse('statisticRow'); } } $query_currency = "\n SELECT currency_id, sum,\n DATE_FORMAT(date_time, '%m') AS month,\n DATE_FORMAT(date_time, '%Y') AS year\n FROM " . DBPREFIX . "module_shop" . MODULE_INDEX . "_orders\n WHERE status=" . Order::STATUS_CONFIRMED . "\n OR status=" . Order::STATUS_COMPLETED . "\n ORDER BY date_time DESC"; $objResult = $objDatabase->Execute($query_currency); if (!$objResult) { return Order::errorHandler(); } $totalSoldProducts = 0; $query_totalproducts = "\n SELECT sum(A.quantity) AS shopTotalSoldProducts\n FROM " . DBPREFIX . "module_shop" . MODULE_INDEX . "_order_items AS A,\n " . DBPREFIX . "module_shop" . MODULE_INDEX . "_orders AS B\n WHERE A.order_id=B.id\n AND ( B.status=" . Order::STATUS_CONFIRMED . "\n OR B.status=" . Order::STATUS_COMPLETED . ")"; $objResult = $objDatabase->SelectLimit($query_totalproducts, 1); if ($objResult) { if (!$objResult->EOF) { $totalSoldProducts = $objResult->fields['shopTotalSoldProducts']; $objResult->MoveNext(); } } $totalOrderSum = 0; $totalOrders = 0; $bestMonthSum = 0; $bestMonthDate = ''; $arrShopMonthSum = array(); $objResult = $objDatabase->Execute($query); while (!$objResult->EOF) { $orderSum = Currency::getDefaultCurrencyPrice($objResult->fields['sum']); if (!isset($arrShopMonthSum[$objResult->fields['year']][$objResult->fields['month']])) { $arrShopMonthSum[$objResult->fields['year']][$objResult->fields['month']] = 0; } $arrShopMonthSum[$objResult->fields['year']][$objResult->fields['month']] += $orderSum; $totalOrderSum += $orderSum; $totalOrders++; $objResult->MoveNext(); } $months = explode(',', $_ARRAYLANG['TXT_MONTH_ARRAY']); foreach ($arrShopMonthSum as $year => $arrMonth) { foreach ($arrMonth as $month => $sum) { if ($bestMonthSum < $sum) { $bestMonthSum = $sum; $bestMonthDate = $months[$month - 1] . ' ' . $year; } } } $objTemplate->setVariable(array('SHOP_ROWCLASS' => 'row' . (++$i % 2 + 1), 'SHOP_TOTAL_SUM' => Currency::formatPrice($totalOrderSum) . ' ' . Currency::getDefaultCurrencySymbol(), 'SHOP_MONTH' => $bestMonthDate, 'SHOP_MONTH_SUM' => Currency::formatPrice($bestMonthSum) . ' ' . Currency::getDefaultCurrencySymbol(), 'SHOP_TOTAL_ORDERS' => $totalOrders, 'SHOP_SOLD_ARTICLES' => $totalSoldProducts, 'SHOP_SUM_COLUMN_2' => $sumColumn2, 'SHOP_SUM_COLUMN_3' => $sumColumn3, 'SHOP_SUM_COLUMN_4' => Currency::formatPrice($sumColumn4) . ' ' . Currency::getDefaultCurrencySymbol())); return true; }
public function render() { if ($this->output) { return $this->output; } $template = new \Cx\Core\Html\Sigma(\Env::get('cx')->getCodeBaseCorePath() . '/Html/View/Template/Generic'); $template->loadTemplateFile('HtmlElement.html'); $parsedChildren = null; foreach ($this->getChildren() as $child) { $parsedChildren .= $child->render(); } $template->setVariable(array('ELEMENT_NAME' => $this->name)); if ($parsedChildren === null && $this->allowDirectClose) { $template->hideBlock('children'); $template->touchBlock('nochildren'); } else { $template->hideBlock('nochildren'); $template->touchBlock('children'); $template->setVariable(array('CHILDREN' => $parsedChildren)); } foreach ($this->getAttributes() as $name => $value) { $template->setVariable(array('ATTRIBUTE_NAME' => $name, 'ATTRIBUTE_VALUE' => preg_replace(array("/{/", "/}/"), array("{", "}"), contrexx_raw2xhtml((string) $value), -1))); $template->parse('attribute'); } $template->setVariable(array('ATTRIBUTE_NAME' => 'class', 'ATTRIBUTE_VALUE' => contrexx_raw2xhtml($this->getClasses()))); $template->parse('attribute'); $this->output = $template->get(); return $this->output; }
/** * This is called by the default ComponentController and does all the repeating work * * This loads a template named after current $act and calls parsePage($actTemplate) * @todo $this->cx->getTemplate()->setVariable() should not be called here but in Cx class * @global array $_ARRAYLANG Language data * @global $subMenuTitle * @param \Cx\Core\ContentManager\Model\Entity\Page $page Resolved page */ public function getPage(\Cx\Core\ContentManager\Model\Entity\Page $page) { global $_ARRAYLANG, $subMenuTitle; $subMenuTitle = $_ARRAYLANG['TXT_' . strtoupper($this->getType()) . '_' . strtoupper($this->getName())]; $cmd = array(''); if (isset($_GET['act'])) { $cmd = explode('/', contrexx_input2raw($_GET['act'])); } else { $cmd[0] = 'Wysiwyg'; } $actTemplate = new \Cx\Core\Html\Sigma($this->getDirectory(true) . '/View/Template/Backend'); $filename = $cmd[0] . '.html'; $testFilename = $cmd[0]; if (!\Env::get('ClassLoader')->getFilePath($actTemplate->getRoot() . '/' . $filename)) { $filename = 'Default.html'; $testFilename = 'Default'; } foreach ($cmd as $index => $name) { if ($index == 0) { continue; } $testFilename .= $name; if (\Env::get('ClassLoader')->getFilePath($actTemplate->getRoot() . '/' . $testFilename . '.html')) { $filename = $testFilename . '.html'; } else { break; } } $actTemplate->loadTemplateFile($filename); // todo: Messages $this->parsePage($actTemplate, $cmd); // set tabs $navigation = new \Cx\Core\Html\Sigma(\Env::get('cx')->getCodeBaseCorePath() . '/Core/View/Template/Backend'); $navigation->loadTemplateFile('Navigation.html'); $commands = array_merge($this->getCommands()); foreach ($commands as $key => $command) { $subnav = array(); if (is_array($command)) { $subnav = array_merge(array(''), $command); $command = $key; } if ($key !== '') { if ($cmd[0] == $command) { $navigation->touchBlock('tab_active'); } else { $navigation->hideBlock('tab_active'); } $act = '&act=' . $command; $txt = $command; if (empty($command)) { $act = ''; $txt = 'DEFAULT'; } $actTxtKey = 'TXT_' . strtoupper($this->getType()) . '_' . strtoupper($this->getName() . '_ACT_' . $txt); $actTitle = isset($_ARRAYLANG[$actTxtKey]) ? $_ARRAYLANG[$actTxtKey] : $actTxtKey; $navigation->setVariable(array('HREF' => 'index.php?cmd=' . $this->getName() . $act, 'TITLE' => $actTitle)); $navigation->parse('tab_entry'); } // subnav if ($cmd[0] == $command && count($subnav)) { $first = true; foreach ($subnav as $subcommand) { if (!isset($cmd[1]) && $first || (isset($cmd[1]) ? $cmd[1] : '') == $subcommand) { $navigation->touchBlock('subnav_active'); } else { $navigation->hideBlock('subnav_active'); } $act = '&act=' . $cmd[0] . '/' . $subcommand; $txt = (empty($cmd[0]) ? 'DEFAULT' : $cmd[0]) . '_'; if (empty($subcommand)) { $act = '&act=' . $cmd[0] . '/'; $txt .= 'DEFAULT'; } else { $txt .= strtoupper($subcommand); } $actTxtKey = 'TXT_' . strtoupper($this->getType()) . '_' . strtoupper($this->getName() . '_ACT_' . $txt); $actTitle = isset($_ARRAYLANG[$actTxtKey]) ? $_ARRAYLANG[$actTxtKey] : $actTxtKey; $navigation->setVariable(array('HREF' => 'index.php?cmd=' . $this->getName() . $act, 'TITLE' => $actTitle)); $navigation->parse('subnav_entry'); $first = false; } } } $txt = $cmd[0]; if (empty($txt)) { $txt = 'DEFAULT'; } // default css and js if (file_exists($this->cx->getClassLoader()->getFilePath($this->getDirectory(false) . '/View/Style/Backend.css'))) { \JS::registerCSS(substr($this->getDirectory(false, true) . '/View/Style/Backend.css', 1)); } if (file_exists($this->cx->getClassLoader()->getFilePath($this->getDirectory(false) . '/View/Script/Backend.js'))) { \JS::registerJS(substr($this->getDirectory(false, true) . '/View/Script/Backend.js', 1)); } // finish $actTemplate->setGlobalVariable($_ARRAYLANG); \Cx\Core\Csrf\Controller\Csrf::add_placeholder($actTemplate); $page->setContent($actTemplate->get()); $cachedRoot = $this->cx->getTemplate()->getRoot(); $this->cx->getTemplate()->setRoot(\Env::get('cx')->getCodeBaseCorePath() . '/Core/View/Template/Backend'); $this->cx->getTemplate()->addBlockfile('CONTENT_OUTPUT', 'content_master', 'ContentMaster.html'); $this->cx->getTemplate()->setRoot($cachedRoot); $this->cx->getTemplate()->setVariable(array('CONTENT_NAVIGATION' => $navigation->get(), 'ADMIN_CONTENT' => $page->getContent(), 'CONTENT_TITLE' => $_ARRAYLANG['TXT_' . strtoupper($this->getType()) . '_' . strtoupper($this->getName() . '_ACT_' . $txt)])); }