示例#1
0
文件: Users.php 项目: emory/Known
 function postContent()
 {
     $this->adminGatekeeper();
     // Admins only
     $action = $this->getInput('action');
     switch ($action) {
         case 'add_rights':
             $uuid = $this->getInput('user');
             if ($user = User::getByUUID($uuid)) {
                 $user->setAdmin(true);
                 $user->save();
                 \Idno\Core\site()->session()->addMessage($user->getTitle() . " was given administration rights.");
             }
             break;
         case 'remove_rights':
             $uuid = $this->getInput('user');
             if ($user = User::getByUUID($uuid)) {
                 $user->setAdmin(false);
                 $user->save();
                 \Idno\Core\site()->session()->addMessage($user->getTitle() . " was stripped of their administration rights.");
             }
             break;
         case 'delete':
             $uuid = $this->getInput('user');
             if ($user = User::getByUUID($uuid)) {
                 if ($user->delete()) {
                     \Idno\Core\site()->session()->addMessage($user->getTitle() . " was removed from your site.");
                 }
             }
             break;
         case 'invite_users':
             $emails = $this->getInput('invitation_emails');
             preg_match_all('/[a-z\\d._%\\+\\-]+@[a-z\\d.-]+\\.[a-z]{2,4}\\b/i', $emails, $matches);
             $invitation_count = 0;
             if (!empty($matches[0])) {
                 if (is_array($matches[0])) {
                     foreach ($matches[0] as $email) {
                         if (!($user = User::getByEmail($email))) {
                             $invitation = new Invitation();
                             if ($invitation->sendToEmail($email, \Idno\Core\site()->session()->currentUser()->email) !== 0) {
                                 $invitation_count++;
                             }
                         }
                     }
                 }
             }
             if ($invitation_count > 1) {
                 \Idno\Core\site()->session()->addMessage("{$invitation_count} invitations were sent.");
             } else {
                 if ($invitation_count == 1) {
                     \Idno\Core\site()->session()->addMessage("Your invitation was sent.");
                 } else {
                     \Idno\Core\site()->session()->addMessage("No email addresses were found or all the people you invited are already members of this site.");
                 }
             }
             break;
         case 'remove_invitation':
             $invitation_id = $this->getInput('invitation_id');
             if ($invitation = Invitation::getByID($invitation_id)) {
                 if ($invitation->delete()) {
                     \Idno\Core\site()->session()->addMessage("The invitation was removed.");
                 }
             }
             break;
         case 'resend_invitation':
             $invitation_id = $this->getInput('invitation_id');
             if ($invitation = Invitation::getByID($invitation_id)) {
                 $email = $invitation->email;
                 if ($invitation->delete()) {
                     $new_invitation = new Invitation();
                     if ($new_invitation->sendToEmail($email)) {
                         \Idno\Core\site()->session()->addMessage("The invitation was resent.");
                     }
                 }
             }
             break;
         case 'add_user':
             if (!\Idno\Core\site()->config()->canAddUsers()) {
                 \Idno\Core\site()->session()->addMessage("You can't add any more users to your site.");
                 break;
             }
             $name = $this->getInput('name');
             $handle = trim($this->getInput('handle'));
             $email = trim($this->getInput('email'));
             $password = trim($this->getInput('password1'));
             $password2 = trim($this->getInput('password2'));
             $user = new \Idno\Entities\User();
             if (empty($password) || $password != $password2) {
                 \Idno\Core\site()->session()->addMessage("Please make sure your passwords match and aren't empty.");
             } else {
                 if (empty($handle) && empty($email)) {
                     \Idno\Core\site()->session()->addMessage("Please enter a username and email address.");
                 } else {
                     if (!empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL)) {
                         if (!($emailuser = \Idno\Entities\User::getByEmail($email)) && !($handleuser = \Idno\Entities\User::getByHandle($handle)) && !empty($handle) && strlen($handle) <= 32 && !substr_count($handle, '/')) {
                             $user = new \Idno\Entities\User();
                             $user->email = $email;
                             $user->handle = strtolower(trim($handle));
                             // Trim the handle and set it to lowercase
                             $user->setPassword($password);
                             if (empty($name)) {
                                 $name = $user->handle;
                             }
                             $user->setTitle($name);
                             $user->save();
                         } else {
                             if (empty($handle)) {
                                 \Idno\Core\site()->session()->addMessage("Please create a username.");
                             }
                             if (strlen($handle) > 32) {
                                 \Idno\Core\site()->session()->addMessage("Your username is too long.");
                             }
                             if (substr_count($handle, '/')) {
                                 \Idno\Core\site()->session()->addMessage("Usernames can't contain a slash ('/') character.");
                             }
                             if (!empty($handleuser)) {
                                 \Idno\Core\site()->session()->addMessage("Unfortunately, someone is already using that username. Please choose another.");
                             }
                             if (!empty($emailuser)) {
                                 \Idno\Core\site()->session()->addMessage("Hey, it looks like there's already an account with that email address. Did you forget your login?");
                             }
                         }
                     } else {
                         \Idno\Core\site()->session()->addMessage("That doesn't seem like it's a valid email address.");
                     }
                 }
             }
             if (!empty($user->_id)) {
                 \Idno\Core\site()->session()->addMessage("User " . $user->getHandle() . " was created. You may wish to email them to let them know.");
             } else {
                 \Idno\Core\site()->session()->addMessageAtStart("We couldn't register that user.");
             }
             break;
         case 'block_emails':
             $emails = $this->getInput('blocked_emails');
             preg_match_all('/[a-z\\d._%+-]+@[a-z\\d.-]+\\.[a-z]{2,4}\\b/i', $emails, $matches);
             $block_count = 0;
             if (!empty($matches[0])) {
                 if (is_array($matches[0])) {
                     foreach ($matches[0] as $email) {
                         if (\Idno\Core\site()->config()->addBlockedEmail($email)) {
                             $block_count++;
                         }
                     }
                     \Idno\Core\site()->config()->save();
                 }
             }
             if ($block_count > 1) {
                 \Idno\Core\site()->session()->addMessage("{$block_count} emails were blocked.");
             } else {
                 if ($block_count == 1) {
                     \Idno\Core\site()->session()->addMessage("The email address was blocked.");
                 } else {
                     \Idno\Core\site()->session()->addMessage("No email addresses were found.");
                 }
             }
             break;
         case 'unblock_emails':
             $emails = $this->getInput('blocked_emails');
             preg_match_all('/[a-z\\d._%+-]+@[a-z\\d.-]+\\.[a-z]{2,4}\\b/i', $emails, $matches);
             $block_count = 0;
             if (!empty($matches[0])) {
                 if (is_array($matches[0])) {
                     foreach ($matches[0] as $email) {
                         if (\Idno\Core\site()->config()->removeBlockedEmail($email)) {
                             $block_count++;
                         }
                     }
                     \Idno\Core\site()->config()->save();
                 }
             }
             if ($block_count > 1) {
                 \Idno\Core\site()->session()->addMessage("{$block_count} emails were unblocked.");
             } else {
                 if ($block_count == 1) {
                     \Idno\Core\site()->session()->addMessage("The email address was unblocked.");
                 } else {
                     \Idno\Core\site()->session()->addMessage("No email addresses were found.");
                 }
             }
             break;
     }
     $this->forward(\Idno\Core\site()->config()->getURL() . 'admin/users');
 }