/**
* Sets the URI path and query values based on given parameters.
*
* @param array $p_params
* An array of valid URL parameters
* @param boolean $p_preview
* If true, will keep the preview parameters in the URL
*
* @return void
*/
protected function buildURI(array &$p_params = array(), $p_preview = false)
{
if ($this->isValidCache()) {
return;
}
$parameter = count($p_params) > 0 ? strtolower(array_shift($p_params)) : null;
switch ($parameter) {
case 'language':
$this->m_buildPath = $this->buildPath(CampSystem::GetTemplate($this->m_language->number,
$this->m_publication->identifier));
$keepParams = CampURITemplatePath::$m_languageParameters;
if ($p_preview) {
$keepParams = array_merge(CampURI::$m_previewParameters, $keepParams);
}
$this->m_buildQueryArray = $this->getQueryArray($keepParams);
$p_params = array();
break;
case 'publication':
$this->m_buildPath = $this->buildPath(CampSystem::GetTemplate($this->m_language->number,
$this->m_publication->identifier));
$keepParams = CampURITemplatePath::$m_languageParameters;
if ($p_preview) {
$keepParams = array_merge(CampURI::$m_previewParameters, $keepParams);
}
$this->m_buildQueryArray = $this->getQueryArray($keepParams);
$p_params = array();
break;
case 'issue':
$this->m_buildPath = $this->buildPath(CampSystem::GetIssueTemplate($this->m_language->number,
$this->m_publication->identifier, $this->m_issue->number));
$keepParams = CampURITemplatePath::$m_issueParameters;
if ($p_preview) {
$keepParams = array_merge(CampURI::$m_previewParameters, $keepParams);
}
$this->m_buildQueryArray = $this->getQueryArray($keepParams);
$p_params = array();
break;
case 'section':
$this->m_buildPath = $this->buildPath(CampSystem::GetSectionTemplate($this->m_language->number,
$this->m_publication->identifier, $this->m_issue->number, $this->m_section->number));
$keepParams = CampURITemplatePath::$m_sectionParameters;
if ($p_preview) {
$keepParams = array_merge(CampURI::$m_previewParameters, $keepParams);
}
$this->m_buildQueryArray = $this->getQueryArray($keepParams);
$p_params = array();
break;
case 'article':
$this->m_buildPath = $this->buildPath(CampSystem::GetArticleTemplate($this->m_language->number,
$this->m_publication->identifier, $this->m_issue->number, $this->m_section->number));
$keepParams = CampURITemplatePath::$m_articleParameters;
if ($p_preview) {
$keepParams = array_merge(CampURI::$m_previewParameters, $keepParams);
}
$this->m_buildQueryArray = $this->getQueryArray($keepParams);
$p_params = array();
break;
case 'template':
$option = isset($p_params[0]) ? array_shift($p_params) : null;
if (!is_null($option) && $this->isValidTemplate($option)) {
$this->m_buildPath = $this->buildPath($option);
}
break;
default:
if (!empty($parameter)) {
array_unshift($p_params, $parameter);
$count = count($p_params);
parent::buildURI($p_params, $p_preview);
if (count($p_params) == $count) {
array_shift($p_params);
}
}
}
if (count($p_params) > 0) {
$this->buildURI($p_params);
}
if (is_null($this->m_buildPath)) {
$template = $this->getTemplate();
if (empty($template)) {
CampTemplate::singleton()->trigger_error('Invalid template in context');
return;
}
$this->m_buildPath = $this->buildPath($template);
}
if (is_null($this->m_buildQuery)) {
$this->m_buildQuery = CampURI::QueryArrayToString($this->m_buildQueryArray);
}
$this->validateCache(true);
} // fn buildURI