CMS  Version 3.9
MergeCodeManager Class Reference

Public Member Functions

 MergeCodeManager ($item, $inText, $class_name="")
 
 getMergeCodeValues ($usedMergeCodes)
 
 getReplaceText ($mergeCodeMap)
 
 searchAndReplace ($text)
 

Static Public Member Functions

static buildMergeCodeTable ($class_name)
 
static getDefaultCodes ($obj, $mergeCodes)
 

Public Attributes

 $item
 
 $patterns
 
 $replacements
 
 $class_name
 

Detailed Description

Definition at line 58 of file merge_code_manager.inc.

Member Function Documentation

◆ buildMergeCodeTable()

static MergeCodeManager::buildMergeCodeTable (   $class_name)
static

Definition at line 252 of file merge_code_manager.inc.

253  {
254  $classes = array();
255  $classes = ComponentManager::fireEvent("EnumerateDataItemClasses", $classes);
256 
257  $mergeCodes = Query::create(MergeCode, "WHERE class_name=:cn")
258  ->bind(":cn", $class_name)
259  ->execute();
260 
261  if(array_search($class_name, $classes))
262  {
263  $obj = new $class_name();
265  }
266 
267  $table = new DataListView($mergeCodes, "mergeCodes");
268  $table->column("Code Name", "{name}", false)
269  ->column("Description", "{description}", false)
270  ;
271  $table->emptyMessage = "There are no merge codes defined.";
272  $table->sortable = false;
273  $table->cssStyle = "width: 100%";
274 
275  return $table;
276  }
static fireEvent($event, $parameter=null, $mustBeConsumed=false)
Fire an event to all subscribers as detailed in their manifests.
static getDefaultCodes($obj, $mergeCodes)
$mergeCodes

◆ getDefaultCodes()

static MergeCodeManager::getDefaultCodes (   $obj,
  $mergeCodes 
)
static

Definition at line 285 of file merge_code_manager.inc.

286  {
287  $fields = $obj->getFields();
288  if(count($fields) > 0)
289  {
290  foreach($fields as $name => $type)
291  {
292  if(preg_match("/_id/", $name) || preg_match("/composite/", $name)
293  || preg_match("/password/", $name) || $type == Boolean)
294  continue;
295 
296  $mCode = new MergeCode();
297  $mCode->name = $name;
298  $mCode->map = "N/A";
299  $mCode->description = $type ." field in ". get_class($obj);
300  $mergeCodes[] = $mCode;
301  }
302  }
303  return $mergeCodes;
304  }
$name
Definition: upload.inc:54

◆ getMergeCodeValues()

MergeCodeManager::getMergeCodeValues (   $usedMergeCodes)

Definition at line 99 of file merge_code_manager.inc.

100  {
101  if(count($usedMergeCodes) > 0)
102  {
103  $used = strip_tags("'". implode("','", array_values($usedMergeCodes)) . "'");
104 
105  $mergeCodes = Query::create(MergeCode, "WHERE class_name = :cn and name in ($used)")
106  ->bind(":cn", $this->class_name)
107  ->execute();
108  }
109 
110  if(count($mergeCodes) > 0)
111  $indexed = reindexList($mergeCodes, "name");
112  else
113  $indexed = array();
114 
115  if(count($usedMergeCodes) == 0)
116  {
117  trace("MergeCodeManager:: no merge codes used.", 3);
118  return;
119  }
120 
121  $patterns = array();
122  $replacements = array();
123 
124  foreach($usedMergeCodes as $idx => $name)
125  {
126  $clean_name = strip_tags($name);
127  if(array_key_exists($clean_name, $indexed))
128  $mergeCode = $indexed[$clean_name];
129  else
130  {
131  $mergeCode = new MergeCode();
132  $mergeCode->map = $clean_name;
133  }
134 
135  $map = ($mergeCode) ? $mergeCode->map : $clean_name;
136 
137  trace("MergeCodeManager:: map is $map", 3);
138 
139  if($map)
140  $replaceText = $this->getReplaceText($map);
141 
142  array_push($patterns, "[$name]");
143  array_push($replacements, $replaceText);
144  }
145 
146  $this->patterns = $patterns;
147  $this->replacements = $replacements;
148  }
getReplaceText($mergeCodeMap)
$mergeCode

◆ getReplaceText()

MergeCodeManager::getReplaceText (   $mergeCodeMap)

Definition at line 166 of file merge_code_manager.inc.

167  {
168  $valid = true;
169 
170  list($part1, $part2) = explode(".", $mergeCodeMap);
171 
172  trace("MergeCodeManager::part1 is $part1 and part2 is $part2", 3);
173 
174  if(get_class($this->item) == $part1)
175  {
176  trace("MergeCodeManager::part1 equals item class", 3);
177  $part1 = $part2;
178  $part2 = "";
179  }
180 
181  if($part2)
182  {
183  if($this->item->hasRelation($part1))
184  {
185  $replaceObj = $this->item->$part1();
186  if(is_object($replaceObj) && $replaceObj->hasField($part2))
187  {
188  trace("MergeCodeManager:: part1 is relation and part2 is a field in that related class.", 3);
189  $replaceText = $replaceObj->format("{".$part2 ."}");
190  }
191  elseif(is_callable(array($replaceObj, $part2)))
192  {
193  trace("MergeCodeManager:: part1 is relation of sending class and part2 is a function in that relation.", 3);
194  $replaceText = $replaceObj->$part2();
195  }
196  else
197  {
198  $valid = false;
199  }
200  }
201  elseif(is_callable(array($part1, $part2)))
202  {
203  trace("MergeCodeManager:: part1 is class and part2 is static function of a class.", 3);
204  $replaceText = call_user_func(array($part1, $part2), $this->item);
205  }
206  else
207  {
208  $valid = false;
209  }
210  }
211  elseif($part1) // Map has just one part
212  {
213  if($this->item->hasField($part1))
214  {
215  trace("MergeCodeManager:: part1 is field of sending class.", 3);
216  $replaceText = $this->item->format("{".$part1 ."}");
217  }
218  elseif(is_callable($part1))
219  {
220  trace("MergeCodeManager:: part1 is callback function.", 3);
221  $replaceText = call_user_func($part1, $this->item);
222  }
223  elseif(is_callable(array($this->item, $part1)))
224  {
225  trace("MergeCodeManager:: part1 is function from sending class.", 3);
226  $replaceText = $this->item->$part1();
227  }
228  else
229  {
230  $valid = false;
231  }
232  }
233 
234  if($valid)
235  trace("MergeCodeManager:: replaceText is $replaceText", 3);
236  else
237  trace("MergeCodeManager:: Warning: merge code map not valid.", 3);
238 
239  return $replaceText;
240  }

◆ MergeCodeManager()

MergeCodeManager::MergeCodeManager (   $item,
  $inText,
  $class_name = "" 
)

Definition at line 65 of file merge_code_manager.inc.

66  {
67  $this->item = clone($item);
68  $this->item->filter = null;
69  $this->class_name = ($class_name) ? $class_name : get_class($item);
70 
71  $usedMergeCodes = array();
72  preg_match_all("/\[(.*?)\]/", $inText, $usedMergeCodes, PREG_PATTERN_ORDER);
73 
74  $usedMergeCodes = $usedMergeCodes[1];
75  $this->getMergeCodeValues($usedMergeCodes);
76 
77  }
getMergeCodeValues($usedMergeCodes)

◆ searchAndReplace()

MergeCodeManager::searchAndReplace (   $text)

Definition at line 242 of file merge_code_manager.inc.

243  {
244  $text = $this->item->format($text);
245 
246  if(count($this->patterns) == 0)
247  return $text;
248  else
249  return str_replace($this->patterns, $this->replacements, $text);
250  }

Member Data Documentation

◆ $class_name

MergeCodeManager::$class_name

Definition at line 63 of file merge_code_manager.inc.

◆ $item

MergeCodeManager::$item

Definition at line 60 of file merge_code_manager.inc.

◆ $patterns

MergeCodeManager::$patterns

Definition at line 61 of file merge_code_manager.inc.

◆ $replacements

MergeCodeManager::$replacements

Definition at line 62 of file merge_code_manager.inc.


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