public function meta()
 {
     return DatabaseObjectLinkMeta::forClass(get_class($this), $this->_db);
 }
Example #2
0
 public static function reorder($links)
 {
     if (!is_array($links)) {
         throw new InvalidArgumentException('invalid link list');
     }
     $page = null;
     $area = null;
     foreach ($links as $link) {
         if (!is_object($link) || !$link instanceof self) {
             throw new InvalidArgumentException('list item not a CMSPageNodeLink');
         }
         if (isset($page)) {
             if ($link->from != $page || $link->area != $area) {
                 throw new InvalidArgumentException('heterogenous list');
             }
         } else {
             $page = $link->from;
             $area = $link->area;
         }
     }
     $meta = DatabaseObjectLinkMeta::forClass(__CLASS__);
     $database = $meta->getDatabase();
     $sql = $meta->getSQL('pagecount');
     $sth = $database->execute($sql, $page->id, $area);
     $c = $sth->fetch(PDO::FETCH_NUM);
     $c = $c[0];
     if ($c != count($links)) {
         throw new InvalidArgumentException('will not partially reorder');
     }
     $upd = $database->prepare($meta->getSQL('fixupd'));
     $this->lockTables();
     $database->transaction();
     try {
         $w = 0;
         $nodeid = null;
         $upd->bindParam($meta->getFromKey(), $page->id);
         $upd->bindParam($meta->getToKey(), $nodeid);
         $upd->bindParam('area', $area);
         $upd->bindParam('weight', $w);
         foreach ($links as $link) {
             $nodeid = $link->to->id;
             $link->weight = $w;
             $upd->execute();
             $w++;
         }
     } catch (Exception $e) {
         $database->rollback();
         $database->unlock();
         throw $e;
     }
     $database->commit();
     $database->unlock();
 }