array('self' => true), 'OnClosePopup' => array('self' => true), ); $this->permMapping = array_merge($this->permMapping, $permissions); } function OnResetModRwCache(&$event) { $this->Conn->Query('DELETE FROM '.TABLE_PREFIX.'Cache WHERE VarName LIKE "mod_rw%"'); } function OnResetCMSMenuCache(&$event) { $this->Conn->Query('DELETE FROM '.TABLE_PREFIX.'Cache WHERE VarName = "cms_menu"'); } function OnResetSections(&$event) { $this->Conn->Query('DELETE FROM '.TABLE_PREFIX.'Cache WHERE VarName = "sections_parsed"'); } function OnResetConfigsCache(&$event) { $this->Conn->Query('DELETE FROM '.TABLE_PREFIX.'Cache WHERE VarName = "config_files" OR VarName = "configs_parsed" OR VarName = "sections_parsed"'); } /** * Generates sturcture for specified table * * @param kEvent $event * @author Alex */ function OnGenerateTableStructure(&$event) { $types_hash = Array( 'string' => 'varchar|text|mediumtext|longtext|date|datetime|time|timestamp|char|year|enum|set', 'int' => 'smallint|mediumint|int|bigint|tinyint', 'float' => 'float', 'double' => 'double', 'numeric' => 'decimal', ); $table_name = $this->Application->GetVar('table_name'); if (!$table_name) { echo 'error: no table name specified'; return ; } if (TABLE_PREFIX && !preg_match('/^'.preg_quote(TABLE_PREFIX, '/').'(.*)/', $table_name)) { // table name without prefix, then add it $table_name = TABLE_PREFIX.$table_name; } if (!$this->Conn->TableFound($table_name)) { // table with prefix doesn't exist, assume that just config prefix passed -> resolve table name from it $table_name = $this->Application->getUnitOption(substr($table_name, strlen(TABLE_PREFIX)), 'TableName'); } $table_info = $this->Conn->Query('DESCRIBE '.$table_name); // 1. prepare config keys $id_field = ''; $fields = Array(); $float_types = Array ('float', 'double', 'numeric'); foreach ($table_info as $field_info) { if (preg_match('/l[\d]+_.*/', $field_info['Field'])) { // don't put multilingual fields in config continue; } $field_options = Array (); // 1. get php field type by mysql field type foreach ($types_hash as $php_type => $db_types) { if (preg_match('/'.$db_types.'/', $field_info['Type'])) { $field_options['type'] = $php_type; break; } } $default_value = $field_info['Default']; if (in_array($php_type, $float_types)) { // this is float number if (preg_match('/'.$db_types.'\([\d]+,([\d]+)\)/i', $field_info['Type'], $regs)) { // size is described in structure -> add formatter $field_options['formatter'] = 'kFormatter'; $field_options['format'] = '%01.'.$regs[1].'f'; $default_value = 0; } else { // no size information, just convert to float $default_value = (float)$default_value; } } if (preg_match('/varchar\(([\d]+)\)/i', $field_info['Type'], $regs)) { $field_options['max_len'] = (int)$regs[1]; } if ($field_info['Null'] != 'YES') { $field_options['not_null'] = 1; } if ($field_info['Key'] == 'PRI') { $default_value = 0; $id_field = $field_info['Field']; } if ($php_type == 'int' && ($field_info['Null'] != 'YES' || is_numeric($default_value))) { // is integer field AND not null $field_options['default'] = (int)$default_value; } else { $field_options['default'] = $default_value; } $fields[ $field_info['Field'] ] = $this->transformDump($field_options); } $ret = stripslashes(var_export($fields, true)); $ret = preg_replace("/'(.*?)' => 'Array \((.*?), \)',/", "'\\1' => Array (\\2),", $ret); $ret = preg_replace("/\n '/", "\n\t'", $ret); $ret = "'IDField' => '".$id_field."',\n'Fields' => A".substr($ret, 1).','; ob_start(); ?> Table "<?php echo $table_name; ?>" Structure Close Window
highlightString($ret); ?>
Close Window
status = erSTOP; } function transformDump($dump) { if (is_array($dump)) { $dump = var_export($dump, true); } $dump = preg_replace("/,\n[ ]*/", ', ', $dump); $dump = preg_replace("/array \(\n[ ]*/", 'Array (', $dump); // replace array start $dump = preg_replace("/,\n[ ]*\),/", "),", $dump); // replace array end return $dump; } /** * Refreshes ThemeFiles & Theme tables by actual content on HDD * * @param kEvent $event */ function OnRebuildThemes(&$event) { $themes_helper =& $this->Application->recallObject('ThemesHelper'); /* @var $themes_helper kThemesHelper */ $themes_helper->refreshThemes(); } function OnSaveColumns(&$event) { $picker_helper =& $this->Application->RecallObject('ColumnPickerHelper'); $picker_helper->SetGridName($this->Application->GetLinkedVar('grid_name')); /* @var $picker_helper kColumnPickerHelper */ $picked = trim($this->Application->GetVar('picked_str'), '|'); $hidden = trim($this->Application->GetVar('hidden_str'), '|'); $main_prefix = $this->Application->GetVar('main_prefix'); $picker_helper->SaveColumns($main_prefix, $picked, $hidden); $this->finalizePopup($event); } /** * Just closes popup & deletes last_template & opener_stack if popup, that is closing * * @param kEvent $event */ function OnClosePopup(&$event) { $event->SetRedirectParam('opener', 'u'); } /** * Occurs right after initialization of the kernel, used mainly as hook-to event * * @param kEvent $event */ function OnStartup(&$event) { } /** * Is called after tree was build (when not from cache) * * @param kEvent $event */ function OnAfterBuildTree(&$event) { } }