/**
  * Perform the main actions of the page.
  */
 protected function action()
 {
     parent::action();
     $this->list->populate();
     $this->template->setDisplayData("type_name", $this->list->getDisplayName());
     $this->template->setDisplayData("list_name", $this->list->name());
     if ($this->request_exists('i2ce_template')) {
         $template_alt = $this->request('i2ce_template');
     } else {
         $template_alt = '';
     }
     $viewNode = $this->template->addFile($this->list->getViewTemplate($template_alt));
     $this->template->setDisplayData("list_view_link", "type=" . $this->type);
     $this->template->setDisplayData("list_edit_link", "type=" . $this->type . "&id=" . $this->id);
     $this->template->setAttribute("task", "can_edit_database_list_" . $this->type, "list_edit_link_node");
     $editNode = $this->template->getElementById("list_edit_link_node", $viewNode);
     if (!$editNode instanceof DOMNode) {
         // No edit node so add it to the can_edit task for the li in this dom.
         // The auto list page is handling this better, but this is just a stopgap measure
         // to remove the main link when the form isn't writable.
         $editSearch = $this->template->query("./descendant-or-self::div[@class='editRecord']/ul/li[@task='can_edit_database_list_" . $this->type . "']", $viewNode);
         if ($editSearch->length > 0) {
             $editSearch->item(0)->setAttribute("id", "list_edit_link_node");
         }
     }
     if (!I2CE_FormStorage::isWritable($this->type)) {
         $this->template->removeNodeById('list_edit_link_node');
     }
     $this->template->setAttribute("task", "can_view_database_list_" . $this->type, "list_view_link_node");
     $this->template->setForm($this->list);
     $this->showChildren();
     $this->showMapped();
     return true;
 }
 /**
  * Set the data to be displayed for the outside of the form field elements.
  * 
  * Set up the static data to be displayed in the template.  The default method
  * doesn't do anything, but sub-classes may need to override this method.
  *  */
 protected function setDisplayData()
 {
     parent::setDisplayData();
     $add_type = array('type' => $this->type, "nosetdefault" => $this->request("nosetdefault"));
     if (($hiddenSelectNode = $this->template->getElementByName('show_i2ce_hidden', 0)) instanceof DOMElement) {
         $this->template->addHeaderLink("mootools-core.js");
         $url = "index.php/lists?" . http_build_query($add_type) . '&show_i2ce_hidden=';
         $js = 'document.location.href = "' . addslashes($url) . '" + this.get("value");';
         $hiddenSelectNode->setAttribute('onChange', $js);
         $this->template->selectOptionsImmediate('show_i2ce_hidden', $this->showHidden());
     }
     if (($primary = $this->getPrimary()) instanceof I2CE_List) {
         $this->template->setDisplayData("type_name", $primary->getDisplayName());
         $this->template->setDisplayData("type", $primary->getName());
         $this->template->setDisplayData("id", $primary->getNameId());
     }
     $this->template->setDisplayData("link", $this->request("link"));
     $this->template->setDisplayData("mapped", $this->request("mapped"));
     $this->template->setDisplayData("nosetdefault", $this->request("nosetdefault"));
     $this->template->setDisplayData("i2ce_template", $this->request("i2ce_template"));
     if (I2CE_FormStorage::isWritable($this->type)) {
         $this->template->setDisplayData("list_is_writable", 1);
     } else {
         $this->template->setDisplayData("list_is_writable", 0);
     }
     $show_link = $add_type;
     if ($this->select_field instanceof I2CE_FormField) {
         $add_type['field'] = $this->select_field->getName();
         if ($this->request("nosetdefault") != "1" && $this->select_field->isSetValue()) {
             $add_type[$this->select_field->getHTMLName()] = $this->select_field->getDBValue();
         }
         if ($this->select_field->isSetValue()) {
             $show_link[$this->select_field->getHTMLName()] = $this->select_field->getDBValue();
         } else {
             $show_link[$this->select_field->getHTMLName()] = '';
         }
         $show_link['field'] = $this->select_field->getName();
         $show_link['id'] = $this->id;
         $this->template->setDisplayData('field', $this->select_field->getName());
         $this->template->setDisplayData('field_name', $this->select_field->getHeader());
     } else {
         $this->template->setDisplayData('field', '');
         $this->template->setDisplayData('field_name', '');
     }
     $this->template->setDisplayData('do_not_show_i2ce_hidden_link', $show_link);
     $this->template->setDisplayData('do_show_i2ce_hidden_link', $show_link);
     $add_type['show_i2ce_hidden'] = $this->showHidden();
     $this->template->setDisplayData("add_type", $add_type);
     if ($this->get_exists('add') || substr($this->id, -2) == "|0") {
         $return_page = "lists?";
     } else {
         $return_page = $this->getViewPage($this->type) . "?id=" . $this->id;
     }
     foreach ($add_type as $key => $val) {
         $return_page .= "&{$key}={$val}";
     }
     $this->template->setDisplayData("add_return", $return_page);
 }
 protected function setTemplateVars($listConfig, $link_data = array())
 {
     if (!is_array($link_data)) {
         $link_data = array();
     }
     $this->template->setDisplayData('text', $listConfig['text']);
     if (!$listConfig['type']) {
         $link_data['form'] = $listConfig['form'];
     } else {
         $link_data['type'] = $listConfig['type'];
     }
     if ($listConfig['type']) {
         $this->template->setDisplayData('type', $listConfig['type']);
     } else {
         $this->template->setDisplayData('form', $listConfig['form']);
     }
     $link_data['show_i2ce_hidden'] = $this->showHidden();
     if ($this->request_exists('letter') && $this->request('letter')) {
         $link_data['letter'] = $this->request('letter');
     }
     $this->template->setDisplayData('add_new_link', $link_data);
     if (($hiddenSelectNode = $this->template->getElementByName('show_i2ce_hidden', 0)) instanceof DOMElement) {
         $this->template->addHeaderLink("mootools-core.js");
         $h_link_data = $link_data;
         if (array_key_exists('show_i2ce_hidden', $h_link_data)) {
             unset($h_link_data['show_i2ce_hidden']);
         }
         $url = "index.php/auto_list?" . http_build_query($h_link_data) . '&show_i2ce_hidden=';
         $js = 'document.location.href = "' . addslashes($url) . '" + this.get("value");';
         $hiddenSelectNode->setAttribute('onChange', $js);
         $this->template->selectOptionsImmediate('show_i2ce_hidden', $this->showHidden());
     }
     $can_edit = true;
     if (array_key_exists('edit_task', $listConfig) && !$this->hasPermission('task(' . $listConfig['edit_task'] . ')')) {
         $can_edit = false;
     }
     if ($can_edit && I2CE_FormStorage::isWritable($this->getPrimaryFormName())) {
         $this->template->setDisplayData("list_is_writable", 1);
     } else {
         $this->template->setDisplayData("list_is_writable", 0);
     }
     if (($link = $this->getRemapAllLink($listConfig)) && $this->hasRemapData($listConfig)) {
         $this->template->setDisplayData('list_hasremap', 1);
         $this->template->setDisplayData('remap_link', $link);
     } else {
         $this->template->setDisplayData('list_hasremap', 0);
     }
     $this->addAlphabet($link_data);
 }