/** * Show a warning if default roles are not setup yet. * * @since 2.0.? * @access public */ public function DefaultRolesWarning() { // Check to see if there are no default roles for guests or members. $DefaultRolesWarning = FALSE; $DefaultRoles = C('Garden.Registration.DefaultRoles'); if (!is_array($DefaultRoles) || count($DefaultRoles) == 0) { $DefaultRolesWarning = TRUE; } elseif (!C('Garden.Registration.ApplicantRoleID') && C('Garden.Registration.Method') == 'Approval') { $DefaultRolesWarning = TRUE; } else { $RoleModel = new RoleModel(); $GuestRoles = $RoleModel->GetByUserID(0); if ($GuestRoles->NumRows() == 0) { $DefaultRolesWarning = TRUE; } } if ($DefaultRolesWarning) { echo '<div class="Messages Errors"><ul><li>', sprintf(T('No default roles.', 'You don\'t have your default roles set up. To correct this problem click %s.'), Anchor(T('here'), 'dashboard/role/defaultroles')), '</div>'; } }
/** * Configuration of registration settings. */ public function Registration($RedirectUrl = '') { $this->Permission('Garden.Registration.Manage'); if (!C('Garden.Registration.Manage', TRUE)) { return Gdn::Dispatcher()->Dispatch('Default404'); } $this->AddSideMenu('dashboard/settings/registration'); $this->AddJsFile('registration.js'); $this->Title(T('Registration')); // Create a model to save configuration settings $Validation = new Gdn_Validation(); $ConfigurationModel = new Gdn_ConfigurationModel($Validation); $ConfigurationModel->SetField(array('Garden.Registration.Method' => 'Captcha', 'Garden.Registration.CaptchaPrivateKey', 'Garden.Registration.CaptchaPublicKey', 'Garden.Registration.InviteExpiration')); // Set the model on the forms. $this->Form->SetModel($ConfigurationModel); // Load roles with sign-in permission $RoleModel = new RoleModel(); $this->RoleData = $RoleModel->GetByPermission('Garden.SignIn.Allow'); // Get the currently selected default roles // $this->ExistingRoleData = Gdn::Config('Garden.Registration.DefaultRoles'); // if (is_array($this->ExistingRoleData) === FALSE) // $this->ExistingRoleData = array(); // Get currently selected InvitationOptions $this->ExistingRoleInvitations = Gdn::Config('Garden.Registration.InviteRoles'); if (is_array($this->ExistingRoleInvitations) === FALSE) { $this->ExistingRoleInvitations = array(); } // Get the currently selected Expiration Length $this->InviteExpiration = Gdn::Config('Garden.Registration.InviteExpiration', ''); // Registration methods. $this->RegistrationMethods = array('Captcha' => "New users fill out a simple form and are granted access immediately.", 'Approval' => "New users are reviewed and approved by an administrator (that's you!).", 'Invitation' => "Existing members send invitations to new members."); // Options for how many invitations a role can send out per month. $this->InvitationOptions = array('0' => T('None'), '1' => '1', '2' => '2', '5' => '5', '-1' => T('Unlimited')); // Options for when invitations should expire. $this->InviteExpirationOptions = array('-1 week' => T('1 week after being sent'), '-2 weeks' => T('2 weeks after being sent'), '-1 month' => T('1 month after being sent'), 'FALSE' => T('never')); // Check to see if there are no default roles for guests or members. $DefaultRoleWarning = FALSE; $DefaultRoles = C('Garden.Registration.DefaultRoles'); if (count($DefaultRoles) == 0) { $DefaultRoleWarning = TRUE; } else { $GuestRoles = $RoleModel->GetByUserID(0); if ($GuestRoles->NumRows() == 0) { $DefaultRoleWarning = TRUE; } } $this->SetData('DefaultRoleWarning', $DefaultRoleWarning); if ($this->Form->AuthenticatedPostBack() === FALSE) { $this->Form->SetData($ConfigurationModel->Data); } else { // Define some validation rules for the fields being saved $ConfigurationModel->Validation->ApplyRule('Garden.Registration.Method', 'Required'); // if($this->Form->GetValue('Garden.Registration.Method') != 'Closed') // $ConfigurationModel->Validation->ApplyRule('Garden.Registration.DefaultRoles', 'RequiredArray'); // Define the Garden.Registration.RoleInvitations setting based on the postback values $InvitationRoleIDs = $this->Form->GetValue('InvitationRoleID'); $InvitationCounts = $this->Form->GetValue('InvitationCount'); $this->ExistingRoleInvitations = ArrayCombine($InvitationRoleIDs, $InvitationCounts); $ConfigurationModel->ForceSetting('Garden.Registration.InviteRoles', $this->ExistingRoleInvitations); // Save! if ($this->Form->Save() !== FALSE) { $this->StatusMessage = T("Your settings have been saved."); if ($RedirectUrl != '') { $this->RedirectUrl = $RedirectUrl; } } } $this->Render(); }
/** Test an individual condition. * * @param string $Type One of the types in this condition. * @param string $Field The field to test against. * @param string $Expr The expression to test with. * @return bool */ public static function TestOne($Type, $Field, $Expr = NULL) { switch (strtolower($Type)) { case PERMISSION: // Check to see if the user has the given permission. $Result = Gdn::Session()->CheckPermission($Field); if ($Value === FALSE) { return !$Result; } return $Result; case REQUEST: // See if the field is a specific value. switch (strtolower($Field)) { case 'path': $Value = Gdn::Request()->Path(); break; default: // See if the field is targetting a specific part of the request. $Fields = explode('.', $Field, 2); if (count($Fields) >= 2) { $Value = Gdn::Request()->GetValueFrom($Fields[0], $Fields[1], NULL); } else { $Value = Gdn::Request()->GetValue($Field, NULL); } break; } $Result = Gdn_Condition::TestValue($Value, $Expr); return $Result; case ROLE: // See if the user is in the given role. $RoleModel = new RoleModel(); $Roles = $RoleModel->GetByUserID(Gdn::Session()->UserID)->ResultArray(); foreach ($Roles as $Role) { if (is_numeric($Expr)) { $Result = $Expr == GetValue('RoleID', $Role); } else { $Result = Gdn_Condition::TestValue(GetValue('Name', $Role), $Expr); } if ($Result) { return TRUE; } } return FALSE; } return FALSE; }
/** * Pre-process content into a uniform format for output * * @param Array $content By reference */ protected function processContent(&$content) { foreach ($content as &$item) { $contentType = val('RecordType', $item); $userID = val('InsertUserID', $item); $itemProperties = array(); $itemFields = array('DiscussionID', 'DateInserted', 'DateUpdated', 'Body', 'Format', 'RecordType', 'Url', 'CategoryID', 'CategoryName', 'CategoryUrl'); switch (strtolower($contentType)) { case 'comment': $itemFields = array_merge($itemFields, array('CommentID')); // Comment specific $itemProperties['Name'] = sprintf(t('Re: %s'), valr('Discussion.Name', $item, val('Name', $item))); $url = CommentUrl($item); break; case 'discussion': $itemFields = array_merge($itemFields, array('Name', 'Type')); $url = DiscussionUrl($item); break; } $item['Url'] = $url; if ($categoryId = val('CategoryID', $item)) { $category = CategoryModel::categories($categoryId); $item['CategoryName'] = val('Name', $category); $item['CategoryUrl'] = CategoryUrl($category); } $itemFields = array_fill_keys($itemFields, true); $filteredItem = array_intersect_key($item, $itemFields); $itemProperties = array_merge($itemProperties, $filteredItem); $item = $itemProperties; // Attach User $userFields = array('UserID', 'Name', 'Title', 'Location', 'PhotoUrl', 'RankName', 'Url', 'Roles', 'RoleNames'); $user = Gdn::userModel()->getID($userID); $roleModel = new RoleModel(); $roles = $roleModel->GetByUserID($userID)->resultArray(); $roleNames = ''; foreach ($roles as $role) { $roleNames[] = val('Name', $role); } // check $rankName = null; if (class_exists('RankModel')) { $rankName = val('Name', RankModel::Ranks(val('RankID', $user)), null); } $userProperties = array('Url' => url(userUrl($user), true), 'PhotoUrl' => UserPhotoUrl($user), 'RankName' => $rankName, 'RoleNames' => $roleNames, 'CssClass' => val('_CssClass', $user)); $user = (array) $user; $userFields = array_fill_keys($userFields, true); $filteredUser = array_intersect_key($user, $userFields); $userProperties = array_merge($filteredUser, $userProperties); $item['Author'] = $userProperties; } }
/** * Filters permission array based on config setting. * * @param object $sender Generally this is the UserModel. * @param mixed $args EventArguments, mainly the user. * @return void. * @package ReadOnly * @since 0.1 */ public function base_afterGetSession_handler($sender, $args) { // Admin user will never be restricted. if ($args['User']->Admin) { return; } $roles = c('ReadOnly.Roles'); $roleModel = new RoleModel(); $userRoles = $roleModel->GetByUserID($args['User']->UserID)->ResultArray(); foreach ($userRoles as $userRole) { if (in_array($userRole, $roles)) { return; } } $restrictions = c('ReadOnly.Restrictions'); // Go through all permissions of the session user. $permissions = $args['User']->Permissions; foreach ($permissions as $key => $permission) { // Split permission name in pieces. if (!is_array($permission)) { $suffix = substr($permission, strrpos($permission, '.') + 1); } else { $suffix = substr($key, strrpos($key, '.') + 1); } // Delete all restricted permissions. if (in_array($suffix, $restrictions)) { unset($permissions[$key]); } } // Overwrite the reduced permission array to the session user. $args['User']->Permissions = $permissions; }