/** * Notifies groups admins for approval of new user via e-mail. * This should be done after a new user is created and approval is required. * * @todo Create message template, move message into translation */ private function notifyGroupAdminsForApproval() { // No admin approval required if ($this->status != User::STATUS_NEED_APPROVAL || !HSetting::Get('needApproval', 'authentication_internal')) { return; } foreach (GroupAdmin::model()->findAllByAttributes(array('group_id' => $this->group_id)) as $admin) { $adminUser = User::model()->findByPk($admin->user_id); if ($adminUser !== null) { $approvalUrl = Yii::app()->createAbsoluteUrl("//admin/approval"); $html = "Hello {$adminUser->displayName},<br><br>\n\n" . "a new user {$this->displayName} needs approval.<br><br>\n\n" . "Click here to validate:<br>\n\n" . HHtml::link($approvalUrl, $approvalUrl) . "<br/> <br/>\n"; $message = new HMailMessage(); $message->addFrom(HSetting::Get('systemEmailAddress', 'mailing'), HSetting::Get('systemEmailName', 'mailing')); $message->addTo($adminUser->email); $message->view = "application.views.mail.TextOnly"; $message->subject = Yii::t('UserModule.models_User', "New user needs approval"); $message->setBody(array('message' => $html), 'text/html'); Yii::app()->mail->send($message); } else { Yii::log("Could not load Group Admin User. Inconsistent Group Admin Record! User Id: " . $admin->user_id, CLogger::LEVEL_ERROR); } } return true; }
public function afterSave() { if ($this->scenario == 'edit') { GroupAdmin::model()->deleteAllByAttributes(array('group_id' => $this->id)); $adminUsers = array(); foreach (explode(",", $this->adminGuids) as $adminGuid) { // Ensure guids valid characters $adminGuid = preg_replace("/[^A-Za-z0-9\\-]/", '', $adminGuid); // Try load user $user = User::model()->findByAttributes(array('guid' => $adminGuid)); if ($user != null) { $groupAdmin = new GroupAdmin(); $groupAdmin->user_id = $user->id; $groupAdmin->group_id = $this->id; $groupAdmin->save(); } } } }
<div class="panel panel-default"> <div class="panel-heading"><?php echo Yii::t('AdminModule.views_approval_index', '<strong>Pending</strong> user approvals'); ?> </div> <div class="panel-body"> <p> <?php echo Yii::t('AdminModule.views_approval_index', 'Here you see all users who have registered and still waiting for a approval.'); ?> </p> <?php $this->widget('zii.widgets.grid.CGridView', array('id' => 'approve-grid', 'dataProvider' => $model->resetScope()->searchNeedApproval(), 'filter' => $model, 'itemsCssClass' => 'table table-hover', 'columns' => array(array('value' => 'CHtml::image($data->profileImage->getUrl())', 'type' => 'raw', 'htmlOptions' => array('width' => '30px')), array('name' => 'username', 'header' => 'Username', 'filter' => CHtml::activeTextField($model, 'username', array('placeholder' => Yii::t('AdminModule.views_approval_index', 'Search for username')))), array('name' => 'group_id', 'value' => 'Group::getGroupNameById($data->group_id)', 'filter' => GroupAdmin::gridItems()), array('name' => 'email', 'header' => Yii::t('AdminModule.views_approval_index', 'Email'), 'filter' => CHtml::activeTextField($model, 'email', array('placeholder' => Yii::t('AdminModule.views_approval_index', 'Search for email')))), array('class' => 'CButtonColumn', 'template' => '{accept}{decline}', 'htmlOptions' => array('width' => '160px'), 'buttons' => array('accept' => array('label' => Yii::t('AdminModule.views_approval', 'Accept'), 'url' => 'Yii::app()->createUrl("admin/approval/approveUserAccept", array("id" => $data->id))', 'imageUrl' => false, 'options' => array('style' => 'margin-right: 3px', 'class' => 'btn btn-primary btn-sm')), 'decline' => array('label' => Yii::t('AdminModule.views_approval', 'Decline'), 'url' => 'Yii::app()->createUrl("admin/approval/approveUserDecline", array("id" => $data->id))', 'imageUrl' => false, 'options' => array('style' => 'margin-right: 3px', 'class' => 'btn btn-danger btn-sm'))))), 'pager' => array('class' => 'CLinkPager', 'maxButtonCount' => 5, 'nextPageLabel' => '<i class="fa fa-step-forward"></i>', 'prevPageLabel' => '<i class="fa fa-step-backward"></i>', 'firstPageLabel' => '<i class="fa fa-fast-backward"></i>', 'lastPageLabel' => '<i class="fa fa-fast-forward"></i>', 'header' => '', 'htmlOptions' => array('class' => 'pagination')), 'pagerCssClass' => 'pagination-container')); ?> </div> </div>
/** * Checks if the can approve new users * @todo Add caching support * * @return boolean */ public function canApproveUsers() { if ($this->isAdmin()) { return true; } $user = $this->loadUser(Yii::app()->user->id); $adminGroups = GroupAdmin::model()->countByAttributes(array('user_id' => $user->id)); if ($adminGroups != 0) { return true; } return false; }
/** * Used in Approvals, to get Groups Filter * * @return Array of groups */ public static function gridItems() { $items = array(); $selectedAdminGroups = array(); if (!Yii::app()->user->isAdmin()) { foreach (GroupAdmin::model()->findAllByAttributes(array('user_id' => Yii::app()->user->id)) as $ga) { $selectedAdminGroups[] = $ga->group_id; } } foreach (Group::model()->findAll() as $g) { // Bypass group without rights if (!Yii::app()->user->isAdmin() && !in_array($g->id, $selectedAdminGroups)) { continue; } $items[$g->id] = $g->name; } return $items; }