public function testCreateDeleteSet() { $o_db = new Db(); $qr_objects = $o_db->query('select object_id from ca_objects where deleted=0'); $va_object_ids = $qr_objects->getAllFieldValues('object_id'); //$t = new Timer(); $this->opt_set->addItems($va_object_ids); //var_dump($t->getTime()); $this->assertSame(sizeof($va_object_ids), $this->opt_set->getItemCount()); $this->opt_set->setMode(ACCESS_WRITE); //$t = new Timer(); $this->opt_set->delete(true); //var_dump($t->getTime()); }
/** * Add items to specified set */ public function createSetFromResult() { global $g_ui_locale_id; $vs_mode = $this->request->getParameter('mode', pString); if ($vs_mode == 'from_checked') { $va_row_ids = explode(";", $this->request->getParameter('item_ids', pString)); } else { $va_row_ids = $this->opo_result_context->getResultList(); } $vs_set_code = null; $vn_added_items_count = 0; if (is_array($va_row_ids) && sizeof($va_row_ids)) { $t_model = $this->opo_datamodel->getInstanceByTableName($this->ops_tablename, true); $vs_set_name = $this->request->getParameter('set_name', pString); if (!$vs_set_name) { $vs_set_name = $this->opo_result_context->getSearchExpression(); } $t_set = new ca_sets(); $t_set->setMode(ACCESS_WRITE); $t_set->set('user_id', $this->request->getUserID()); $t_set->set('type_id', $this->request->config->get('ca_sets_default_type')); $t_set->set('table_num', $t_model->tableNum()); $t_set->set('set_code', $vs_set_code = mb_substr(preg_replace("![^A-Za-z0-9_\\-]+!", "_", $vs_set_name), 0, 100)); $t_set->insert(); if ($t_set->numErrors()) { $this->view->setVar('error', join("; ", $t_set->getErrors())); } $t_set->addLabel(array('name' => $vs_set_name), $g_ui_locale_id, null, true); $vn_added_items_count = $t_set->addItems($va_row_ids); $this->view->setVar('set_id', $t_set->getPrimaryKey()); $this->view->setVar('t_set', $t_set); } $this->view->setVar('set_name', $vs_set_name); $this->view->setVar('set_code', $vs_set_code); $this->view->setVar('num_items_added', $vn_added_items_count); $this->render('Results/ajax_create_set_from_result_json.php'); }
/** * @link http://clangers.collectiveaccess.org/jira/browse/PROV-434 */ public function testAddAndGetSetItem() { $t_set = new ca_sets($this->opn_set_id); $t_set->setMode(ACCESS_WRITE); // "quick" add object (this method uses direct INSERT queries) $t_set->addItems(array($this->opn_object_id)); $va_set_items = $t_set->getItems(); // get rid of unneeded nesting in array. we should only have one label in one locale. $this->assertEquals(1, sizeof($va_set_items), 'Set should only have one item in one locale'); $va_set_items = array_shift($va_set_items); $this->assertEquals(1, sizeof($va_set_items), 'Set should only have one item in one locale'); $va_set_items = array_shift($va_set_items); // basic checks $this->assertArrayHasKey('caption', $va_set_items, 'Set item must have empty/blank label'); $this->assertEquals('[BLANK]', $va_set_items['caption'], 'Set item must have empty/blank label'); $this->assertArrayHasKey('row_id', $va_set_items, 'Set item must be related to object'); $this->assertEquals($this->opn_object_id, $va_set_items['row_id'], 'Set item must be related to object'); // // this is (hopefully was?) the actual PROV-434 bug // @see http://clangers.collectiveaccess.org/jira/browse/PROV-434 // $va_items = $t_set->get('ca_set_items', array('returnWithStructure' => true)); $this->assertEquals(1, sizeof($va_items)); $va_item = array_shift($va_items); $this->assertArrayHasKey('caption', $va_item, 'Set item must have empty/blank label'); $this->assertEquals('[BLANK]', $va_item['caption'], 'Set item must have empty/blank label'); $this->assertArrayHasKey('record_id', $va_item, 'Set item must be related to object'); $this->assertEquals($this->opn_object_id, $va_item['record_id'], 'Set item must be related to object'); // try text (no return as array) $vs_ret = $t_set->get('ca_set_items.item_id'); // what comes out is a string with the primary key $this->assertRegExp("/^[0-9]+\$/", $vs_ret); $vs_ret = $t_set->get('ca_set_items.preferred_labels'); $this->assertEquals("[BLANK]", $vs_ret); $vs_ret = $t_set->get('ca_set_items.row_id'); $this->assertEquals((string) $this->opn_object_id, $vs_ret); // remove item $t_set->removeItem($this->opn_object_id); $this->assertEmpty($t_set->getItems()); // re-add object using model method (as opposed to direct insert addItems() above) $t_set->addItem($this->opn_object_id); // basic checks (again) $va_set_items = $t_set->getItems(); // get rid of unneeded nesting in array. we should only have one label in one locale. $this->assertEquals(1, sizeof($va_set_items), 'Set should only have one item in one locale'); $va_set_items = array_shift($va_set_items); $this->assertEquals(1, sizeof($va_set_items), 'Set should only have one item in one locale'); $va_set_items = array_shift($va_set_items); $this->assertArrayHasKey('caption', $va_set_items, 'Set item must have empty/blank label'); $this->assertEquals('[BLANK]', $va_set_items['caption'], 'Set item must have empty/blank label'); $this->assertArrayHasKey('row_id', $va_set_items, 'Set item must be related to object'); $this->assertEquals($this->opn_object_id, $va_set_items['row_id'], 'Set item must be related to object'); // // this is (hopefully was?) the actual PROV-434 bug // @see http://clangers.collectiveaccess.org/jira/browse/PROV-434 // $va_items = $t_set->get('ca_set_items', array('returnWithStructure' => true)); $this->assertEquals(1, sizeof($va_items)); $va_item = array_shift($va_items); $this->assertArrayHasKey('caption', $va_item, 'Set item must have empty/blank label'); $this->assertEquals('[BLANK]', $va_item['caption'], 'Set item must have empty/blank label'); $this->assertArrayHasKey('record_id', $va_item, 'Set item must be related to object'); $this->assertEquals($this->opn_object_id, $va_item['record_id'], 'Set item must be related to object'); }
/** * Duplicate all items in this set * @param int $pn_user_id * @param array $pa_options * @return ca_sets|bool */ public function duplicateItemsInSet($pn_user_id, $pa_options = array()) { if (!$this->getPrimaryKey()) { return false; } if ($this->getItemCount() < 1) { return false; } $t_user = new ca_users($pn_user_id); if (!$t_user->getPrimaryKey()) { return false; } // we need a user for duplication global $g_ui_locale_id; if (caGetOption('addToCurrentSet', $pa_options, false)) { $t_set_to_add_dupes_to = $this; } else { // create new set for dupes $t_set_to_add_dupes_to = new ca_sets(); $t_set_to_add_dupes_to->set('type_id', $this->get('type_id')); $t_set_to_add_dupes_to->set('table_num', $this->get('table_num')); $t_set_to_add_dupes_to->set('user_id', $this->get('user_id')); $t_set_to_add_dupes_to->set('set_code', $this->get('set_code') . '-' . _t('dupes')); $t_set_to_add_dupes_to->setMode(ACCESS_WRITE); $t_set_to_add_dupes_to->insert(); if (!$t_set_to_add_dupes_to->getPrimaryKey()) { $this->errors = $t_set_to_add_dupes_to->errors; return false; } $t_set_to_add_dupes_to->addLabel(array('name' => $this->getLabelForDisplay() . ' ' . _t('[Duplicates]')), $g_ui_locale_id, null, true); } $va_items = array_keys($this->getItemRowIDs()); $va_dupes = array(); foreach ($va_items as $vn_row_id) { /** @var BundlableLabelableBaseModelWithAttributes $t_instance */ $t_instance = $this->getAppDatamodel()->getInstance($this->get('table_num')); if (!$t_user->canDoAction('can_duplicate_' . $t_instance->tableName())) { $this->postError(2580, _t('You do not have permission to duplicate these items'), 'ca_sets->duplicateItemsInSet()'); return false; } if (!$t_instance->load($vn_row_id)) { continue; } // let's dupe $t_dupe = $t_instance->duplicate(array('user_id' => $pn_user_id, 'duplicate_nonpreferred_labels' => $t_user->getPreference($t_instance->tableName() . '_duplicate_nonpreferred_labels'), 'duplicate_attributes' => $t_user->getPreference($t_instance->tableName() . '_duplicate_attributes'), 'duplicate_relationships' => $t_user->getPreference($t_instance->tableName() . '_duplicate_relationships'), 'duplicate_media' => $t_user->getPreference($t_instance->tableName() . '_duplicate_media'), 'duplicate_subitems' => $t_user->getPreference($t_instance->tableName() . '_duplicate_subitems'))); if ($t_dupe instanceof BaseModel) { $va_dupes[] = $t_dupe->getPrimaryKey(); } } $t_set_to_add_dupes_to->addItems($va_dupes); return $t_set_to_add_dupes_to; }
public function AjaxAddItem() { if (!$this->request->isLoggedIn()) { $this->response->setRedirect(caNavUrl($this->request, '', 'LoginReg', 'loginForm')); return; } global $g_ui_locale_id; // current locale_id for user $va_errors = array(); $o_purifier = new HTMLPurifier(); # --- set_id is passed through form, otherwise we're saving a new set, and adding the item to it if ($this->request->getParameter('set_id', pInteger)) { $t_set = $this->_getSet(__CA_EDIT_READ_ACCESS__); if (!$t_set && ($t_set = $this->_getSet(__CA_SET_READ_ACCESS__))) { $va_errors["general"] = _t("You can not add items to this %1. You have read only access.", $this->ops_lightbox_display_name); $this->view->setVar('errors', $va_errors); $this->addItemForm(); return; } } else { $t_set = new ca_sets(); $t_set->purify(true); # --- set name - if not sent, make a decent default $ps_name = $o_purifier->purify($this->request->getParameter('name', pString)); if (!$ps_name) { $ps_name = _t("Your %1", $this->ops_lightbox_display_name); } # --- set description - optional $ps_description = $o_purifier->purify($this->request->getParameter('description', pString)); $t_list = new ca_lists(); $vn_set_type_user = $t_list->getItemIDFromList('set_types', $this->request->config->get('user_set_type')); $t_object = new ca_objects(); $t_object->purify(true); $vn_object_table_num = $t_object->tableNum(); $t_set->setMode(ACCESS_WRITE); $t_set->set('access', 1); #$t_set->set('access', $this->request->getParameter('access', pInteger)); $t_set->set('table_num', $vn_object_table_num); $t_set->set('type_id', $vn_set_type_user); $t_set->set('user_id', $this->request->getUserID()); $t_set->set('set_code', $this->request->getUserID() . '_' . time()); # --- create new attribute if ($ps_description) { $t_set->addAttribute(array('description' => $ps_description, 'locale_id' => $g_ui_locale_id), 'description'); } $t_set->insert(); if ($t_set->numErrors()) { $va_errors["general"] = join("; ", $t_set->getErrors()); $this->view->setVar('errors', $va_errors); $this->addItemForm(); return; } else { # --- save name - add new label $t_set->addLabel(array('name' => $ps_name), $g_ui_locale_id, null, true); # --- select the current set $this->request->user->setVar('current_set_id', $t_set->get("set_id")); } } if ($t_set) { $pn_item_id = null; $pn_object_id = $this->request->getParameter('object_id', pInteger); if ($pn_object_id) { if (!$t_set->isInSet("ca_objects", $pn_object_id, $t_set->get("set_id"))) { if ($pn_item_id = $t_set->addItem($pn_object_id, array(), $this->request->getUserID())) { // // Select primary representation // $t_object = new ca_objects($pn_object_id); $vn_rep_id = $t_object->getPrimaryRepresentationID(); // get representation_id for primary $t_item = new ca_set_items($pn_item_id); $t_item->addSelectedRepresentation($vn_rep_id); // flag as selected in item vars $t_item->update(); $va_errors = array(); $this->view->setVar('message', _t("Successfully added item.")); $this->render("Form/reload_html.php"); } else { $va_errors["message"] = _t('Could not add item to %1', $this->ops_lightbox_display_name); $this->render("Form/reload_html.php"); } } else { $this->view->setVar('message', _t("Item already in %1.", $this->ops_lightbox_display_name)); $this->render("Form/reload_html.php"); } } else { if (($pb_saveLastResults = $this->request->getParameter('saveLastResults', pString)) || ($ps_object_ids = $this->request->getParameter('object_ids', pString))) { if ($pb_saveLastResults) { # --- get object ids from last result $o_context = ResultContext::getResultContextForLastFind($this->request, "ca_objects"); $va_object_ids = $o_context->getResultList(); } else { $va_object_ids = explode(";", $ps_object_ids); } if (is_array($va_object_ids) && sizeof($va_object_ids)) { # --- check for those already in set $va_object_ids_in_set = $t_set->areInSet("ca_objects", $va_object_ids, $t_set->get("set_id")); $va_object_ids = array_diff($va_object_ids, $va_object_ids_in_set); # --- insert items $t_set->addItems($va_object_ids); $this->view->setVar('message', _t("Successfully added results to %1.", $this->ops_lightbox_display_name)); $this->render("Form/reload_html.php"); } else { $this->view->setVar('message', _t("No objects in search result to add to %1", $this->ops_lightbox_display_name)); $this->render("Form/reload_html.php"); } } else { $this->view->setVar('message', _t("Object ID is not defined")); $this->render("Form/reload_html.php"); } } } }