/** * Removes an item from the current learnpath * @param integer Elem ID (0 if first) * @param integer Whether to remove the resource/data from the system or leave it (default: 'keep', others 'remove') * @return integer Number of elements moved * @todo implement resource removal */ function delete_item($id, $remove = 'keep') { if ($this->debug > 0) { error_log('New LP - In learnpath::delete_item()', 0); } //TODO - implement the resource removal if (empty($id) || $id != strval(intval($id))) { return false; } //first select item to get previous, next, and display order $lp_item = Database::get_course_table(TABLE_LP_ITEM); $sql_sel = "SELECT * FROM {$lp_item} WHERE id = {$id}"; $res_sel = Database::query($sql_sel, __FILE__, __LINE__); if (Database::num_rows($res_sel) < 1) { return false; } $row = Database::fetch_array($res_sel); $previous = $row['previous_item_id']; $next = $row['next_item_id']; $display = $row['display_order']; $parent = $row['parent_item_id']; $lp = $row['lp_id']; //delete children items $num = $this->delete_children_items($id); if ($this->debug > 2) { error_log('New LP - learnpath::delete_item() - deleted ' . $num . ' children of element ' . $id, 0); } //now delete the item $sql_del = "DELETE FROM {$lp_item} WHERE id = {$id}"; if ($this->debug > 2) { error_log('New LP - Deleting item: ' . $sql_del, 0); } $res_del = Database::query($sql_del, __FILE__, __LINE__); //now update surrounding items $sql_upd = "UPDATE {$lp_item} SET next_item_id = {$next} WHERE id = {$previous}"; $res_upd = Database::query($sql_upd, __FILE__, __LINE__); $sql_upd = "UPDATE {$lp_item} SET previous_item_id = {$previous} WHERE id = {$next}"; $res_upd = Database::query($sql_upd, __FILE__, __LINE__); //now update all following items with new display order $sql_all = "UPDATE {$lp_item} SET display_order = display_order-1 WHERE lp_id = {$lp} AND parent_item_id = {$parent} AND display_order > {$display}"; $res_all = Database::query($sql_all, __FILE__, __LINE__); // remove from search engine if enabled if (api_get_setting('search_enabled') == 'true' && extension_loaded('xapian')) { $tbl_se_ref = Database::get_main_table(TABLE_MAIN_SEARCH_ENGINE_REF); $sql = 'SELECT * FROM %s WHERE course_code=\'%s\' AND tool_id=\'%s\' AND ref_id_high_level=%s AND ref_id_second_level=%d LIMIT 1'; $sql = sprintf($sql, $tbl_se_ref, $this->cc, TOOL_LEARNPATH, $lp, $id); $res = Database::query($sql, __FILE__, __LINE__); if (Database::num_rows($res) > 0) { $row2 = Database::fetch_array($res); require_once api_get_path(LIBRARY_PATH) . 'search/DokeosIndexer.class.php'; $di = new DokeosIndexer(); $di->remove_document((int) $row2['search_did']); } $sql = 'DELETE FROM %s WHERE course_code=\'%s\' AND tool_id=\'%s\' AND ref_id_high_level=%s AND ref_id_second_level=%d LIMIT 1'; $sql = sprintf($sql, $tbl_se_ref, $this->cc, TOOL_LEARNPATH, $lp, $id); Database::query($sql, __FILE__, __LINE__); } }
/** * Deletes all traces of this item in the database * @return boolean true. Doesn't check for errors yet. */ function delete() { if ($this->debug > 0) { error_log('New LP - In learnpath_item::delete() for item ' . $this->db_id, 0); } $lp_item_view = Database::get_course_table(TABLE_LP_ITEM_VIEW); $lp_item = Database::get_course_table(TABLE_LP_ITEM); $sql_del_view = "DELETE FROM {$lp_item_view} WHERE item_id = " . $this->db_id; //error_log('New LP - Deleting from lp_item_view: '.$sql_del_view,0); $res_del_view = Database::query($sql_del_view); $sql_sel = "SELECT * FROM {$lp_item} WHERE id = " . $this->db_id; $res_sel = Database::query($sql_sel, __FILE__, __LINE__); if (Database::num_rows($res_sel) < 1) { return false; } $row = Database::fetch_array($res_sel); $sql_del_item = "DELETE FROM {$lp_item} WHERE id = " . $this->db_id; //error_log('New LP - Deleting from lp_item: '.$sql_del_view,0); $res_del_item = Database::query($sql_del_item); if (api_get_setting('search_enabled') == 'true' && extension_loaded('xapian')) { if (!is_null($this->search_did)) { require_once api_get_path(LIBRARY_PATH) . 'search/DokeosIndexer.class.php'; $di = new DokeosIndexer(); $di->remove_document($this->search_did); } } return true; }