Perforce Chronicle 2012.2/486814
API Documentation
|
This is the setup site creation form. More...
Public Member Functions | |
init () | |
Defines the elements that make up the site form. | |
isValid ($data) | |
Override isValid to check that site title is unique. | |
setConnection (P4_Connection_Interface $connection=null) | |
Set the target server connection to use. | |
setDefaults ($defaults) | |
Set element values. | |
Static Public Member Functions | |
static | getRequestHost ($removePort=true) |
Get the current host name. | |
Protected Member Functions | |
_composeSiteId ($title) | |
Generate a site id from a given site title. | |
_getDefaultUrls () | |
Get the default value for the site urls field. | |
_isSiteAddressTaken ($url) | |
Check if the given site address is already in use. | |
_isSiteIdTaken ($id) | |
Check if the given site id is already in use. | |
Protected Attributes | |
$_connection |
This is the setup site creation form.
Setup_Form_Site::_composeSiteId | ( | $ | title | ) | [protected] |
Generate a site id from a given site title.
Replaces non-alphanumeric characters with dashes ('-') and prefixes the site id with the site prefix ('chronicle-').
string | $title | the site title to make an id for. |
{ $filter = new P4Cms_Filter_TitleToId; $id = $filter->filter($title); return $id ? P4Cms_Site::SITE_PREFIX . $id : null; }
Setup_Form_Site::_getDefaultUrls | ( | ) | [protected] |
Get the default value for the site urls field.
Defaults to current address with and without 'www' prefix.
{ $request = Zend_Controller_Front::getInstance()->getRequest(); if (!$request instanceof Zend_Controller_Request_Http) { return false; } // set default to current address with and without www. // skipping the www prefixed version if we have more/less // than a single period in the hostname (e.g. IP address, // sub-domain, localhost, etc.) $default = static::getRequestHost(false) . $request->getBaseUrl(); if (substr($default, 0, 4) == 'www.') { $default .= "\n" . substr($default, 4); } else if (substr_count($default, '.') == 1) { $default .= "\n" . "www." . $default; } return $default; }
Setup_Form_Site::_isSiteAddressTaken | ( | $ | url | ) | [protected] |
Check if the given site address is already in use.
string | $url | the address of the site to check for |
{ // if no connection, can't check perforce for conflicts. // (server type must be 'new' or a connection would have been set) if (!$this->_connection) { return false; } $sites = P4Cms_Site::fetchAll(null, $this->_connection); // collect urls from all sites $urls = array(); foreach ($sites as $site) { $urls = array_merge($urls, $site->getConfig()->getUrls()); } return in_array($url, $urls); }
Setup_Form_Site::_isSiteIdTaken | ( | $ | id | ) | [protected] |
Check if the given site id is already in use.
string | $id | the id of the site to check for. |
{ // check for conflicting site packages folder. if (is_dir(P4Cms_Site::getSitesPackagesPath($id))) { return true; } // check for conflicting site data directory. if (is_dir(P4Cms_Site::getSitesDataPath($id))) { return true; } // if no connection, can't check perforce for conflicts. // (server type must be 'new' or a connection would have been set) if (!$this->_connection) { return false; } $p4 = $this->_connection; // check for depot name conflict - site ids relate 1:1 with depot names if (P4_Depot::exists($id, $p4)) { return true; } // check for site 'umbrella' group name conflict. // as with depots, site ids relate 1:1 with their parent group. if (P4_Group::exists($id, $p4)) { return true; } // check if any group with prefix exists. $groupPrefix = $id . P4Cms_Acl_Role::PREFIX_DELIMITER; foreach (P4_Group::fetchAll(array(), $p4) as $group) { if (strpos($group->getId(), $groupPrefix) === 0) { return true; } } // appears to be unique. return false; }
static Setup_Form_Site::getRequestHost | ( | $ | removePort = true | ) | [static] |
Get the current host name.
boolean | $removePort | If true, removes the port from the host. |
{ $request = Zend_Controller_Front::getInstance()->getRequest(); if (!$request instanceof Zend_Controller_Request_Http) { return false; } $host = $request->getHttpHost(); if (!$removePort) { return $host; } if (preg_match('#:\d+$#', $host, $result) === 1) { $host = substr($host, 0, -strlen($result[0])); } return $host; }
Setup_Form_Site::init | ( | ) |
Defines the elements that make up the site form.
Called automatically when the form object is created.
{ // form should use p4cms-ui styles. $this->setAttrib('class', 'p4cms-ui site-form'); // form should submit on enter $this->setAttrib('submitOnEnter', true); // set the method for the display form to POST $this->setMethod('post'); // add a hidden id field, this will be auto-populated based on title $this->addElement( 'hidden', 'id', array( 'disabled' => true ) ); // add a field to collect the site title. $this->addElement( 'text', 'title', array( 'label' => 'Title', 'value' => static::getRequestHost(), 'required' => true, 'description' => "Enter a recognizable title for this site.", 'filters' => array('StringTrim') ) ); // add a field to collect the site's description. $this->addElement( 'textarea', 'description', array( 'label' => 'Description', 'value' => '', 'required' => false, 'rows' => 2, 'cols' => 50, 'description' => "Enter a short summary of your site.<br/>" . "This summary will appear in meta description tags for non-content pages." ) ); $this->getElement('description') ->getDecorator('Description') ->setEscape(false); // add a field to collect the site's urls. $this->addElement( 'textarea', 'urls', array( 'label' => 'Site Address', 'value' => $this->_getDefaultUrls(), 'required' => true, 'rows' => 3, 'cols' => 50, 'description' => "Provide a list of urls for which this site will be served.<br/>" . "For example: domain.com, www.domain.com" ) ); $this->getElement('urls') ->getDecorator('Description') ->setEscape(false); // add the submit button $this->addElement( 'SubmitButton', 'create', array( 'label' => 'Create Site', '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('create', 'goback'), 'buttons', array('class' => 'buttons') ); }
Setup_Form_Site::isValid | ( | $ | data | ) |
Override isValid to check that site title is unique.
array | $data | the field values to validate. |
Reimplemented from P4Cms_Form.
{ // always set id from title $title = isset($data['title']) ? $data['title'] : null; $data['id'] = $this->_composeSiteId($title); if (!parent::isValid($data)) { return false; } $valid = true; // if individual values are valid, ensure that site title/id is unique. if ($this->_isSiteIdTaken($this->getValue('id'))) { $this->getElement('title')->addError( "The site title you provided appears to be taken. Please choose a different title." ); $valid = false; } // ensure that site addresses are not in use $urls = array_map('trim', preg_split("/\n|,/", $this->getValue('urls'))); foreach ($urls as $url) { if ($this->_isSiteAddressTaken($url)) { $this->getElement('urls')->addError( "The site address '$url' you provided appears to be taken. Please choose a different address." ); $valid = false; break; } } return $valid; }
Setup_Form_Site::setConnection | ( | P4_Connection_Interface $ | connection = null | ) |
Set the target server connection to use.
P4_Connection_Interface | $connection | a connection to the server we intend to create the site in. |
{ $this->_connection = $connection; }
Setup_Form_Site::setDefaults | ( | $ | defaults | ) |
Set element values.
Extended here to set the site id from the site title, if a title is present in the given defaults array.
P4Cms_Record | array | $defaults | the default values to set on elements |
Reimplemented from P4Cms_Form.
{ // always set id from title if title is present if (array_key_exists('title', $defaults)) { $defaults['id'] = $this->_composeSiteId($defaults['title']); } return parent::setDefaults($defaults); }
Setup_Form_Site::$_connection [protected] |