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(); ?>