Ejemplo n.º 1
0
 private function check_default_settings()
 {
     $this->load('modules');
     $catalogue_ids = (array) $this->db->get_col("select Catalogue_ID from Catalogue");
     $shop_mode = 0;
     if ($this->modules->get_by_keyword('netshop')) {
         $shop_mode++;
     }
     if ($this->modules->get_by_keyword('minishop')) {
         $shop_mode++;
     }
     foreach ($catalogue_ids as $id) {
         $this->set_settings('nc_shop_mode_' . $id, $shop_mode);
     }
 }
Ejemplo n.º 2
0
 public function convert_system_vars($env_array, $reset = 0)
 {
     static $storage = array();
     static $filetable_storage = array();
     $reset = 1;
     if (!empty($storage[$this->essence][$env_array[$this->essence . "_ID"]]) && !$reset) {
         return $storage[$this->essence][$env_array[$this->essence . "_ID"]];
     }
     /* $debug = debug_backtrace();
        $debug_arr = array();
        foreach ($debug as $value) {
        $debug_arr[] = $value['function'];
        }
        echo join( " -> ",  array_reverse($debug_arr) )."<br/>";
        echo $this->essence." - ".$env_array[$this->essence."_ID"]."<br/><br/>"; */
     // system superior object
     $nc_core = nc_Core::get_object();
     // load system table fields
     $table_fields = $nc_core->get_system_table_fields($this->essence);
     // count
     $field_count = count($table_fields);
     // поля типа файл
     $file_field_ids = array();
     $filetable = array();
     // найдем все поля типа файл
     for ($i = 0; $i < $field_count; $i++) {
         if ($table_fields[$i]['type'] == 6) {
             $file_field_ids[$table_fields[$i]['id']] = $table_fields[$i]['id'];
         }
     }
     // если есть поля типа файл, то выполним запрос к Filetable
     // TODO этот фрагмент требует дальнейшей оптимизации
     // (выбираются все файлы! бред)
     if (!empty($file_field_ids)) {
         $file_field_ids = join(',', $file_field_ids);
         if (!array_key_exists($file_field_ids, $filetable_storage)) {
             $filetable_storage[$file_field_ids] = $this->db->get_results("SELECT `Virt_Name`, `File_Path`, `Message_ID`, `Field_ID`\n                       FROM `Filetable`\n                      WHERE `Field_ID` IN ({$file_field_ids})", ARRAY_A);
         }
         $file_in_table = $filetable_storage[$file_field_ids];
         if (!empty($file_in_table)) {
             foreach ($file_in_table as $v) {
                 $filetable[$v['Message_ID']][$v['Field_ID']] = array($v['Virt_Name'], $v['File_Path']);
             }
         }
     }
     // Проход по всем полям
     for ($i = 0; $i < $field_count; $i++) {
         $field_id = $table_fields[$i]['id'];
         $field_name = $table_fields[$i]['name'];
         $field_type = $table_fields[$i]['type'];
         $field_format = $this->db->escape($table_fields[$i]['format']);
         $field_inherit = $table_fields[$i]['inheritance'];
         if ($env_array[$field_name]) {
             switch ($field_type) {
                 // Select
                 case 4:
                     $table_name = strtok($field_format, ':');
                     $listname = $this->db->get_var("SELECT `" . $table_name . "_Name` FROM `Classificator_" . $table_name . "` WHERE `" . $table_name . "_ID` = '" . $env_array[$field_name] . "'");
                     $env_array[$field_name . "_id"] = $env_array[$field_name];
                     $env_array[$field_name] = $listname;
                     break;
                     // File
                 // File
                 case 6:
                     //file_data - массив с ориг.названием, типом, размером, [именем_файла_на_диске]
                     $file_data = explode(':', $env_array[$field_name]);
                     $env_array[$field_name . "_name"] = $file_data[0];
                     // оригинальное имя
                     $env_array[$field_name . "_type"] = $file_data[1];
                     // тип
                     $env_array[$field_name . "_size"] = $file_data[2];
                     // размер
                     $ext = substr($file_data[0], strrpos($file_data[0], "."));
                     // расширение
                     // запись в таблице Filetable
                     $row = $filetable[$env_array[$this->essence . "_ID"]][$field_id];
                     $row_parent = isset($env_array["Parent_Sub_ID"]) ? $filetable[$env_array["Parent_Sub_ID"]][$field_id] : false;
                     if (!$row && $row_parent) {
                         $row = $row_parent;
                     }
                     if ($row) {
                         // Proteced FileSystem
                         $env_array[$field_name] = $nc_core->get_variable("SUB_FOLDER") . $nc_core->get_variable("HTTP_FILES_PATH") . ltrim($row[1], '/') . "h_" . $row[0];
                         $env_array[$field_name . "_url"] = $nc_core->get_variable("SUB_FOLDER") . $nc_core->get_variable("HTTP_FILES_PATH") . ltrim($row[1], '/') . $row[0];
                     } else {
                         if ($file_data[3]) {
                             // Original FileSystem
                             $env_array[$field_name] = $env_array[$field_name . "_url"] = $nc_core->get_variable("SUB_FOLDER") . $nc_core->get_variable("HTTP_FILES_PATH") . $file_data[3];
                         } else {
                             // Simple FileSysytem
                             $env_array[$field_name] = $env_array[$field_name . "_url"] = $nc_core->get_variable("SUB_FOLDER") . $nc_core->get_variable("HTTP_FILES_PATH") . $field_id . "_" . $env_array[$this->essence . "_ID"] . $ext;
                         }
                     }
                     break;
                 case 8:
                     $env_array[$field_name . "_year"] = substr($env_array[$field_name], 0, 4);
                     $env_array[$field_name . "_month"] = substr($env_array[$field_name], 5, 2);
                     $env_array[$field_name . "_day"] = substr($env_array[$field_name], 8, 2);
                     $env_array[$field_name . "_hours"] = substr($env_array[$field_name], 11, 2);
                     $env_array[$field_name . "_minutes"] = substr($env_array[$field_name], 14, 2);
                     $env_array[$field_name . "_seconds"] = substr($env_array[$field_name], 17, 2);
                     break;
                     // Multiselect
                 // Multiselect
                 case 10:
                     $array_with_id = explode(',', $env_array[$field_name]);
                     if (!$array_with_id[0]) {
                         unset($array_with_id[0]);
                     }
                     if (!$array_with_id[count($array_with_id)]) {
                         unset($array_with_id[count($array_with_id)]);
                     }
                     if (empty($array_with_id)) {
                         break;
                     }
                     // латинское имя списка
                     $table_name = strtok($field_format, ':');
                     // получим сами элементы
                     $listname = $this->db->get_col("SELECT `" . $table_name . "_Name`\n                                                          FROM `Classificator_" . $table_name . "`\n                                                         WHERE `" . $table_name . "_ID` IN(" . join(',', $array_with_id) . ")");
                     $env_array[$field_name . "_id"] = (array) $array_with_id;
                     $env_array[$field_name] = (array) $listname;
                     break;
             }
         }
     }
     $storage[$this->essence][$env_array[$this->essence . "_ID"]] = $env_array;
     return $env_array;
 }