/** * Save one or more authors * * @param integer $show Display author list when done? * @param integer $id Resource ID * @param array $authorsNew Authors to add * @return void */ public function saveTask($show = 1, $id = 0, $authorsNew = array()) { // Incoming resource ID if (!$id) { $id = Request::getInt('pid', 0); } if (!$id) { $this->setError(Lang::txt('CONTRIBUTE_NO_ID')); if ($show) { $this->displayTask($id); } return; } // Incoming authors $authid = Request::getInt('authid', 0, 'post'); $authorsNewstr = trim(Request::getVar('new_authors', '', 'post')); $role = Request::getVar('role', '', 'post'); // Turn the string into an array of usernames $authorsNew = empty($authorsNew) ? explode(',', $authorsNewstr) : $authorsNew; // Instantiate a resource/contributor association object $rc = new Contributor($this->database); $rc->subtable = 'resources'; $rc->subid = $id; // Get the last child in the ordering $order = $rc->getLastOrder($id, 'resources'); $order = $order + 1; // new items are always last if (!$authid && isset($_POST['author'])) { $this->database->setQuery('SELECT id FROM `#__users` WHERE username = '******'author'])); $authid = $this->database->loadResult(); } // Was there an ID? (this will come from the author <select>) if ($authid) { // Check if they're already linked to this resource $rc->loadAssociation($authid, $id, 'resources'); if ($rc->authorid) { $this->setError(Lang::txt('COM_CONTRIBUTE_USER_IS_ALREADY_AUTHOR', $rc->name)); } else { // Perform a check to see if they have a contributors page. If not, we'll need to make one $xprofile = new Profile(); $xprofile->load($authid); if ($xprofile) { $this->_authorCheck($authid); // New record $rc->authorid = $authid; $rc->ordering = $order; $rc->name = addslashes($xprofile->get('name')); $rc->role = addslashes($role); $rc->organization = addslashes($xprofile->get('organization')); $rc->createAssociation(); $order++; } } } $xprofile = null; // Do we have new authors? if (!empty($authorsNew)) { jimport('joomla.user.helper'); // loop through each one for ($i = 0, $n = count($authorsNew); $i < $n; $i++) { $cid = trim($authorsNew[$i]); if (is_numeric($cid)) { $uid = intval($cid); } else { // Find the user's account info $uid = \JUserHelper::getUserId(strtolower($cid)); if (!$uid) { $cid = addslashes(trim($cid)); // No account // This should mean we have an author that is not a site member $rcc = new Contributor($this->database); // Check to see if they're already an author $rcc->loadAssociation($cid, $id, 'resources'); if ($rcc->authorid) { $this->setError(Lang::txt('COM_CONTRIBUTE_USER_IS_ALREADY_AUTHOR', $cid)); continue; } // No name. Can't save record, so pass over it. if (!trim($cid)) { continue; } $rcc->subtable = 'resources'; $rcc->subid = $id; $rcc->authorid = $rcc->getUserId($cid); $rcc->ordering = $order; $rcc->name = $cid; $rcc->role = addslashes($role); $rcc->createAssociation(); //$this->setError(Lang::txt('COM_CONTRIBUTE_UNABLE_TO_FIND_USER_ACCOUNT', $cid)); $order++; continue; } } // We should only get to this part if the author is also a site member $user = User::getInstance($uid); if (!is_object($user)) { $this->setError(Lang::txt('COM_CONTRIBUTE_UNABLE_TO_FIND_USER_ACCOUNT', $cid)); continue; } $uid = $user->get('id'); if (!$uid) { $this->setError(Lang::txt('COM_CONTRIBUTE_UNABLE_TO_FIND_USER_ACCOUNT', $cid)); continue; } // Check if they're already linked to this resource $rcc = new Contributor($this->database); $rcc->loadAssociation($uid, $id, 'resources'); if ($rcc->authorid) { $this->setError(Lang::txt('COM_CONTRIBUTE_USER_IS_ALREADY_AUTHOR', $rcc->name)); continue; } $this->_authorCheck($uid); $xprofile = Profile::getInstance(User::get('id')); $rcc->subtable = 'resources'; $rcc->subid = $id; $rcc->authorid = $uid; $rcc->ordering = $order; $rcc->name = $xprofile->get('name'); $rcc->role = $role; $rcc->organization = $xprofile->get('organization'); if (!$rcc->createAssociation()) { $this->setError($rcc->getError()); } $order++; } } if ($show) { // Push through to the authors view $this->displayTask($id); } }
/** * Edit an entry * * @return void */ public function editTask($row = null) { Request::setVar('hidemainmenu', 1); if (!is_object($row)) { // Incoming ID $id = Request::getVar('id', array(0)); $id = is_array($id) ? $id[0] : $id; // Initiate database class and load info $row = Quote::oneOrNew($id); } if (!$row->get('id')) { if ($username = Request::getVar('username', '')) { $profile = new Profile(); $profile->load($username); $row->set('fullname', $profile->get('name')); $row->set('org', $profile->get('organization')); $row->set('user_id', $profile->get('uidNumber')); } } $this->view->row = $row; // Set any errors foreach ($this->getErrors() as $error) { $this->view->setError($error); } // Output the HTML $this->view->setLayout('edit')->display(); }
/** * Displays a form for creating a new support ticket * * @return void */ public function newTask($row = null) { if (!$row instanceof Ticket) { $row = new Ticket(); $row->set('open', 1)->set('status', 0)->set('ip', Request::ip())->set('uas', Request::getVar('HTTP_USER_AGENT', '', 'server'))->set('referrer', base64_encode(Request::getVar('HTTP_REFERER', NULL, 'server')))->set('cookies', Request::getVar('sessioncookie', '', 'cookie') ? 1 : 0)->set('instances', 1)->set('section', 1)->set('tool', Request::getVar('tool', ''))->set('verified', 0); if (!User::isGuest()) { $row->set('name', User::get('name')); $row->set('login', User::get('username')); $row->set('email', User::get('email')); } } $browser = new Detector(); $row->set('os', $browser->platform())->set('osver', $browser->platformVersion())->set('browser', $browser->name())->set('browserver', $browser->version()); if (!User::isGuest()) { $profile = new Profile(); $profile->load(User::get('id')); $emailConfirmed = $profile->get('emailConfirmed'); if ($emailConfirmed == 1 || $emailConfirmed == 3) { $row->set('verified', 1); } } // Output HTML $lists = array(); if ($row->get('verified') && $this->acl->check('update', 'tickets') > 0) { if (trim($this->config->get('group'))) { $lists['owner'] = $this->_userSelectGroup('problem[owner]', '', 1, '', trim($this->config->get('group'))); } else { $lists['owner'] = $this->_userSelect('problem[owner]', '', 1); } $lists['severities'] = Utilities::getSeverities($this->config->get('severities')); $sr = new Tables\Resolution($this->database); $lists['resolutions'] = $sr->getResolutions(); $sc = new Tables\Category($this->database); $lists['categories'] = $sc->find('list'); } // Set page title $this->_buildTitle(); // Set the pathway $this->_buildPathway(); foreach ($this->getErrors() as $error) { $this->view->setError($error); } $this->view->set('acl', $this->acl)->set('title', $this->_title)->set('file_types', $this->config->get('file_ext'))->set('lists', $lists)->set('row', $row)->set('captchas', Event::trigger('support.onGetComponentCaptcha'))->setLayout('new')->display(); }
/** * Sets the emailConfirmed state of a member * * @return void */ public function stateTask($state = 1) { // Check for request forgeries Request::checkToken(['get', 'post']); // Incoming user ID $ids = Request::getVar('id', array()); $ids = !is_array($ids) ? array($ids) : $ids; // Do we have an ID? if (empty($ids)) { App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller, false), Lang::txt('COM_MEMBERS_NO_ID'), 'error'); return; } foreach ($ids as $id) { // Load the profile $profile = new Profile(); $profile->load(intval($id)); if ($state) { $profile->set('emailConfirmed', $state); } else { $confirm = Helpers\Utility::genemailconfirm(); $profile->set('emailConfirmed', $confirm); } if (!$profile->update()) { App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller, false), $profile->getError(), 'error'); return; } } App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller, false), Lang::txt('COM_MEMBERS_CONFIRMATION_CHANGED')); }
/** * 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 = new Profile(); $xprofile->load($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) { // 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 = $info[0]->name; $organization = $info[0]->organization; } else { $xprofile = new Profile(); $xprofile->load($authid); $name = $xprofile->get('name'); $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; }