Perforce Chronicle 2012.2/486814
API Documentation
|
This is the Perforce server setup form. More...
Public Member Functions | |
getServerType () | |
Retrieve the current serverType value. | |
init () | |
Defines the elements that make up the Administrator form. | |
isP4LicenseQuotaSufficient ($serverLicense, $users) | |
Check the license quota. | |
isValid ($data) | |
Override isValid to check connection parameters. | |
setP4Port ($port) | |
Set the port of the Perforce server for this site. | |
setServerType ($type) | |
Set the type of Perforce server for this site (local/existing). | |
Public Attributes | |
const | DEFAULT_ADMIN_NAME = 'admin' |
This is the Perforce server setup form.
Setup_Form_Administrator::getServerType | ( | ) |
Retrieve the current serverType value.
{
return $this->_serverType;
}
Setup_Form_Administrator::init | ( | ) |
Defines the elements that make up the Administrator form.
Called automatically when the form object is created.
{ // form should use p4cms-ui styles. $this->setAttrib('class', 'p4cms-ui administrator-form'); // form should submit on enter $this->setAttrib('submitOnEnter', true); // set the method for the display form to POST $this->setMethod('post'); // getRequestHost will return false for non-http requests; // fallback to hostname if this is the case or if we got an IP // back (which wouldn't produce a valid default email address) $defaultHost = Setup_Form_Site::getRequestHost(); if (!$defaultHost || preg_match('/^[0-9\.]+$/', $defaultHost)) { $defaultHost = gethostname(); } $defaultEmail = static::DEFAULT_ADMIN_NAME . '@' . $defaultHost; // add a field to collect the perforce user, updating email field on change, but only // if the user hasn't customized the email $this->addElement( 'text', 'user', array( 'label' => 'User Name', 'required' => true, 'validators' => array(array('SpecName')), 'onChange' => <<<EOT if (!dojo.byId('email')) return; var email = dojo.byId('email').value; if (email == '' || (this.previousName == undefined && email == '$defaultEmail') || email == this.previousName+'@$defaultHost' ) { dojo.byId('email').value = this.value + '@$defaultHost'; } this.previousName = this.value; EOT ) ); if ($this->getServerType() == Setup_Form_Storage::SERVER_TYPE_NEW) { // add a field to collect the admin password $this->addElement( 'text', 'email', array( 'label' => 'Email', 'required' => true, 'value' => $defaultEmail, 'validators' => array( array('EmailAddress', false, Zend_Validate_Hostname::ALLOW_LOCAL) ) ) ); } // add a field to collect the perforce password. $this->addElement( 'password', 'password', array( 'label' => 'Password', 'value' => '', ) ); if ($this->getServerType() == Setup_Form_Storage::SERVER_TYPE_NEW) { // for new servers, provide a default username, which the user can replace $element = $this->getElement('user'); $element->setValue(static::DEFAULT_ADMIN_NAME); // for new servers, the security counter will be set to 2, requiring a strong password $this->getElement('password') ->addValidator('StrongPassword') ->setRequired(true); // add a field to confirm the password. $this->addElement( 'password', 'passwordConfirm', array( 'label' => 'Confirm Password', 'value' => '', 'required' => true, ) ); } // add the submit button $this->addElement( 'SubmitButton', 'continue', array( 'label' => 'Continue', 'class' => 'button-large preferred', 'ignore' => true ) ); $this->addElement( 'SubmitButton', 'goback', array( 'label' => 'Go Back', 'class' => 'button-large', 'ignore' => true ) ); // put the button in a fieldset. $this->addDisplayGroup( array('continue', 'goback'), 'buttons', array('class' => 'buttons') ); }
Setup_Form_Administrator::isP4LicenseQuotaSufficient | ( | $ | serverLicense, |
$ | users | ||
) |
Check the license quota.
string | $serverLicense | serverLicense field from $p4->info() |
int | $users | count of users from $p4->users() |
{ $licenses = false; if (preg_match("/([0-9]+) users?/", $serverLicense, $matches)) { $licenses = intval($matches[1]); } if ($licenses && $licenses <= $users) { $this->getElement('user')->addError( "Can't create a new site on this server. All available licenses are in use." ); return false; } return true; }
Setup_Form_Administrator::isValid | ( | $ | data | ) |
Override isValid to check connection parameters.
array | $data | the field values to validate. |
Reimplemented from P4Cms_Form.
{ // do basic validation. if (!parent::isValid($data)) { return false; } // if serverType is 'new', nothing more to validate if (isset($this->_serverType) && $this->_serverType === Setup_Form_Storage::SERVER_TYPE_NEW ) { // make sure that the password and confirmation match $password = isset($data['password']) ? $data['password'] : null; $confirm = isset($data['passwordConfirm']) ? $data['passwordConfirm'] : null; if ($password != $confirm) { $this->getElement('passwordConfirm')->addError("The two passwords do not match."); return false; } return true; } // try to login to perforce to test the connection parameters. try { $p4 = P4_Connection::factory( $this->_p4Port, $this->getValue('user'), null, $this->getValue('password') ); $p4->login(); } catch (P4_Connection_ConnectException $e) { $this->getElement('user')->addError("Unable to connect to server on '" . $this->_p4Port . "'."); return false; } catch (P4_Connection_LoginException $e) { if ($e->getCode() === P4_Connection_LoginException::IDENTITY_NOT_FOUND) { $this->getElement('user')->addError("Login failed. Unknown user."); } else if ($e->getCode() === P4_Connection_LoginException::CREDENTIAL_INVALID) { $this->getElement('password')->addError("Login failed. Invalid password."); } else { $this->getElement('user')->addError( "Login failed. Please try again with a different username/password," . " or review the application log for more details." ); } return false; } // check access level (must be super). try { $p4->run('protect', '-o'); } catch (P4_Connection_CommandException $e) { if (stristr($e->getMessage(), "You don't have permission")) { $this->getElement('user')->addError("This user does not have permission to create sites."); return false; } else { throw $e; } } // check license quota. $result = $p4->run('users'); $users = count($result->getData()); $info = $p4->getInfo(); if (!$this->isP4LicenseQuotaSufficient($info['serverLicense'], $users)) { return false; } // verify the 'chronicle' user is available if this is the initial setup. // if the application has no perforce resource, we assume initial setup. $bootstrap = Zend_Controller_Front::getInstance()->getParam("bootstrap"); $perforce = $bootstrap ? $bootstrap->getResource('perforce') : null; if (!$perforce && P4_User::exists(Setup_IndexController::P4D_USER, $p4)) { $this->getElement('user')->addError( "Can't create a new site on this server. The 'chronicle' user is already in use." ); return false; } // passed all checks. return true; }
Setup_Form_Administrator::setP4Port | ( | $ | port | ) |
Set the port of the Perforce server for this site.
string | $port | the perforce server to connect to. |
{ $this->_p4Port = $port; }
Setup_Form_Administrator::setServerType | ( | $ | type | ) |
Set the type of Perforce server for this site (local/existing).
string | $type | the type of server to connect to. |
{
$this->_serverType = $type;
return $this;
}
const Setup_Form_Administrator::DEFAULT_ADMIN_NAME = 'admin' |