private static function &_query($query, $args = NULL) { $false = FALSE; if (empty($query)) { return $false; } if (!isset($GLOBALS['sql_query_count'])) { $GLOBALS['sql_query_count'] = 0; } else { $GLOBALS['sql_query_count']++; } if (utopia::DebugMode()) { $tID = 'QRY' . $GLOBALS['sql_query_count'] . ': ' . $query; timer_start($tID, $args); } $pdo = self::connect(); $pdo->reset(); if (is_array($args)) { foreach ($args as $a) { $pdo->addByVal($a, self::getType($a)); } } try { self::$queryCount++; $stm = $pdo->call($query); $stm->setFetchMode(PDO::FETCH_ASSOC); } catch (Exception $e) { if (utopia::DebugMode()) { $timetaken = timer_end($tID); } throw $e; } if (utopia::DebugMode()) { $timetaken = timer_end($tID); } return $stm; }
/** * Internal timer stop/start. * * @param string One of 'start' or 'stop'. * @return void */ protected function timer($start_stop) { $this->timer[$start_stop] = microtime(true); if (function_exists('timer_start')) { if ('start' === $start_stop) { timer_start('router'); } else { if ('stop' === $start_stop) { timer_end('router'); } } } }
public function ShowData($dataset = null) { echo '<h1>' . $this->GetTitle() . '</h1>'; echo '{list.' . get_class($this) . '}'; array_sort_subkey($this->fields, 'order'); $this->GetLimit($limit, $page); if (!$dataset) { $dataset = $this->GetDataset(); } $dataset->GetPage($page, $limit); $num_rows = $dataset->CountRecords(); uEvents::TriggerEvent('OnShowDataList', $this); // first draw header for list if (!isset($GLOBALS['inlineListCount'])) { $GLOBALS['inlineListCount'] = 0; } else { $GLOBALS['inlineListCount']++; } ob_start(); if (!$this->isAjax) { echo '<form class="uf" action="" onsubmit="this.action = window.location" method="post"><input type="hidden" name="__ajax" value="updateField">'; } echo "<div class=\"table-wrapper\"><table class=\"" . get_class($this) . " layoutListSection module-content\">"; $sectionFieldTitles = array(); // TODO: pagination for list record display if (!$this->flag_is_set(LIST_HIDE_HEADER)) { echo '<thead>'; ob_start(); // start of SECTION headers if (count($this->layoutSections) > 1) { echo '<tr>'; // need first 'empty' column for buttons? if ($this->flag_is_set(ALLOW_DELETE)) { echo "<td> </td>"; } $sectionCount = 0; $sectionID = NULL; $keys = array_keys($this->fields); $lastFieldName = end($keys); foreach ($this->fields as $fieldName => $fieldData) { if ($fieldData['visiblename'] === NULL) { continue; } if ($sectionID === NULL) { $sectionID = $fieldData['layoutsection']; } if ($fieldData['layoutsection'] !== $sectionID) { // write the section, and reset the count $sectionName = $this->layoutSections[$sectionID]['title']; $secClass = empty($sectionName) ? '' : ' sectionHeader'; echo "<td colspan=\"{$sectionCount}\" class=\"{$secClass}\">" . nl2br($sectionName) . "</td>"; $sectionCount = 0; $sectionID = $fieldData['layoutsection']; } $sectionFieldTitles[$sectionID] = array_key_exists($sectionID, $sectionFieldTitles) ? $sectionFieldTitles[$sectionID] : !empty($fieldData['visiblename']); $sectionCount++; } $sectionName = $this->layoutSections[$sectionID]['title']; $secClass = empty($sectionName) ? '' : ' sectionHeader'; echo "<td colspan=\"{$sectionCount}\" class=\"{$secClass}\">" . nl2br($sectionName) . "</td>"; echo "</tr>"; } // start of FIELD headers $colcount = 0; echo '<tr class="field-headers">'; if ($this->flag_is_set(ALLOW_DELETE)) { echo '<th"></th>'; $colcount++; } foreach ($this->fields as $fieldName => $fieldData) { if ($fieldData['visiblename'] === NULL) { continue; } $colcount++; // sort? $icon = ''; $o = $this->GetOrderBy(true); if (is_array($o)) { foreach ($o as $order) { if (strpos($order, '`' . $fieldName . '`') !== FALSE) { $icon = ' sort-up'; if (stripos($order, 'desc') !== FALSE) { $icon = ' sort-down'; } break; } } } echo '<th class="field-' . $fieldName . ' sortable' . $icon . '" data-field="' . $fieldName . '" data-mid="' . $this->GetModuleId() . '">'; // title echo nl2br($fieldData['visiblename']); echo "</th>"; } echo '</tr>'; // close column headers $header_output = ob_get_clean(); if ($this->flag_is_set(ALLOW_FILTER) && $this->hasEditableFilters === true && $this->hideFilters !== TRUE) { echo '<tr class="noprint"><td class="uFilters" colspan="' . $colcount . '">'; // other filters foreach ($this->filters as $fType) { foreach ($fType as $filterset) { //flag_is_set($fieldData['options'],ALLOW_FILTER)) { foreach ($filterset as $filterInfo) { if ($filterInfo['it'] === itNONE) { continue; } echo $this->GetFilterBox($filterInfo); } } } echo '</td></tr>'; } if ($num_rows > 0 || $this->flag_is_set(ALLOW_ADD) || $this->hasEditableFilters === true) { echo $header_output; } echo "</thead>\n"; } // now display data rows // process POST filters $total = array(); $totalShown = array(); timer_start('Draw Rows: ' . get_class($this)); $gUrl = ''; $body = "<tbody{$gUrl}>"; if ($num_rows == 0) { } else { $i = 0; $fields = $this->GetFields(); while ($row = $dataset->fetch()) { $i++; // move totals here foreach ($fields as $fieldName => $fieldData) { switch ($this->GetFieldType($fieldName)) { case ftNUMBER: case ftCURRENCY: case ftPERCENT: if (!array_key_exists($fieldName, $total)) { $total[$fieldName] = 0; } if (!array_key_exists($fieldName, $totalShown)) { $totalShown[$fieldName] = 0; } $preProcessValue = floatval(preg_replace('/[^0-9\\.-]/', '', $this->PreProcess($fieldName, $row[$fieldName], $row))); if ($i <= 150) { $totalShown[$fieldName] += $preProcessValue; } $total[$fieldName] += $preProcessValue; break; default: break; } } $body .= $this->DrawRow($row); } } $body .= "</tbody>"; timer_end('Draw Rows: ' . get_class($this)); $foot = ''; $canadd = false; foreach ($this->fields as $fieldName => $fieldData) { if ($this->flag_is_set(ALLOW_ADD, $fieldName)) { $canadd = true; break; } } if ($canadd) { $hideNew = $this->GetMaxRows() && $num_rows >= $this->GetMaxRows() ? ' style="display:none"' : ''; $foot .= '<tr class="newRow"' . $hideNew . '>'; if ($this->flag_is_set(ALLOW_DELETE)) { $foot .= "<td class=\"new-ident\"></td>"; } foreach ($this->fields as $fieldName => $fieldData) { if ($fieldData['visiblename'] === NULL) { continue; } $classes = array(); $class = count($classes) > 0 ? ' class="' . join(' ', $classes) . '"' : ''; if ($this->flag_is_set(ALLOW_ADD, $fieldName)) { $foot .= "<td{$class}>" . $this->GetCell($fieldName, NULL) . '</td>'; } // TODO: Default value not showing on new records (list) } $foot .= '</tr>'; } if (!empty($total) && $this->flag_is_set(SHOW_TOTALS)) { $foot .= '<tr>'; if ($this->flag_is_set(ALLOW_DELETE)) { $foot .= "<td class=\"totals-ident\"></td>"; } foreach ($this->fields as $fieldName => $fieldData) { if ($fieldData['visiblename'] === NULL) { continue; } $classes = array(); $class = count($classes) > 0 ? ' class="' . join(' ', $classes) . '"' : ''; if (array_key_exists($fieldName, $total)) { $foot .= "<td{$class}><b>"; if ($totalShown[$fieldName] != $total[$fieldName]) { $foot .= htmlentities($this->PreProcess($fieldName, $totalShown[$fieldName])) . '(shown)<br/>'; } $foot .= htmlentities($this->PreProcess($fieldName, $total[$fieldName])); $foot .= '</b></td>'; } else { $foot .= "<td{$class}></td>"; } } $foot .= '</tr>'; } if (!empty($foot)) { echo "<tfoot>{$foot}</tfoot>"; } echo $body; // now finish table echo "</table></div>"; //"</div>"; if (!$this->isAjax) { echo '</form>'; } if ($limit) { $pages = max(ceil($num_rows / $limit), 1); ob_start(); utopia::OutputPagination($pages, '_p_' . $this->GetModuleId()); $pagination = ob_get_clean(); if ($pagination) { echo '<div class="pagination right module-content">' . $pagination . '</div>'; } } echo '<div class="right module-content">Showing ' . ($page * $limit + 1) . ' - ' . min($page * $limit + $limit, $num_rows) . ' of ' . $num_rows . '</div>'; $cont = ob_get_clean(); echo $cont; }
/** * добавляет в глобальный шаблон блоки */ function get_blocks($blocks = array()) { foreach ($blocks as $block_name => $block) { # создаём объект $module_loader =& Registry::get('TModuleLoader'); $class_name = isset($block['class']) ? $block['class'] : DEFAULT_CLASS; //$GLOBALS['blocks'][$class_name] = $module_loader->getModuleObject($class_name); $GLOBALS['blocks'][$class_name] =& Registry::get($class_name); } foreach ($blocks as $block_name => $block) { timer_start('block=' . $block_name); # массив данных текущего блока $data = array(); $class_name = isset($block['class']) ? $block['class'] : DEFAULT_CLASS; $block['cache'] = isset($block['cache']) ? $block['cache'] : false; $tables = isset($block['tables']) ? $block['tables'] : array(); $block['cache_tables'] = isset($block['cache_tables']) ? $block['cache_tables'] : array(); if (CACHE_BLOCKS && $block['cache']) { // Очистка папки cache/blocks с вероятностью 0.001 if (rand(0, 999) == 13) { $this->cleanCache(); } $cache_id = md5($module_loader->callModuleMethod($class_name, "_cache", array_merge($block, array('block_name' => $block_name)))); if ($this->is_cached($this->content['type'], $block_name, $cache_id, $tables)) { $data = $this->get_from_cache($this->content['type'], $block_name, $cache_id); } else { $data = $this->generate_block_data($block_name, $block); $this->save_in_cache($this->content['type'], $block_name, $cache_id, $data); } } else { $data = $this->generate_block_data($block_name, $block); } $this->tpl->assign((array) $data); timer_end('block=' . $block_name); } }
static function Finish() { if (self::$finished) { return; } self::$finished = true; while (ob_get_level() > 3) { ob_end_flush(); } timer_start('Output Template'); utopia::OutputTemplate(); timer_end('Output Template'); if (isset($GLOBALS['timers']) && utopia::DebugMode()) { echo '<pre class="uDebug"><table>'; foreach ($GLOBALS['timers'] as $name => $info) { if (!is_array($info)) { continue; } $time = !array_key_exists('time_taken', $info) ? timer_end($name) : $info['time_taken']; $time = number_format($time, 2); echo '<tr><td style="vertical-align:top;border-top:1px solid black">' . $time . '</td><td style="vertical-align:top;border-top:1px solid black">' . $name . PHP_EOL . $info['info'] . '</td></tr>'; } echo '</table></pre>'; } header('X-Runtime: ' . number_format((microtime(true) - UCORE_START_TIME) * 1000) . 'ms'); die; }
$row['module_name']::Initialise(); timer_end('Init: ' . $row['module_name']); } timer_end('Static Initialise'); uConfig::DefineConfig(); uConfig::ValidateConfig(); uEvents::TriggerEvent('ConfigDefined'); timer_start('Before Init'); uEvents::TriggerEvent('BeforeInit'); timer_end('Before Init'); timer_start('Table Initialise'); uTableDef::TableExists(null); // cache table exists $allmodules = utopia::GetModulesOf('uTableDef'); foreach ($allmodules as $row) { // must run second due to requiring GLOB_MOD to be setup fully timer_start('Init: ' . $row['module_name']); $obj = utopia::GetInstance($row['module_name']); $obj->AssertTable(); // setup Parents timer_end('Init: ' . $row['module_name']); } timer_end('Table Initialise'); define('INIT_COMPLETE', TRUE); timer_start('After Init'); uEvents::TriggerEvent('InitComplete'); uEvents::TriggerEvent('AfterInit'); timer_end('After Init'); if ($_SERVER['HTTP_HOST'] !== 'cli') { utopia::UseTemplate(TEMPLATE_DEFAULT); }
/* устанавливается document_status */ $GLOBALS['document_status'] = 200; require_once PATH_COMMON_LIBS . 'error.lib.php'; require_once PATH_COMMON_LIBS . 'path.lib.php'; //подключаем класс реестра объектов include_once common_class('registry.php5'); /* устанавливает соединение с базой данных */ // @todo нормальный обработчик ошибок при коннекте к БД (require_once DB_CONNECT) or log_error('Cannot find file "' . DB_CONNECT . '"to connect to DB'); @mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD) or die(mysql_error()); @mysql_select_db(MYSQL_DB) or die(mysql_error()); @mysql_query("SET NAMES \"" . DB_SET_NAMES . "\""); /* подключаем встроенный дебаггер */ require_once common_lib('debug'); timer_start('all'); //подключаем вывод страницы в gz require_once common_lib('cache'); ob_start('cache_handler'); /* подключается библиотека функций */ require_once common_lib('utils'); /* подгружаем контроллер, инициализирующий общие классы, для сайта и админки */ require_once common('main.init'); $main =& Registry::get('TMainInit'); require_once PATH_CONFIG . 'settings.cfg.php'; require_once PATH_CONFIG . 'lang.cfg.php'; /* Определение глобальных переменных */ require_once cfg('common'); require_once base('core.dispatcher'); timer_end('all'); echo showDebugInfo(); ob_end_flush();