Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
content_type_wysiwyg_prefs.inc
1 <?php
18 require_once SQ_LIB_PATH.'/config/prefs.inc';
19 
32 {
33  var $pref_vars = Array(
34  'SQ_WYSIWYG_STYLE' => Array(
35  'name' => 'wysiwyg_style',
36  'description' => 'This preference allows you to change the style and size of the WYSIWYG editor',
37  'default' => Array(
38  'body_type' => 'div',
39  'width' => '100',
40  'height' => '300',
41  'units' => Array(
42  'width' => '%',
43  'height' => 'px',
44  ),
45  ),
46  'protected' => FALSE,
47  ),
48  'SQ_WYSIWYG_PLUGINS' => Array(
49  'name' => 'wysiwyg_plugins',
50  'description' => 'This preference allows you to select which features of the WYSIWYG editor you would like make available while editing',
51  'default' => 'all',
52  'protected' => FALSE,
53  ),
54  'SQ_WYSIWYG_DISABLE_IMAGE_RESIZE' => Array(
55  'name' => 'wysiwyg_disable_image_resize',
56  'description' => 'This preference allows you to select whether to disable the image resizing functionality in WYSIWYG',
57  'default' => 'no',
58  'protected' => FALSE,
59  ),
60  'SQ_THESAURUS' => Array (
61  'name' => 'thesaurus',
62  'description' => 'Which thesaurus asset you want to use when editing content, for example to provide keyword expansions',
63  'default' => 0,
64  'protected' => FALSE,
65  ),
66  'SQ_WYSIWYG_LINK_TYPES' => Array(
67  'name' => 'core_ct_wysiwyg_link_type_templates',
68  'description' => 'List of link types to be used in the Insert Link popup',
69  'default' => Array(
70  0 => Array(
71  'type' => 'http://',
72  'template' => 'http://%%link%%',
73  ),
74  1 => Array(
75  'type' => 'https://',
76  'template' => 'https://%%link%%',
77  ),
78  2 => Array(
79  'type' => 'mailto:',
80  'template' => 'mailto:%%link%%',
81  ),
82  3 => Array(
83  'type' => 'ftp://',
84  'template' => 'ftp://%%link%%',
85  ),
86  4 => Array(
87  'type' => 'rtsp://',
88  'template' => 'rtsp://%%link%%',
89  ),
90  ),
91  'protected' => FALSE,
92  ),
93  'SQ_LIVE_LINK_ONLY' => Array (
94  'name' => 'live_link_only',
95  'description' => 'To allow links pointing only to live asset',
96  'default' => 0,
97  'protected' => FALSE,
98  ),
99  );
100 
101 
106  function Content_Type_WYSIWYG_Prefs($pref_file='')
107  {
108  $this->Prefs($pref_file);
109 
110  }//end constructor
111 
112 
123  function paintBackend(&$o, $have_lock, $pref=NULL)
124  {
125  $is_root = $GLOBALS['SQ_SYSTEM']->userRoot();
126  $is_admin = ($is_root || $GLOBALS['SQ_SYSTEM']->userSystemAdmin());
127 
128  if (is_null($pref) || $pref == 'SQ_WYSIWYG_STYLE') {
129  if (is_null($pref)) {
130  $o->openField(translate($this->pref_vars['SQ_WYSIWYG_STYLE']['name']));
131  }
132 
133  $wysiwyg_style = $this->pref_vars['SQ_WYSIWYG_STYLE']['default'];
134  $size_units = Array('%' => '%', 'px' => 'px');
135  ?>
136  <table class="sq-backend-table" style="width: 350px;">
137  <tr>
138  <td class="sq-backend-table-header" nowrap="nowrap"><?php echo translate('body_type'); ?></td>
139  <td class="sq-backend-table-cell" style="width: 100%;">
140  <?php
141  if ($have_lock && $is_admin) {
142  combo_box('prefs[SQ_WYSIWYG_STYLE][body_type]', Array('div' => translate('div'), 'iframe' => translate('iframe')), FALSE, $wysiwyg_style['body_type']);
143  } else {
144  echo $wysiwyg_style['body_type'];
145  }
146  ?>
147  <br /><i><?php echo translate('mozilla_always_uses_iframe'); ?></i>
148  </td>
149  </tr>
150  <tr>
151  <td class="sq-backend-table-header" nowrap="nowrap"><?php echo translate('width'); ?></td>
152  <td class="sq-backend-table-cell" style="width: 100%;">
153  <?php
154  if (!is_numeric($wysiwyg_style['width'])) {
155  $wysiwyg_style['width'] = preg_replace('/[^0-9]/', '', $wysiwyg_style['width']);
156  }
157  if ($have_lock && $is_admin) {
158  int_text_box('prefs[SQ_WYSIWYG_STYLE][width]', $wysiwyg_style['width'], FALSE, 5);
159  echo '&nbsp;';
160  $default_unit = '%';
161  if (isset($wysiwyg_style['units']['width'])) {
162  $default_unit = $wysiwyg_style['units']['width'];
163  }
164  combo_box('prefs[SQ_WYSIWYG_STYLE][units][width]', $size_units, FALSE, $default_unit);
165  } else {
166  if (isset($wysiwyg_style['width'])) {
167  echo $wysiwyg_style['width'];
168  }
169 
170  if (isset($wysiwyg_style['units']['width'])) {
171  echo $wysiwyg_style['units']['width'];
172  }
173  }
174  ?>
175  </td>
176  </tr>
177  <tr>
178  <td class="sq-backend-table-header" nowrap="nowrap"><?php echo translate('height'); ?></td>
179  <td class="sq-backend-table-cell" style="width: 100%;">
180  <?php
181  if (!is_numeric($wysiwyg_style['height'])) {
182  $wysiwyg_style['height'] = preg_replace('/[^0-9]/', '', $wysiwyg_style['height']);
183  }
184  if ($have_lock && $is_admin) {
185  int_text_box('prefs[SQ_WYSIWYG_STYLE][height]', $wysiwyg_style['height'], FALSE, 5);
186  echo '&nbsp;';
187  $default_unit = 'px';
188  if (isset($wysiwyg_style['units']['height'])) {
189  $default_unit = $wysiwyg_style['units']['height'];
190  }
191  combo_box('prefs[SQ_WYSIWYG_STYLE][units][height]', $size_units, FALSE, $default_unit);
192  } else {
193  if (isset($wysiwyg_style['height'])) {
194  echo $wysiwyg_style['height'];
195  }
196  if (isset($wysiwyg_style['units']['height'])) {
197  echo $wysiwyg_style['units']['height'];
198  }
199  }
200  ?>
201  </td>
202  </tr>
203  </table>
204  <?php
205 
206  if (is_null($pref)) $o->closeField();
207 
208  }//end if show SQ_WYSIWYG_STYLE
209 
210 
211  if (is_null($pref) || $pref == 'SQ_WYSIWYG_PLUGINS') {
212  if (is_null($pref)) {
213  $o->openField(translate($this->pref_vars['SQ_WYSIWYG_PLUGINS']['name']));
214  }
215 
216  $plugins = Array();
217  if (!empty($this->pref_vars['SQ_WYSIWYG_PLUGINS']['default'])) {
218  $plugins = explode('|', $this->pref_vars['SQ_WYSIWYG_PLUGINS']['default']);
219  }
220  $all = in_array('all', $plugins);
221  sort($plugins);
222 
223  if ($have_lock && $is_admin) {
224  require_once SQ_FUDGE_PATH.'/general/file_system.inc';
225  $all_plugins = list_dirs(SQ_FUDGE_PATH.'/wysiwyg/plugins');
226  sort($all_plugins);
227  if (!empty($all_plugins)) {
228  hidden_field('prefs[SQ_WYSIWYG_PLUGINS_PRESENT]', '1');
229  }
230  global $ROOT_PATH;
231  $ROOT_PATH = SQ_FUDGE_PATH.'/wysiwyg/';
232  foreach ($all_plugins as $plugin_name) {
233  $plugin_path = SQ_FUDGE_PATH.'/wysiwyg/plugins/'.$plugin_name;
234  if (!is_file($plugin_path.'/'.$plugin_name.'.inc')) {
235  continue;
236  }
237  include $plugin_path.'/'.$plugin_name.'.inc';
238  $check_result = call_user_func(Array($plugin_name, 'check_usable'));
239  $extra = ($check_result === TRUE) ? '' : 'disabled="disabled"';
240  check_box('prefs[SQ_WYSIWYG_PLUGINS]['.$plugin_name.']', '1', ($all || in_array($plugin_name, $plugins)),'',$extra);
241  echo '&nbsp;'.ucwords(str_replace('_', ' ', $plugin_name));
242  if ($check_result !== TRUE) {
243  echo ' <i>('.$check_result.')</i>'; }
244  echo '<br/>';
245  }
246  } else {
247  if ($all) {
248  echo translate('all_plugins_selected');
249  } else {
250  if (empty($plugins)) {
251  echo translate('no_plugins_selected');
252  } else {
253  echo '<ul>';
254  foreach ($plugins as $plugin_name) {
255  echo '<li class="sq-backend-data">'.ucwords(str_replace('_', ' ', $plugin_name)).'</li>';
256  }
257  echo '</ul>';
258  }
259  }
260  }
261 
262  if (is_null($pref)) $o->closeField();
263 
264  }//end if show SQ_WYSIWYG_PLUGINS
265 
266  if (is_null($pref) || $pref == 'SQ_WYSIWYG_DISABLE_IMAGE_RESIZE') {
267  if (is_null($pref)) {
268  $o->openField(translate($this->pref_vars['SQ_WYSIWYG_DISABLE_IMAGE_RESIZE']['name']));
269  }
270  $wysiwyg_disable_image_resize = $this->pref_vars['SQ_WYSIWYG_DISABLE_IMAGE_RESIZE']['default'];
271  ?>
272  <table class="sq-backend-table" style="width: 100px;">
273  <tr>
274  <td class="sq-backend-table-header" nowrap="nowrap">
275  <?php
276  echo translate('disable');
277  ?>
278  </td>
279  <td class="sq-backend-table-cell" style="width: 100%;">
280  <?php
281  if ($have_lock && $is_admin) {
282  combo_box('prefs[SQ_WYSIWYG_DISABLE_IMAGE_RESIZE][default]', Array('yes' => 'Yes', 'no' => 'No'), FALSE, $wysiwyg_disable_image_resize);
283  } else {
284  echo ucfirst($wysiwyg_disable_image_resize);
285  }
286  ?>
287  </td>
288  </tr>
289  </table>
290  <?php
291  if (is_null($pref)) $o->closeField();
292 
293  }//end if show SQ_WYSIWYG_DISABLE_IMAGE_RESIZE
294 
295  if ($GLOBALS['SQ_SYSTEM']->am->installed('thesaurus') && (is_null($pref) || $pref == 'SQ_THESAURUS')) {
296  if (is_null($pref)) {
297  $o->openField(translate($this->pref_vars['SQ_THESAURUS']['name']));
298  }
299 
300  if ($have_lock && $is_admin) {
301  asset_finder('prefs[SQ_THESAURUS]', $this->pref_vars['SQ_THESAURUS']['default'], Array('thesaurus'=>'A'));
302  $o->note(translate('thesaurus_used_by_matrix_expand_keywords_plugin'));
303  } else {
304  if (!$this->pref_vars['SQ_THESAURUS']['default']) {
305  echo '('.translate('none_selected').')';
306  } else {
307  $name = reset($GLOBALS['SQ_SYSTEM']->am->getAssetInfo(Array($this->pref_vars['SQ_THESAURUS']['default']), 'thesaurus', TRUE, 'name'));
308  echo $name.' (#'.$this->pref_vars['SQ_THESAURUS']['default'].')';
309  }
310  }
311  if (is_null($pref)) $o->closeField();
312  }//end if show SQ_THESAURUS
313 
314  if (is_null($pref) || $pref == 'SQ_WYSIWYG_LINK_TYPES') {
315  $pref_var =& $this->pref_vars['SQ_WYSIWYG_LINK_TYPES'];
316 
317  if (is_null($pref)) {
318  $o->openField(translate($this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['name']));
319  }
320 
321  if ($have_lock && $is_admin) {
322 
323  ?><table class="sq-backend-table" style="width:auto">
324  <tr>
325  <th>Link Type</th>
326  <th>Template</th>
327  <th><?php echo translate('delete_question') ?></th>
328  </tr><?php
329  foreach ($pref_var['default'] as $key => $item) {
330  // The first four items (http, https, mailto, ftp) cannot be altered
331  if ($key >= 4) {
332  ?><tr><?php
333  ?><td><?php text_box('prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][type]', $item['type'], 10) ?></td><?php
334  ?><td><?php text_box('prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][template]', $item['template'], 50) ?></td><?php
335  ?><td><?php check_box('prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][delete]', 1, FALSE, 'document.getElementById("prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][type]").disabled = document.getElementById("prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][template]").disabled = this.checked') ?></td><?php
336  ?></tr><?php
337  } else {
338  ?><tr><?php
339  ?><td><?php hidden_field('prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][type]', $item['type']); echo $item['type'] ?></td><?php
340  ?><td><?php hidden_field('prefs[SQ_WYSIWYG_LINK_TYPES][default]['.$key.'][template]', $item['template']); echo $item['template'] ?></td><?php
341  ?><td></td><?php
342  ?></tr><?php
343  }
344  }
345  ?>
346  <tr>
347  <td colspan="3"><a href="#" id="prefs[SQ_WYSIWYG_LINK_TYPES][add]" onclick="sq_wysiwyg_link_types_addAnother(this.parentNode.parentNode); return false;">Add another...</a></td>
348  </tr>
349  </table>
350  <script type="text/javascript">
351  sq_wysiwyg_link_types_nextIndex = <?php echo (int)count($pref_var['default']); ?>;
352  function sq_wysiwyg_link_types_addAnother(node) {
353  var parent = node.parentNode;
354 
355  // create a new row
356  tr = document.createElement('tr');
357 
358  // build the cells
359  td1 = document.createElement('td');
360  td1.innerHTML = '<input type="text" name="prefs[SQ_WYSIWYG_LINK_TYPES][default][' + sq_wysiwyg_link_types_nextIndex + '][type]" value="" size="10" />';
361  td2 = document.createElement('td');
362  td2.innerHTML = '<input type="text" name="prefs[SQ_WYSIWYG_LINK_TYPES][default][' + sq_wysiwyg_link_types_nextIndex + '][template]" value="" size="50" />';
363  td3 = document.createElement('td');
364  td3.innerHTML = '<em>new</em>';
365 
366  // Now put them all together
367  tr.appendChild(td1);
368  tr.appendChild(td2);
369  tr.appendChild(td3);
370  parent.insertBefore(tr, node);
371 
372  // Go to next index
373  sq_wysiwyg_link_types_nextIndex++;
374  }
375  </script>
376  <?php
377 
378  } else {
379 
380  ?><table class="sq-backend-table" style="width:auto">
381  <tr>
382  <th>Link Type</th>
383  <th>Template</th>
384  </tr><?php
385  foreach ($pref_var['default'] as $item) {
386  ?><tr><?php
387  ?><td><?php echo $item['type'] ?></td><?php
388  ?><td><?php echo $item['template'] ?></td><?php
389  ?></tr><?php
390  }
391  ?></table><?php
392  }
393 
394  $o->note(translate('core_ct_wysiwyg_link_type_templates_note'));
395  if (is_null($pref)) $o->closeField();
396  }// end if show SQ_WYSIWYG_LINK_TYPES
397 
398  if (is_null($pref) || $pref == 'SQ_LIVE_LINK_ONLY') {
399 
400  if (is_null($pref)) {
401  $o->openField(translate($this->pref_vars['SQ_LIVE_LINK_ONLY']['name']));
402  }
403 
404  $pref_var =& $this->pref_vars['SQ_LIVE_LINK_ONLY']['default'];
405  if ($have_lock && $is_admin) {
406  $options = Array(1 => 'Yes', 0 => 'No');
407  combo_box('prefs[SQ_LIVE_LINK_ONLY]', $options, FALSE, $pref_var);
408  echo $o->note(translate('live_link_only_note'));
409  } else {
410  echo ($pref_var) ? translate('yes') : translate('no');
411  }
412 
413  if (is_null($pref)) $o->closeField();
414 
415  }//end if show SQ_LIVE_LINK_ONLY
416 
417  return TRUE;
418 
419  }//end paintBackend()
420 
421 
432  function processBackend(&$o, $have_lock, $pref=NULL)
433  {
434  $is_root = $GLOBALS['SQ_SYSTEM']->userRoot();
435  $is_admin = ($is_root || $GLOBALS['SQ_SYSTEM']->userSystemAdmin());
436  if (!$is_admin) return FALSE;
437 
438 
439  // WYSIWYG STYLE
440  if (is_null($pref) || $pref == 'SQ_WYSIWYG_STYLE') {
441  if (isset($_POST['prefs']['SQ_WYSIWYG_STYLE'])) {
442  $this->pref_vars['SQ_WYSIWYG_STYLE']['default'] = $_POST['prefs']['SQ_WYSIWYG_STYLE'];
443  }
444  }
445 
446 
447  // WYSIWYG PLUGINS
448  if (is_null($pref) || $pref == 'SQ_WYSIWYG_PLUGINS') {
449  if (isset($_POST['prefs']['SQ_WYSIWYG_PLUGINS_PRESENT'])) {
450  $wysiwyg_plugins = Array();
451  if (isset($_POST['prefs']['SQ_WYSIWYG_PLUGINS'])) {
452  $wysiwyg_plugins = $_POST['prefs']['SQ_WYSIWYG_PLUGINS'];
453  }
454  $plugin_list = '';
455  $all = TRUE;
456 
457  require_once SQ_FUDGE_PATH.'/general/file_system.inc';
458  $all_plugins = list_dirs(SQ_FUDGE_PATH.'/wysiwyg/plugins');
459 
460  foreach ($all_plugins as $plugin_name) {
461  $plugin_path = SQ_FUDGE_PATH.'/wysiwyg/plugins/'.$plugin_name;
462  if (!is_file($plugin_path.'/'.$plugin_name.'.inc')) {
463  continue;
464  }
465 
466  if (!isset($wysiwyg_plugins[$plugin_name]) || !$wysiwyg_plugins[$plugin_name]) {
467  $all = FALSE;
468  continue;
469  }
470  $plugin_list .= $plugin_name.'|';
471  }
472 
473  if ($all) {
474  $plugin_list = 'all';
475  } else {
476  $plugin_list = trim($plugin_list, '|');
477  }
478  $this->pref_vars['SQ_WYSIWYG_PLUGINS']['default'] = $plugin_list;
479  }
480  }//end if
481 
482  // WYSIWYG DISABLE IMAGE RESIZE
483  if (is_null($pref) || $pref == 'SQ_WYSIWYG_DISABLE_IMAGE_RESIZE') {
484  if (isset($_POST['prefs']['SQ_WYSIWYG_DISABLE_IMAGE_RESIZE'])) {
485  $this->pref_vars['SQ_WYSIWYG_DISABLE_IMAGE_RESIZE']['default'] = $_POST['prefs']['SQ_WYSIWYG_DISABLE_IMAGE_RESIZE']['default'];
486  }
487  }
488 
489  // THESAURUS
490  if (is_null($pref) || $pref == 'SQ_THESAURUS') {
491  if (isset($_POST['prefs']['SQ_THESAURUS'])) {
492  $this->pref_vars['SQ_THESAURUS']['default'] = $_POST['prefs']['SQ_THESAURUS']['assetid'];
493  }
494  }
495 
496  // WYSIWYG LINK TYPE TEMPLATES
497  if (is_null($pref) || $pref == 'SQ_WYSIWYG_LINK_TYPES') {
498  if (isset($_POST['prefs']['SQ_WYSIWYG_LINK_TYPES'])) {
499  // Get what we have been given
500  $this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['default'] = $_POST['prefs']['SQ_WYSIWYG_LINK_TYPES']['default'];
501 
502  foreach ($this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['default'] as $key => $value) {
503  // Get rid of indexes we don't need, as a cleansing measure
504  $allowed_sub_keys = Array('type', 'template', 'delete');
505  foreach ($value as $sub_key) {
506  if (!in_array($sub_key, $allowed_sub_keys)) {
507  unset($this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['default'][$key][$sub_key]);
508  }
509  }
510 
511  // If we are set to delete a row, then delete the lot of it
512  if (array_get_index($value, 'delete', FALSE)) {
513  unset($this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['default'][$key]);
514  }
515  }
516  // Re-order so that we start from zero again
517  $this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['default'] = array_values($this->pref_vars['SQ_WYSIWYG_LINK_TYPES']['default']);
518  }
519  }
520 
521  // LIVE LINK ONLY
522  if (is_null($pref) || $pref == 'SQ_LIVE_LINK_ONLY') {
523  if (isset($_POST['prefs']['SQ_LIVE_LINK_ONLY'])) {
524  $this->pref_vars['SQ_LIVE_LINK_ONLY']['default'] = $_POST['prefs']['SQ_LIVE_LINK_ONLY']['default'];
525  }
526  }
527 
528  return TRUE;
529 
530  }//end processBackend()
531 
532 
542  function mergePrefs($prefs1, $prefs2)
543  {
544  $merged_prefs = Array();
545  $pref_vars = Array('SQ_WYSIWYG_STYLE', 'SQ_WYSIWYG_PLUGINS', 'SQ_THESAURUS');
546 
547  foreach ($pref_vars as $var_name) {
548  if (isset($prefs1[$var_name]) && !isset($prefs2[$var_name])) {
549  // this is only set in prefs1
550  $merged_prefs[$var_name] = $prefs1[$var_name];
551  } else if (isset($prefs2[$var_name]) && !isset($prefs1[$var_name])) {
552  // this is only set in prefs2
553  $merged_prefs[$var_name] = $prefs2[$var_name];
554  } else if (isset($prefs1[$var_name]) && isset($prefs2[$var_name])) {
555  // this is set in both prefs
556  switch ($var_name) {
557  case 'SQ_WYSIWYG_STYLE' :
558  // can't merge the style, so just use the first one
559  $merged_prefs[$var_name] = $prefs1[$var_name];
560  break;
561 
562  case 'SQ_WYSIWYG_PLUGINS' :
563  $plug1 = explode('|', $prefs1['SQ_WYSIWYG_PLUGINS']['default']);
564  if (is_array($prefs2['SQ_WYSIWYG_PLUGINS']) && isset($prefs2['SQ_WYSIWYG_PLUGINS']['default'])) {
565  $plug2 = explode('|', $prefs2['SQ_WYSIWYG_PLUGINS']['default']);
566  } else {
567  $plug2 = explode('|', $prefs2['SQ_WYSIWYG_PLUGINS']);
568  }
569  $merged_prefs['SQ_WYSIWYG_PLUGINS']['default'] = implode('|', array_unique(array_merge($plug1, $plug2)));
570  break;
571 
572  case 'SQ_THESAURUS' :
573  // use the first thesaurus
574  $merged_prefs['SQ_THESAURUS']['default'] = $prefs1[$var_name]['default'];
575  break;
576 
577  }
578 
579  $merged_prefs[$var_name]['name'] = $prefs1[$var_name]['name'];
580  $merged_prefs[$var_name]['description'] = $prefs1[$var_name]['description'];
581 
582  if (isset($prefs2[$var_name]['protected'])) {
583  $merged_prefs[$var_name]['protected'] = ($prefs1[$var_name]['protected'] || $prefs2[$var_name]['protected']);
584  } else {
585  $merged_prefs[$var_name]['protected'] = $prefs1[$var_name]['protected'];
586  }
587  }//end if
588  }//end foreach
589 
590  return $merged_prefs;
591 
592  }//end mergePrefs()
593 
594 
595 }//end class
596 
597 ?>