コード例 #1
0
ファイル: convert.inc.php プロジェクト: Blu2z/implsk
 public function convert($ClassID, $action = 'convert')
 {
     $nc_core = nc_Core::get_object();
     $db = $nc_core->db;
     $fs = $action == 'convert' ? 1 : 0;
     if ($action == 'convert') {
         $this->db->query("UPDATE `Class` SET `File_Mode` = 1, `File_Path` = IF(`ClassTemplate` > 0, CONCAT('/', `ClassTemplate`, '/', `Class_ID`,'/'), CONCAT('/', `Class_ID`,'/')) WHERE `Class_ID` = " . $ClassID . " OR `ClassTemplate` = " . $ClassID);
     }
     if ($this->db->errno) {
         return nc_print_status(CONTROL_CLASS_CONVERT_DB_ERROR, 'error', null, 1);
     }
     $classes_data = $this->db->get_results("SELECT * FROM `Class` WHERE `Class_ID` = " . $ClassID . " OR `ClassTemplate` = " . $ClassID . " ORDER BY `ClassTemplate` ASC", ARRAY_A);
     foreach ($classes_data as $class_data) {
         $templates = $this->get_class_templates_list();
         //save tpls
         $class_editor = new nc_class_editor($nc_core->CLASS_TEMPLATE_FOLDER, $db);
         $class_editor->load($class_data['ClassTemplate']);
         $path = $class_editor->get_absolute_path() . $class_data['Class_ID'] . "/class_v40_backup.html";
         if ($action == 'convert') {
             $new_temlates = $this->convert_class_templates($class_data);
             $class_editor->save_new_class($class_data['Class_ID'], $new_temlates);
             foreach ($templates as $field_name => $tmp) {
                 $fields[$field_name] = "<!-- {$field_name} -->" . $class_data[$field_name] . "<!-- /{$field_name} -->";
             }
             $backup_content = join("\n\n", $fields);
             nc_save_file($path, $backup_content);
         } else {
             $restore_content = nc_check_file($path) ? nc_get_file($path) : false;
             if (!$restore_content) {
                 return nc_print_status(CONTROL_CLASS_CONVERT_UNDO_FILE_ERROR, 'error', null, 1);
             }
             foreach ($templates as $field_name => $tmp) {
                 if (preg_match("#<!-- ?{$field_name} ?-->(.*)<!-- ?/ ?{$field_name} ?-->#is", $restore_content, $matches)) {
                     $restored_templates[$field_name] = $matches[1];
                 }
             }
             if ($restored_templates && is_array($restored_templates)) {
                 $query = array();
                 foreach ($restored_templates as $field_name => $tmp) {
                     $query[] = "`" . $field_name . "` = '" . $db->prepare($tmp) . "'";
                 }
                 // сообственно, добавление
                 $SQL = "\nUPDATE `Class`";
                 $SQL .= "\n    SET `File_Mode` = 0 , " . join(",\n        ", $query);
                 $SQL .= "\n        WHERE `Class_ID` = " . $class_data['Class_ID'];
                 $this->db->query($SQL);
                 if ($this->db->errno) {
                     return nc_print_status(CONTROL_CLASS_CONVERT_DB_ERROR, 'error', null, 1);
                 }
             }
         }
         $message = nc_print_status(CONTROL_CLASS_CONVERT_OK, 'OK', null, 1);
         $message .= "<a href='index.php?phase=4&ClassID=" . $ClassID . "&fs=" . $fs . "'>" . CONTROL_CLASS_CONVERT_OK_GOEDIT . "</a>";
     }
     return $message;
     //no errors
 }
コード例 #2
0
ファイル: nc_component.class.php プロジェクト: Blu2z/implsk
 /**
  * Добавление нового компонента ( шаблона компонента )
  *
  * @param string $class_name - имя компонента
  * @param string $class_group - группа компонента
  * @param array $params - массив параметров компонента
  * @param int $class_template - номер класса, если идёт создание шаблона
  * @param string $type - тип шаблона компонента
  *
  * @throws nc_Exception_DB_Error
  * @return int номер созданного компонент
  */
 public function add($class_name, $class_group, $params, $class_template = 0, $type = 'useful')
 {
     $nc_core = nc_Core::get_object();
     $db = $nc_core->db;
     $class_name = $db->escape($class_name);
     $class_group = $db->escape($class_group);
     $type = $db->escape($type);
     $class_template = intval($class_template);
     $File_Mode = nc_get_file_mode('Class', $class_template);
     if ($File_Mode) {
         $class_editor = new nc_class_editor($nc_core->CLASS_TEMPLATE_FOLDER, $db);
         $class_editor->load($class_template);
         if (is_array($params)) {
             $template_content = array_merge((array) $nc_core->input->fetch_post(), $params);
         }
     }
     // все параметры компонента
     $params_int = array('AllowTags', 'RecordsPerPage', 'NL2BR', 'UseCaptcha', 'CacheForUser');
     if (!$class_template) {
         $params_int[] = 'System_Table_ID';
     }
     $params_text = array('FormPrefix', 'FormSuffix', 'RecordTemplate', 'SortBy', 'RecordTemplateFull', 'TitleTemplate', 'AddTemplate', 'EditTemplate', 'AddActionTemplate', 'EditActionTemplate', 'SearchTemplate', 'FullSearchTemplate', 'SubscribeTemplate', 'Settings', 'AddCond', 'EditCond', 'SubscribeCond', 'DeleteCond', 'CheckActionTemplate', 'DeleteActionTemplate', 'CustomSettingsTemplate', 'ClassDescription', 'DeleteTemplate', 'TitleList');
     if ($File_Mode) {
         $params_text = $class_editor->get_clear_fields($params_text);
         $params['File_Mode'] = 1;
         $params_text[] = 'File_Mode';
     }
     // добавление имени и группы
     $query = array("`Class_Name`", "`Class_Group`");
     $values = array("'" . $class_name . "'", "'" . $class_group . "'");
     // добавление шаблона компонента
     if ($class_template) {
         $query[] = "`ClassTemplate`";
         $values[] = "'" . $class_template . "'";
         // System Table ID в любом случае берётся от компонента
         $query[] = "`System_Table_ID`";
         $values[] = "'" . $this->get_by_id($class_template, 'System_Table_ID') . "'";
     }
     // тип шаблона компонента
     if ($type) {
         $query[] = "`Type`";
         $values[] = "'" . $type . "'";
     }
     // добавление всех параметров компонента
     foreach ($params_int as $v) {
         $value = isset($params[$v]) ? intval($params[$v]) : 0;
         $query[] = "`" . $v . "`";
         $values[] = "'" . $value . "'";
     }
     foreach ($params_text as $v) {
         $value = isset($params[$v]) ? $params[$v] : '';
         $query[] = "`" . $v . "`";
         $values[] = "'" . $db->prepare($value) . "'";
     }
     if (!$class_template) {
         $nc_core->event->execute("addClassPrep", 0);
     } else {
         $nc_core->event->execute("addClassTemplatePrep", $class_template, 0);
     }
     // собственно добавление
     $SQL = "INSERT INTO `Class` (" . join(', ', $query) . ") VALUES (" . join(', ', $values) . ") ";
     $db->query($SQL);
     if ($db->is_error) {
         throw new nc_Exception_DB_Error($db->last_query, $db->last_error);
     }
     $new_class_id = $db->insert_id;
     if ($File_Mode) {
         $class_editor->save_new_class($new_class_id, $template_content);
     }
     // трансляция события создания компонента
     if (!$class_template) {
         CreateMessageTable($new_class_id, $db);
         $nc_core->event->execute("addClass", $new_class_id);
     } else {
         $nc_core->event->execute("addClassTemplate", $class_template, $new_class_id);
     }
     return $new_class_id;
 }
コード例 #3
0
ファイル: import.inc.php プロジェクト: Blu2z/implsk
/**
 * Парсинг файла с импортированным шаблоном
 *
 * @param str file
 *
 * @return int component id
 */
function ParseClassFile4($file)
{
    // system superior object
    $nc_core = nc_Core::get_object();
    $db =& $nc_core->db;
    $db->captured_errors = array();
    $VersionNumber = $nc_core->get_settings("VersionNumber");
    $insert_flag = "%INSERT_ID%";
    $f = fopen($file, "r");
    // STEP 1: System version check
    $tpl_version = trim(fgets($f, 256));
    if (!nc_version_control($tpl_version)) {
        nc_print_status(sprintf(CONTROL_CLASS_IMPORT_ERROR_VERSION_ID, $tpl_version, $VersionNumber), 'info');
        return false;
    }
    // STEP 2: skip export info
    fgets($f, 256);
    $path_for_file_mode = array();
    // STEP 3: import component data
    $insert_into_class = trim(fgets($f, 65536));
    // все компоненты в utf-8
    if (!$nc_core->NC_UNICODE) {
        $insert_into_class = $nc_core->utf8->utf2win($insert_into_class);
    }
    $res1 = $db->query($insert_into_class);
    if ($res1) {
        $insert_id = $db->insert_id;
        $path_for_file_mode[$insert_id] = "/{$insert_id}/";
    } else {
        nc_print_status(CONTROL_CLASS_IMPORT_ERROR_CLASS_IMPORT, 'info');
        return false;
    }
    // STEP 4: import component templates
    $tpl_id = array();
    $next_data = trim(fgets($f, 65536));
    while (preg_match("/^INSERT INTO/is", $next_data)) {
        // все компоненты в utf-8
        if (!$nc_core->NC_UNICODE) {
            $next_data = $nc_core->utf8->utf2win($next_data);
        }
        // replace ID
        $next_data = str_replace($insert_flag, $insert_id, $next_data);
        if (!$db->query($next_data)) {
            nc_print_status(CONTROL_CLASS_IMPORT_ERROR_CLASS_TEMPLATE_IMPORT, 'info');
            $db->query("DELETE FROM `Class` WHERE `Class_ID` = '" . $insert_id . "'");
            return false;
        }
        $path_for_file_mode[$db->insert_id] = "/{$insert_id}/{$db->insert_id}/";
        $tpl_id[] = $db->insert_id;
        $next_data = trim(fgets($f, 65536));
    }
    foreach ($path_for_file_mode as $id => $path) {
        $SQL = "UPDATE `Class` \n                    SET `File_Path` = '{$path}' \n                        WHERE `Class_ID` = {$id}";
        $db->query($SQL);
    }
    // STEP 5: create MessageXX table
    $create_message = $next_data;
    $create_message = str_replace($insert_flag, $insert_id, $create_message);
    $create_message = str_replace('%%MYSQL_CHARSET%%', $nc_core->MYSQL_CHARSET, $create_message);
    $res2 = $db->query($create_message);
    if ($res2 != 0) {
        nc_print_status(CONTROL_CLASS_IMPORT_ERROR_MESSAGE_TABLE, 'info');
        $db->query("DELETE FROM `Class` WHERE `Class_ID` = '" . $insert_id . "' OR `ClassTemplate` = '" . $insert_id . "'");
        return false;
    }
    // STEP 6: append component fields
    while (!feof($f) && ($insert_into_field = preg_replace("/FileMode.*/m", '', trim(fgets($f, 4096))))) {
        if (!$nc_core->NC_UNICODE) {
            $insert_into_field = $nc_core->utf8->utf2win($insert_into_field);
        }
        $insert_into_field = str_replace($insert_flag, $insert_id, $insert_into_field);
        if ($insert_into_field) {
            $res3 = $db->query($insert_into_field);
            if ($db->captured_errors) {
                nc_print_status(CONTROL_CLASS_IMPORT_ERROR_FIELD, 'info');
                $db->query("DELETE FROM `Class` WHERE `Class_ID` = '" . $insert_id . "' OR `ClassTemplate` = '" . $insert_id . "'");
                $db->query("DROP TABLE `Message" . $insert_id . "`");
                $db->query("DELETE FROM `Field` WHERE `Class_ID` = '" . $insert_id . "'");
                return false;
            }
        }
    }
    $import_all_text = file_get_contents($file);
    $serialize_field = str_replace('FileMode ', '', strstr($import_all_text, 'FileMode'));
    if ($serialize_field) {
        $serialize_field = explode('___class_templates___', $serialize_field);
        $fields = unserialize($serialize_field[0]);
        $_POST = array_merge($_POST, $fields);
        $file_class = new nc_class_editor($nc_core->CLASS_TEMPLATE_FOLDER, $nc_core->db, 'Class');
        $file_class->save_new_class($insert_id);
        if ($serialize_field[1]) {
            $serialize_remplates = explode('___class_templates_separator___', $serialize_field[1]);
            $file_class->load($insert_id);
            for ($i = 0, $count = count($serialize_remplates); $i < $count; ++$i) {
                $fields = unserialize($serialize_remplates[$i]);
                $_POST = array_merge($_POST, $fields);
                $file_class->save_new_class($tpl_id[$i]);
            }
        }
    }
    return $insert_id;
}