SF Feature #2837687 - Automatic template selection from one of one valid templates
This commit is contained in:
parent
803a4c821a
commit
ba553353b0
@ -123,6 +123,7 @@ class PageRender extends Visitor {
|
|||||||
* May be overloaded in other classes
|
* May be overloaded in other classes
|
||||||
*/
|
*/
|
||||||
protected function getMode() {}
|
protected function getMode() {}
|
||||||
|
protected function getModeContainer() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process our <post> arguments from the templates
|
* Process our <post> arguments from the templates
|
||||||
@ -297,17 +298,17 @@ class PageRender extends Visitor {
|
|||||||
return $this->template_id;
|
return $this->template_id;
|
||||||
|
|
||||||
# If there are no defined templates
|
# If there are no defined templates
|
||||||
} elseif (count($templates->getTemplates($this->getMode())) <= 0) {
|
} elseif (count($templates->getTemplates($this->getMode(),$this->getModeContainer(),false)) <= 0) {
|
||||||
if (DEBUGTMP) printf('<font size=-2>%s:<u>%s</u></font><br />',__METHOD__,'Choosing the DEFAULT template, no other template applicable');
|
if (DEBUGTMP) printf('<font size=-2>%s:<u>%s</u></font><br />',__METHOD__,'Choosing the DEFAULT template, no other template applicable');
|
||||||
|
|
||||||
# Since getTemplate() returns a default template if the one we want doesnt exist, we can return $templates->getID(), it should be the default.
|
# Since getTemplate() returns a default template if the one we want doesnt exist, we can return $templates->getID(), it should be the default.
|
||||||
return $template->getID();
|
return $template->getID();
|
||||||
|
|
||||||
# If there is only 1 defined template, and no default available, then that is our template.
|
# If there is only 1 defined template, and no default available, then that is our template.
|
||||||
} elseif ((count($templates->getTemplates($this->getMode())) == 1) && ! $this->haveDefaultTemplate()) {
|
} elseif ((count($templates->getTemplates($this->getMode(),$this->getModeContainer(),true)) == 1) && ! $this->haveDefaultTemplate()) {
|
||||||
if (DEBUGTMP) printf('<font size=-2>%s:<u>%s</u></font><br />',__METHOD__,'AUTOMATIC choosing a template, only 1 template applicable');
|
if (DEBUGTMP) printf('<font size=-2>%s:<u>%s</u></font><br />',__METHOD__,'AUTOMATIC choosing a template, only 1 template applicable');
|
||||||
|
|
||||||
$template = $templates->getTemplates($this->getMode());
|
$template = $templates->getTemplates($this->getMode(),$this->getModeContainer(),true);
|
||||||
$template = array_shift($template);
|
$template = array_shift($template);
|
||||||
return $template->getID();
|
return $template->getID();
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ class Template extends xmlTemplate {
|
|||||||
private $visible = true;
|
private $visible = true;
|
||||||
# Is this template valid after parsing the XML file
|
# Is this template valid after parsing the XML file
|
||||||
private $invalid = false;
|
private $invalid = false;
|
||||||
|
private $invalid_admin = false;
|
||||||
private $invalid_reason;
|
private $invalid_reason;
|
||||||
# The TEMPLATE structural objectclasses
|
# The TEMPLATE structural objectclasses
|
||||||
protected $structural_oclass = array();
|
protected $structural_oclass = array();
|
||||||
@ -166,7 +167,7 @@ class Template extends xmlTemplate {
|
|||||||
$this->$xml_key = $xml_value;
|
$this->$xml_key = $xml_value;
|
||||||
|
|
||||||
if ($xml_key == 'invalid' && $xml_value)
|
if ($xml_key == 'invalid' && $xml_value)
|
||||||
$this->invalid_reason = _('Disabled by XML configuration');
|
$this->setInvalid(_('Disabled by XML configuration'),true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -909,9 +910,10 @@ class Template extends xmlTemplate {
|
|||||||
*
|
*
|
||||||
* @param string Message indicating the reason the template has been invalidated
|
* @param string Message indicating the reason the template has been invalidated
|
||||||
*/
|
*/
|
||||||
private function setInvalid($msg) {
|
public function setInvalid($msg,$admin=false) {
|
||||||
$this->invalid = true;
|
$this->invalid = true;
|
||||||
$this->invalid_reason = $msg;
|
$this->invalid_reason = $msg;
|
||||||
|
$this->invalid_admin = $admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -926,6 +928,10 @@ class Template extends xmlTemplate {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isAdminDisabled() {
|
||||||
|
return $this->invalid_admin;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the minimum number of values for an attribute
|
* Set the minimum number of values for an attribute
|
||||||
*
|
*
|
||||||
|
@ -553,6 +553,24 @@ class TemplateRender extends PageRender {
|
|||||||
debug_dump_backtrace(sprintf('Unknown mode for %s',__METHOD__),1);
|
debug_dump_backtrace(sprintf('Unknown mode for %s',__METHOD__),1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the container for this mode
|
||||||
|
*/
|
||||||
|
protected function getModeContainer() {
|
||||||
|
switch ($this->getMode()) {
|
||||||
|
case 'creation':
|
||||||
|
return $this->container;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'modification':
|
||||||
|
return $this->dn;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the default template enabled?
|
* Is the default template enabled?
|
||||||
*/
|
*/
|
||||||
@ -584,7 +602,7 @@ class TemplateRender extends PageRender {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$avail_templates = $this->getTemplates();
|
$avail_templates = $this->getTemplates();
|
||||||
$templates = $avail_templates->getTemplates($this->getMode());
|
$templates = $avail_templates->getTemplates($this->getMode(),$this->getModeContainer());
|
||||||
printf('<center><h3>%s</h3></center>',$msg);
|
printf('<center><h3>%s</h3></center>',$msg);
|
||||||
|
|
||||||
$href_parms = array_to_query_string($_GET,array('meth'));
|
$href_parms = array_to_query_string($_GET,array('meth'));
|
||||||
@ -612,11 +630,6 @@ class TemplateRender extends PageRender {
|
|||||||
|
|
||||||
$isInValid = $details->isInValid();
|
$isInValid = $details->isInValid();
|
||||||
|
|
||||||
if (($regexp = $details->getRegExp())
|
|
||||||
&& (($this->getMode() == 'creation' && ! @preg_match('/'.$regexp.'/i',$this->container))
|
|
||||||
|| ($this->getMode() == 'modification' && ! @preg_match('/'.$regexp.'/i',$this->dn))))
|
|
||||||
$isInValid = _('This template is not valid in this container');
|
|
||||||
|
|
||||||
# Balance the columns properly
|
# Balance the columns properly
|
||||||
if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) ||
|
if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) ||
|
||||||
($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) {
|
($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) {
|
||||||
|
@ -177,16 +177,24 @@ abstract class xmlTemplates {
|
|||||||
* This function should return a sorted list, as the array is built sorted.
|
* This function should return a sorted list, as the array is built sorted.
|
||||||
*
|
*
|
||||||
* @param string Type of template, eg: creation, modification
|
* @param string Type of template, eg: creation, modification
|
||||||
|
* @param boolean Exclude templates purposely disabled.
|
||||||
* @return array List of templates of the type
|
* @return array List of templates of the type
|
||||||
*/
|
*/
|
||||||
public function getTemplates($type=null) {
|
public function getTemplates($type=null,$container=null,$disabled=false) {
|
||||||
$result = array();
|
$result = array();
|
||||||
|
|
||||||
if (is_array($this->templates))
|
if (is_array($this->templates))
|
||||||
foreach ($this->templates as $template)
|
foreach ($this->templates as $details) {
|
||||||
if ($template->isVisible())
|
|
||||||
|
# Clone this, as we'll disable some templates, as a result of the container being requested.
|
||||||
|
$template = clone $details;
|
||||||
|
if (! is_null($container) && ($regexp = $template->getRegExp()) && (! @preg_match('/'.$regexp.'/i',$container)))
|
||||||
|
$template->setInvalid(_('This template is not valid in this container'),true);
|
||||||
|
|
||||||
|
if ($template->isVisible() && (! $disabled || ! $template->isAdminDisabled()))
|
||||||
if (is_null($type) || (! is_null($type) && $template->isType($type)))
|
if (is_null($type) || (! is_null($type) && $template->isType($type)))
|
||||||
array_push($result,$template);
|
array_push($result,$template);
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user