Ejemplo n.º 1
0
 /**
  * Reorder the list of authors
  *
  * @return  void
  */
 public function reorderTask()
 {
     // Incoming
     $id = Request::getInt('id', 0);
     $pid = Request::getInt('pid', 0);
     $move = 'order' . Request::getVar('move', 'down');
     // Ensure we have an ID to work with
     if (!$id) {
         $this->setError(Lang::txt('COM_TOOLS_CONTRIBUTE_NO_CHILD_ID'));
         return $this->displayTask($pid);
     }
     // Ensure we have a parent ID to work with
     if (!$pid) {
         $this->setError(Lang::txt('COM_TOOLS_CONTRIBUTE_NO_ID'));
         return $this->displayTask($pid);
     }
     // Get the element moving down - item 1
     $author1 = new \Components\Resources\Tables\Contributor($this->database);
     $author1->loadAssociation($id, $pid, 'resources');
     // Get the element directly after it in ordering - item 2
     $author2 = clone $author1;
     $author2->getNeighbor($move);
     switch ($move) {
         case 'orderup':
             // Switch places: give item 1 the position of item 2, vice versa
             $orderup = $author2->ordering;
             $orderdn = $author1->ordering;
             $author1->ordering = $orderup;
             $author2->ordering = $orderdn;
             break;
         case 'orderdown':
             // Switch places: give item 1 the position of item 2, vice versa
             $orderup = $author1->ordering;
             $orderdn = $author2->ordering;
             $author1->ordering = $orderdn;
             $author2->ordering = $orderup;
             break;
     }
     // Save changes
     $author1->updateAssociation();
     $author2->updateAssociation();
     // Push through to the attachments view
     $this->displayTask($pid);
 }
Ejemplo n.º 2
0
 /**
  * Save a list of authors
  *
  * @param      array   $authors  List of authors to add
  * @param      string  $version  Tool version
  * @param      integer $rid      Resource ID
  * @param      integer $revision Revision number
  * @param      string  $toolname Tool name
  * @return     boolean False if errors, True if not
  */
 public function saveAuthors($authors, $version = 'dev', $rid = 0, $revision = 0, $toolname = '')
 {
     if (!$rid) {
         return false;
     }
     if ($authors) {
         $authors = Utils::transform($authors, 'uidNumber');
     }
     $dev_authors = $this->getToolAuthors('dev', $rid);
     $dev_authors = Utils::transform($dev_authors, 'uidNumber');
     if ($dev_authors && $version == 'dev') {
         // update
         $to_delete = array_diff($current_authors, $authors);
         if ($to_delete) {
             foreach ($to_delete as $del) {
                 $query = "DELETE FROM #__author_assoc  WHERE authorid=" . $this->_db->quote($del) . " AND subid=" . $this->_db->quote($rid) . " AND subtable='resources'";
                 $this->_db->setQuery($query);
                 $this->_db->query();
             }
         }
     }
     // add new authors
     if ($version == 'dev') {
         // development version is updated
         $to_delete = array_diff($dev_authors, $authors);
         $rc = new \Components\Resources\Tables\Contributor($this->_db);
         $rc->subtable = 'resources';
         $rc->subid = $rid;
         if ($to_delete) {
             foreach ($to_delete as $del) {
                 $query = "DELETE FROM #__author_assoc  WHERE authorid=" . $this->_db->quote($del) . " AND subid=" . $this->_db->quote($rid) . " AND subtable='resources'";
                 $this->_db->setQuery($query);
                 $this->_db->query();
             }
         }
         // Get the last child in the ordering
         $order = $rc->getLastOrder($rid, 'resources');
         $order = $order + 1;
         // new items are always last
         foreach ($authors as $authid) {
             // Check if they're already linked to this resource
             $rc->loadAssociation($authid, $rid, 'resources');
             if (!$rc->authorid) {
                 $xprofile = User::getInstance($authid);
                 // New record
                 $rc->authorid = $authid;
                 $rc->ordering = $order;
                 $rc->name = addslashes($xprofile->get('name'));
                 $rc->organization = addslashes($xprofile->get('organization'));
                 $rc->createAssociation();
                 $order++;
             }
         }
     } else {
         if ($dev_authors) {
             // new version is being published, transfer data from author_assoc
             $i = 0;
             foreach ($dev_authors as $authid) {
                 $name = '';
                 $organization = '';
                 // Check the author_assoc table first, as that's what gets updated when you edit the tool info
                 $query = "SELECT name, organization FROM `#__author_assoc` ";
                 $query .= "WHERE subid= " . $this->_db->quote($rid);
                 $query .= " AND authorid=" . $this->_db->quote($authid);
                 $query .= " AND subtable='resources'";
                 $this->_db->setQuery($query);
                 $author = $this->_db->loadObject();
                 if ($author) {
                     $name = $author->name;
                     $organization = $author->organization;
                 }
                 if (!$name || !$organization) {
                     // Do we have name/org info in previous version?
                     $query = "SELECT name, organization FROM #__tool_authors ";
                     $query .= "WHERE toolname=" . $this->_db->quote($toolname) . " AND uid=" . $this->_db->quote($authid) . " AND revision < " . $this->_db->quote($revision);
                     $query .= " AND name IS NOT NULL AND organization IS NOT NULL ";
                     $query .= " ORDER BY revision DESC LIMIT 1";
                     $this->_db->setQuery($query);
                     $info = $this->_db->loadObjectList();
                     if ($info) {
                         $name = $name ?: $info[0]->name;
                         $organization = $organization ?: $info[0]->organization;
                     }
                     // If we still don't have it, try to grab it from the profile
                     if (!$name || !$organization) {
                         $xprofile = User::getInstance($authid);
                         $name = $name ?: $xprofile->get('name');
                         $organization = $organization ?: $xprofile->get('organization');
                     }
                 }
                 $query = "INSERT INTO {$this->_tbl} (toolname, revision, uid, ordering, version_id, name, organization) VALUES ('" . $toolname . "','" . $revision . "','" . $authid . "','" . $i . "', '" . $version . "', '" . addslashes($name) . "', '" . addslashes($organization) . "')";
                 $this->_db->setQuery($query);
                 if (!$this->_db->query()) {
                     return false;
                 }
                 $i++;
             }
         }
     }
     return true;
 }