public function doExecute() { $arrDefaultReturn = array("base" => "collections", "action" => "edit_form", "subject" => $this->request->getProperty("subject"), "subcategory" => $this->request->getProperty("subcategory"), "username" => $this->request->getProperty("username")); $strSubject = $this->request->getProperty("subject"); $strUsername = $this->request->getProperty("username"); $strSubcategoryID = $this->request->getProperty("subcategory"); // Make sure they are logged in as the user they are trying to save as. $this->ensureSpecifiedUser(); $objData = new Xerxes_DataMap(); $category = $objData->getSubject($strSubject, null, Xerxes_DataMap::userCreatedMode, $strUsername); $subcategory = $this->getSubcategory($category, $strSubcategoryID); // Find any new assigned numbers, and reorder. $orderedDatabases = $subcategory->databases; // We need to through the assignments in sorted order by sequence choice, for this to work right. $sortedProperties = $this->request->getAllProperties(); asort($sortedProperties); foreach ($sortedProperties as $name => $new_sequence) { $matches = array(); if (!empty($new_sequence) && preg_match('/^db_seq_(.+)$/', $name, $matches)) { $dbID = $matches[1]; $old_index = null; $database = null; for ($i = 0; $i < count($orderedDatabases); $i++) { $candidate = $orderedDatabases[$i]; if ($candidate->metalib_id == $dbID) { $old_index = $i; $database = $candidate; } } // if we found it. if ($database) { // remove it from the array, then add it back in array_splice($orderedDatabases, $old_index, 1); array_splice($orderedDatabases, $new_sequence - 1, 0, array($database)); } } } // Okay, we've re-ordered $orderedSubcats, now update the sequence #s for ($i = 0; $i < count($orderedDatabases); $i++) { $db = $orderedDatabases[$i]; $objData->updateUserDatabaseOrder($db, $subcategory, $i + 1); } $this->returnWithMessage($this->getLabel("text_collections_database_order_changed"), $arrDefaultReturn); return 1; }