'forum_id', 'left_id' => 'left_id', 'right_id' => 'right_id', 'parent_id' => 'parent_id', 'item_parents' => 'forum_parents', ); /** * Additional SQL restrictions * Allows to have multiple nestedsets in one table * Columns must be prefixed with %1$s * @var String */ protected $sql_where = ''; /** * List of item properties to be cached in $item_parents * @var array */ protected $item_basic_data = array('forum_id', 'forum_name', 'forum_type'); /** * Construct * * @param phpbb_db_driver $db Database connection * @param phpbb_lock_db $lock Lock class used to lock the table when moving forums around * @param string $table_name Table name */ public function __construct(phpbb_db_driver $db, phpbb_lock_db $lock, $table_name) { $this->db = $db; $this->lock = $lock; $this->table_name = $table_name; } /** * @inheritdoc */ public function move_children(phpbb_nestedset_item_interface $current_parent, phpbb_nestedset_item_interface $new_parent) { while (!$this->lock->acquire()) { // Retry after 0.2 seconds usleep(200 * 1000); } try { $return = parent::move_children($current_parent, $new_parent); } catch (phpbb_nestedset_exception $e) { $this->lock->release(); throw new phpbb_nestedset_exception('FORUM_NESTEDSET_' . $e->getMessage()); } $this->lock->release(); return $return; } /** * @inheritdoc */ public function set_parent(phpbb_nestedset_item_interface $item, phpbb_nestedset_item_interface $new_parent) { while (!$this->lock->acquire()) { // Retry after 0.2 seconds usleep(200 * 1000); } try { $return = parent::set_parent($item, $new_parent); } catch (phpbb_nestedset_exception $e) { $this->lock->release(); throw new phpbb_nestedset_exception('FORUM_NESTEDSET_' . $e->getMessage()); } $this->lock->release(); return $return; } }