Http.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • library/
  • P4Cms/
  • Controller/
  • Request/
  • Http.php
  • View
  • Commits
  • Open Download .zip Download (2 KB)
<?php
/**
 * Extended version of the standard http request object with specialized
 * knowledge of the convention for embedding a site branch name in path
 * info (e.g. '/-dev-/module/controller/action').
 *
 * See P4Cms_Site for additional information.
 *
 * @copyright   2011 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class P4Cms_Controller_Request_Http extends Zend_Controller_Request_Http
{
    protected   $_branch    = false;
    protected   $_pathInfo  = null;

    /**
     * Get the branch name in this request's path info (if one is present).
     * For example: '/-dev-/path' would produce 'dev'.
     *
     * @return  string  the branch id or null if none specified.
     */
    public function getBranchName()
    {
        if ($this->_branch === false) {
            $this->_branch = preg_match('#^/-([^/]+)-#', $this->getPathInfo(), $matches)
                ? $matches[1]
                : null;
        }

        return $this->_branch;
    }

    /**
     * Get the base url with the branch embedded (if one is present).
     *
     * @return  string  the base url including the branch id.
     */
    public function getBranchBaseUrl()
    {
        $baseUrl = trim($this->getBaseUrl(), '/');

        return $this->getBranchName()
            ? $baseUrl . '/-' . $this->getBranchName() . '-'
            : $baseUrl;
    }

    /**
     * Get the request path info, but with the embedded branch name removed.
     *
     * @return  string  the path info without the branch name.
     */
    public function getBranchlessPath()
    {
        $pattern = '#^/?-' . $this->getBranchName() . '-/?#';
        return preg_replace($pattern, '', $this->getPathInfo());
    }

    /**
     * Extended to fix a problem where explicitly setting the
     * path to an empty string always re-generated the path from
     * server/environment variables.
     *
     * @return  string  everything between the BaseUrl and QueryString.
     */
    public function getPathInfo()
    {
        if ($this->_pathInfo === null) {
            $this->setPathInfo();
        }

        return $this->_pathInfo;
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/library/P4Cms/Controller/Request/Http.php
#1 8972 Matt Attaway Initial add of the Chronicle source code