CMS  Version 3.9
CMSLinkSelectFieldRenderer Class Reference

Inherits FieldRenderer.

Public Member Functions

 CMSLinkSelectFieldRenderer (&$form, $field, $label)
 
 createTree ($field)
 
 categorizeItemTypes ($itemsByType)
 
 getLink ($section, $identifier)
 
 renderScript ($field)
 
 renderSearchField ($field, $mode="")
 
 renderField ($field="")
 
 renderReadOnly ($field)
 

Public Attributes

 $editableValue = true
 
 $size = 40
 

Detailed Description

Definition at line 10 of file cms_link_select_field_renderer.inc.

Member Function Documentation

◆ categorizeItemTypes()

CMSLinkSelectFieldRenderer::categorizeItemTypes (   $itemsByType)

Definition at line 92 of file cms_link_select_field_renderer.inc.

93  {
94  $types = array();
95 
96  foreach($itemsByType as $type => $items)
97  {
98  foreach($items as $item)
99  {
100  $types[$item->identifier] = $type;
101  }
102  }
103 
104  return $types;
105  }
$itemsByType
$types

◆ CMSLinkSelectFieldRenderer()

CMSLinkSelectFieldRenderer::CMSLinkSelectFieldRenderer ( $form,
  $field,
  $label 
)

Definition at line 15 of file cms_link_select_field_renderer.inc.

16  {
17  $this->FieldRenderer($form);
18  if ($form->data->hasField($field))
19  {
20  $form->override($field, $label, $this);
21  }
22  else
23  {
24  $form->add($this, $field);
25  $form->overrides[$field]['label'] = $label;
26  }
27  }
$form

◆ createTree()

CMSLinkSelectFieldRenderer::createTree (   $field)

Definition at line 29 of file cms_link_select_field_renderer.inc.

30  {
31 
32  $itemsByType = array();
35 
36  $this->tree = new TreeControl("items");
37  $this->tree->width = "320";
38  $this->tree->height = "150";
39  $this->tree->selectMode = "navigation";
40  $this->tree->onSelect = "{$this->parent->id}_{$field}_selectItem";
41 
42  $sections = Query::create(Section, "ORDER BY section")->execute();
43 
44  foreach($sections as $section)
45  {
46  $sectionNode = new TreeNode($section->section, $section->section, null, false, "tree_node_closed", "tree_node_open");
47 
48  $content = $section->Content("ORDER BY identifier");
49  $contentByIdentifier = reindexList($content, "identifier");
50 
51  foreach($itemsByType as $type => $items)
52  {
53  $category = new TreeNode("content_type_".codify($section->section)."_".codify($type), $type, null, false, "tree_node_closed", "tree_node_open");
54 
55  $categories[$type] = new TreeNode("category_".codify($section->section)."_".codify($type), $type, null, false, "tree_node_closed", "tree_node_open");
56 
57  foreach($items as $item)
58  {
59  if (!array_key_exists($item->identifier, $contentByIdentifier)) continue;
60 
61 
62  if (method_exists($item, enumerateContentLinks))
63  {
64  $child = new TreeNode("available[{$item->identifier}]", $item->identifier, $this->getLink($section, $item->identifier), false, "tree_node_closed", "tree_node_open");
65 
66  $subItems = $item->enumerateContentLinks();
67  $count = 1;
68  foreach($subItems as $subItemTitle => $subItemLink)
69  {
70  $grandchild = new TreeNode("available[{$item->identifier}.{$count}]", $subItemTitle, $this->getLink($section, $subItemLink), false, "plain_tree_closed", "plain_tree_open");
71  $grandchild->leafStyle = "file_node_leaf";
72  $child->add($grandchild);
73  $count++;
74  }
75  }
76  else
77  {
78  $child = new TreeNode("available[{$item->identifier}]", $item->identifier, $this->getLink($section, $item->identifier), false, "plain_tree_closed", "plain_tree_open");
79  $child->leafStyle = "file_node_leaf";
80  }
81  $category->add($child);
82  }
83 
84  $sectionNode->add($category);
85  }
86 
87  $this->tree->add($sectionNode);
88  }
89 
90  }
$section
Definition: event_form.inc:44
static fireEvent($event, $parameter=null, $mustBeConsumed=false)
Fire an event to all subscribers as detailed in their manifests.
Section DataItem, defining the data model for sections within a site.
Definition: section.inc:45
if(array_key_exists("HTTP_IF_MODIFIED_SINCE", $_SERVER)) $content
Definition: styles.css.inc:24

◆ getLink()

CMSLinkSelectFieldRenderer::getLink (   $section,
  $identifier 
)

Definition at line 107 of file cms_link_select_field_renderer.inc.

108  {
109  if ($section->section == "/")
110  $url = "/$identifier";
111  else
112  $url = "/{$section->section}/$identifier";
113 
114  return $url;
115  }
if(! $blog->published||! $blog->enable_rss_feed||!checkRole($blog->allow_read)) $url
Definition: rss.inc:58

◆ renderField()

CMSLinkSelectFieldRenderer::renderField (   $field = "")

Definition at line 163 of file cms_link_select_field_renderer.inc.

164  {
165  if (!$field) $field = $this->field;
166 
167  $this->createTree($field);
168 
169  $this->_startField($field);
170 
171  $autocomplete = (!$this->autocomplete) ? "autocomplete='off' " : "";
172  $onchange = ($this->onChange) ? "onchange='$this->onChange(this)'" : "";
173  $disable = ($this->disable) ? "disabled='disabled'" : "";
174 
175  if ($this->editableValue)
176  {
177  echo "<input id='{$this->parent->id}_{$field}' type='text' name='$field' $onchange $autocomplete value='".htmlspecialchars($this->parent->data->get($field), ENT_QUOTES, 'UTF-8')."' size='{$this->size}' $disable/>";
178  echo "&nbsp;<a class='button' href='#' onclick='{$this->parent->id}_{$field}_showTree(event); return false;'>Browse</a><br/><div id='{$this->parent->id}_{$field}_tree_popup' style='display: none;position:absolute;'>";
179  $this->tree->writeHTML();
180  echo "</div>";
181  }
182  else
183  {
184  echo "<input id='{$this->parent->id}_{$field}' type='hidden' name='$field' value='".htmlspecialchars($this->parent->data->get($field), ENT_QUOTES, 'UTF-8')."'/>";
185  $this->tree->writeHTML();
186  }
187 
188  $this->_endField($field);
189  }

◆ renderReadOnly()

CMSLinkSelectFieldRenderer::renderReadOnly (   $field)

Definition at line 191 of file cms_link_select_field_renderer.inc.

192  {
193  //TODO: Implement this
194  }

◆ renderScript()

CMSLinkSelectFieldRenderer::renderScript (   $field)

Definition at line 117 of file cms_link_select_field_renderer.inc.

118  {
119  $script .= <<<ENDSCRIPT
120 <script type="text/javascript">
121 function {$this->parent->id}_{$field}_showTree(e)
122 {
123  new DOMEvent(e).stop();
124  var popup = document.id('{$this->parent->id}_{$field}_tree_popup');
125  var txt = document.id('{$this->parent->id}_{$field}');
126  var coords = txt.getCoordinates();
127  popup.setStyles({'display': 'block'});
128  var doc = document.id(document.body ? document.body : document.documentElement);
129  doc.addEvent('click', {$this->parent->id}_{$field}_hideTree);
130 }
131 
132 function {$this->parent->id}_{$field}_hideTree()
133 {
134  var popup = document.id('{$this->parent->id}_{$field}_tree_popup');
135  popup.setStyles({'display': 'none'});
136  var doc = document.id(document.body ? document.body : document.documentElement);
137  doc.removeEvent('click', {$this->parent->id}_{$field}_hideTree);
138 }
139 
140 function {$this->parent->id}_{$field}_selectItem(url)
141 {
142  var txt = document.id('{$this->parent->id}_{$field}');
143  txt.set('value', url);
144  {$this->parent->id}_{$field}_hideTree();
145 }
146 
147 window.addEvent('domready', function()
148 {
149  var popup = document.id('{$this->parent->id}_{$field}_tree_popup');
150  popup.addEvent('click', function(e) { new DOMEvent(e).stop(); });
151 });
152 </script>
153 ENDSCRIPT;
154 
155  echo $script;
156  }

◆ renderSearchField()

CMSLinkSelectFieldRenderer::renderSearchField (   $field,
  $mode = "" 
)

Definition at line 158 of file cms_link_select_field_renderer.inc.

159  {
160  $this->renderField($field);
161  }

Member Data Documentation

◆ $editableValue

CMSLinkSelectFieldRenderer::$editableValue = true

Definition at line 12 of file cms_link_select_field_renderer.inc.

◆ $size

CMSLinkSelectFieldRenderer::$size = 40

Definition at line 13 of file cms_link_select_field_renderer.inc.


The documentation for this class was generated from the following file: