/** * Sets order of bookmarks in the currently loaded folder to the order of bookmark_ids as set in $pa_bookmark_ids * * @param array $pa_bookmark_ids A list of bookmark_ids in the folder, in the order in which they should be displayed in the ui * @param int $pn_folder_id Optional folder_id to set * @param int $pn_user_id Optional user_id to enforce for folder selection * @param array $pa_options An optional array of options. Supported options include: * * @return array An array of errors. If the array is empty then no errors occurred */ public function reorderBookmarks($pa_bookmark_ids, $pn_folder_id = null, $pn_user_id = null, $pa_options = null) { if (!($vn_folder_id = $this->_getFolderID($pn_folder_id, $pn_user_id))) { return false; } $va_bookmark_ranks = $this->getBookmarkIDRanks($pn_folder_id, $pn_user_id, $pa_options); // get current ranks $vn_i = 0; $vb_web_set_transaction = false; if (!$this->inTransaction()) { $o_trans = new Transaction($this->getDb()); $vb_web_set_transaction = true; } else { $o_trans = $this->getTransaction(); } $t_bookmark = new ca_bookmarks(); $t_bookmark->setTransaction($o_trans); $t_bookmark->setMode(ACCESS_WRITE); $va_errors = array(); // delete rows not present in $pa_stop_ids $va_to_delete = array(); foreach ($va_bookmark_ranks as $vn_bookmark_id => $va_rank) { if (!in_array($vn_bookmark_id, $pa_bookmark_ids)) { if ($t_bookmark->load(array('folder_id' => $vn_folder_id, 'bookmark' => $vn_bookmark_id))) { $t_bookmark->delete(true); } } } // rewrite ranks foreach ($pa_bookmark_ids as $vn_rank => $vn_bookmark_id) { if (isset($va_bookmark_ranks[$vn_bookmark_id]) && $t_bookmark->load(array('folder_id' => $vn_folder_id, 'bookmark_id' => $vn_bookmark_id))) { if ($va_bookmark_ranks[$vn_bookmark_id] != $vn_rank) { $t_bookmark->set('rank', $vn_rank); $t_bookmark->update(); if ($t_bookmark->numErrors()) { $va_errors[$vn_bookmark_id] = _t('Could not reorder bookmark %1: %2', $vn_bookmark_id, join('; ', $t_bookmark->getErrors())); } } } } if (sizeof($va_errors)) { if ($vb_web_set_transaction) { $o_trans->rollback(); } } else { if ($vb_web_set_transaction) { $o_trans->commit(); } } return $va_errors; }
/** * */ public function addBookmark($pn_table_name_or_num, $pn_row_id, $ps_notes = null, $pn_rank = null, $pn_folder_id = null, $pn_user_id = null) { if (!($vn_folder_id = $this->_getFolderID($pn_folder_id, $pn_user_id))) { return false; } if (!$pn_rank) { $pn_rank = 0; } if ($pn_table_name_or_num && !($vn_table_num = $this->_getTableNum($pn_table_name_or_num))) { return null; } $t_bookmark = new ca_bookmarks(); # --- check if this item already exists in this folder $t_bookmark->load(array("folder_id" => $vn_folder_id, "table_num" => $vn_table_num, "row_id" => $pn_row_id)); if ($t_bookmark->getPrimaryKey()) { return $t_bookmark->getPrimaryKey(); } $t_bookmark->setMode(ACCESS_WRITE); $t_bookmark->set('folder_id', $vn_folder_id); $t_bookmark->set('table_num', $vn_table_num); $t_bookmark->set('row_id', $pn_row_id); $t_bookmark->set('notes', $ps_notes); $t_bookmark->set('rank', $pn_rank); $t_bookmark->insert(); if ($t_bookmark->numErrors()) { $this->errors = $t_bookmark->errors; return false; } return $t_bookmark->getPrimaryKey(); }