Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
metadata_field_text_edit_fns.inc
1 <?php
18 require_once dirname(__FILE__).'/../../metadata_field/metadata_field_edit_fns.inc';
19 
32 {
33 
34 
39  function __construct()
40  {
41  parent::__construct();
42 
43  }//end constructor
44 
45 
62  public function paintValueInterface(Metadata_Field_Text $asset, Backend_Outputter $o, $value_str, $write_access, $enable_default=TRUE, $print_cascade_values_option = TRUE)
63  {
64  $prefix = $asset->getPrefix();
65 
66  $is_default = FALSE;
67 
68  if (is_null($value_str)) {
69  $value_str = $asset->getDefaultValue();
70 
71  $is_default = TRUE;
72  }
73 
74  $value = '';
75  $value_components = $asset->attr('value_components');
76  Metadata_Field::decodeValueString($value_str, $value, $value_components);
77 
78  if ($write_access) {
79  $extras = ($is_default && $enable_default) ? 'disabled="disabled"' : '';
80  if ($asset->attr('multi_line')) {
81  // if there is no character limit display the original text_area
82  if (!$asset->attr('char_limit')) {
83  text_area($prefix.'_value', $value, $asset->attr('box_width'), $asset->attr('box_height'), 0, $extras);
84  } else {
85  text_area($prefix.'_value', $value, $asset->attr('box_width'), $asset->attr('box_height'), 0, 'id="'.htmlspecialchars($prefix.'_value').'" onchange="var note=document.getElementById(\''.$prefix.'_value_note\'); note.innerHTML = \'\'; var tmp = document.getElementById(\''.htmlspecialchars($prefix.'_value').'\'); tmp.value = tmp.value.substr(0,'.$asset->attr('char_limit').');" onkeydown="setTimeout(function() { var note=document.getElementById(\''.$prefix.'_value_note\'); var tmp = document.getElementById(\''.htmlspecialchars($prefix.'_value').'\'); if (tmp.value.length > '.$asset->attr('char_limit').') {note.innerHTML = \'&nbsp;\'+js_translate(\'max_characters_exceeded_by\', (tmp.value.length-'.$asset->attr('char_limit').'));} else {note.innerHTML = \'\'} }, 50);" '.$extras);
86  }
87  } else {
88  text_box($prefix.'_value', $value, $asset->attr('box_width'), $asset->attr('char_limit'), FALSE, $extras);
89  }
90  if ($enable_default) {
91  echo ' &nbsp; &nbsp; &nbsp; ';
92  $default_string = str_replace("'", "\'", $asset->attr('default'));
93  // get rid of javascript error 'unterminated string literal'. (bug 2386)
94  $default_string = str_replace(Array("\r\n", "\r", "\n"), '\n', $default_string);
95 
96  $checkbox_extra = 'with(this.form.elements[\''.$prefix.'_value\']) { disabled = this.checked; if (this.checked) { value = \''.$default_string.'\'; } else {if(value==\'\') {value=\' \'; value = \'\';}}};';
97 
98  if (!empty($value_components)) {
99  foreach ($value_components as $vc_name => $vc_value) {
100  $default_value_comp = $asset->attr('value_components');
101  $default_vc_value = $default_value_comp[$vc_name];
102  $checkbox_extra .= 'with(this.form.elements[\''.$prefix.'_vc_value['.$vc_name.']\']) { disabled = this.checked; if (this.checked) { value = \''.$default_vc_value.'\'; } else {if(value==\'\') {value=\' \'; value = \'\';}}};';
103  }
104  }
105 
106  check_box($prefix.'_default', '1', $is_default, $checkbox_extra);
107  label(translate('use_default'), $prefix.'_default');
108  }
109 
110  if ($print_cascade_values_option) {
111  echo '&nbsp;&nbsp;&nbsp;&nbsp;';
112  check_box($prefix.'_cascade_value', '1', FALSE);
113  label(translate('cascade_value'), $prefix.'_cascade_value');
114  }
115 
116  // the following text can be used to display the character limit
117  // we suppose that char limit is only a positive attribute
118  if ($asset->attr('char_limit')) {
119  ?> <br/>Character Limit: <?php echo $asset->attr('char_limit'); ?> <span style="color:red" id="<?php echo $prefix.'_value'; ?>_note"></span> <?php
120  }
121  } else {
122  // ensure JS is not executed in read only mode
123  echo htmlspecialchars($value);
124  if ($is_default) {
125  echo ' <em style="color: #666">('.strtolower(translate('default')).')</em>';
126  }
127  }
128 
129  // now print value components
130  if (!empty($value_components)) {
131  echo '<br /><br />';
132  $num_per_row = 3;
133  $num_done = 0;
134  ?>
135  <table class="sq-backend-table">
136  <tr>
137  <?php
138  foreach ($value_components as $vc_name => $vc_value) {
139 
140  if ($num_done >= $num_per_row) {
141  $num_done = 0;
142  echo '</tr><tr>';
143  }
144 
145  echo '<td width="150" valign="top" class="sq-backend-table-cell">';
146  echo '<b>'.$vc_name.'</b>';
147  echo '<br />';
148  if ($write_access) {
149  $extras = ($is_default && $enable_default) ? 'disabled="disabled"' : '';
150  text_area($prefix.'_vc_value['.$vc_name.']', $vc_value, 30, 4, 0, $extras);
151  } else {
152  echo $vc_value;
153  }
154  echo '</td>';
155 
156  $num_done++;
157  }
158  if ($num_done && $num_done != $num_per_row) {
159  for ($i = ($num_per_row - $num_done); $i > 0; $i--) {
160  echo'<td width="150" class="sq-backend-table-cell">&nbsp;</td>';
161  }
162  }
163  ?>
164  </tr>
165  </table>
166  <?php
167  }//end if
168 
169  return $write_access;
170 
171  }//end paintValueInterface()
172 
173 
185  public function processInlineValueInterface(Metadata_Field_Text $asset, &$new_value_str, &$field_cascade_value)
186  {
187  if (!$asset->attr('editable')) return FALSE; // nothing for us to do
188 
189  $processed = FALSE;
190 
191  $prefix = $asset->getPrefix();
192  if (!empty($_POST[$prefix.'_default'])) {
193  // use default
194  $new_value_str = NULL;
195  $processed = TRUE;
196  } else {
197  if (isset($_POST[$prefix.'_value'])) {
198  $value = $_POST[$prefix.'_value'];
199  $keyword = '%asset_metadata_'.$asset->name.'%';
200  $value = trim(str_replace($keyword, '', $value));
201  $value_components = $asset->attr('value_components');
202  for (reset($value_components); NULL !== ($vc_name = key($value_components)); next($value_components)) {
203  if (isset($_POST[$prefix.'_vc_value'][$vc_name])) {
204  $clean_vc = trim(str_replace($keyword, '', $_POST[$prefix.'_vc_value'][$vc_name]));
205  $value_components[$vc_name] = str_replace(Array('\n', '\r'), Array(' ', ''), $clean_vc);
206  }
207  }
208  $new_value_str = Metadata_Field::encodeValueString(trim($value), $value_components);
209 
210  if(!SQ_IN_BACKEND && !SQ_IN_LIMBO && !SQ_IN_LOGIN && !SQ_IN_CRON && !SQ_PHP_CLI) {
211  $filter_enabled = $GLOBALS['SQ_SYSTEM']->getUserPrefs('user', 'SQ_USER_FILTER_FRONT_END_INPUT');
212  if(isset($GLOBALS['SQ_REVERT_TO_SYSTEM_VERSION'] ) && $GLOBALS['SQ_REVERT_TO_SYSTEM_VERSION']) {
213  $filter_enabled = FALSE;
214  } else if (isset($GLOBALS['SQ_CLONE_COMPONENTS'] ) && $GLOBALS['SQ_CLONE_COMPONENTS']) {
215  $filter_enabled = FALSE;
216  }
217 
218  if ($filter_enabled && !empty($new_value_str)) {
219  $new_value_str = filter_content($new_value_str);
220  if ($new_value_str === FALSE){
221  trigger_localised_error('SYS0347', E_USER_WARNING, $asset->name, $asset->type());
222  return FALSE;
223  }
224  }
225  }
226  $processed = TRUE;
227  }
228  }
229 
230  if (isset($_POST[$prefix.'_cascade_value'])) {
231  $field_cascade_value = TRUE;
232  $processed = TRUE;
233  }
234 
235  return $processed;
236 
237  }//end processInlineValueInterface()
238 
239 
255  public function paintDefault(Metadata_Field_Text $asset, Backend_Outputter $o, $prefix)
256  {
257  $write_access = $asset->writeAccess('attributes');
258 
259  if ((boolean)$asset->attr('is_contextable') === TRUE) {
260  $value_str = $asset->attr('default');
261  } else {
262  $value_str = $GLOBALS['SQ_SYSTEM']->am->getAttributeValuesByName('default', 'metadata_field', Array($asset->id), 0);
263  $value_str = array_get_index($value_str, $asset->id, '');
264  }
265 
266  $value_components = Array();
267 
268  if ($write_access === TRUE) {
269  text_area($prefix.'_default', $value_str, 30, 5);
270  } else {
271  echo $value_str;
272  }
273 
274  return TRUE;
275 
276  }//end paintDefault()
277 
278 
289  public function processDefault(Metadata_Field_Text $asset, Backend_Outputter $o, $prefix)
290  {
291  if ($asset->writeAccess('attributes') === FALSE) {
292  return FALSE;
293  }
294  $is_contextable = (boolean)$asset->attr('is_contextable');
295  $new_value = array_get_index($_POST, $prefix.'_default', '');
296  $save_attrs = TRUE;
297 
298  if ($is_contextable === TRUE) {
299  $value = $asset->attr('default');
300  } else {
301  $value = $GLOBALS['SQ_SYSTEM']->am->getAttributeValuesByName('default', 'metadata_field', Array($asset->id), 0);
302  $value = array_get_index($value, $asset->id, '');
303  }
304 
305  if ($value !== $new_value) {
306  if ($is_contextable === TRUE) {
307  // If the metadata value is contextable, just use the contextable
308  // default
309  $asset->setAttrValue('default', $new_value);
310  } else {
311  // Not contextable; in this case the default value authority goes
312  // to the default context
313  $GLOBALS['SQ_SYSTEM']->changeContext(0);
314 
315  $default_asset = $GLOBALS['SQ_SYSTEM']->am->getAsset($asset->id);
316  $default_asset->setAttrValue('default', $new_value);
317  $default_asset->saveAttributes();
318  $GLOBALS['SQ_SYSTEM']->am->forgetAsset($default_asset);
319  unset($default_asset);
320 
321  $GLOBALS['SQ_SYSTEM']->restoreContext();
322 
323  // No need to save attributes in THIS context.
324  $save_attrs = FALSE;
325  }
326  } else {
327  // Nothing to save!
328  $save_attrs = FALSE;
329  }
330 
331  return $save_attrs;
332 
333  }//end processDefault()
334 
335 
336 }//end class
337 ?>