private static function updateSortNames(Context $ctx)
 {
     $ctx->db->beginTransaction();
     $sel = $ctx->db->prepare("SELECT id, name FROM `node` WHERE `name_lc` IS NULL");
     $upd = $ctx->db->prepare("UPDATE `node` SET `name_lc` = ? WHERE `id` = ?");
     for ($sel->execute(); $row = $sel->fetch(PDO::FETCH_ASSOC);) {
         $upd->execute(array(Query::getSortName($row['name']), $row['id']));
     }
     $ctx->db->commit();
 }
Example #2
0
 /**
  * Упаковывает ноду для сохранения в БД.
  */
 private function pack()
 {
     $fields = $extra = array();
     foreach ($this->data as $k => $v) {
         // Числовые ключи игнорируем.
         if (is_numeric($k)) {
             continue;
         }
         if (!empty($v)) {
             if ($v instanceof Node) {
                 Logger::log("pack[{$this->id}] » {$v->id}({$v->name})", 'update');
                 if (null === $v->id) {
                     $v->save();
                 }
                 // Запрещаем ссылки на себя.
                 if ($this->id == $v->id) {
                     continue;
                 }
                 $this->onSave("DELETE FROM `node__rel` WHERE `tid` = %ID% AND `key` = ?", array($k));
                 $this->onSave("REPLACE INTO `node__rel` (`tid`, `nid`, `key`) VALUES (%ID%, ?, ?)", array($v->id, $k));
             } elseif (self::isBasicField($k)) {
                 $fields[$k] = $v;
             } elseif ('xml' == $k) {
             } else {
                 $extra[$k] = $v;
             }
         } elseif ('published' == $k or 'deleted' == $k) {
             $fields[$k] = 0;
         }
     }
     $fields['data'] = serialize($extra);
     $fields['name_lc'] = Query::getSortName($this->name);
     return $fields;
 }