Пример #1
0
 /**
  * Изменение порядка следования элементов в multi и link элемах
  * @param $data
  * @return void
  */
 function changePriority($data)
 {
     $page_name = get('page_name', '', 'p');
     $elem_name = get('elem_name', '', 'p');
     // инициализация элема
     $elem_object = $this->initElemByParams($page_name, $elem_name);
     if (is_string($elem_object)) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', $elem_object)));
         die;
     }
     if (!$elem_object->elem_fields['id_field']) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определен параметр id_field")));
         die;
     }
     // ищем таблицу
     $table = $elem_object->elem_type == 'multi' ? $elem_object->elem_table : $elem_object->elem_table_link;
     if (!$table) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определена таблица")));
         die;
     }
     $id = (int) get('id', 0, 'p');
     if (!$id) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Неизвестный параметр: id")));
         die;
     }
     $direction = get('direction', 0, 'p');
     if (!in_array($direction, array(1, -1))) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Неизвестный параметр: direction")));
         die;
     }
     $tabname = get('tab', '', 'p');
     if (!$tabname) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Неизвестный параметр: tabname")));
         die;
     }
     // Родительский id, внутри которого идет нумерация priority
     $id_field = $elem_object->elem_type == 'multi' ? 'id' : $elem_object->elem_fields['id2_field'];
     $pid = (int) sql_getValue("SELECT " . $elem_object->elem_fields['id_field'] . " FROM " . $table . " WHERE " . $id_field . "=" . $id);
     if (!$pid) {
         echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определено значение для " . $elem_object->elem_fields['id_field'])));
         die;
     }
     $priority_field = isset($elem_object->elem_fields['priority_field']) ? $elem_object->elem_fields['priority_field'] : 'priority';
     // Исходный приоритет
     $where = "";
     if ($elem_object->elem_type == 'link') {
         $where = " AND " . $elem_object->elem_fields['id_field'] . "=" . $pid;
     }
     $priority = sql_getValue("SELECT " . $priority_field . " FROM " . $table . " WHERE " . $id_field . "=" . $id . $where);
     if ($priority <= 1 && $direction < 0) {
         // некуда уменьшать приоритет
     } elseif ($priority >= sql_getValue("SELECT MAX(" . $priority_field . ") FROM " . $table . " WHERE " . $elem_object->elem_fields['id_field'] . "=" . $pid) && $direction > 0) {
         // некуда увеличивать приоритет
     } else {
         // Получаем id элемента для замены
         $trg_id = sql_getValue("SELECT " . $id_field . " FROM " . $table . " WHERE " . $priority_field . "=" . ($priority + $direction) . " AND " . $elem_object->elem_fields['id_field'] . "=" . $pid . " AND " . $id_field . "<>" . $id);
         if (!$trg_id) {
             // Делаем автонумерацию, если ошибка
             $this->EnumPriority($pid, $elem_object->elem_fields['id_field'], $table, $id_field, $priority_field);
             $trg_id = sql_getValue("SELECT " . $id_field . " FROM " . $table . " WHERE " . $priority_field . "=" . $priority . " AND " . $elem_object->elem_fields['id_field'] . "=" . $pid);
             // Если нумерация не помогла, выдаем ошибку.
             if (!$trg_id) {
                 echo json_encode(array('error' => iconv('windows-1251', 'utf-8', "Не определено значение для trg_id")));
                 die;
             }
         }
         // Заменяем priority
         sql_query("UPDATE " . $table . " SET " . $priority_field . "=" . $priority . " WHERE " . $id_field . "=" . $trg_id . $where);
         sql_query("UPDATE " . $table . " SET " . $priority_field . "=" . ($priority + $direction) . " WHERE " . $id_field . "=" . $id . $where);
     }
     $this->EnumPriority($pid, $elem_object->elem_fields['id_field'], $table, $id_field, $priority_field);
     //Вызовем обработчик данных таблицы
     require_once core('table.lib');
     $list_table = new List_Table();
     $table_columns = $list_table->getAllOptionsParams($elem_object->columns);
     foreach ($table_columns as $k => $v) {
         $table_columns[$k]['this'] = $elem_object;
         $table_columns[$k]['this']->page = $page_name;
     }
     $rows = $elem_object->getWCfromDb($pid);
     foreach ($rows as $k => $v) {
         $rows[$k]['tabname'] = $tabname;
         $rows[$k]['onclick'] = $tabname . ".showSelectDiv(" . $v['id'] . ", this);";
     }
     $elem_object->tabname = $tabname;
     $ret = array();
     foreach ($rows as $row) {
         $tableRows = $list_table->getRowsHtml(array('columns' => $table_columns), array($row), -1, array(), $elem_object);
         //Получим верстку строк, таблицы
         $ret[] = array(iconv('windows-1251', 'utf-8', Parse($tableRows + array('id_table_list_name' => 'tbl' . $tabname . $page_name . $pid), 'table_only_rows.tmpl')));
     }
     ob_clean();
     echo json_encode(array('ret' => $ret));
     die;
 }