function delete_item_instance($item_id, $instance_no) { // remove all child related item instance relationships only - not the actual instances themselves. delete_item_instance_relationships($item_r['item_id'], $item_r['instance_no']); if (!is_exists_related_item_instance_relationship($item_r['item_id'], $item_r['instance_no'])) { $query = "DELETE FROM item_instance WHERE item_id = '" . $item_id . "' AND instance_no = '{$instance_no}'"; $delete = db_query($query); if (db_affected_rows() > 0) { opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, db_error(), array($item_id, $instance_no)); return TRUE; } else { opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, db_error(), array($item_id, $instance_no)); return FALSE; } } else { opendb_logger(OPENDB_LOG_ERROR, __FILE__, __FUNCTION__, 'Instance is referenced in at least one item instance relationship', array($item_id, $instance_no)); return FALSE; } }
function handle_item_delete($item_r, $status_type_r, $HTTP_VARS, &$errors, $delete_with_closed_borrow_records = NULL) { if ($item_r['owner_id'] != get_opendb_session_var('user_id') && !is_user_granted_permission(PERM_ITEM_ADMIN)) { $errors = array('error' => get_opendb_lang_var('cannot_delete_item_not_owned'), 'detail' => ''); opendb_logger(OPENDB_LOG_WARN, __FILE__, __FUNCTION__, 'User to delete item instance they do not own', $item_r); return FALSE; } if ($status_type_r['delete_ind'] != 'Y') { $errors = array('error' => get_opendb_lang_var('operation_not_avail_s_status_type', 's_status_type_desc', $status_type_r['description']), 'detail' => ''); opendb_logger(OPENDB_LOG_WARN, __FILE__, __FUNCTION__, 'Attempted to delete item instance with a status that prevents the item being deleted', $item_r); return FALSE; } if (is_exists_item_instance_relationship($item_r['item_id'], $item_r['instance_no'])) { $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => get_opendb_lang_var('item_related_to_other_items')); opendb_logger(OPENDB_LOG_WARN, __FILE__, __FUNCTION__, 'User attempted to to delete item with related items', $item_r); return FALSE; } if (is_item_reserved_or_borrowed($item_r['item_id'], $item_r['instance_no'])) { $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => get_opendb_lang_var('item_reserved_or_borrowed')); opendb_logger(OPENDB_LOG_WARN, __FILE__, __FUNCTION__, 'User attempted to to delete item with active reservation(s)', $item_r); return FALSE; } $inactive_borrowed_items_exist = FALSE; if (is_exists_item_instance_borrowed_item($item_r['item_id'], $item_r['instance_no'])) { if (get_opendb_config_var('item_input', 'allow_delete_with_closed_or_cancelled_borrow_records') !== TRUE) { $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => get_opendb_lang_var('item_has_inactive_borrowed_item')); opendb_logger(OPENDB_LOG_WARN, __FILE__, __FUNCTION__, 'User attempted to to delete item with inactive reservation(s)', $item_r); return FALSE; } else { $inactive_borrowed_items_exist = TRUE; } } if ($HTTP_VARS['confirmed'] == 'true' || $inactive_borrowed_items_exist !== TRUE && get_opendb_config_var('item_input', 'confirm_item_delete') === FALSE) { if ($inactive_borrowed_items_exist) { if (!delete_item_instance_inactive_borrowed_items($item_r['item_id'], $item_r['instance_no'])) { $db_error = db_error(); $errors = array('error' => get_opendb_lang_var('undefined_error'), 'detail' => $db_error); return FALSE; } } if (!is_exists_item_instance_borrowed_item($item_r['item_id'], $item_r['instance_no'])) { delete_related_item_instance_relationship($item_r['item_id'], $item_r['instance_no'], $HTTP_VARS['parent_item_id'], $HTTP_VARS['parent_instance_no']); if (!is_exists_related_item_instance_relationship($item_r['item_id'], $item_r['instance_no'])) { if (!delete_item_instance($item_r['item_id'], $item_r['instance_no'])) { $db_error = db_error(); $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => $db_error); return FALSE; } } else { $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => get_opendb_lang_var('item_related_to_other_items')); opendb_logger(OPENDB_LOG_WARN, __FILE__, __FUNCTION__, 'User attempted to to delete item with attached item instance relationship record(s)', $item_r); return FALSE; } } else { if (is_item_reserved_or_borrowed($item_r['item_id'], $item_r['instance_no'])) { $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => get_opendb_lang_var('item_reserved_or_borrowed')); } else { $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => get_opendb_lang_var('item_has_inactive_borrowed_item')); } return FALSE; } // If child and no more instance left, // proceed with item and item_attribute delete. if (!is_exists_item_instance($item_r['item_id'], NULL)) { // Get rid of all reviews. if (is_item_reviewed($item_r['item_id'])) { delete_reviews($item_r['item_id']); } delete_item_attributes($item_r['item_id'], $item_r['instance_no']); if (!delete_item($item_r['item_id'])) { $db_error = db_error(); $errors = array('error' => get_opendb_lang_var('item_not_deleted'), 'detail' => $db_error); return FALSE; } // As long as delete_item has worked, we do not care about anything else. return TRUE; } } else { if ($HTTP_VARS['confirmed'] != 'false') { if ($inactive_borrowed_items_exist) { return "__CONFIRM_INACTIVE_BORROW__"; } else { return "__CONFIRM__"; } } else { // confirmation required. return "__ABORTED__"; } } }
function perform_update_process(&$item_r, &$status_type_r, &$HTTP_VARS, &$footer_links_r) { global $PHP_SELF; do_op_title($item_r, $status_type_r, $HTTP_VARS['start-op'] == 'newinstance' ? 'newinstance' : 'update'); $errors = NULL; $return_val = FALSE; if ($HTTP_VARS['start-op'] == 'newinstance') { $item_r['instance_no'] = NULL; $return_val = handle_item_instance_insert($item_r, $status_type_r, $HTTP_VARS, $errors); } else { $return_val = handle_item_instance_update($item_r, $status_type_r, $HTTP_VARS, $errors); } if ($return_val === TRUE) { $return_val = handle_item_update($item_r, $HTTP_VARS, $errors); if (get_opendb_config_var('item_input', 'related_item_support') !== FALSE) { if (!empty($HTTP_VARS['parent_item'])) { $parent_item_r = get_item_id_and_instance_no($HTTP_VARS['parent_item']); if (is_exists_item_instance($parent_item_r['item_id'], $parent_item_r['instance_no']) && !is_exists_related_item_instance_relationship($item_r['item_id'], $item_r['instance_no'], $parent_item_r['item_id'], $parent_item_r['instance_no'])) { insert_item_instance_relationship($parent_item_r['item_id'], $parent_item_r['instance_no'], $item_r['item_id'], $item_r['instance_no']); } } } } if ($return_val === "__INVALID_DATA__") { echo format_error_block($errors); $HTTP_VARS['op'] = 'edit'; $formContents = handle_edit_or_refresh($HTTP_VARS['op'], $item_r, $status_type_r, $HTTP_VARS, $errors); if ($formContents !== FALSE) { echo $formContents; } else { echo format_error_block($errors); } } else { if ($return_val === TRUE) { if ($HTTP_VARS['start-op'] == 'newinstance') { echo "<p class=\"success\">" . get_opendb_lang_var('item_instance_added') . "</p>"; } else { echo "<p class=\"success\">" . get_opendb_lang_var('item_updated') . "</p>"; } echo format_error_block($errors, 'warning'); $footer_links_r[] = array(url => "item_display.php?item_id=" . $item_r['item_id'] . "&instance_no=" . $item_r['instance_no'], text => get_opendb_lang_var('back_to_item')); } else { echo format_error_block($errors); } } }