예제 #1
0
 /**
  * Approve a group
  *
  * @return void
  */
 public function approveTask()
 {
     // Incoming
     $ids = Request::getVar('id', array());
     // Get the single ID we're working with
     if (!is_array($ids)) {
         $ids = array($ids);
     }
     // Do we have any IDs?
     if (!empty($ids)) {
         // foreach group id passed in
         foreach ($ids as $id) {
             // Load the group page
             $group = new Group();
             $group->read($id);
             // Ensure we found the group info
             if (!$group) {
                 continue;
             }
             //set the group to be published and update
             $group->set('approved', 1);
             $group->update();
             // log publishing
             Log::log(array('gidNumber' => $group->get('gidNumber'), 'action' => 'group_approved', 'comments' => 'approved by administrator'));
         }
         // Output messsage and redirect
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller, false), Lang::txt('COM_GROUPS_APPROVED'));
     }
 }
예제 #2
0
 /**
  * Delete Page Category
  *
  * @return void
  */
 public function deleteTask()
 {
     // Check for request forgeries
     Request::checkToken();
     if (!User::authorise('core.delete', $this->_option)) {
         App::abort(403, Lang::txt('JERROR_ALERTNOAUTHOR'));
     }
     // Get request vars
     $ids = Request::getVar('id', array());
     $deleted = array();
     // Delete each category
     foreach ($ids as $categoryid) {
         // Load category object
         $category = Category::oneOrFail($categoryid);
         // Make sure this is our groups cat
         if ($category->get('gidNumber') != $this->group->get('gidNumber')) {
             Notify::error(Lang::txt('COM_GROUPS_PAGES_CATEGORY_DELETE_FAILED'));
             continue;
         }
         // Delete row
         if (!$category->destroy()) {
             Notify::error($category->getError());
             continue;
         }
         $deleted[] = $category->get('id');
     }
     if (count($deleted)) {
         Notify::success(Lang::txt('COM_GROUPS_PAGES_CATEGORY_DELETE_SUCCESS'));
         // Log change
         Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'group_pagecategory_deleted', 'comments' => $deleted));
     }
     $this->cancelTask();
 }
예제 #3
0
 /**
  * Approve a group page
  *
  * @return void
  */
 public function approveTask()
 {
     // make sure we are approvers
     if (!Helpers\Pages::isPageApprover()) {
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_PAGES_MUST_BE_AUTHORIZED'), 'error');
         return;
     }
     // get request vars
     $id = Request::getInt('id', 0);
     // load page
     $page = new Page($id);
     // load current version
     $currentVersion = $page->version();
     // make sure version is unapproved
     if ($currentVersion->get('approved') == 1) {
         //inform user & redirect
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_PAGES_ALREADY_APPROVED'), 'warning');
         return;
     }
     // set approved and approved date and approver
     $currentVersion->set('approved', 1);
     $currentVersion->set('approved_on', Date::toSql());
     $currentVersion->set('approved_by', User::get('id'));
     // save version with approved status
     if (!$currentVersion->store(false, $this->group->isSuperGroup())) {
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), $currentVersion->getError(), 'error');
         return;
     }
     // send approved notifcation
     Helpers\Pages::sendApprovedNotification('page', $page);
     // log approval
     Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'group_page_approved', 'comments' => array($page->get('id'))));
     // inform user and redirect
     App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_PAGES_APPROVED'), 'passed');
 }
예제 #4
0
 /**
  *  Permanently delete group
  *
  * @return 		void
  */
 public function doDeleteTask()
 {
     // Check if they're logged in
     if (User::isGuest()) {
         $this->loginTask(Lang::txt('COM_GROUPS_DELETE_MUST_BE_LOGGED_IN'));
         return;
     }
     //check to make sure we have  cname
     if (!$this->cn) {
         $this->_errorHandler(400, Lang::txt('COM_GROUPS_ERROR_NO_ID'));
     }
     // Load the group page
     $this->view->group = Group::getInstance($this->cn);
     // Ensure we found the group info
     if (!$this->view->group || !$this->view->group->get('gidNumber')) {
         $this->_errorHandler(404, Lang::txt('COM_GROUPS_ERROR_NOT_FOUND'));
     }
     // Check authorization
     if ($this->_authorize() != 'manager') {
         $this->_errorHandler(403, Lang::txt('COM_GROUPS_ERROR_NOT_AUTH'));
     }
     //get request vars
     $confirm_delete = Request::getInt('confirmdel', '');
     $message = trim(Request::getVar('msg', '', 'post'));
     //check to make sure we have confirmed
     if (!$confirm_delete) {
         $this->setNotification(Lang::txt('COM_GROUPS_DELETE_MISSING_CONFIRM_MESSAGE'), 'error');
         $this->deleteTask();
         return;
     }
     // Start log
     $log = Lang::txt('COM_GROUPS_DELETE_MESSAGE_SUBJECT', $this->view->group->get('cn')) . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_ID') . ': ' . $this->view->group->get('gidNumber') . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_CNAME') . ': ' . $this->view->group->get('cn') . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_TITLE') . ': ' . $this->view->group->get('description') . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_DISCOVERABILITY') . ': ' . $this->view->group->get('discoverability') . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_PUBLIC_TEXT') . ': ' . stripslashes($this->view->group->get('public_desc')) . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_PRIVATE_TEXT') . ': ' . stripslashes($this->view->group->get('private_desc')) . "\n";
     $log .= Lang::txt('COM_GROUPS_GROUP_RESTRICTED_MESSAGE') . ': ' . stripslashes($this->view->group->get('restrict_msg')) . "\n";
     // Get number of group members
     $members = $this->view->group->get('members');
     $managers = $this->view->group->get('managers');
     // Log ids of group members
     if ($members) {
         $log .= Lang::txt('COM_GROUP_MEMBERS') . ': ';
         foreach ($members as $gu) {
             $log .= $gu . ' ';
         }
         $log .= '' . "\n";
     }
     $log .= Lang::txt('COM_GROUP_MANAGERS') . ': ';
     foreach ($managers as $gm) {
         $log .= $gm . ' ';
     }
     $log .= '' . "\n";
     // Trigger the functions that delete associated content
     // Should return logs of what was deleted
     $logs = Event::trigger('groups.onGroupDelete', array($this->view->group));
     if (count($logs) > 0) {
         $log .= implode('', $logs);
     }
     // Build the file path
     $path = PATH_APP . DS . trim($this->config->get('uploadpath', '/site/groups'), DS) . DS . $this->view->group->get('gidNumber');
     if (is_dir($path)) {
         // Attempt to delete the file
         if (!Filesystem::deleteDirectory($path)) {
             $this->setNotification(Lang::txt('UNABLE_TO_DELETE_DIRECTORY'), 'error');
         }
     }
     //clone the deleted group
     $deletedgroup = clone $this->view->group;
     // Delete group
     if (!$this->view->group->delete()) {
         $this->setNotification($this->view->group->error, 'error');
         $this->deleteTask();
         return;
     }
     // Build the "from" info for e-mails
     $from = array();
     $from['name'] = Config::get('sitename') . ' ' . Lang::txt(strtoupper($this->_name));
     $from['email'] = Config::get('mailfrom');
     // E-mail subject
     $subject = Lang::txt('COM_GROUPS_DELETE_MESSAGE_SUBJECT', $deletedgroup->get('cn'));
     // Build the e-mail message
     $eview = new \Hubzero\Component\View(array('name' => 'emails', 'layout' => 'deleted'));
     $eview->option = $this->_option;
     $eview->sitename = Config::get('sitename');
     $eview->user = User::getRoot();
     $eview->gcn = $deletedgroup->get('cn');
     $eview->msg = $message;
     $eview->group = $deletedgroup;
     $html = $eview->loadTemplate();
     $html = str_replace("\n", "\r\n", $html);
     // build array of email recipients
     $groupMembers = array();
     foreach ($members as $member) {
         $profile = \Hubzero\User\Profile::getInstance($member);
         if ($profile) {
             $groupMembers[$profile->get('email')] = $profile->get('name');
         }
     }
     // create new message
     $message = new \Hubzero\Mail\Message();
     // build message object and send
     $message->setSubject($subject)->addFrom($from['email'], $from['name'])->setTo($groupMembers)->addHeader('X-Mailer', 'PHP/' . phpversion())->addHeader('X-Component', 'com_groups')->addHeader('X-Component-Object', 'group_deleted')->addHeader('X-Component-ObjectId', $deletedgroup->get('gidNumber'))->addPart($html, 'text/plain')->send();
     // log deleted group
     Log::log(array('gidNumber' => $deletedgroup->get('gidNumber'), 'action' => 'group_deleted', 'comments' => $log));
     // Redirect back to the groups page
     $this->setNotification(Lang::txt('COM_GROUPS_DELETE_SUCCESS', $deletedgroup->get('description')), 'passed');
     App::redirect(Route::url('index.php?option=' . $this->_option));
     return;
 }
예제 #5
0
 /**
  * Add membership request for user
  *
  * @return  array
  */
 public function dorequestTask()
 {
     // Check if they're logged in
     if (User::isGuest()) {
         $this->loginTask(Lang::txt('COM_GROUPS_INVITE_MUST_BE_LOGGED_IN_TO_REQUEST'));
         return;
     }
     Request::checkToken();
     //check to make sure we have  cname
     if (!$this->cn) {
         $this->_errorHandler(400, Lang::txt('COM_GROUPS_ERROR_NO_ID'));
     }
     // Load the group page
     $this->view->group = Group::getInstance($this->cn);
     // Ensure we found the group info
     if (!$this->view->group || !$this->view->group->get('gidNumber')) {
         $this->_errorHandler(404, Lang::txt('COM_GROUPS_ERROR_NOT_FOUND'));
     }
     // Get the group params
     $gparams = new Registry($this->view->group->get('params'));
     // If membership is managed in seperate place disallow action
     if ($gparams->get('membership_control', 1) == 0) {
         $this->setNotification(Lang::txt('COM_GROUPS_MEMBERSHIP_MANAGED_ELSEWHERE'), 'error');
         App::redirect(Route::url('index.php?option=com_groups&cn=' . $this->view->group->get('cn')));
         return;
     }
     //make sure group has restricted policy
     if ($this->view->group->get('join_policy') != 1) {
         return;
     }
     //add user to applicants
     $this->view->group->add('applicants', array(User::get('id')));
     $this->view->group->update();
     // Instantiate the reason object and bind the incoming data
     $row = new Reason($this->database);
     $row->uidNumber = User::get('id');
     $row->gidNumber = $this->view->group->get('gidNumber');
     $row->reason = Request::getVar('reason', Lang::txt('GROUPS_NO_REASON_GIVEN'), 'post');
     $row->reason = \Hubzero\Utility\Sanitize::stripAll($row->reason);
     $row->date = Date::toSql();
     // Check and store the reason
     if (!$row->check()) {
         return App::abort(500, $row->getError());
     }
     if (!$row->store()) {
         return App::abort(500, $row->getError());
     }
     // Log the membership request
     Log::log(array('gidNumber' => $this->view->group->get('gidNumber'), 'action' => 'membership_requested', 'comments' => array(User::get('id'))));
     // Log activity
     $url = Route::url('index.php?option=' . $this->_option . '&cn=' . $this->view->group->get('cn'));
     $recipients = array(['group', $this->view->group->get('gidNumber')], ['user', User::get('id')]);
     foreach ($this->view->group->get('managers') as $recipient) {
         $recipients[] = ['user', $recipient];
     }
     Event::trigger('system.logActivity', ['activity' => ['action' => 'requested', 'scope' => 'group', 'scope_id' => $this->view->group->get('gidNumber'), 'description' => Lang::txt('COM_GROUPS_ACTIVITY_GROUP_USER_REQUESTED', '<a href="' . $url . '">' . $this->view->group->get('description') . '</a>'), 'details' => array('title' => $this->view->group->get('description'), 'url' => $url, 'cn' => $this->view->group->get('cn'), 'gidNumber' => $this->view->group->get('gidNumber'))], 'recipients' => $recipients]);
     // E-mail subject
     $subject = Lang::txt('COM_GROUPS_JOIN_REQUEST_EMAIL_SUBJECT', $this->view->group->get('cn'));
     // Build the e-mail message
     $eview = new \Hubzero\Component\View(array('name' => 'emails', 'layout' => 'request'));
     $eview->option = $this->_option;
     $eview->sitename = Config::get('sitename');
     $eview->user = User::getInstance();
     $eview->group = $this->view->group;
     $eview->row = $row;
     $html = $eview->loadTemplate();
     $html = str_replace("\n", "\r\n", $html);
     // Get the system administrator e-mail
     $emailadmin = Config::get('mailfrom');
     // Build the "from" portion of the e-mail
     $from = array();
     $from['name'] = Config::get('sitename') . ' ' . Lang::txt(strtoupper($this->_name));
     $from['email'] = Config::get('mailfrom');
     // build array of managers
     $managers = array();
     foreach ($this->view->group->get('managers') as $m) {
         $profile = User::getInstance($m);
         if ($profile) {
             $managers[$profile->get('email')] = $profile->get('name');
         }
     }
     // create new message
     $message = new \Hubzero\Mail\Message();
     // build message object and send
     $message->setSubject($subject)->addFrom($from['email'], $from['name'])->setTo($managers)->addHeader('X-Mailer', 'PHP/' . phpversion())->addHeader('X-Component', 'com_groups')->addHeader('X-Component-Object', 'group_membership_requested')->addPart($html, 'text/plain')->send();
     //tell the user they just did good
     $this->setNotification(Lang::txt('COM_GROUPS_INVITE_REQUEST_FORWARDED'), 'passed');
     // Push through to the groups listing
     App::redirect($url);
 }
예제 #6
0
 /**
  * Approve a group page
  *
  * @return void
  */
 public function approveTask()
 {
     // make sure we are approvers
     if (!Helpers\Pages::isPageApprover()) {
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_MODULES_AUTHORIZED_APPROVERS_ONLY'), 'error');
         return;
     }
     // get request vars
     $id = Request::getInt('id', 0);
     // load page
     $module = new Module($id);
     // make sure version is unapproved
     if ($module->get('approved') == 1) {
         //inform user & redirect
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_MODULES_ALREADY_APPROVED'), 'warning');
         return;
     }
     // set approved and approved date and approver
     $module->set('approved', 1);
     $module->set('approved_on', Date::toSql());
     $module->set('approved_by', User::get('id'));
     if (!is_object($this->group->params)) {
         $this->group->params = new \Hubzero\Config\Registry($this->group->params);
     }
     $module->set('page_trusted', $this->group->params->get('page_trusted', 0));
     // DONT RUN CHECK ON STORE METHOD (pass false as first arg to store() method)
     $module->store(false, $this->group->isSuperGroup());
     // send approved notifcation
     Helpers\Pages::sendApprovedNotification('module', $module);
     // log change
     Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'group_modules_approved', 'comments' => array($module->get('id'))));
     // inform user and redirect
     App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_MODULES_APPROVED'), 'passed');
 }
예제 #7
0
 /**
  * Denies user(s) group membership
  *
  * @return void
  */
 public function denyTask()
 {
     // Check for request forgeries
     Request::checkToken(['get', 'post']);
     $gid = Request::getVar('gid', '');
     // Load the group page
     $this->group = new Group();
     $this->group->read($gid);
     // An array for the users we're going to deny
     $users = array();
     // Incoming array of users to demote
     $mbrs = Request::getVar('id', array());
     $mbrs = !is_array($mbrs) ? array($mbrs) : $mbrs;
     foreach ($mbrs as $mbr) {
         // Retrieve user's account info
         $targetuser = User::getInstance($mbr);
         // Ensure we found an account
         if (is_object($targetuser)) {
             // Remove record of reason wanting to join group
             $reason = new Tables\Reason($this->database);
             $reason->deleteReason($targetuser->get('username'), $this->group->get('cn'));
             // Add them to the array of users to deny
             $users[] = $targetuser->get('id');
         } else {
             $this->setError(Lang::txt('COM_GROUPS_USER_NOTFOUND') . ' ' . $mbr);
         }
     }
     // Remove users from managers list
     $this->group->remove('applicants', $users);
     // Save changes
     $this->group->update();
     // log
     Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'group_members_denied', 'comments' => $users));
     if (!Request::getInt('no_html', 0)) {
         App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->group->get('cn'), false), Lang::txt('COM_GROUPS_MEMBER_DENIED'));
     }
 }
예제 #8
0
 /**
  * Cancel membership of one or more users
  *
  * @return  void
  */
 private function confirmcancel()
 {
     if ($this->authorized != 'manager' && $this->authorized != 'admin') {
         return false;
     }
     if ($this->membership_control == 0) {
         return false;
     }
     $database = App::get('db');
     // An array for the users we're going to deny
     $users = array();
     $user_emails = array();
     // Incoming array of users to demote
     $mbrs = Request::getVar('users', array(), 'post');
     // Set a flag for emailing any changes made
     $admchange = '';
     require_once PATH_CORE . DS . 'components' . DS . 'com_members' . DS . 'helpers' . DS . 'utility.php';
     foreach ($mbrs as $mbr) {
         //if an email address
         if (\Components\Members\Helpers\Utility::validemail($mbr)) {
             $user_emails[] = $mbr;
             $this->notifyEmailInvitedUser($mbr);
         } else {
             // Retrieve user's account info
             $targetuser = User::getInstance($mbr);
             // Ensure we found an account
             if (is_object($targetuser) && $targetuser->get('id')) {
                 $admchange .= "\t\t" . $targetuser->get('name') . "\r\n";
                 $admchange .= "\t\t" . $targetuser->get('username') . ' (' . $targetuser->get('email') . ')';
                 $admchange .= count($mbrs) > 1 ? "\r\n" : '';
                 // Add them to the array of users to cancel invitations
                 $users[] = $targetuser->get('id');
                 // Log activity
                 $recipients = array(['group', $this->group->get('gidNumber')], ['user', $targetuser->get('id')]);
                 foreach ($this->group->get('managers') as $recipient) {
                     $recipients[] = ['user', $recipient];
                 }
                 Event::trigger('system.logActivity', ['activity' => ['action' => 'denied', 'scope' => 'group.membership', 'scope_id' => $this->group->get('gidNumber'), 'description' => Lang::txt('PLG_GROUPS_MEMBERS_ACTIVITY_CANCELLED', '<a href="' . Route::url('index.php?option=com_members&id=' . $targetuser->get('id')) . '">' . $targetuser->get('name') . '</a>', '<a href="' . Route::url('index.php?option=com_groups&cn=' . $this->group->get('cn')) . '">' . $this->group->get('description') . '</a>'), 'details' => array('user_id' => $targetuser->get('id'), 'group_id' => $this->group->get('gidNumber'))], 'recipients' => $recipients]);
                 // E-mail the user, letting them know the invitation has been cancelled
                 $this->notifyUser($targetuser);
             } else {
                 $this->setError(Lang::txt('PLG_GROUPS_MESSAGES_ERROR_USER_NOTFOUND') . ' ' . $mbr);
             }
         }
     }
     // Remove users from managers list
     $this->group->remove('invitees', $users);
     // Save changes
     $this->group->update();
     //delete any email invited users
     $db = App::get('db');
     foreach ($user_emails as $ue) {
         $sql = "DELETE FROM `#__xgroups_inviteemails` WHERE email=" . $db->Quote($ue);
         $db->setQuery($sql);
         $db->query();
     }
     // log invites
     \Components\Groups\Models\Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'membership_invite_cancelled', 'comments' => array_merge($users, $user_emails)));
     App::redirect(Route::url('index.php?option=com_groups&cn=' . $this->group->get('cn') . '&active=members&filter=invitees'), '', '', true);
 }
예제 #9
0
 /**
  * Send a message
  *
  * @return     mixed
  */
 protected function _send()
 {
     // Ensure the user is logged in
     if (User::isGuest()) {
         return false;
     }
     //message
     $message = Lang::txt('PLG_GROUPS_MESSAGES_FROM_GROUP', $this->group->get('cn'));
     // Incoming array of users to message
     $mbrs = Request::getVar('users', array(0), 'post');
     switch ($mbrs[0]) {
         case 'invitees':
             $mbrs = $this->group->get('invitees');
             $action = 'group_invitees_message';
             $group_id = $this->group->get('gidNumber');
             break;
         case 'applicants':
             $mbrs = $this->group->get('applicants');
             $action = 'group_pending_message';
             $group_id = $this->group->get('gidNumber');
             break;
         case 'managers':
             $mbrs = $this->group->get('managers');
             $action = 'group_managers_message';
             $group_id = $this->group->get('gidNumber');
             break;
         case 'all':
             $mbrs = $this->group->get('members');
             $action = 'group_members_message';
             $group_id = $this->group->get('gidNumber');
             break;
         default:
             $message = Lang::txt('PLG_GROUPS_MESSAGES_FOR_GROUP_MEMBER', $this->group->get('cn'));
             foreach ($mbrs as $mbr) {
                 if (strstr($mbr, '_')) {
                     $role = explode('_', $mbr);
                     $db = App::get('db');
                     $sql = "SELECT uidNumber FROM `#__xgroups_member_roles` WHERE roleid=" . $db->Quote($role[1]);
                     $db->setQuery($sql);
                     $member_roles = $db->loadAssocList();
                     foreach ($member_roles as $member) {
                         $members[] = $member['uidNumber'];
                     }
                     $mbrs = $members;
                     $action = 'group_role_message';
                     $group_id = $this->group->get('gidNumber');
                 } else {
                     $action = '';
                     $group_id = 0;
                     break;
                 }
             }
             break;
     }
     // Incoming message and subject
     $s = Request::getVar('subject', Lang::txt('PLG_GROUPS_MESSAGES_SUBJECT'));
     $m = Request::getVar('message', '');
     // Ensure we have a message
     if (!$s || !$m) {
         $html = '<p class="error">You must enter all required fields</p>';
         $html .= $this->_create();
         return $html;
     }
     // get all group members
     $recipients = array();
     foreach ($mbrs as $mbr) {
         if ($profile = User::getInstance($mbr)) {
             $recipients[$profile->get('email')] = $profile->get('name');
         }
     }
     // add invite emails if sending to invitees
     if ($action == 'group_invitees_message') {
         // Get invite emails
         $db = App::get('db');
         $group_inviteemails = new \Hubzero\User\Group\InviteEmail();
         $current_inviteemails = $group_inviteemails->getInviteEmails($this->group->get('gidNumber'), true);
         foreach ($current_inviteemails as $current_inviteemail) {
             $recipients[$current_inviteemail] = $current_inviteemail;
         }
     }
     // define from details
     $from = array('name' => $this->group->get('description') . " Group on " . Config::get("fromname"), 'email' => Config::get("mailfrom"));
     // create url
     $sef = Route::url('index.php?option=' . $this->_option . '&cn=' . $this->group->get('cn'));
     $sef = ltrim($sef, '/');
     // create subject
     $subject = $s . " [Email sent on Behalf of " . User::get('name') . "]";
     //message
     $plain = Lang::txt('PLG_GROUPS_MESSAGES_FROM_GROUP', $this->group->get('cn'));
     $plain .= "\r\n------------------------------------------------\r\n\r\n";
     $plain .= $m;
     // create message
     $plain .= "\r\n\r\n------------------------------------------------\r\n" . Request::base() . $sef . "\r\n";
     // create message object
     $message = new \Hubzero\Mail\Message();
     // set message details and send
     $message->setSubject($subject)->setFrom(array($from['email'] => $from['name']))->addPart($plain, 'text/plain');
     foreach ($recipients as $email => $name) {
         $message->setTo(array($email => $name))->send();
     }
     // add invite emails if sending to invitees
     /*if ($action == 'group_invitees_message')
     		{
     			// Get invite emails
     			$db = App::get('db');
     			$group_inviteemails = new \Hubzero\User\Group\InviteEmail();
     			$current_inviteemails = $group_inviteemails->getInviteEmails($this->group->get('gidNumber'), true);
     
     			$headers  = 'From: ' . $from['name'] . ' <' . $from['email'] . '>' . "\r\n";
     			$headers .= 'Reply-To: ' . $from['replytoname'] . ' <' . $from['replytoemail'] . '>' . "\r\n";
     			foreach ($current_inviteemails as $current_inviteemail)
     			{
     				mail($current_inviteemail, $subject, $message, $headers);
     			}
     		}*/
     // Log the action
     if ($action) {
         // log invites
         \Components\Groups\Models\Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => $action, 'comments' => array(User::get('id'))));
     }
     // Determine if we're returning HTML or not
     // (if no - this is an AJAX call)
     $no_html = Request::getInt('no_html', 0);
     if (!$no_html) {
         $html = '';
         if ($this->getError()) {
             $html .= '<p class="error">' . $this->getError() . '</p>';
         }
         $html .= $this->_sent();
         return $html;
     }
 }
예제 #10
0
 /**
  * Unapprove a group
  *
  * @return  void
  */
 public function unapproveTask()
 {
     // Check for request forgeries
     //Request::checkToken();
     if (!User::authorise('core.manage', $this->_option) && !User::authorise('core.admin', $this->_option) && !User::authorise('core.edit', $this->_option) && !User::authorise('core.edit.state', $this->_option)) {
         App::abort(403, Lang::txt('JERROR_ALERTNOAUTHOR'));
     }
     // Incoming
     $ids = Request::getVar('id', array());
     // Get the single ID we're working with
     if (!is_array($ids)) {
         $ids = array($ids);
     }
     $i = 0;
     // foreach group id passed in
     foreach ($ids as $id) {
         // Load the group page
         $group = new Group();
         $group->read($id);
         // Ensure we found the group info
         if (!$group) {
             continue;
         }
         // Set the group to be published and update
         $group->set('approved', 0);
         $group->update();
         $i++;
         // log publishing
         Log::log(array('gidNumber' => $group->get('gidNumber'), 'action' => 'group_unapproved', 'comments' => 'unapproved by administrator'));
     }
     if ($i) {
         Notify::success(Lang::txt('COM_GROUPS_UNAPPROVED'));
     }
     // Output messsage and redirect
     $this->cancelTask();
 }
예제 #11
0
 /**
  * Delete Page Category
  *
  * @return void
  */
 public function deleteTask()
 {
     // get request vars
     $ids = Request::getVar('id', array());
     $deleted = array();
     // delete each category
     foreach ($ids as $categoryid) {
         // load category object
         $category = new Page\Category($categoryid);
         // make sure this is our groups cat
         if ($category->get('gidNumber') != $this->group->get('gidNumber')) {
             App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_PAGES_CATEGORY_DELETE_FAILED'), 'error');
             return;
         }
         // delete row
         if (!$category->delete()) {
             App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), $category->getError(), 'error');
             return;
         }
         $deleted[] = $category->get('id');
     }
     // log change
     Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'group_pagecategory_deleted', 'comments' => $deleted));
     //inform user & redirect
     App::redirect(Route::url('index.php?option=' . $this->_option . '&controller=' . $this->_controller . '&gid=' . $this->gid, false), Lang::txt('COM_GROUPS_PAGES_CATEGORY_DELETE_SUCCESS'), 'passed');
 }
예제 #12
0
 /**
  * Cancel membership of one or more users
  *
  * @return     void
  */
 private function confirmcancel()
 {
     if ($this->authorized != 'manager' && $this->authorized != 'admin') {
         return false;
     }
     if ($this->membership_control == 0) {
         return false;
     }
     $database = App::get('db');
     // An array for the users we're going to deny
     $users = array();
     $user_emails = array();
     // Incoming array of users to demote
     $mbrs = Request::getVar('users', array(0), 'post');
     // Set a flag for emailing any changes made
     $admchange = '';
     foreach ($mbrs as $mbr) {
         //if an email address
         if (preg_match("#^[_\\.\\%0-9a-zA-Z-]+@([0-9a-zA-Z-]+\\.)+[a-zA-Z]{2,6}\$#i", $mbr)) {
             $user_emails[] = $mbr;
             $this->notifyEmailInvitedUser($mbr);
         } else {
             // Retrieve user's account info
             $targetuser = User::getInstance($mbr);
             // Ensure we found an account
             if (is_object($targetuser)) {
                 $admchange .= "\t\t" . $targetuser->get('name') . "\r\n";
                 $admchange .= "\t\t" . $targetuser->get('username') . ' (' . $targetuser->get('email') . ')';
                 $admchange .= count($mbrs) > 1 ? "\r\n" : '';
                 // Add them to the array of users to cancel invitations
                 $users[] = $targetuser->get('id');
                 // E-mail the user, letting them know the invitation has been cancelled
                 $this->notifyUser($targetuser);
             } else {
                 $this->setError(Lang::txt('PLG_GROUPS_MESSAGES_ERROR_USER_NOTFOUND') . ' ' . $mbr);
             }
         }
     }
     // Remove users from managers list
     $this->group->remove('invitees', $users);
     // Save changes
     $this->group->update();
     //delete any email invited users
     $db = App::get('db');
     foreach ($user_emails as $ue) {
         $sql = "DELETE FROM `#__xgroups_inviteemails` WHERE email=" . $db->Quote($ue);
         $db->setQuery($sql);
         $db->query();
     }
     // log invites
     \Components\Groups\Models\Log::log(array('gidNumber' => $this->group->get('gidNumber'), 'action' => 'membership_invite_cancelled', 'comments' => array_merge($users, $user_emails)));
     App::redirect(Route::url('index.php?option=com_groups&cn=' . $this->group->get('cn') . '&active=members&filter=invitees'), '', '', true);
 }