Modernize People
Summary: Adds Crumbs, pht's, and checkout out mobile. Test Plan: Added, removed people. Changed roles, checked iOS and Chrome. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D5052
This commit is contained in:
		@@ -29,7 +29,7 @@ final class PhabricatorEmailVerificationController
 | 
			
		||||
      array(
 | 
			
		||||
        'href' => '/',
 | 
			
		||||
      ),
 | 
			
		||||
      'Continue to Phabricator');
 | 
			
		||||
      pht('Continue to Phabricator'));
 | 
			
		||||
    $home_link = hsprintf(
 | 
			
		||||
      '<br /><p><strong>%s</strong></p>',
 | 
			
		||||
      $home_link);
 | 
			
		||||
@@ -39,26 +39,28 @@ final class PhabricatorEmailVerificationController
 | 
			
		||||
      array(
 | 
			
		||||
        'href' => '/settings/panel/email/',
 | 
			
		||||
      ),
 | 
			
		||||
      'Return to Email Settings');
 | 
			
		||||
      pht('Return to Email Settings'));
 | 
			
		||||
    $settings_link = hsprintf(
 | 
			
		||||
      '<br /><p><strong>%s</strong></p>',
 | 
			
		||||
      $settings_link);
 | 
			
		||||
 | 
			
		||||
    if (!$email) {
 | 
			
		||||
      $content = id(new AphrontErrorView())
 | 
			
		||||
        ->setTitle('Unable To Verify')
 | 
			
		||||
        ->setTitle(pht('Unable To Verify'))
 | 
			
		||||
        ->appendChild(phutil_tag(
 | 
			
		||||
          'p',
 | 
			
		||||
          array(),
 | 
			
		||||
          'The verification code is incorrect, the email address has been '.
 | 
			
		||||
          pht('The verification code is incorrect, the email address has been '.
 | 
			
		||||
            'removed, or the email address is owned by another user. Make '.
 | 
			
		||||
            'sure you followed the link in the email correctly.'));
 | 
			
		||||
            'sure you followed the link in the email correctly.')));
 | 
			
		||||
    } else if ($email->getIsVerified()) {
 | 
			
		||||
      $inst = pht('This email address has already been verified.');
 | 
			
		||||
      $content = id(new AphrontErrorView())
 | 
			
		||||
        ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
 | 
			
		||||
        ->setTitle('Address Already Verified')
 | 
			
		||||
        ->setTitle(pht('Address Already Verified'))
 | 
			
		||||
        ->appendChild(hsprintf(
 | 
			
		||||
          '<p>This email address has already been verified.</p>%s',
 | 
			
		||||
          '<p>%s</p>%s',
 | 
			
		||||
          $inst,
 | 
			
		||||
          $settings_link));
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
@@ -67,11 +69,13 @@ final class PhabricatorEmailVerificationController
 | 
			
		||||
        $email->save();
 | 
			
		||||
      unset($guard);
 | 
			
		||||
 | 
			
		||||
      $inst = pht('This email address has now been verified. Thanks!');
 | 
			
		||||
      $content = id(new AphrontErrorView())
 | 
			
		||||
        ->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
 | 
			
		||||
        ->setTitle('Address Verified')
 | 
			
		||||
        ->setTitle(pht('Address Verified'))
 | 
			
		||||
        ->appendChild(hsprintf(
 | 
			
		||||
          '<p>This email address has now been verified. Thanks!</p>%s%s',
 | 
			
		||||
          '<p>%s</p>%s%s',
 | 
			
		||||
          $inst,
 | 
			
		||||
          $home_link,
 | 
			
		||||
          $settings_link));
 | 
			
		||||
    }
 | 
			
		||||
@@ -79,7 +83,8 @@ final class PhabricatorEmailVerificationController
 | 
			
		||||
    return $this->buildApplicationPage(
 | 
			
		||||
      $content,
 | 
			
		||||
      array(
 | 
			
		||||
        'title' => 'Verify Email',
 | 
			
		||||
        'title' => pht('Verify Email'),
 | 
			
		||||
        'device' => true,
 | 
			
		||||
      ));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,22 +9,42 @@ abstract class PhabricatorPeopleController extends PhabricatorController {
 | 
			
		||||
    $is_admin = $this->getRequest()->getUser()->getIsAdmin();
 | 
			
		||||
 | 
			
		||||
    if ($is_admin) {
 | 
			
		||||
      $nav->addLabel('Create Users');
 | 
			
		||||
      $nav->addFilter('edit', 'Create New User');
 | 
			
		||||
      $nav->addLabel(pht('User Administration'));
 | 
			
		||||
      $nav->addFilter('edit', pht('Create New User'));
 | 
			
		||||
      if (PhabricatorEnv::getEnvConfig('ldap.auth-enabled') === true) {
 | 
			
		||||
        $nav->addFilter('ldap', 'Import from LDAP');
 | 
			
		||||
        $nav->addFilter('ldap', pht('Import from LDAP'));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $nav->addLabel('Directory');
 | 
			
		||||
    $nav->addFilter('people', 'User Directory', $this->getApplicationURI());
 | 
			
		||||
    $nav->addFilter('people',
 | 
			
		||||
      pht('User Directory'),
 | 
			
		||||
      $this->getApplicationURI());
 | 
			
		||||
 | 
			
		||||
    if ($is_admin) {
 | 
			
		||||
      $nav->addLabel('Logs');
 | 
			
		||||
      $nav->addFilter('logs', 'Activity Logs');
 | 
			
		||||
      $nav->addFilter('logs', pht('Activity Logs'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $nav;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public function buildApplicationMenu() {
 | 
			
		||||
    return $this->buildSideNavView()->getMenu();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public function buildApplicationCrumbs() {
 | 
			
		||||
    $crumbs = parent::buildApplicationCrumbs();
 | 
			
		||||
    // I'm sure this copypasty is wrong.
 | 
			
		||||
    $is_admin = $this->getRequest()->getUser()->getIsAdmin();
 | 
			
		||||
 | 
			
		||||
    if ($is_admin) {
 | 
			
		||||
      $crumbs->addAction(
 | 
			
		||||
        id(new PhabricatorMenuItemView())
 | 
			
		||||
          ->setName(pht('Create New User'))
 | 
			
		||||
          ->setHref($this->getApplicationURI('edit'))
 | 
			
		||||
          ->setIcon('create'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $crumbs;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,27 +20,41 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $request = $this->getRequest();
 | 
			
		||||
    $admin = $request->getUser();
 | 
			
		||||
 | 
			
		||||
    $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
 | 
			
		||||
    if ($this->id) {
 | 
			
		||||
      $user = id(new PhabricatorUser())->load($this->id);
 | 
			
		||||
      if (!$user) {
 | 
			
		||||
        return new Aphront404Response();
 | 
			
		||||
      }
 | 
			
		||||
      $base_uri = '/people/edit/'.$user->getID().'/';
 | 
			
		||||
      $crumbs->addCrumb(
 | 
			
		||||
        id(new PhabricatorCrumbView())
 | 
			
		||||
          ->setName(pht('Edit User'))
 | 
			
		||||
          ->setHref('/people/edit/'));
 | 
			
		||||
      $crumbs->addCrumb(
 | 
			
		||||
        id(new PhabricatorCrumbView())
 | 
			
		||||
          ->setName($user->getFullName())
 | 
			
		||||
          ->setHref($base_uri));
 | 
			
		||||
    } else {
 | 
			
		||||
      $user = new PhabricatorUser();
 | 
			
		||||
      $base_uri = '/people/edit/';
 | 
			
		||||
      $crumbs->addCrumb(
 | 
			
		||||
        id(new PhabricatorCrumbView())
 | 
			
		||||
          ->setName(pht('Create New User'))
 | 
			
		||||
          ->setHref($base_uri));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $nav = new AphrontSideNavFilterView();
 | 
			
		||||
    $nav->setBaseURI(new PhutilURI($base_uri));
 | 
			
		||||
    $nav->addLabel('User Information');
 | 
			
		||||
    $nav->addFilter('basic', 'Basic Information');
 | 
			
		||||
    $nav->addFilter('role',  'Edit Roles');
 | 
			
		||||
    $nav->addFilter('cert',  'Conduit Certificate');
 | 
			
		||||
    $nav->addFilter('profile', 'View Profile', '/p/'.$user->getUsername().'/');
 | 
			
		||||
    $nav->addLabel('Special');
 | 
			
		||||
    $nav->addFilter('rename', 'Change Username');
 | 
			
		||||
    $nav->addFilter('delete', 'Delete User');
 | 
			
		||||
    $nav->addLabel(pht('User Information'));
 | 
			
		||||
    $nav->addFilter('basic', pht('Basic Information'));
 | 
			
		||||
    $nav->addFilter('role', pht('Edit Roles'));
 | 
			
		||||
    $nav->addFilter('cert', pht('Conduit Certificate'));
 | 
			
		||||
    $nav->addFilter('profile',
 | 
			
		||||
      pht('View Profile'), '/p/'.$user->getUsername().'/');
 | 
			
		||||
    $nav->addLabel(pht('Special'));
 | 
			
		||||
    $nav->addFilter('rename', pht('Change Username'));
 | 
			
		||||
    $nav->addFilter('delete', pht('Delete User'));
 | 
			
		||||
 | 
			
		||||
    if (!$user->getID()) {
 | 
			
		||||
      $this->view = 'basic';
 | 
			
		||||
@@ -53,9 +67,9 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    if ($request->getStr('saved')) {
 | 
			
		||||
      $notice = new AphrontErrorView();
 | 
			
		||||
      $notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
 | 
			
		||||
      $notice->setTitle('Changes Saved');
 | 
			
		||||
      $notice->setTitle(pht('Changes Saved'));
 | 
			
		||||
      $notice->appendChild(
 | 
			
		||||
        phutil_tag('p', array(), 'Your changes were saved.'));
 | 
			
		||||
        phutil_tag('p', array(), pht('Your changes were saved.')));
 | 
			
		||||
      $content[] = $notice;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -93,10 +107,12 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
      $nav->appendChild($content);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $nav->setCrumbs($crumbs);
 | 
			
		||||
    return $this->buildApplicationPage(
 | 
			
		||||
      $nav,
 | 
			
		||||
      array(
 | 
			
		||||
        'title' => 'Edit User',
 | 
			
		||||
        'title' => pht('Edit User'),
 | 
			
		||||
        'device' => true,
 | 
			
		||||
      ));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -123,10 +139,10 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
 | 
			
		||||
        $new_email = $request->getStr('email');
 | 
			
		||||
        if (!strlen($new_email)) {
 | 
			
		||||
          $errors[] = 'Email is required.';
 | 
			
		||||
          $e_email = 'Required';
 | 
			
		||||
          $errors[] = pht('Email is required.');
 | 
			
		||||
          $e_email = pht('Required');
 | 
			
		||||
        } else if (!PhabricatorUserEmail::isAllowedAddress($new_email)) {
 | 
			
		||||
          $e_email = 'Invalid';
 | 
			
		||||
          $e_email = pht('Invalid');
 | 
			
		||||
          $errors[] = PhabricatorUserEmail::describeAllowedAddresses();
 | 
			
		||||
        } else {
 | 
			
		||||
          $e_email = null;
 | 
			
		||||
@@ -136,18 +152,18 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
      $user->setRealName($request->getStr('realname'));
 | 
			
		||||
 | 
			
		||||
      if (!strlen($user->getUsername())) {
 | 
			
		||||
        $errors[] = "Username is required.";
 | 
			
		||||
        $e_username = 'Required';
 | 
			
		||||
        $errors[] = pht("Username is required.");
 | 
			
		||||
        $e_username = pht('Required');
 | 
			
		||||
      } else if (!PhabricatorUser::validateUsername($user->getUsername())) {
 | 
			
		||||
        $errors[] = PhabricatorUser::describeValidUsername();
 | 
			
		||||
        $e_username = 'Invalid';
 | 
			
		||||
        $e_username = pht('Invalid');
 | 
			
		||||
      } else {
 | 
			
		||||
        $e_username = null;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!strlen($user->getRealName())) {
 | 
			
		||||
        $errors[] = 'Real name is required.';
 | 
			
		||||
        $e_realname = 'Required';
 | 
			
		||||
        $errors[] = pht('Real name is required.');
 | 
			
		||||
        $e_realname = pht('Required');
 | 
			
		||||
      } else {
 | 
			
		||||
        $e_realname = null;
 | 
			
		||||
      }
 | 
			
		||||
@@ -184,7 +200,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
            ->setURI('/people/edit/'.$user->getID().'/?saved=true');
 | 
			
		||||
          return $response;
 | 
			
		||||
        } catch (AphrontQueryDuplicateKeyException $ex) {
 | 
			
		||||
          $errors[] = 'Username and email must be unique.';
 | 
			
		||||
          $errors[] = pht('Username and email must be unique.');
 | 
			
		||||
 | 
			
		||||
          $same_username = id(new PhabricatorUser())
 | 
			
		||||
            ->loadOneWhere('username = %s', $user->getUsername());
 | 
			
		||||
@@ -192,11 +208,11 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
            ->loadOneWhere('address = %s', $new_email);
 | 
			
		||||
 | 
			
		||||
          if ($same_username) {
 | 
			
		||||
            $e_username = 'Duplicate';
 | 
			
		||||
            $e_username = pht('Duplicate');
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if ($same_email) {
 | 
			
		||||
            $e_email = 'Duplicate';
 | 
			
		||||
            $e_email = pht('Duplicate');
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@@ -205,7 +221,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $error_view = null;
 | 
			
		||||
    if ($errors) {
 | 
			
		||||
      $error_view = id(new AphrontErrorView())
 | 
			
		||||
        ->setTitle('Form Errors')
 | 
			
		||||
        ->setTitle(pht('Form Errors'))
 | 
			
		||||
        ->setErrors($errors);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -226,14 +242,14 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $form
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('Username')
 | 
			
		||||
          ->setLabel(pht('Username'))
 | 
			
		||||
          ->setName('username')
 | 
			
		||||
          ->setValue($user->getUsername())
 | 
			
		||||
          ->setError($e_username)
 | 
			
		||||
          ->setDisabled($is_immutable))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('Real Name')
 | 
			
		||||
          ->setLabel(pht('Real Name'))
 | 
			
		||||
          ->setName('realname')
 | 
			
		||||
          ->setValue($user->getRealName())
 | 
			
		||||
          ->setError($e_realname));
 | 
			
		||||
@@ -241,7 +257,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    if (!$user->getID()) {
 | 
			
		||||
      $form->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('Email')
 | 
			
		||||
          ->setLabel(pht('Email'))
 | 
			
		||||
          ->setName('email')
 | 
			
		||||
          ->setDisabled($is_immutable)
 | 
			
		||||
          ->setValue($new_email)
 | 
			
		||||
@@ -250,14 +266,15 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    } else {
 | 
			
		||||
      $email = $user->loadPrimaryEmail();
 | 
			
		||||
      if ($email) {
 | 
			
		||||
        $status = $email->getIsVerified() ? 'Verified' : 'Unverified';
 | 
			
		||||
        $status = $email->getIsVerified() ?
 | 
			
		||||
          pht('Verified') : pht('Unverified');
 | 
			
		||||
      } else {
 | 
			
		||||
        $status = 'No Email Address';
 | 
			
		||||
        $status = pht('No Email Address');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      $form->appendChild(
 | 
			
		||||
        id(new AphrontFormStaticControl())
 | 
			
		||||
          ->setLabel('Email')
 | 
			
		||||
          ->setLabel(pht('Email'))
 | 
			
		||||
          ->setValue($status));
 | 
			
		||||
 | 
			
		||||
      $form->appendChild(
 | 
			
		||||
@@ -265,7 +282,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
        ->addCheckbox(
 | 
			
		||||
          'welcome',
 | 
			
		||||
          1,
 | 
			
		||||
          'Re-send "Welcome to Phabricator" email.',
 | 
			
		||||
          pht('Re-send "Welcome to Phabricator" email.'),
 | 
			
		||||
          false));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
@@ -276,39 +293,39 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
      $form
 | 
			
		||||
        ->appendChild(
 | 
			
		||||
          id(new AphrontFormSelectControl())
 | 
			
		||||
            ->setLabel('Role')
 | 
			
		||||
            ->setLabel(pht('Role'))
 | 
			
		||||
            ->setName('role')
 | 
			
		||||
            ->setValue('user')
 | 
			
		||||
            ->setOptions(
 | 
			
		||||
              array(
 | 
			
		||||
                'user'  => 'Normal User',
 | 
			
		||||
                'agent' => 'System Agent',
 | 
			
		||||
                'user'  => pht('Normal User'),
 | 
			
		||||
                'agent' => pht('System Agent'),
 | 
			
		||||
              ))
 | 
			
		||||
            ->setCaption(
 | 
			
		||||
              'You can create a "system agent" account for bots, scripts, '.
 | 
			
		||||
              'etc.'))
 | 
			
		||||
              pht('You can create a "system agent" account for bots, '.
 | 
			
		||||
              'scripts, etc.')))
 | 
			
		||||
        ->appendChild(
 | 
			
		||||
          id(new AphrontFormCheckboxControl())
 | 
			
		||||
            ->addCheckbox(
 | 
			
		||||
              'welcome',
 | 
			
		||||
              1,
 | 
			
		||||
              'Send "Welcome to Phabricator" email.',
 | 
			
		||||
              pht('Send "Welcome to Phabricator" email.'),
 | 
			
		||||
              $welcome_checked));
 | 
			
		||||
    } else {
 | 
			
		||||
      $roles = array();
 | 
			
		||||
 | 
			
		||||
      if ($user->getIsSystemAgent()) {
 | 
			
		||||
        $roles[] = 'System Agent';
 | 
			
		||||
        $roles[] = pht('System Agent');
 | 
			
		||||
      }
 | 
			
		||||
      if ($user->getIsAdmin()) {
 | 
			
		||||
        $roles[] = 'Admin';
 | 
			
		||||
        $roles[] = pht('Admin');
 | 
			
		||||
      }
 | 
			
		||||
      if ($user->getIsDisabled()) {
 | 
			
		||||
        $roles[] = 'Disabled';
 | 
			
		||||
        $roles[] = pht('Disabled');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!$roles) {
 | 
			
		||||
        $roles[] = 'Normal User';
 | 
			
		||||
        $roles[] = pht('Normal User');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      $roles = implode(', ', $roles);
 | 
			
		||||
@@ -322,16 +339,17 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $form
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormSubmitControl())
 | 
			
		||||
          ->setValue('Save'));
 | 
			
		||||
          ->setValue(pht('Save')));
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    if ($user->getID()) {
 | 
			
		||||
      $panel->setHeader('Edit User');
 | 
			
		||||
      $panel->setHeader(pht('Edit User'));
 | 
			
		||||
    } else {
 | 
			
		||||
      $panel->setHeader('Create New User');
 | 
			
		||||
      $panel->setHeader(pht('Create New User'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $panel->appendChild($form);
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
 | 
			
		||||
 | 
			
		||||
    return array($error_view, $panel);
 | 
			
		||||
@@ -355,7 +373,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
      $logs = array();
 | 
			
		||||
 | 
			
		||||
      if ($is_self) {
 | 
			
		||||
        $errors[] = "You can not edit your own role.";
 | 
			
		||||
        $errors[] = pht("You can not edit your own role.");
 | 
			
		||||
      } else {
 | 
			
		||||
        $new_admin = (bool)$request->getBool('is_admin');
 | 
			
		||||
        $old_admin = (bool)$user->getIsAdmin();
 | 
			
		||||
@@ -383,7 +401,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $error_view = null;
 | 
			
		||||
    if ($errors) {
 | 
			
		||||
      $error_view = id(new AphrontErrorView())
 | 
			
		||||
        ->setTitle('Form Errors')
 | 
			
		||||
        ->setTitle(pht('Form Errors'))
 | 
			
		||||
        ->setErrors($errors);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -393,9 +411,9 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
      ->setAction($request->getRequestURI()->alter('saved', null));
 | 
			
		||||
 | 
			
		||||
    if ($is_self) {
 | 
			
		||||
      $inst = pht('NOTE: You can not edit your own role.');
 | 
			
		||||
      $form->appendChild(hsprintf(
 | 
			
		||||
        '<p class="aphront-form-instructions">NOTE: You can not edit your own '.
 | 
			
		||||
        'role.</p>'));
 | 
			
		||||
        '<p class="aphront-form-instructions">%s</p>', $inst));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $form
 | 
			
		||||
@@ -405,7 +423,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
          ->addCheckbox(
 | 
			
		||||
            'is_admin',
 | 
			
		||||
            1,
 | 
			
		||||
            'Administrator',
 | 
			
		||||
            pht('Administrator'),
 | 
			
		||||
            $user->getIsAdmin())
 | 
			
		||||
          ->setDisabled($is_self))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
@@ -413,7 +431,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
          ->addCheckbox(
 | 
			
		||||
            'is_disabled',
 | 
			
		||||
            1,
 | 
			
		||||
            'Disabled',
 | 
			
		||||
            pht('Disabled'),
 | 
			
		||||
            $user->getIsDisabled())
 | 
			
		||||
          ->setDisabled($is_self))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
@@ -421,7 +439,7 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
          ->addCheckbox(
 | 
			
		||||
            'is_agent',
 | 
			
		||||
            1,
 | 
			
		||||
            'System Agent (Bot/Script User)',
 | 
			
		||||
            pht('System Agent (Bot/Script User)'),
 | 
			
		||||
            $user->getIsSystemAgent())
 | 
			
		||||
          ->setDisabled(true));
 | 
			
		||||
 | 
			
		||||
@@ -429,12 +447,13 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
      $form
 | 
			
		||||
        ->appendChild(
 | 
			
		||||
          id(new AphrontFormSubmitControl())
 | 
			
		||||
            ->setValue('Edit Role'));
 | 
			
		||||
            ->setValue(pht('Edit Role')));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('Edit Role');
 | 
			
		||||
    $panel->setHeader(pht('Edit Role'));
 | 
			
		||||
    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->appendChild($form);
 | 
			
		||||
 | 
			
		||||
    return array($error_view, $panel);
 | 
			
		||||
@@ -444,37 +463,38 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $request = $this->getRequest();
 | 
			
		||||
    $admin = $request->getUser();
 | 
			
		||||
 | 
			
		||||
    $inst = pht('You can use this certificate '.
 | 
			
		||||
        'to write scripts or bots which interface with Phabricator over '.
 | 
			
		||||
        'Conduit.');
 | 
			
		||||
    $form = new AphrontFormView();
 | 
			
		||||
    $form
 | 
			
		||||
      ->setUser($admin)
 | 
			
		||||
      ->setAction($request->getRequestURI())
 | 
			
		||||
      ->appendChild(hsprintf(
 | 
			
		||||
        '<p class="aphront-form-instructions">You can use this certificate '.
 | 
			
		||||
        'to write scripts or bots which interface with Phabricator over '.
 | 
			
		||||
        'Conduit.</p>'));
 | 
			
		||||
        '<p class="aphront-form-instructions">%s</p>', $inst));
 | 
			
		||||
 | 
			
		||||
    if ($user->getIsSystemAgent()) {
 | 
			
		||||
      $form
 | 
			
		||||
        ->appendChild(
 | 
			
		||||
          id(new AphrontFormTextControl())
 | 
			
		||||
            ->setLabel('Username')
 | 
			
		||||
            ->setLabel(pht('Username'))
 | 
			
		||||
            ->setValue($user->getUsername()))
 | 
			
		||||
        ->appendChild(
 | 
			
		||||
          id(new AphrontFormTextAreaControl())
 | 
			
		||||
            ->setLabel('Certificate')
 | 
			
		||||
            ->setLabel(pht('Certificate'))
 | 
			
		||||
            ->setValue($user->getConduitCertificate()));
 | 
			
		||||
    } else {
 | 
			
		||||
      $form->appendChild(
 | 
			
		||||
        id(new AphrontFormStaticControl())
 | 
			
		||||
          ->setLabel('Certificate')
 | 
			
		||||
          ->setLabel(pht('Certificate'))
 | 
			
		||||
          ->setValue(
 | 
			
		||||
            'You may only view the certificates of System Agents.'));
 | 
			
		||||
            pht('You may only view the certificates of System Agents.')));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('Conduit Certificate');
 | 
			
		||||
    $panel->setHeader(pht('Conduit Certificate'));
 | 
			
		||||
    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
 | 
			
		||||
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->appendChild($form);
 | 
			
		||||
 | 
			
		||||
    return array($panel);
 | 
			
		||||
@@ -492,13 +512,13 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
 | 
			
		||||
      $username = $request->getStr('username');
 | 
			
		||||
      if (!strlen($username)) {
 | 
			
		||||
        $e_username = 'Required';
 | 
			
		||||
        $errors[] = 'New username is required.';
 | 
			
		||||
        $e_username = pht('Required');
 | 
			
		||||
        $errors[] = pht('New username is required.');
 | 
			
		||||
      } else if ($username == $user->getUsername()) {
 | 
			
		||||
        $e_username = 'Invalid';
 | 
			
		||||
        $errors[] = 'New username must be different from old username.';
 | 
			
		||||
        $e_username = pht('Invalid');
 | 
			
		||||
        $errors[] = pht('New username must be different from old username.');
 | 
			
		||||
      } else if (!PhabricatorUser::validateUsername($username)) {
 | 
			
		||||
        $e_username = 'Invalid';
 | 
			
		||||
        $e_username = pht('Invalid');
 | 
			
		||||
        $errors[] = PhabricatorUser::describeValidUsername();
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@@ -512,61 +532,67 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
          return id(new AphrontRedirectResponse())
 | 
			
		||||
            ->setURI($request->getRequestURI()->alter('saved', true));
 | 
			
		||||
        } catch (AphrontQueryDuplicateKeyException $ex) {
 | 
			
		||||
          $e_username = 'Not Unique';
 | 
			
		||||
          $errors[] = 'Another user already has that username.';
 | 
			
		||||
          $e_username = pht('Not Unique');
 | 
			
		||||
          $errors[] = pht('Another user already has that username.');
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($errors) {
 | 
			
		||||
      $errors = id(new AphrontErrorView())
 | 
			
		||||
        ->setTitle('Form Errors')
 | 
			
		||||
        ->setTitle(pht('Form Errors'))
 | 
			
		||||
        ->setErrors($errors);
 | 
			
		||||
    } else {
 | 
			
		||||
      $errors = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $inst1 = pht('Be careful when renaming users!');
 | 
			
		||||
    $inst2 = pht('The old username will no longer be tied to the user, so '.
 | 
			
		||||
          'anything which uses it (like old commit messages) will no longer '.
 | 
			
		||||
          'associate correctly. And if you give a user a username which some '.
 | 
			
		||||
          'other user used to have, username lookups will begin returning '.
 | 
			
		||||
          'the wrong user.');
 | 
			
		||||
    $inst3 = pht('It is generally safe to rename newly created users (and '.
 | 
			
		||||
          'test users and so on), but less safe to rename established users '.
 | 
			
		||||
          'and unsafe to reissue a username.');
 | 
			
		||||
    $inst4 = pht('Users who rely on password auth will need to reset their '.
 | 
			
		||||
          'passwordafter their username is changed (their username is part '.
 | 
			
		||||
          'of the salt in the password hash). They will receive an email '.
 | 
			
		||||
          'with instructions on how to do this.');
 | 
			
		||||
 | 
			
		||||
    $form = new AphrontFormView();
 | 
			
		||||
    $form
 | 
			
		||||
      ->setUser($admin)
 | 
			
		||||
      ->setAction($request->getRequestURI())
 | 
			
		||||
      ->appendChild(hsprintf(
 | 
			
		||||
        '<p class="aphront-form-instructions">'.
 | 
			
		||||
          '<strong>Be careful when renaming users!</strong> '.
 | 
			
		||||
          'The old username will no longer be tied to the user, so anything '.
 | 
			
		||||
          'which uses it (like old commit messages) will no longer associate '.
 | 
			
		||||
          'correctly. And if you give a user a username which some other user '.
 | 
			
		||||
          'used to have, username lookups will begin returning the wrong '.
 | 
			
		||||
          'user.'.
 | 
			
		||||
          '<strong>%s</strong> '.
 | 
			
		||||
          '%s'.
 | 
			
		||||
        '</p>'.
 | 
			
		||||
        '<p class="aphront-form-instructions">'.
 | 
			
		||||
          'It is generally safe to rename newly created users (and test users '.
 | 
			
		||||
          'and so on), but less safe to rename established users and unsafe '.
 | 
			
		||||
          'to reissue a username.'.
 | 
			
		||||
          '%s'.
 | 
			
		||||
        '</p>'.
 | 
			
		||||
        '<p class="aphront-form-instructions">'.
 | 
			
		||||
          'Users who rely on password auth will need to reset their password '.
 | 
			
		||||
          'after their username is changed (their username is part of the '.
 | 
			
		||||
          'salt in the password hash). They will receive an email with '.
 | 
			
		||||
          'instructions on how to do this.'.
 | 
			
		||||
        '</p>'))
 | 
			
		||||
          '%s'.
 | 
			
		||||
        '</p>', $inst1, $inst2, $inst3, $inst4))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormStaticControl())
 | 
			
		||||
          ->setLabel('Old Username')
 | 
			
		||||
          ->setLabel(pht('Old Username'))
 | 
			
		||||
          ->setValue($user->getUsername()))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('New Username')
 | 
			
		||||
          ->setLabel(pht('New Username'))
 | 
			
		||||
          ->setValue($username)
 | 
			
		||||
          ->setName('username')
 | 
			
		||||
          ->setError($e_username))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormSubmitControl())
 | 
			
		||||
          ->setValue('Change Username'));
 | 
			
		||||
          ->setValue(pht('Change Username')));
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('Change Username');
 | 
			
		||||
    $panel->setHeader(pht('Change Username'));
 | 
			
		||||
    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->appendChild($form);
 | 
			
		||||
 | 
			
		||||
    return array($errors, $panel);
 | 
			
		||||
@@ -576,13 +602,15 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
    $request = $this->getRequest();
 | 
			
		||||
    $admin = $request->getUser();
 | 
			
		||||
 | 
			
		||||
    $far1 = pht('As you stare into the gaping maw of the abyss, something '.
 | 
			
		||||
        'hold you back.');
 | 
			
		||||
    $far2 = pht('You can not delete your own account.');
 | 
			
		||||
 | 
			
		||||
    if ($user->getPHID() == $admin->getPHID()) {
 | 
			
		||||
      $error = new AphrontErrorView();
 | 
			
		||||
      $error->setTitle('You Shall Journey No Farther');
 | 
			
		||||
      $error->setTitle(pht('You Shall Journey No Farther'));
 | 
			
		||||
      $error->appendChild(hsprintf(
 | 
			
		||||
        '<p>As you stare into the gaping maw of the abyss, something holds '.
 | 
			
		||||
        'you back.</p>'.
 | 
			
		||||
        '<p>You can not delete your own account.</p>'));
 | 
			
		||||
        '<p>%s</p><p>%s</p>', $far1, $far2));
 | 
			
		||||
      return $error;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -594,11 +622,11 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
 | 
			
		||||
      $username = $request->getStr('username');
 | 
			
		||||
      if (!strlen($username)) {
 | 
			
		||||
        $e_username = 'Required';
 | 
			
		||||
        $errors[] = 'You must type the username to confirm deletion.';
 | 
			
		||||
        $e_username = pht('Required');
 | 
			
		||||
        $errors[] = pht('You must type the username to confirm deletion.');
 | 
			
		||||
      } else if ($username != $user->getUsername()) {
 | 
			
		||||
        $e_username = 'Invalid';
 | 
			
		||||
        $errors[] = 'You must type the username correctly.';
 | 
			
		||||
        $e_username = pht('Invalid');
 | 
			
		||||
        $errors[] = pht('You must type the username correctly.');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (!$errors) {
 | 
			
		||||
@@ -612,49 +640,53 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
 | 
			
		||||
    if ($errors) {
 | 
			
		||||
      $errors = id(new AphrontErrorView())
 | 
			
		||||
        ->setTitle('Form Errors')
 | 
			
		||||
        ->setTitle(pht('Form Errors'))
 | 
			
		||||
        ->setErrors($errors);
 | 
			
		||||
    } else {
 | 
			
		||||
      $errors = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $str1 = pht('Be careful when deleting users!');
 | 
			
		||||
    $str2 = pht('If this user interacted with anything, it is generally '.
 | 
			
		||||
        'better to disable them, not delete them. If you delete them, it will '.
 | 
			
		||||
        'no longer be possible to search for their objects, for example, '.
 | 
			
		||||
        'and you will lose other information about their history. Disabling '.
 | 
			
		||||
        'them instead will prevent them from logging in but not destroy '.
 | 
			
		||||
        'any of their data.');
 | 
			
		||||
    $str3 = pht('It is generally safe to delete newly created users (and '.
 | 
			
		||||
          'test users and so on), but less safe to delete established users. '.
 | 
			
		||||
          'If possible, disable them instead.');
 | 
			
		||||
 | 
			
		||||
    $form = new AphrontFormView();
 | 
			
		||||
    $form
 | 
			
		||||
      ->setUser($admin)
 | 
			
		||||
      ->setAction($request->getRequestURI())
 | 
			
		||||
      ->appendChild(hsprintf(
 | 
			
		||||
        '<p class="aphront-form-instructions">'.
 | 
			
		||||
          '<strong>Be careful when deleting users!</strong> '.
 | 
			
		||||
          'If this user interacted with anything, it is generally better '.
 | 
			
		||||
          'to disable them, not delete them. If you delete them, it will '.
 | 
			
		||||
          'no longer be possible to search for their objects, for example, '.
 | 
			
		||||
          'and you will lose other information about their history. Disabling '.
 | 
			
		||||
          'them instead will prevent them from logging in but not destroy '.
 | 
			
		||||
          'any of their data.'.
 | 
			
		||||
          '<strong>%s</strong> %s'.
 | 
			
		||||
        '</p>'.
 | 
			
		||||
        '<p class="aphront-form-instructions">'.
 | 
			
		||||
          'It is generally safe to delete newly created users (and test users '.
 | 
			
		||||
          'and so on), but less safe to delete established users. If '.
 | 
			
		||||
          'possible, disable them instead.'.
 | 
			
		||||
        '</p>'))
 | 
			
		||||
          '%s'.
 | 
			
		||||
        '</p>', $str1, $str2, $str3))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormStaticControl())
 | 
			
		||||
          ->setLabel('Username')
 | 
			
		||||
          ->setLabel(pht('Username'))
 | 
			
		||||
          ->setValue($user->getUsername()))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('Confirm')
 | 
			
		||||
          ->setLabel(pht('Confirm'))
 | 
			
		||||
          ->setValue($username)
 | 
			
		||||
          ->setName('username')
 | 
			
		||||
          ->setCaption("Type the username again to confirm deletion.")
 | 
			
		||||
          ->setCaption(pht("Type the username again to confirm deletion."))
 | 
			
		||||
          ->setError($e_username))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormSubmitControl())
 | 
			
		||||
          ->setValue('Delete User'));
 | 
			
		||||
          ->setValue(pht('Delete User')));
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('Delete User');
 | 
			
		||||
    $panel->setHeader(pht('Delete User'));
 | 
			
		||||
    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->appendChild($form);
 | 
			
		||||
 | 
			
		||||
    return array($errors, $panel);
 | 
			
		||||
@@ -668,13 +700,13 @@ final class PhabricatorPeopleEditController
 | 
			
		||||
          'article/User_Guide_Account_Roles.html'),
 | 
			
		||||
        'target' => '_blank',
 | 
			
		||||
      ),
 | 
			
		||||
      'User Guide: Account Roles');
 | 
			
		||||
      pht('User Guide: Account Roles'));
 | 
			
		||||
 | 
			
		||||
    return hsprintf(
 | 
			
		||||
      '<p class="aphront-form-instructions">'.
 | 
			
		||||
        'For a detailed explanation of account roles, see %s.'.
 | 
			
		||||
      '</p>',
 | 
			
		||||
    $inst = pht('For a detailed explanation of account roles, see %s.',
 | 
			
		||||
      $roles_link);
 | 
			
		||||
    return hsprintf(
 | 
			
		||||
      '<p class="aphront-form-instructions">%s</p>',
 | 
			
		||||
      $inst);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,23 +22,23 @@ final class PhabricatorPeopleLdapController
 | 
			
		||||
      ->setUser($admin)
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
        ->setLabel('LDAP username')
 | 
			
		||||
        ->setLabel(pht('LDAP username'))
 | 
			
		||||
        ->setName('username'))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormPasswordControl())
 | 
			
		||||
        ->setLabel('Password')
 | 
			
		||||
        ->setLabel(pht('Password'))
 | 
			
		||||
        ->setName('password'))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
        ->setLabel('LDAP query')
 | 
			
		||||
        ->setCaption('A filter such as (objectClass=*)')
 | 
			
		||||
        ->setLabel(pht('LDAP query'))
 | 
			
		||||
        ->setCaption(pht('A filter such as (objectClass=*)'))
 | 
			
		||||
        ->setName('query'))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormSubmitControl())
 | 
			
		||||
        ->setValue('Search'));
 | 
			
		||||
        ->setValue(pht('Search')));
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('Import LDAP Users');
 | 
			
		||||
    $panel->setHeader(pht('Import LDAP Users'));
 | 
			
		||||
    $panel->appendChild($form);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -59,7 +59,8 @@ final class PhabricatorPeopleLdapController
 | 
			
		||||
    return $this->buildApplicationPage(
 | 
			
		||||
      $nav,
 | 
			
		||||
      array(
 | 
			
		||||
        'title' => 'Import Ldap Users',
 | 
			
		||||
        'title' => pht('Import Ldap Users'),
 | 
			
		||||
        'device' => true,
 | 
			
		||||
      ));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -71,8 +72,8 @@ final class PhabricatorPeopleLdapController
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontErrorView();
 | 
			
		||||
    $panel->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
 | 
			
		||||
    $panel->setTitle("Import Successful");
 | 
			
		||||
    $errors = array("Successfully imported users from LDAP");
 | 
			
		||||
    $panel->setTitle(pht("Import Successful"));
 | 
			
		||||
    $errors = array(pht("Successfully imported users from LDAP"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    foreach ($usernames as $username) {
 | 
			
		||||
@@ -92,9 +93,9 @@ final class PhabricatorPeopleLdapController
 | 
			
		||||
        $ldap_info->setLDAPUsername($username);
 | 
			
		||||
        $ldap_info->setUserID($user->getID());
 | 
			
		||||
        $ldap_info->save();
 | 
			
		||||
        $errors[] = 'Successfully added ' . $username;
 | 
			
		||||
        $errors[] = pht('Successfully added %s', $username);
 | 
			
		||||
      } catch (Exception $ex) {
 | 
			
		||||
        $errors[] = 'Failed to add ' . $username . ' ' . $ex->getMessage();
 | 
			
		||||
        $errors[] = pht('Failed to add %s %s', $username, $ex->getMessage());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -127,23 +128,23 @@ final class PhabricatorPeopleLdapController
 | 
			
		||||
      $table = new AphrontTableView($results);
 | 
			
		||||
      $table->setHeaders(
 | 
			
		||||
        array(
 | 
			
		||||
          'Username',
 | 
			
		||||
          'Email',
 | 
			
		||||
          'RealName',
 | 
			
		||||
          'Import?',
 | 
			
		||||
          pht('Username'),
 | 
			
		||||
          pht('Email'),
 | 
			
		||||
          pht('Real Name'),
 | 
			
		||||
          pht('Import?'),
 | 
			
		||||
        ));
 | 
			
		||||
      $form->appendChild($table);
 | 
			
		||||
      $form->setAction($request->getRequestURI()
 | 
			
		||||
        ->alter('import', 'true')->alter('search', null))
 | 
			
		||||
        ->appendChild(
 | 
			
		||||
          id(new AphrontFormSubmitControl())
 | 
			
		||||
          ->setValue('Import'));
 | 
			
		||||
          ->setValue(pht('Import')));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      $panel->appendChild($form);
 | 
			
		||||
    } catch (Exception $ex) {
 | 
			
		||||
      $error_view = new AphrontErrorView();
 | 
			
		||||
      $error_view->setTitle('LDAP Search Failed');
 | 
			
		||||
      $error_view->setTitle(pht('LDAP Search Failed'));
 | 
			
		||||
      $error_view->setErrors(array($ex->getMessage()));
 | 
			
		||||
      return $error_view;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -29,20 +29,20 @@ final class PhabricatorPeopleListController
 | 
			
		||||
    foreach ($users as $user) {
 | 
			
		||||
      $primary_email = $user->loadPrimaryEmail();
 | 
			
		||||
      if ($primary_email && $primary_email->getIsVerified()) {
 | 
			
		||||
        $email = 'Verified';
 | 
			
		||||
        $email = pht('Verified');
 | 
			
		||||
      } else {
 | 
			
		||||
        $email = 'Unverified';
 | 
			
		||||
        $email = pht('Unverified');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      $status = array();
 | 
			
		||||
      if ($user->getIsDisabled()) {
 | 
			
		||||
        $status[] = 'Disabled';
 | 
			
		||||
        $status[] = pht('Disabled');
 | 
			
		||||
      }
 | 
			
		||||
      if ($user->getIsAdmin()) {
 | 
			
		||||
        $status[] = 'Admin';
 | 
			
		||||
        $status[] = pht('Admin');
 | 
			
		||||
      }
 | 
			
		||||
      if ($user->getIsSystemAgent()) {
 | 
			
		||||
        $status[] = 'System Agent';
 | 
			
		||||
        $status[] = pht('System Agent');
 | 
			
		||||
      }
 | 
			
		||||
      $status = implode(', ', $status);
 | 
			
		||||
 | 
			
		||||
@@ -64,19 +64,19 @@ final class PhabricatorPeopleListController
 | 
			
		||||
            'class' => 'button grey small',
 | 
			
		||||
            'href'  => '/people/edit/'.$user->getID().'/',
 | 
			
		||||
          ),
 | 
			
		||||
          'Administrate User'),
 | 
			
		||||
          pht('Administrate User')),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $table = new AphrontTableView($rows);
 | 
			
		||||
    $table->setHeaders(
 | 
			
		||||
      array(
 | 
			
		||||
        'Join Date',
 | 
			
		||||
        'Time',
 | 
			
		||||
        'Username',
 | 
			
		||||
        'Real Name',
 | 
			
		||||
        'Roles',
 | 
			
		||||
        'Email',
 | 
			
		||||
        pht('Join Date'),
 | 
			
		||||
        pht('Time'),
 | 
			
		||||
        pht('Username'),
 | 
			
		||||
        pht('Real Name'),
 | 
			
		||||
        pht('Roles'),
 | 
			
		||||
        pht('Email'),
 | 
			
		||||
        '',
 | 
			
		||||
      ));
 | 
			
		||||
    $table->setColumnClasses(
 | 
			
		||||
@@ -101,19 +101,12 @@ final class PhabricatorPeopleListController
 | 
			
		||||
      ));
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('People ('.number_format($count).')');
 | 
			
		||||
    $panel->setHeader(pht('People (%d)', number_format($count)));
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->appendChild($table);
 | 
			
		||||
    $panel->appendChild($pager);
 | 
			
		||||
 | 
			
		||||
    if ($is_admin) {
 | 
			
		||||
      $panel->addButton(
 | 
			
		||||
        phutil_tag(
 | 
			
		||||
          'a',
 | 
			
		||||
          array(
 | 
			
		||||
            'href' => '/people/edit/',
 | 
			
		||||
            'class' => 'button green',
 | 
			
		||||
          ),
 | 
			
		||||
          'Create New Account'));
 | 
			
		||||
      if (PhabricatorEnv::getEnvConfig('ldap.auth-enabled')) {
 | 
			
		||||
        $panel->addButton(
 | 
			
		||||
          phutil_tag(
 | 
			
		||||
@@ -122,18 +115,25 @@ final class PhabricatorPeopleListController
 | 
			
		||||
              'href' => '/people/ldap/',
 | 
			
		||||
              'class' => 'button green'
 | 
			
		||||
            ),
 | 
			
		||||
            'Import from LDAP'));
 | 
			
		||||
            pht('Import from LDAP')));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
 | 
			
		||||
    $crumbs->addCrumb(
 | 
			
		||||
        id(new PhabricatorCrumbView())
 | 
			
		||||
          ->setName(pht('User Directory'))
 | 
			
		||||
          ->setHref('/people/'));
 | 
			
		||||
 | 
			
		||||
    $nav = $this->buildSideNavView();
 | 
			
		||||
    $nav->selectFilter('people');
 | 
			
		||||
    $nav->appendChild($panel);
 | 
			
		||||
    $nav->setCrumbs($crumbs);
 | 
			
		||||
 | 
			
		||||
    return $this->buildApplicationPage(
 | 
			
		||||
      $nav,
 | 
			
		||||
      array(
 | 
			
		||||
        'title' => 'People',
 | 
			
		||||
        'title' => pht('People'),
 | 
			
		||||
        'device' => true,
 | 
			
		||||
      ));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,44 +44,44 @@ final class PhabricatorPeopleLogsController
 | 
			
		||||
      ->setUser($user)
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTokenizerControl())
 | 
			
		||||
          ->setLabel('Filter Actor')
 | 
			
		||||
          ->setLabel(pht('Filter Actor'))
 | 
			
		||||
          ->setName('actor')
 | 
			
		||||
          ->setLimit(1)
 | 
			
		||||
          ->setValue($actor_value)
 | 
			
		||||
          ->setDatasource('/typeahead/common/accounts/'))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTokenizerControl())
 | 
			
		||||
          ->setLabel('Filter User')
 | 
			
		||||
          ->setLabel(pht('Filter User'))
 | 
			
		||||
          ->setName('user')
 | 
			
		||||
          ->setLimit(1)
 | 
			
		||||
          ->setValue($user_value)
 | 
			
		||||
          ->setDatasource('/typeahead/common/accounts/'))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormSelectControl())
 | 
			
		||||
          ->setLabel('Show Activity')
 | 
			
		||||
          ->setLabel(pht('Show Activity'))
 | 
			
		||||
          ->setName('activity')
 | 
			
		||||
          ->setValue($filter_activity)
 | 
			
		||||
          ->setOptions(
 | 
			
		||||
            array(
 | 
			
		||||
              ''        => 'All Activity',
 | 
			
		||||
              'admin'   => 'Admin Activity',
 | 
			
		||||
              ''        => pht('All Activity'),
 | 
			
		||||
              'admin'   => pht('Admin Activity'),
 | 
			
		||||
            )))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('Filter IP')
 | 
			
		||||
          ->setLabel(pht('Filter IP'))
 | 
			
		||||
          ->setName('ip')
 | 
			
		||||
          ->setValue($filter_ip)
 | 
			
		||||
          ->setCaption(
 | 
			
		||||
            'Enter an IP (or IP prefix) to show only activity by that remote '.
 | 
			
		||||
            'address.'))
 | 
			
		||||
            pht('Enter an IP (or IP prefix) to show only activity by that '.
 | 
			
		||||
            'remote address.')))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormTextControl())
 | 
			
		||||
          ->setLabel('Filter Session')
 | 
			
		||||
          ->setLabel(pht('Filter Session'))
 | 
			
		||||
          ->setName('session')
 | 
			
		||||
          ->setValue($filter_session))
 | 
			
		||||
      ->appendChild(
 | 
			
		||||
        id(new AphrontFormSubmitControl())
 | 
			
		||||
          ->setValue('Filter Logs'));
 | 
			
		||||
          ->setValue(pht('Filter Logs')));
 | 
			
		||||
 | 
			
		||||
    $log_table = new PhabricatorUserLog();
 | 
			
		||||
    $conn_r = $log_table->establishConnection('r');
 | 
			
		||||
@@ -183,15 +183,15 @@ final class PhabricatorPeopleLogsController
 | 
			
		||||
    $table = new AphrontTableView($rows);
 | 
			
		||||
    $table->setHeaders(
 | 
			
		||||
      array(
 | 
			
		||||
        'Date',
 | 
			
		||||
        'Time',
 | 
			
		||||
        'Action',
 | 
			
		||||
        'Actor',
 | 
			
		||||
        'User',
 | 
			
		||||
        'Old',
 | 
			
		||||
        'New',
 | 
			
		||||
        'IP',
 | 
			
		||||
        'Session',
 | 
			
		||||
        pht('Date'),
 | 
			
		||||
        pht('Time'),
 | 
			
		||||
        pht('Action'),
 | 
			
		||||
        pht('Actor'),
 | 
			
		||||
        pht('User'),
 | 
			
		||||
        pht('Old'),
 | 
			
		||||
        pht('New'),
 | 
			
		||||
        pht('IP'),
 | 
			
		||||
        pht('Session'),
 | 
			
		||||
      ));
 | 
			
		||||
    $table->setColumnClasses(
 | 
			
		||||
      array(
 | 
			
		||||
@@ -207,12 +207,18 @@ final class PhabricatorPeopleLogsController
 | 
			
		||||
      ));
 | 
			
		||||
 | 
			
		||||
    $panel = new AphrontPanelView();
 | 
			
		||||
    $panel->setHeader('Activity Logs');
 | 
			
		||||
    $panel->setHeader(pht('Activity Logs'));
 | 
			
		||||
    $panel->setNoBackground();
 | 
			
		||||
    $panel->appendChild($table);
 | 
			
		||||
    $panel->appendChild($pager);
 | 
			
		||||
 | 
			
		||||
    $filter = new AphrontListFilterView();
 | 
			
		||||
    $filter->appendChild($form);
 | 
			
		||||
    $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
 | 
			
		||||
    $crumbs->addCrumb(
 | 
			
		||||
        id(new PhabricatorCrumbView())
 | 
			
		||||
          ->setName(pht('Activity Logs'))
 | 
			
		||||
          ->setHref('/people/logs/'));
 | 
			
		||||
 | 
			
		||||
    $nav = $this->buildSideNavView();
 | 
			
		||||
    $nav->selectFilter('logs');
 | 
			
		||||
@@ -221,12 +227,13 @@ final class PhabricatorPeopleLogsController
 | 
			
		||||
        $filter,
 | 
			
		||||
        $panel,
 | 
			
		||||
      ));
 | 
			
		||||
 | 
			
		||||
    $nav->setCrumbs($crumbs);
 | 
			
		||||
 | 
			
		||||
    return $this->buildApplicationPage(
 | 
			
		||||
      $nav,
 | 
			
		||||
      array(
 | 
			
		||||
        'title' => 'Activity Logs',
 | 
			
		||||
        'title' => pht('Activity Logs'),
 | 
			
		||||
        'device' => true,
 | 
			
		||||
      ));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user