· 8 years ago · Aug 29, 2018, 08:20 AM
1<?php
2 // $Id: webdk_dynamic_object_edit_utils.inc,v 1.222 2018/06/27 07:18:56 webdk Exp $
3 require_once('lib/webdk_dynamic_object_utils.inc');
4 require_once('lib/webdk_file_utils.inc');
5 require_once('lib/webdk_relation_utils.inc');
6 require_once('lib/webdk_av_utils.inc');
7 require_once('lib/webdk_form_utils.inc');
8 require_once('lib/webdk_wysiwyg_utils.inc');
9 require_once('lib/webdk_tag_utils.inc');
10
11 // --- TEXT ---
12 function webdk_dynamic_object_update_text_value2sql($item_id,$field_desc,$namespace,$old_item)
13 {
14 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE, $WEBDK_CLEAN_STRINGS_DISABLED;
15
16 $field_id = $field_desc['dynobj_field_id'];
17 $value = trim($namespace['field_'.$field_id]);
18
19 if(!$WEBDK_CLEAN_STRINGS_DISABLED)
20 $value = A74_Util::cleanString($value);
21
22 $field_changed = false;
23
24 $old_value = trim($old_item['dyn_table_field_'.$field_id]);
25
26 if($value !== $old_value)
27 $field_changed = true;
28
29 $values = 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($value)."',".
30 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($value,0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."')";
31
32 return array('field_changed' => $field_changed, 'values' => $values);
33 }
34
35 function webdk_dynamic_object_text_edit_value2html($field_desc,$namespace)
36 {
37 global $webdk_html_quote,$webdk_dynamic_object_make_html_options_string,$WEBDK_CURRENT_PARENT_ID,$WEBDK_UNIQ,
38 $webdk_dynamic_object_text_events,$webdk_dynamic_object_htmlattrs,$WEBDK_CLIENT_IS_MOBILE;
39
40 $res = '';
41
42 $options = unserialize($field_desc['dynobj_field_options']);
43
44 // Field uniq stuff
45 if($field_desc['dynobj_field_uniq'])
46 {
47 //
48 $och = "webdk_ajax_field_check_uniq_{$field_desc['dynobj_field_id']}();";
49
50 //
51 if($options['onBlur'])
52 $options['onBlur'] .= ";".$och;
53 else
54 $options['onBlur'] = $och;
55 $res .= webdk_dynamic_object_print_unique_check_js($field_desc,$namespace);
56 }
57
58 $arr = webdk_dynamic_object_make_html_options_string($field_desc,$options,
59 $webdk_dynamic_object_text_events,
60 $htmlattrs=$webdk_dynamic_object_htmlattrs);
61
62 if($arr['pre']) $res .= $arr['pre'];
63
64
65 //$scrollTop = $WEBDK_CLIENT_IS_MOBILE?"onfocus = \"var asdf = $('#field_{$field_desc['dynobj_field_id']}'); alert(asdf.position().top);\"":'';
66 $scrollTop = '';
67
68 $res .= sprintf("<input type=text class=textctrl name=\"field_%d\" id=\"field_%d\" size=\"%d\" maxlength=\"%d\" value=\"%s\"%s %s>",
69 $field_desc['dynobj_field_id'],
70 $field_desc['dynobj_field_id'],
71 $options['field_size'],
72 $options['field_maxlength'],
73 webdk_html_quote($namespace['dyn_table_field_'.$field_desc['dynobj_field_id']]),$arr['attr'],$scrollTop);
74
75 return $res;
76 }
77
78 function webdk_dynamic_object_print_unique_check_js($field_desc, $namespace)
79 {
80 global $WEBDK_CURRENT_PARENT_ID, $WEBDK_UNIQ, $WEBDK_BASE_URL;
81
82 $res = '';
83 $js = webdk_print_ajax_init_js(true);
84
85 //
86 if($js !== false)
87 $res .= $js;
88
89 //
90 $res .= "
91<script>
92 _uniq_check_statuses[{$field_desc['dynobj_field_id']}] = true;
93 _uniq_check_fields[_uniq_check_fields.length] = {$field_desc['dynobj_field_id']};
94
95 function webdk_ajax_text_field_handler_{$field_desc['dynobj_field_id']}()
96 {
97 var r = webdk_ajax.response;
98
99 //
100 eval(r);
101 }
102
103 function webdk_ajax_field_check_uniq_{$field_desc['dynobj_field_id']}()
104 {
105 _uniq_check_statuses[{$field_desc['dynobj_field_id']}] = false;
106
107 var url = '{$WEBDK_BASE_URL}?page=dynobj_field_ax_check_uniq&fid={$field_desc['dynobj_field_id']}&value='+webdk_ajax_escape(document.getElementById('field_{$field_desc['dynobj_field_id']}').value)+'&pid={$WEBDK_CURRENT_PARENT_ID}&u={$WEBDK_UNIQ}&edit_item_id={$WEBDK_CURRENT_PARENT_ID}';
108
109 //
110 webdk_ajax_call(url,webdk_ajax_text_field_handler_{$field_desc['dynobj_field_id']});
111
112 }
113</script>
114";
115
116 return $res;
117 }
118
119 function webdk_dynamic_object_contacts_edit_value2html($field_desc,$namespace=array())
120 {
121 return webdk_dynamic_object_contacts_add_edit_html($field_desc,$namespace);
122 }
123
124 function webdk_dynamic_object_update_contacts_value2sql($item_id,$field_desc,$namespace=array())
125 {
126 return Wd_Dynobj_Field_Contacts::valueToEditSql($item_id,$field_desc,$namespace);
127 }
128
129 // Address
130 function webdk_dynamic_object_address_edit_value2html($field_desc,$namespace=array())
131 {
132 return webdk_dynamic_object_address_add_edit_html($field_desc,$namespace);
133 }
134
135 function webdk_dynamic_object_update_address_value2sql($item_id,$field_desc,$namespace=array())
136 {
137 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE, $WEBDK_ACTIVE_LANGUAGES;
138
139 $field_id = $field_desc['dynobj_field_id'];
140 $field_name = 'field_'.$field_id;
141
142 //to get country_name
143 $desktop_id = Wd_App::getInstance()->getUser()->getDesktopId();
144 $country_code = $namespace["{$field_name}_country"];
145 $countries_clsf = Wd_Classifier::createByEname($desktop_id,'countries');
146 $country_names = array();
147
148 if($country_code && $country_row = $countries_clsf->getValueByCode($country_code,false))
149 {
150 foreach($WEBDK_ACTIVE_LANGUAGES as $lang)
151 $country_names[$lang] = Wd_Classifier_Value::create($country_row)->getValue($lang);
152 }
153
154 $data = array(
155 'country' => $country_code,
156 'country_names' => $country_names,
157 'city' => $namespace["{$field_name}_city"],
158 'state' => $namespace["{$field_name}_state"],
159 'parish' => $namespace["{$field_name}_parish"],
160 'street' => $namespace["{$field_name}_street"],
161 'house_nr' => $namespace["{$field_name}_house_nr"],
162 'appartment_nr' => $namespace["{$field_name}_appartment_nr"],
163 'household' => $namespace["{$field_name}_household"],
164 'zip_code' => $namespace["{$field_name}_zip_code"],
165 );
166
167 $data = serialize($data);
168 return 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($data)."',".
169 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(webdk_lower(mb_substr($data,0,$WEBDK_MAX_INDEXED_TEXT_SIZE)))."')";
170 }
171
172 // --- INVOICE ROWS TABLE ---
173 function webdk_dynamic_object_update_invoicerows_value2sql($item_id,$field_desc,$namespace,$old_item)
174 {
175 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE, $WEBDK_INVOICE_ROW_COLUMNS;
176
177 $field_id = $field_desc['dynobj_field_id'];
178 $field_name = 'dyn_table_field_'.$field_id;
179 $data_field = 'field_'.$field_id.'_data';
180 $data = $namespace[$data_field];
181
182 foreach($WEBDK_INVOICE_ROW_COLUMNS as $key => $def)
183 {
184 if(!($def['type'] == 'sosel' && $def['add_relation']))
185 continue;
186
187 $sosel_id_data = $namespace['invoice_field_' . $key . '_id'];
188
189 if(!is_array($sosel_id_data))
190 continue;
191
192 foreach($sosel_id_data as $id)
193 {
194 if($id)
195 Wd_Relations::relateItemsByIds($item_id, $id);
196 }
197 }
198
199 return 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($data)."',".
200 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($data,0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."')";
201 }
202
203 // --- CROSS TABLE ---
204 function webdk_dynamic_object_update_crstbl_value2sql($item_id,$field_desc,$namespace,$old_item)
205 {
206 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE,$WEBDK_DB_ASSOC,$WEBDK_CRSTBL_SOSEL_VALUES_TO_RELATIONS,$WEBDK_CURRENT_PARENT_INFO,
207 $WEBDK_CLEAN_STRINGS_DISABLED;
208
209 $res = array();
210
211 $field_id = $field_desc['dynobj_field_id'];
212 $field_name = 'dyn_table_field_'.$field_id;
213 $data_field = 'field_'.$field_id.'_data';
214 $data = $namespace[$data_field];
215 $data2 = json_decode($data,true);
216
217 if($data2 === null)
218 webdk_error("Unable to decode table data: {$field_id} (1)");
219
220 $query = sprintf("DELETE FROM crstbl_cache WHERE ctc_item_id = %d AND ctc_field_id=%d",$item_id,$field_id);
221 $WEBDK_DB_CONNECTION->query($query);
222
223 $data2 = (array)$data2;
224 $rows = (array)$data2['rows'];
225 $old_rows = $rows; //for server side control
226 if(!$WEBDK_CLEAN_STRINGS_DISABLED)
227 {
228 foreach($rows AS $row_idx => $row)
229 {
230 $new_row = array();
231 foreach($row AS $row_key => $row_value)
232 {
233 if(is_string($row_value))
234 $row_value = A74_Util::cleanString($row_value);
235 $new_row[$row_key] = $row_value;
236 }
237 $rows[$row_idx] = $new_row;
238 }
239 }
240
241 $res['rows'] = $rows;
242 $query = '';
243 $opts = unserialize($field_desc['dynobj_field_options']);
244 $cm = $opts['defs']['colModel'];
245
246 if($WEBDK_CRSTBL_SOSEL_VALUES_TO_RELATIONS)
247 {
248 $sosel_clm = array();
249 //get sosel columns
250 foreach($cm as $col)
251 {
252 if($col['sosel'])
253 $sosel_clm[] = $col['name'];
254 }
255
256 //contains sosel fields
257 if($sosel_clm)
258 {
259 $old_sosel_items = array();
260 $new_sosel_items = array();
261
262
263 if($field_id==$field_desc['dynobj_base_field_id'])
264 $needed_type_id=$WEBDK_CURRENT_PARENT_INFO['item_type_base_type_id'];
265 else
266 $needed_type_id=$field_desc['dynobj_item_type_id'];
267
268 //get previous crstbl data
269 $q = sprintf("SELECT dyn_table_field_%d as data FROM dyn_table_%d WHERE dyn_table_%d_id = %d",$field_id,$needed_type_id,$needed_type_id,$item_id);
270 $old_data_row = $WEBDK_DB_CONNECTION->queryAndFetchFirst($q,$WEBDK_DB_ASSOC);
271
272 $old_data = unserialize($old_data_row['data']);
273 $old_data_rows = $old_data['rows'];
274
275 if($old_data_rows)
276 {
277 foreach($sosel_clm as $field)
278 {
279 foreach($old_data_rows as $row)
280 {
281 if($row[$field])
282 {
283 $val_exp = explode(' -- ',$row[$field]);
284 if(!in_array($val_exp[1],$old_sosel_items))
285 $old_sosel_items[] = $val_exp[1];
286
287 }
288 }
289 }
290 }
291
292 //get new data
293 if($res['rows'])
294 {
295 foreach($sosel_clm as $field)
296 {
297 foreach($res['rows'] as $row)
298 {
299 if($row[$field])
300 {
301 $val_exp = explode(' -- ',$row[$field]);
302 if(!in_array(intval($val_exp[1]),$new_sosel_items))
303 $new_sosel_items[] = $val_exp[1];
304
305 }
306 }
307 }
308 }
309
310
311 //insert all new
312 if(!$old_sosel_items && $new_sosel_items)
313 {
314 foreach($new_sosel_items as $sosel_item_id)
315 webdk_create_relation($item_id,$sosel_item_id);
316 }
317 else
318 {
319 $rels_to_unbind = array_diff($old_sosel_items, $new_sosel_items);
320
321 if($rels_to_unbind)
322 {
323 foreach($rels_to_unbind as $id)
324 {
325 if($id)
326 webdk_relation_unbind_items($item_id,$id,'');
327 }
328 }
329
330 if($new_sosel_items)
331 {
332 foreach($new_sosel_items as $id)
333 {
334 if($id)
335 webdk_create_relation($item_id,$id);
336 }
337 }
338 }
339 }
340 }
341
342 foreach($res['rows'] AS $key => $value)
343 {
344 if(isset($res['rows'][$key]['__act']))
345 unset($res['rows'][$key]['__act']);
346
347 $idx = 0;
348 foreach($value as $k => $v)
349 {
350 if($k != '__act')
351 {
352 $old_row_value = $old_rows[$key][$k];
353
354 if($cm[$idx]['required'])
355 {
356 //server side control for required crosstable fields
357 if(!trim($v))
358 webdk_error('Required crosstable value is invalid');
359
360 if(isset($cm[$idx]['sosel']) && !webdk_dynamic_object_crstbl_sosel_is_valid($cm[$idx],$old_row_value))
361 webdk_error("Required crosstable sosel value is invalid: {$v}");
362 }
363 if(isset($cm[$idx]) && ($cm[$idx]['sorttype'] == 'float'))
364 {
365 $v = trim(strval($v));
366
367 if($v !== '')
368 {
369 $v = str_replace(' ','',$v);
370 $v = str_replace(',','.',$v);
371 $v = $res['rows'][$key][$k] = floatval($v);
372 }
373 }
374
375 if(isset($cm[$idx]['sosel']))
376 {
377 //assume dynname has been changed before clearing value
378 if(!$v = $res['rows'][$key][$k] = webdk_dynamic_object_crstbl_sosel_is_valid($cm[$idx],$old_row_value,1))
379 {
380 //clear sosel field if it isnt valid and not required
381 if(isset($cm[$idx]['sosel']) && !webdk_dynamic_object_crstbl_sosel_is_valid($cm[$idx],$old_row_value))
382 {
383 $v = $res['rows'][$key][$k] = '';
384 }
385 }
386 }
387
388 if(!$v)
389 $query .= sprintf("INSERT INTO crstbl_cache VALUES (%d,%d,NULL,'%s');",$item_id,$field_id,$WEBDK_DB_CONNECTION->escape($k));
390 else $query .= sprintf("INSERT INTO crstbl_cache VALUES (%d,%d,'%s','%s');",$item_id,$field_id,$WEBDK_DB_CONNECTION->escape($v),$WEBDK_DB_CONNECTION->escape($k));
391 }
392
393 $idx++;
394 }
395 }
396
397 if($query)
398 $WEBDK_DB_CONNECTION->query($query);
399
400 $res['formulas'] = (array)$data2['formulas'];
401
402 $res = serialize($res);
403
404 return 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($res)."',".
405 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($res,0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."')";
406 }
407
408 function webdk_dynamic_object_crstbl_sosel_is_valid($crstbl_field_desc,$value,$check_dynname)
409 {
410 global $WEBDK_DB_CONNECTION, $WEBDK_CLEAN_STRINGS_DISABLED;
411
412 if(mb_strpos($value, " -- ") == false)
413 return false;
414 else
415 {
416 $item_type_id = $crstbl_field_desc['sosel'];
417 $separator = " -- ";
418 $separator_pos = mb_strrpos($value, $separator); //find last occurence of separator
419 $item_name_lower = webdk_lower(mb_substr($value, 0, $separator_pos)); //everything up to the last occurrence of separator is part of item_name
420 $item_id = intval(mb_substr($value, $separator_pos + mb_strlen($separator))); //item id should be right after the separator
421
422 $sosel_control_query = Wd_Db_Query_Select::create()
423 ->addFrom('items i, item_types it')
424 ->addField('i.item_name')
425 ->addWhere(sprintf('i.item_id=%d', $item_id))
426 ->addWhere('i.item_type_id=it.item_type_item_id')
427 ->addWhere(sprintf('(it.item_type_item_id=%d OR it.item_type_base_type_id=%d)', $item_type_id, $item_type_id))
428 ;
429 $sosel_res = $sosel_control_query->execute();
430 if(!$sosel_res->getRowCount())
431 {
432 return false;
433 }
434
435 //return new dynamic name, assume it might have been changed
436 if($check_dynname)
437 {
438 $row = $sosel_res->getFirstRow();
439 return $row->getString('item_name'). ' -- ' . $item_id;
440 }
441 }
442
443 return true;
444 }
445
446 function webdk_dynamic_object_crstbl_edit_value2html($field_desc,$namespace)
447 {
448 return webdk_dynamic_object_crstbl_add_edit_html($field_desc,$namespace);
449 }
450
451 // INVOICE ROWS TABLE
452 function webdk_dynamic_object_invoicerows_edit_value2html($field_desc,$namespace)
453 {
454 $namespace['page'] = 'edit_dynobj';
455 return webdk_dynamic_object_invoicerows_add_edit_html($field_desc,$namespace);
456 }
457
458 // --- MLFILES --
459 $__webdk_dynamic_object_mlfiles_edit_html_called = false;
460
461 function webdk_dynamic_object_mlfiles_edit_value2html($field_desc,$namespace)
462 {
463 return Wd_Dynobj_Field_Mlfiles::valueToAddEditHtml($field_desc,$namespace);
464 }
465
466 function webdk_dynamic_object_update_mlfiles_value2sql($item_id,$field_desc,$namespace,$old_item)
467 {
468 global $WEBDK_DB_CONNECTION, $WEBDK_NORMALIZE_FILE_NAME;
469
470 $field_id = $field_desc['dynobj_field_id'];
471 $field_name = 'field_'.$field_desc['dynobj_field_id'];
472 $field_name_db = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
473 $fid = $field_desc['dynobj_field_id'];
474
475 //In case when the global is not defined in config file
476 if(!isset($WEBDK_NORMALIZE_FILE_NAME))
477 $WEBDK_NORMALIZE_FILE_NAME = true;
478
479 $res = array(
480 'request_for_fti' => false,
481 'item_name_value' => array(),
482 'names' => 'dyn_table_field_'.$field_desc['dynobj_field_id'],
483 'values' => array(),
484 );
485
486 //get ordinals
487 $ordered_list = webdk_dynamic_object_update_mlfiles_order($item_id,$field_desc,$namespace);
488 //
489 if(isset($old_item[$field_name_db]) && is_array($arrs=unserialize($old_item[$field_name_db])))
490 {
491 // old items
492 foreach($arrs AS $arr)
493 {
494 $fn = "mlfiles_edit_{$field_desc['dynobj_field_id']}_{$arr['id']}";
495 $fn_name = "mlfiles_edit_{$field_desc['dynobj_field_id']}_{$arr['id']}_name";
496
497 $field_nr = $arr['id'];
498 $only_new_filename = trim($namespace["field_{$field_nr}_new_name"]);
499
500 // check for delete
501 if(isset($namespace['mlfiles_act']) &&
502 isset($namespace['mlfiles_act'][$field_desc['dynobj_field_id']]) &&
503 isset($namespace['mlfiles_act'][$field_desc['dynobj_field_id']][$arr['id']]) &&
504 $namespace['mlfiles_act'][$field_desc['dynobj_field_id']][$arr['id']]=='DEL')
505 {
506 webdk_file_move_to_log($arr['id']);
507 webdk_delete_file($item_id,$arr['id']);
508 //delete also from order list
509 foreach($ordered_list as $i => $file_id)
510 {
511 if(intval($file_id) == intval($arr['id']))
512 unset($ordered_list[$i]);
513 }
514 }
515
516 // check for update
517 else if(isset($namespace['mlfiles_act']) &&
518 isset($namespace['mlfiles_act'][$field_desc['dynobj_field_id']]) &&
519 isset($namespace['mlfiles_act'][$field_desc['dynobj_field_id']][$arr['id']]) &&
520 ($namespace['mlfiles_act'][$field_desc['dynobj_field_id']][$arr['id']]=='UPD') &&
521 isset($_FILES[$fn]) && (!$_FILES[$fn]['error']))
522 {
523 //$ext = pathinfo($_FILES[$fn]['name'], PATHINFO_EXTENSION);
524 //$fn_ext = pathinfo($namespace[$fn_name], PATHINFO_EXTENSION);
525 //$name = $_FILES[$fn]['name'];
526
527 //user defined file name
528 //if($namespace["file_name_{$fid}"] && $namespace["file_name_{$fid}"][$i])
529 //{
530 // $name = $namespace["file_name_{$fid}"][$i].".".$ext;
531 //}
532
533 if($WEBDK_NORMALIZE_FILE_NAME)
534 $file_name = webdk_file_normalize_name_for_web($_FILES[$fn]['name']);
535 else
536 $file_name = $_FILES[$fn]['name'];
537
538 if($namespace[$fn_name])
539 {
540 $ext = pathinfo($_FILES[$fn]['name'], PATHINFO_EXTENSION);
541
542 if($WEBDK_NORMALIZE_FILE_NAME)
543 $file_name = webdk_file_normalize_name_for_web($namespace[$fn_name]) . "." . $ext;
544 else
545 $file_name = $namespace[$fn_name] . "." . $ext;
546 }
547
548 $new_file = array(
549 'name' => $file_name,
550 'type' => $_FILES[$fn]['type'],
551 'tmp_name' => $_FILES[$fn]['tmp_name'],
552 'error' => $_FILES[$fn]['error'],
553 'size' => $_FILES[$fn]['size'],
554 'file_ext_id' => $_FILES[$fn]['file_ext_id'],
555 'force' => true,
556 );
557
558 if(!$new_file['error'])
559 {
560 $options = unserialize($field_desc['dynobj_field_options']);
561
562 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
563
564 webdk_file_move_to_log($arr['id']);
565
566 $file = webdk_file_upload_from_request_file($new_file,$item_id,false, $arr['id'],$field_id);
567
568 //delete also from order list
569 foreach($ordered_list as $i => $file_id)
570 {
571 if(intval($file_id) == intval($arr['id']))
572 $ordered_list[$i] = $file->getID();
573 }
574
575 $res['request_for_fti'] = true;
576 $res['item_name_value'][] = $file->getName();
577
578 $res['values'][] = array(
579 'id' => $file->getID(),
580 'name' => $file->getName(),
581 'size' => $file->getSize(),
582 'md5' => $file->getMD5Sum(),
583 );
584 }
585 }
586 else if($only_new_filename)
587 {
588 $file_ext = webdk_file_get_extension($arr['name']);
589 $new_filename_ext = webdk_file_get_extension($only_new_filename);
590
591 if($WEBDK_NORMALIZE_FILE_NAME)
592 {
593 $only_new_filename = webdk_file_normalize_name_for_web($only_new_filename);
594 }
595
596 if($file_ext != $new_filename_ext)
597 {
598 $only_new_filename = $only_new_filename.'.'.$file_ext;
599 }
600
601 $only_new_filename_lower = webdk_lower($only_new_filename);
602 $file_id = $arr['id'];
603
604 $arr['name'] = $only_new_filename;
605 //$res['item_name_value'][] = $only_new_filename;
606 $res['values'][] = $arr;
607
608 // change files table file_name value as well
609 $query = sprintf("UPDATE files SET file_name= '%s', file_name_lower = '%s' WHERE file_item_id = %d AND file_id = %d AND file_field_id = %d", $WEBDK_DB_CONNECTION->escape($only_new_filename), $WEBDK_DB_CONNECTION->escape($only_new_filename_lower), $item_id, $file_id, $field_id);
610
611 $WEBDK_DB_CONNECTION->query($query);
612
613 webdk_log_files_table('files','file_id',$file_id,'UPDATE_NAME');
614 }
615 else
616 {
617 $res['values'][] = $arr;
618 }
619 }
620 }
621
622 //order old values
623 if($res['values'])
624 {
625 $values = $res['values'];
626 foreach($ordered_list as $i => $file_id)
627 {
628 if(intval($file_id))
629 {
630 foreach($values as $value)
631 {
632 if($file_id == $value['id'])
633 $ordered_list[$i] = $value;
634 }
635 }
636 //should be new_file
637 else
638 continue;
639 }
640 }
641
642 $field_name = 'field_'.$field_desc['dynobj_field_id'];
643 $field_name_multiple = 'field_'.$field_desc['dynobj_field_id'].'_multiple_files';
644
645 if(isset($_FILES[$field_name]) && is_array($_FILES[$field_name]) && $_FILES[$field_name])
646 {
647 $fn = $field_name;
648
649 $keys = array_keys($_FILES[$fn]['name']);
650
651 foreach($keys as $key)
652 {
653 $ext = pathinfo($_FILES[$fn]['name'][$key], PATHINFO_EXTENSION);
654
655 if($WEBDK_NORMALIZE_FILE_NAME)
656 $name = webdk_file_normalize_name_for_web($_FILES[$fn]['name'][$key]);
657 else
658 $name = $_FILES[$fn]['name'][$key];
659
660 //if empty value
661 if(!$name)
662 continue;
663
664 //user defined file name
665 if($namespace["file_name_{$fid}"] && $namespace["file_name_{$fid}"][$key])
666 {
667 if($WEBDK_NORMALIZE_FILE_NAME)
668 $name = webdk_file_normalize_name_for_web($namespace["file_name_{$fid}"][$key]).".".$ext;
669 else
670 $name = $namespace["file_name_{$fid}"][$key].".".$ext;
671 }
672
673 $new_file = array(
674 'name' => $name,
675 'type' => $_FILES[$fn]['type'][$key],
676 'tmp_name' => $_FILES[$fn]['tmp_name'][$key],
677 'error' => $_FILES[$fn]['error'][$key],
678 'size' => $_FILES[$fn]['size'][$key],
679 'file_ext_id' => $_FILES[$fn]['file_ext_id'][$key],
680 'force' => true,
681 );
682
683 if(!$new_file['error'])
684 {
685 $options = unserialize($field_desc['dynobj_field_options']);
686 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
687 $file = webdk_file_upload_from_request_file($new_file,$item_id,false,false,$field_id);
688
689 $res['request_for_fti'] = true;
690 $res['item_name_value'][] = $file->getName();
691
692 $file_data = [
693 'id' => $file->getID(),
694 'name' => $file->getName(),
695 'size' => $file->getSize(),
696 'md5' => $file->getMD5Sum(),
697 ];
698
699 if($ordered_list)
700 {
701 foreach($ordered_list as $ordinal => $value)
702 {
703 if(!is_array($value) && $value=='new_file')
704 {
705 $ordered_list[$ordinal] = $file_data;
706 break;
707 }
708 }
709 }
710 else
711 $res['values'][] = $file_data;
712 }
713 }
714 }
715
716 //if there is ordered list
717 //then unset current values and replace them with ordered list values
718 if($ordered_list)
719 {
720 unset($res['values']);
721 $res['values'] = $ordered_list;
722 }
723
724 if(isset($_FILES[$field_name_multiple]) && $_FILES[$field_name_multiple] && isset($_FILES[$field_name_multiple]['name']))
725 {
726 foreach($_FILES[$field_name_multiple]['name'] as $k => $v)
727 {
728 if($WEBDK_NORMALIZE_FILE_NAME)
729 $_FILES[$field_name_multiple]['name'][$k] = webdk_file_normalize_name_for_web($_FILES[$field_name_multiple]['name'][$k]);
730
731 $new_file = array(
732 'name' => $_FILES[$field_name_multiple]['name'][$k],
733 'type' => $_FILES[$field_name_multiple]['type'][$k],
734 'tmp_name' => $_FILES[$field_name_multiple]['tmp_name'][$k],
735 'error' => $_FILES[$field_name_multiple]['error'][$k],
736 'size' => $_FILES[$field_name_multiple]['size'][$k],
737 'file_ext_id' => $_FILES[$field_name_multiple]['file_ext_id'][$k],
738 'force' => true,
739 );
740
741 if(!$new_file['error'])
742 {
743 $file = webdk_file_upload_from_request_file($new_file,$item_id,false,false,$field_id);
744
745 $res['request_for_fti'] = true;
746 $res['item_name_value'][] = $file->getName();
747
748 $res['values'][] = array(
749 'id' => $file->getID(),
750 'name' => $file->getName(),
751 'size' => $file->getSize(),
752 'md5' => $file->getMD5Sum(),
753 );
754 }
755 }
756 }
757
758
759 //
760 $res['item_name_value'] = implode(", ",$res['item_name_value']);
761 $res['values'] = $res['names']."='".$WEBDK_DB_CONNECTION->escape(serialize($res['values']))."'";
762
763 return $res;
764 }
765
766 function webdk_dynamic_object_update_mlfiles_order($item_id,$field_desc,$namespace)
767 {
768 $ordered_list = [];
769 //if isset ordinal value
770 $field_name_ordinal = "field_".$field_desc['dynobj_field_id']."_ordinal";
771 if(isset($namespace[$field_name_ordinal]) && $namespace[$field_name_ordinal])
772 {
773 //put together ordering array
774 $ordinal = json_decode($namespace[$field_name_ordinal]);
775 foreach($ordinal as $o)
776 {
777 $file_id = str_replace('field_'.$field_desc['dynobj_field_id'].'_file_','',$o);
778 if(intval($file_id))
779 $ordered_list[] = $file_id;
780 else
781 $ordered_list[] = 'new_file';
782 }
783 }
784
785 return $ordered_list;
786 }
787
788 // --- EMAIL ---
789 function webdk_dynamic_object_update_email_value2sql($item_id,$field_desc,$namespace,$old_item)
790 {
791 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE;
792
793 $field_id = $field_desc['dynobj_field_id'];
794 return 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape(trim($namespace['field_'.$field_id]))."',".
795 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($namespace['field_'.$field_id],0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."')";
796 }
797
798 // --- NUMBER ---
799 function webdk_dynamic_object_update_number_value2sql($item_id,$field_desc,$namespace,$old_item)
800 {
801 $field_id = $field_desc['dynobj_field_id'];
802 $value = str_replace(array(","," "),array(".",""),$namespace['field_'.$field_id]);
803 $old_value = $old_item['dyn_table_field_'.$field_id];
804 $field_changed = false;
805
806 if(strlen($value))
807 {
808 $value = floatval($value);
809 $field_changed = (is_null($old_value) || ($value != $old_value));
810 }
811 else
812 {
813 $value = 'NULL';
814 $field_changed = ($old_value !== null);
815 }
816
817 $values = 'dyn_table_field_'.$field_id.'='.$value;
818 $res = array('field_changed' => $field_changed, 'values' => $values);
819 return $res;
820 }
821
822 function webdk_dynamic_object_number_edit_value2html($field_desc,$namespace)
823 {
824 $res = webdk_dynamic_object_text_edit_value2html($field_desc,$namespace);
825 $res_lwr = webdk_lower($res);
826 $res .=sprintf("
827<script>
828 function nr_error_field_%d()
829 {
830 var message = '<div id=\"nr_error_field_%d\" style=\"color:red\">%s</div>';
831 var field=$('#field_%d');
832 var value = field.val();
833 if (!$('#nr_error_field_%d').length)
834 {
835 if(!$.isNumeric(value)) {
836 if(!value == \"\")
837 field.after(message);
838 }
839 }
840 else
841 {
842 if(($.isNumeric(value)) || (value == \"\"))
843 $('#nr_error_field_%d').remove();
844 }
845 }
846</script>
847 ",$field_desc['dynobj_field_id'],$field_desc['dynobj_field_id'],webdk_translate('This is not a valid number'),$field_desc['dynobj_field_id'],$field_desc['dynobj_field_id'],$field_desc['dynobj_field_id']);
848
849 if(strpos($res,'onkeyup') === false)
850 {
851 if($GLOBALS['WEBDK_CLIENT_BROWSER'] == 'IE')
852 $res = str_replace('<input type=text','<input type=text onkeyup="var pos=this.selectionStart;this.value=this.value.replace(\',\',\'.\');this.selectionEnd = pos; nr_error_field_%d()" onblur="if(this[\'onchange\'])this.onchange();"',$res);
853 else
854 $res = str_replace('<input type=text','<input type=text onkeyup="var pos=this.selectionStart;this.value=this.value.replace(\',\',\'.\');this.selectionEnd = pos; nr_error_field_%d()"',$res);
855
856 $res = str_replace('%d',$field_desc['dynobj_field_id'],$res);
857 }
858
859 $field_options = unserialize($field_desc['dynobj_field_options']);
860
861 //Add decimal places onchange event
862 if($field_options['field_decimal_places'] != 0)
863 {
864 $res .= sprintf("
865<script>$('#field_%d').change( function() {
866 var val = webdk_scientific_to_standard($(this).val());
867 var new_val = '';
868 var is_decimal_place = false;
869
870 for(var i = 0; i < val.length; i++)
871 {
872 if($.isNumeric(val[i]) || (val[i] == '.' && !is_decimal_place) || (i == 0 && val[i] == '-'))
873 {
874 new_val += val[i];
875 }
876
877 if(val[i] == '.')
878 {
879 is_decimal_place = true;
880 }
881 }
882
883 if(new_val)
884 {
885 //Dealing lazily with big numbers, to keep javascript from using scientific notation
886 var pieces = new_val.split('.');
887 if(pieces.length == 2)
888 var dec = parseFloat('0.' + pieces[1]).toFixed(%d);
889 else
890 var dec = (0).toFixed(%d);
891
892 new_val = pieces[0] + '.' + dec.split('.')[1];
893 }
894
895 $(this).val(new_val);
896});
897$(document).ready(function(){
898 $('#field_%d').change();
899});
900</script>",
901$field_desc['dynobj_field_id'],
902$field_options['field_decimal_places'],
903$field_options['field_decimal_places'],
904$field_desc['dynobj_field_id']
905);
906 }
907
908 $res .= sprintf("
909<script>
910$(document).ready(function(){
911 $('#field_%d').val(webdk_scientific_to_standard($('#field_%d').val()));
912});
913</script>",
914$field_desc['dynobj_field_id'],
915$field_desc['dynobj_field_id']);
916
917 return $res;
918 }
919
920 // --- MULTI-LINE TEXT ---
921 function webdk_dynamic_object_mltext_edit_value2html($field_desc,$namespace)
922 {
923 global $webdk_html_quote,$webdk_dynamic_object_make_html_options_string,
924 $webdk_dynamic_object_text_events,$webdk_dynamic_object_htmlattrs,$WEBDK_CLIENT_IS_MOBILE;
925
926 $options = unserialize($field_desc['dynobj_field_options']);
927
928 $arr = webdk_dynamic_object_make_html_options_string($field_desc,$options,
929 $webdk_dynamic_object_text_events,
930 $htmlattrs=$webdk_dynamic_object_htmlattrs);
931 $res='';
932 if($arr['pre'])
933 $res .= $arr['pre'];
934
935 //$scrollTop = $WEBDK_CLIENT_IS_MOBILE?"onfocus = \"$('html, body').scrollTop($('#field_{$field_desc['dynobj_field_id']}').offset().top);\"":'';
936 $scrollTop = '';
937
938
939 if(isset($options['wysiwyg']) && $options['wysiwyg'])
940 {
941 $mark_button = '';
942 $enable_images = $options['enable_images']?array('upload_image' => true):array();
943
944 if($options['marking'])
945 $mark_button = '<br/><input type="button" class="button" style="font-size:10px;" value="'.webdk_translate('Mark selected text').'" onclick="webdk_dynobj_mark_selection_wysiwyg(\'field_'.$field_desc['dynobj_field_id'].'\')" />';
946
947 return webdk_wysiwyg_html(
948 'field_'.$field_desc['dynobj_field_id'],
949 $namespace['dyn_table_field_'.$field_desc['dynobj_field_id']],
950 $options['field_rows'],
951 $options['field_size'],
952 '',
953 $enable_images
954 ).$mark_button;
955 }
956 else
957 {
958 if($options['marking'])
959 $mark_button = '<br/><input type="button" class="button" style="font-size:10px;" value="'.webdk_translate('Mark selected text').'" onclick="webdk_dynobj_mark_selection(\'field_'.$field_desc['dynobj_field_id'].'\',\'[[\',\']]\')" />';
960
961 return sprintf("%s<textarea class=textctrl name=\"field_%d\" id=\"field_%d\" cols=\"%d\" rows=\"%d\" %s %s>%s</textarea>",
962 $res,
963 $field_desc['dynobj_field_id'],
964 $field_desc['dynobj_field_id'],
965 $options['field_size'],
966 $options['field_rows'],
967 $arr['attr'],
968 $scrollTop,
969 webdk_html_quote($namespace['dyn_table_field_'.$field_desc['dynobj_field_id']])).$mark_button;
970 }
971 }
972
973 function webdk_dynamic_object_update_mltext_value2sql($item_id,$field_desc,$namespace,$old_item)
974 {
975 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE,$WEBDK_CLEAN_STRINGS_DISABLED;
976
977 $field_id = $field_desc['dynobj_field_id'];
978
979 $opts = unserialize($field_desc['dynobj_field_options']);
980 $value = $lower_value = trim($namespace['field_'.$field_desc['dynobj_field_id']]);
981
982 if(!$WEBDK_CLEAN_STRINGS_DISABLED)
983 $value = A74_Util::cleanString($value);
984
985 if(isset($opts['wysiwyg']) && $opts['wysiwyg'])
986 {
987 $lower_value = strip_tags($lower_value);
988 $value = webdk_dynamic_object_wysiwyg_strip_tags($value);
989
990 //upload images
991 if($opts['enable_images'])
992 webdk_wysiwyg_save_uploaded_images($value, $item_id, $field_id);
993/*
994 $value = trim($value);
995
996 // check for <p>...</p> content
997 if(mb_substr(webdk_lower($value),0,3) == '<p>')
998 $value = mb_substr($value,3,mb_strlen($value)-7);
999*/
1000 }
1001
1002 $field_changed = false;
1003
1004 $old_value = trim($old_item['dyn_table_field_'.$field_id]);
1005
1006 if($value !== $old_value)
1007 $field_changed = true;
1008
1009 $values = 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($value)."',".
1010 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($lower_value,0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."')";
1011 return array('field_changed' => $field_changed, 'values' => $values);
1012 }
1013
1014 // --- DATE ---
1015 require_once('lib/webdk_calendar_utils.inc');
1016
1017 function webdk_dynamic_object_update_date_value2sql($item_id,$field_desc,$namespace,$old_item)
1018 {
1019 global $webdk_error;
1020
1021 $field_id = $field_desc['dynobj_field_id'];
1022 $field_name = 'field_'.$field_id;
1023
1024 $date = $namespace[$field_name];
1025 $year = $namespace[$field_name.'_year'];
1026 $month = $namespace[$field_name.'_month'];
1027 $day = $namespace[$field_name.'_day'];
1028
1029 if(!($date && $year && $month && $day))
1030 return 'dyn_table_field_'.$field_id.'= NULL';
1031 else
1032 return 'dyn_table_field_'.$field_id.'='.sprintf("'%04d-%02d-%02d'",$year,$month,$day);
1033 }
1034
1035
1036 function webdk_dynamic_object_date_edit_value2html($field_desc,$namespace)
1037 {
1038 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1039 $options = unserialize($field_desc['dynobj_field_options']);
1040 $uniq_check = '';
1041
1042 if($field_desc['dynobj_field_uniq'])
1043 {
1044 $uniq_check .= webdk_dynamic_object_print_unique_check_js($field_desc,$namespace);
1045 }
1046
1047 if($namespace[$field_name])
1048 {
1049 $arr = explode('-',$namespace[$field_name]);
1050 $year = $arr[0];
1051 $month = $arr[1];
1052 $day = $arr[2];
1053 }
1054 else
1055 $year = $month = $day = false;
1056
1057
1058 $hide=false;
1059 if(trim($field_desc['dynobj_field_options'])!=='') {
1060 // vaikimisi on baasis null, kaitub nagu vanasti, samas liideses kuvab nagu oleks 1
1061 if(!$options['is_ed_on_ed'])
1062 $hide=true;
1063
1064 }
1065
1066 return webdk_make_date_field('field_'.$field_desc['dynobj_field_id'],$year,$month,$day,false,$form_name='dynobj_edit_form',$field_desc,$hide).$uniq_check;
1067 }
1068
1069 // --- DATETIME ---
1070 function webdk_dynamic_object_update_datetime_value2sql($item_id,$field_desc,$namespace,$old_item)
1071 {
1072 global $webdk_error;
1073
1074 $field_id = $field_desc['dynobj_field_id'];
1075 $field_name = 'field_'.$field_id;
1076
1077 $datetime = $namespace[$field_name];
1078 $year = $namespace[$field_name.'_year'];
1079 $month = $namespace[$field_name.'_month'];
1080 $day = $namespace[$field_name.'_day'];
1081 $hours = $namespace[$field_name.'_hours'];
1082 $mins = $namespace[$field_name.'_minutes'];
1083
1084 if(!($datetime && $year && $month && $day))
1085 return 'dyn_table_field_'.$field_id.'= NULL';
1086 else
1087 return 'dyn_table_field_'.$field_id.'='.sprintf("'%04d-%02d-%02d %02d:%02d:00'",
1088 $year,$month,$day,$hours,$mins);
1089 }
1090
1091
1092 function webdk_dynamic_object_datetime_edit_value2html($field_desc,$namespace)
1093 {
1094 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1095 $options = unserialize($field_desc['dynobj_field_options']);
1096
1097 if($namespace[$field_name])
1098 {
1099 $elems = explode(" ",$namespace[$field_name]);
1100
1101 $arr = explode('-',$elems[0]);
1102 $year = $arr[0];
1103 $month = $arr[1];
1104 $day = $arr[2];
1105
1106 $arr = explode(':',$elems[1]);
1107 $hours = $arr[0];
1108 $mins = $arr[1];
1109 }
1110 else
1111 $year = $month = $day = false;
1112
1113 $timescale_mins = array(
1114 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
1115 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,
1116 );
1117
1118
1119 $hide=false;
1120 if(trim($field_desc['dynobj_field_options'])!=='') {
1121 // vaikimisi on baasis null, kaitub nagu vanasti, samas liideses kuvab nagu oleks 1
1122 if(!$options['is_ed_on_ed'])
1123 $hide=true;
1124 }
1125
1126 return webdk_make_date_field('field_'.$field_desc['dynobj_field_id'],$year,$month,$day,false,$form_name='dynobj_edit_form',$field_desc,$hide).webdk_print_time_field('field_'.$field_desc['dynobj_field_id'],$hours,$mins,$currdate,$return_html=true,
1127 $timescale_hours=null,$timescale_mins=$timescale_mins,$required_vals=true,$hide);
1128 }
1129
1130 // --- FILE ---
1131 function webdk_dynamic_object_file_edit_value2html($field_desc,$namespace)
1132 {
1133 global $webdk_html_quote,$webdk_translate,$webdk_file_size_to_hr,$webdk_make_hint,$WEBDK_BASE_URL, $WEBDK_FILE_EXT_TO_BE_OPENED_IN_BROWSER,
1134 $WEBDK_BASE_IMG_URL,$WEBDK_TYPE_FILE,$WEBDK_UNIQ, $webdk_dynamic_object_text_events, $webdk_dynamic_object_htmlattrs, $WEBDK_INVOICE_ENABLED;
1135
1136 $options = unserialize($field_desc['dynobj_field_options']);
1137 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1138
1139/*
1140 $res = sprintf("<input type=\"file\" class=\"filectrl\" name=\"field_%d\" size=\"%d\" value=\"\">",
1141 $field_desc['dynobj_field_id'],
1142 $options['field_size']);
1143*/
1144 $arr = webdk_dynamic_object_make_html_options_string($field_desc,$options,
1145 $webdk_dynamic_object_text_events,
1146 $htmlattrs=$webdk_dynamic_object_htmlattrs);
1147
1148 $res = '';
1149 $attr = isset($arr['attr'])?$arr['attr']:'';
1150 $file_id = $namespace[$field_name.'_id'];
1151
1152 global $WEBDK_DYNOBJECT_FILE_EDIT_BUTTON_ENABLED;
1153 $edit_button_enabled = $file_id && (isset($WEBDK_DYNOBJECT_FILE_EDIT_BUTTON_ENABLED)?$WEBDK_DYNOBJECT_FILE_EDIT_BUTTON_ENABLED:true);
1154
1155 $res .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n";
1156
1157 if(array_key_exists('display_file_change_form_fields',$options))
1158 {
1159 $display_file_change_form = ($options['display_file_change_form_fields']==1)?true:false;
1160 }
1161 else
1162 {
1163 $display_file_change_form = false;
1164 }
1165
1166 $style = $display_file_change_form?'':'style="display:none"';
1167
1168 $filename = $namespace[$field_name.'_name'];
1169 $pos = strrpos($filename,'.',-1);
1170 $filename = substr($filename,0,$pos);
1171
1172
1173 $res .= sprintf("
1174<script>
1175 $(document).ready(function(){
1176 $(\"#field_%d_new_name\").one(\"click\", function() {
1177 $(this).val('%s');
1178 });
1179 });
1180</script>
1181",$field_desc['dynobj_field_id'],
1182$filename);
1183
1184 // Add XML file extension test if field "e_arve_fail" exists
1185 $selected_extensions_array = $options['required_file_extension'];
1186 $e_arve_field_id = $field_desc['dynobj_field_id'];
1187 $e_arve_field_ename = $field_desc['dynobj_field_ename'];
1188
1189 if(isset($e_arve_field_ename) && $e_arve_field_ename == 'e_arve_fail')
1190 {
1191 $res .= sprintf("
1192<script>
1193 $(document).ready(function()
1194 {
1195 var e_arve_field = $('#field_' + ename2fid['e_arve_fail'] + '_title');
1196 var e_arve_input = $('input[name=field_%1\$d]');
1197 var currentFile = e_arve_field.siblings('td.dynobj').children('a.link').first();
1198 var errorMessage = ' <span id=\"extension-error\" style=\"color: red; white-space: nowrap;\">(Vale formaat)</span>';
1199 var allowedExtensionsList = %2\$s.join(', ');
1200 var extensionErrorAppended = false;
1201
1202 e_arve_input.change(function()
1203 {
1204 var newFile = $(this);
1205
1206 if (webdk_check_file_extension(newFile, %2\$s))
1207 {
1208 newFile.siblings('#extension-error').remove();
1209 extensionErrorAppended = false;
1210 return;
1211 }
1212
1213 alert('Väljale lisatud fail peab olema järgnevas formaadis: ' + allowedExtensionsList);
1214
1215 if (extensionErrorAppended)
1216 return;
1217
1218 newFile.after(errorMessage);
1219
1220 extensionErrorAppended = true;
1221 });
1222
1223 if (webdk_check_file_extension(currentFile, %2\$s))
1224 return;
1225
1226 currentFile.after(errorMessage);
1227 });
1228</script>
1229 ",
1230 $e_arve_field_id,
1231 json_encode($selected_extensions_array));
1232 }
1233
1234 $res .= sprintf("<tr id=\"field_%d_tr_new_name\" {$style}><td><span><b>%s:</b></span><input type=\"text\" id=\"field_%d_new_name\" class=\"filectrl\" name=\"field_%d_new_name\" value=\"\"/></td></tr>\n",
1235 $field_desc['dynobj_field_id'],
1236 webdk_translate('File name'),
1237 $field_desc['dynobj_field_id'],
1238 $field_desc['dynobj_field_id']);
1239
1240 $res .= sprintf("<tr id=\"field_%d_brw_file\"%s><td nowrap><input type=radio class=radioctrl name=field_%d_type onClick=\"this.form.field_%d.disabled=false;\" value=\"1\" CHECKED /> <input type=\"file\" class=\"filectrl\" name=\"field_%d\" size=\"45\" value=\"\" onchange=\"$('#field_%d_dname').show();$('#field_%d_new_name').val('');$('#field_%d_tr_new_name').hide();\" %s /></td></tr>\n",
1241 $field_desc['dynobj_field_id'],
1242 ($edit_button_enabled && !$display_file_change_form)?' style="display:none"':'',
1243 $field_desc['dynobj_field_id'],
1244 $field_desc['dynobj_field_id'],
1245 $field_desc['dynobj_field_id'],
1246 //$options['field_size'],
1247 $field_desc['dynobj_field_id'],
1248 $field_desc['dynobj_field_id'],
1249 $field_desc['dynobj_field_id'],
1250 $attr);
1251
1252 $form_name = 'dynobj_edit_form';
1253 $text_field_name = 'field_'.$field_desc['dynobj_field_id'].'_label';
1254 $hidd_field_name = 'field_'.$field_desc['dynobj_field_id'].'_id';
1255 $file_field_name = 'field_'.$field_desc['dynobj_field_id'].'_name';
1256
1257 $res .="
1258<script>
1259 function set_file_name_to_field(form,field_name)
1260 {
1261 if(!form.value)
1262 {
1263 var old_value = field_name.value;
1264 //without extension
1265 var new_value = old_value.substr(old_value.lastIndexOf('\\\')+1, old_value.lastIndexOf('.'));
1266 if(new_value)
1267 form.value = new_value;
1268 else
1269 alert('Faili nimi vigane!');
1270
1271 return true;
1272 }
1273 }
1274</script>
1275";
1276
1277 $res .= sprintf("<tr id=\"field_%d_dname\" %s><td nowrap><b>%s:</b><input type=\"text\" class=\"textctrl\" size=51 name=\"%s\" onclick=\"set_file_name_to_field(this,%s);\" /></td></tr>\n",
1278 $field_desc['dynobj_field_id'],
1279 'style="display:none"',
1280 webdk_translate('File name'),
1281 $file_field_name,
1282 'field_'.$field_desc['dynobj_field_id']);
1283
1284
1285 $res .= sprintf("
1286<tr id=\"field_%d_sel_from_wd\"%s><td nowrap><input type=radio class=radioctrl name=field_%d_type onClick=\"this.form.field_%d.disabled=true\" value=\"2\"> <input type=\"text\" class=\"textctrl\" name=\"field_%d_label\" size=\"45\" value=\"\" onFocus=\"this.select()\" %s><input type=hidden name=\"field_%d_id\" value=\"\">
1287<a href=\"#\" class=link onClick=\"document.{$form_name}.field_%d_type[1].checked=true;document.{$form_name}.field_%d.disabled=true;set_callback(new create_callback(cb_set_text_hidden_field_value,'$form_name','$text_field_name','$hidd_field_name'));load_and_show_popup_frame('$WEBDK_BASE_URL?page=sip_fs&tids[]=$WEBDK_TYPE_FILE&ipid=%s&u=$WEBDK_UNIQ',false,550);return false;\"><img src=\"{$WEBDK_BASE_IMG_URL}webdk_icon_search.gif\"></a>
1288",
1289 $field_desc['dynobj_field_id'],
1290 ($edit_button_enabled && !$display_file_change_form)?' style="display:none"':'',
1291 $field_desc['dynobj_field_id'],
1292 $field_desc['dynobj_field_id'],
1293 $field_desc['dynobj_field_id'],
1294 //$options['field_size'],
1295 $attr,
1296 $field_desc['dynobj_field_id'],
1297 $field_desc['dynobj_field_id'],
1298 $field_desc['dynobj_field_id'],
1299 webdk_html_quote($options['def_ppid'])
1300 );
1301
1302 $res .= "<a href=\"#\" onClick=\"document.{$form_name}.field_{$field_desc[dynobj_field_id]}_label.value=document.{$form_name}.field_{$field_desc[dynobj_field_id]}_id='';return false\">[X]</a></td></tr>";
1303
1304 if($file_id)
1305 {
1306
1307 $file_id = $namespace[$field_name.'_id'];
1308 $name = $namespace[$field_name.'_name'].' ('.webdk_file_size_to_hr($namespace[$field_name.'_size']).')';
1309
1310 $res .= "<input type=hidden name=\"field_{$field_desc[dynobj_field_id]}_old_file_id\" value=\"{$file_id}\">";
1311 $res .= sprintf("<br><a href=\"$WEBDK_BASE_URL?page=pub_dynobj_file&pid=$WEBDK_CURRENT_PARENT_ID&file_id=$file_id&u=$WEBDK_UNIQ\" class=\"link\">%s</a>",
1312 webdk_html_quote($name));
1313
1314 $hint = webdk_make_hint('If this checked and no new file selected then file content of this field will be deleted on save');
1315 $res .= sprintf(" %s: <input type=checkbox class=checkctrl name=\"field_%d_delete\" value=\"1\"> $hint",
1316 webdk_translate('delete'),$field_desc['dynobj_field_id']);
1317
1318 if($edit_button_enabled && !$display_file_change_form)
1319 {
1320 $res .= sprintf(" <a href=\"javascript:;\" id=\"change_file_link\" onclick=\"\$('#field_%d_brw_file').show('slow');\$('#field_%d_sel_from_wd').show('slow');\$(this).remove();$('#field_%d_tr_new_name').show('slow')\">[ %s ]</a>",
1321 $field_desc['dynobj_field_id'],
1322 $field_desc['dynobj_field_id'],
1323 $field_desc['dynobj_field_id'],
1324 webdk_translate('Change'));
1325 }
1326
1327 }
1328 else
1329 $res .= "<input type=hidden name=\"field_{$field_desc[dynobj_field_id]}_old_file_id\" value=\"\">";
1330
1331 if(isset($WEBDK_FILE_EXT_TO_BE_OPENED_IN_BROWSER) && is_array($WEBDK_FILE_EXT_TO_BE_OPENED_IN_BROWSER) && in_array(webdk_file_get_extension(webdk_lower($namespace[$field_name.'_name'])), $WEBDK_FILE_EXT_TO_BE_OPENED_IN_BROWSER))
1332 {
1333 $res .= sprintf(" <div onMouseOver=\"this.style.cursor='pointer'\" onMouseOut=\"this.style.cursor='default'\" onClick=\"webdk_open_file_in_dialog(%d,'%s','%s','%d')\" class=\"halflings eye-open\" title=\"%s\"></div>", $file_id, $namespace[$field_name.'_name'], webdk_file_get_extension(webdk_lower($namespace[$field_name.'_name'])), $WEBDK_CURRENT_PARENT_ID, webdk_translate('Open file preview'));
1334 }
1335
1336 if($GLOBALS['WEBDK_DIRECT_SCANNING_ENABLED'])
1337 {
1338 $res .= sprintf("<br/><tr><td nowrap><input type=button class=\"button button-small\" value=\"%s\" id=\"field_{$field_desc[dynobj_field_id]}_scan_button\" onClick=\"wd_start_direct_scan('{$field_desc[dynobj_field_id]}')\"></td></tr>\n",webdk_translate('Load from scanner'));
1339/*
1340 $res .= sprintf("<br/><input type=button class=\"button\" value=\"%s\" onClick=\"$('#field_{$field_desc[dynobj_field_id]}_ds').load('{$WEBDK_BASE_URL}?page=dynobj_ds&u={$WEBDK_UNIQ}&fid={$field_desc[dynobj_field_id]}')\">\n",webdk_translate('Load from scanner'));
1341 $res .= "<span id=\"field_{$field_desc[dynobj_field_id]}_ds\"></span>\n";
1342*/
1343 }
1344
1345 if(isset($arr['attr']))
1346 {
1347 $res .= '</span>';
1348 }
1349
1350 if(isset($WEBDK_INVOICE_ENABLED) && $WEBDK_INVOICE_ENABLED)
1351 $xml_html = Wd_Invoice::getEInvoiceXMLFileHtml($namespace['item_id'], $field_desc);
1352
1353 if(isset($xml_html) && !empty($xml_html))
1354 {
1355 $res .= '<tr><td>' . $xml_html . '</td></tr>';
1356 }
1357
1358 $res .= "</table>";
1359 return $res;
1360 }
1361
1362 function webdk_dynamic_object_update_file_value2sql($item_id,$field_desc,$namespace,$old_item)
1363 {
1364 global $webdk_file_upload_from_request_file,$webdk_error,$webdk_delete_file,$WEBDK_DB_CONNECTION,
1365 $WEBDK_AV_INSTANT_SCANNING_ENABLED, $WEBDK_FILE_NO_NAME_UPDATE, $WEBDK_NORMALIZE_FILE_NAME;
1366/*
1367print '<pre>';
1368print_r($field_desc);
1369print_r($namespace);
1370
1371die('Oled siin');
1372*/
1373 $field_id = $field_desc['dynobj_field_id'];
1374 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1375 $ns_fname = 'field_'.$field_desc['dynobj_field_id'];
1376 $new_file = $_FILES['field_'.$field_desc['dynobj_field_id']];
1377
1378 //In case when the global is not defined in config file
1379 if(!isset($WEBDK_NORMALIZE_FILE_NAME))
1380 $WEBDK_NORMALIZE_FILE_NAME = true;
1381
1382 if($namespace[$ns_fname."_type"]=='2')
1383 {
1384 if($namespace[$ns_fname."_id"])
1385 {
1386 // copy file from existing webdesktop file
1387 $file_location = (int)$namespace[$ns_fname."_id"];
1388
1389 if(!$file_location)
1390 webdk_error('File location not selected!');
1391
1392 $src_file = webdk_file_get_by_item_id($file_location);
1393
1394 if(!$src_file)
1395 webdk_error("Failed to read source file!");
1396
1397 $name = trim($namespace["field_{$field_desc[dynobj_field_id]}_label"]);
1398
1399 if($name)
1400 {
1401 // force extension
1402 $src_ext = $src_file->getExtension();
1403 $tgt_ext = webdk_file_get_extension($name);
1404
1405 if($src_ext!=$tgt_ext)
1406 $name = substr($name,0,strlen($name)-strlen($tgt_ext)).'.'.$src_ext;
1407 }
1408 else
1409 $name = $src_file->getName();
1410
1411 $file = webdk_file_clone($src_file,$name,$item_id,true);
1412
1413 if($WEBDK_AV_INSTANT_SCANNING_ENABLED)
1414 {
1415 $scan_res = webdk_av_scan_file_and_update($file->getID(),$file->getFSPath());
1416
1417 $av_status = "'".$WEBDK_DB_CONNECTION->escape($scan_res['status'])."'";
1418 $av_msg = "'".$WEBDK_DB_CONNECTION->escape($scan_res['msg'])."'";
1419 $av_stime = "'".$WEBDK_DB_CONNECTION->escape($scan_res['stime'])."'";
1420 $av_etime = "'".$WEBDK_DB_CONNECTION->escape($scan_res['etime'])."'";
1421 }
1422 else
1423 {
1424 $av_status = 'NULL';
1425 $av_msg = 'NULL';
1426 $av_stime = 'NULL';
1427 $av_etime = 'NULL';
1428 }
1429
1430 $options = unserialize($field_desc['dynobj_field_options']);
1431
1432 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1433
1434 $field_id_name = $field_name."_id";
1435
1436 if(isset($old_item[$field_id_name]) && ($file_id = $old_item[$field_id_name]))
1437 webdk_file_move_to_log($file_id);
1438
1439 $res = array(
1440 'request_for_fti'=>true,
1441 'override_icon' => $options['override_icon']?$file->getIcon():false,
1442 'values' =>
1443 $field_name.'_id='.$file->getID().','.
1444 $field_name.'_size='.$file->getSize().",".
1445 $field_name."_md5_sum='".$WEBDK_DB_CONNECTION->escape($file->getMD5Sum())."',".
1446 $field_name."_avstt=".$av_status.",".
1447 $field_name."_avstm=".$av_stime.",".
1448 $field_name."_avetm=".$av_etime.",".
1449 $field_name."_avmsg=".$av_msg
1450 );
1451
1452 if(!$WEBDK_FILE_NO_NAME_UPDATE)
1453 {
1454 $res['item_name_value'] = $file->getName();
1455
1456 $res['values'] .= ', '.$field_name."_name='".$WEBDK_DB_CONNECTION->escape($file->getName())."',".
1457 $field_name."_name_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape($file->getName())."')";
1458 }
1459
1460 return $res;
1461 }
1462 else
1463 return array();
1464 }
1465 else
1466 {
1467 // FIXME MY CODE HARLES
1468 $only_new_filename = trim($namespace["field_{$field_desc['dynobj_field_id']}_new_name"]);
1469 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1470 $field_id_name = $field_name."_id";
1471 $file_id = intval($old_item[$field_id_name]);
1472
1473 if($file_id && $only_new_filename)
1474 {
1475 $file_ext = webdk_file_get_extension($old_item["dyn_table_field_{$field_desc['dynobj_field_id']}_name"]);
1476 $new_filename_ext = webdk_file_get_extension($only_new_filename);
1477
1478 if($WEBDK_NORMALIZE_FILE_NAME)
1479 {
1480 $only_new_filename = webdk_file_normalize_name_for_web($only_new_filename);
1481 }
1482
1483 if($file_ext != $new_filename_ext)
1484 {
1485 $only_new_filename = $only_new_filename.'.'.$file_ext;
1486 }
1487
1488 $only_new_filename_lower = webdk_lower($only_new_filename);
1489
1490 $res_string = 'dyn_table_field_'.$field_desc['dynobj_field_id'].'_name = \''.$only_new_filename.'\', dyn_table_field_'.$field_desc['dynobj_field_id'].'_name_lower = webdk_lower(\''.$only_new_filename.'\')';
1491
1492 $res = array('values' => $res_string);
1493
1494 // change files table file_name value as well
1495 $query = sprintf("UPDATE files SET file_name= '%s', file_name_lower = '%s' WHERE file_item_id = %d AND file_id = %d AND file_field_id = %d", $WEBDK_DB_CONNECTION->escape($only_new_filename), $WEBDK_DB_CONNECTION->escape($only_new_filename_lower), $item_id, $file_id, $field_id);
1496
1497 $WEBDK_DB_CONNECTION->query($query);
1498
1499 webdk_log_files_table('files','file_id',$file_id,'UPDATE_NAME');
1500
1501 return $res;
1502 }
1503 // FIXME END MY CODE HARLES
1504
1505 if($new_file && (!$new_file['error']))
1506 {
1507 $options = unserialize($field_desc['dynobj_field_options']);
1508 $new_filename = trim($namespace["field_{$field_desc[dynobj_field_id]}_name"]);
1509 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1510
1511 $new_filename_set = trim($namespace["field_{$field_desc[dynobj_field_id]}_new_name"]);
1512
1513 if($new_filename)
1514 {
1515 $file_ext = webdk_file_get_extension($new_file['name']);
1516 $new_filename_ext = webdk_file_get_extension($new_filename);
1517
1518 if($WEBDK_NORMALIZE_FILE_NAME)
1519 {
1520 if($file_ext == $new_filename_ext)
1521 $new_file['name'] = webdk_file_normalize_name_for_web($new_filename);
1522 else
1523 $new_file['name'] = webdk_file_normalize_name_for_web($new_filename.".".$file_ext);
1524 }
1525 else
1526 {
1527 if($file_ext == $new_filename_ext)
1528 $new_file['name'] = $new_filename;
1529 else
1530 $new_file['name'] = $new_filename.".".$file_ext;
1531 }
1532 }
1533 else if($WEBDK_NORMALIZE_FILE_NAME)
1534 $new_file['name'] = webdk_file_normalize_name_for_web($new_file['name']);
1535
1536 if(isset($old_item[$field_id_name]) && ($file_id = $old_item[$field_id_name]))
1537 webdk_file_move_to_log($file_id);
1538 else
1539 $file_id = false;
1540
1541 $file = webdk_file_upload_from_request_file($new_file,$item_id,false, $file_id, $field_id);
1542
1543 if($WEBDK_AV_INSTANT_SCANNING_ENABLED)
1544 {
1545 $scan_res = webdk_av_scan_file_and_update($file->getID(),$file->getFSPath());
1546
1547 $av_status = "'".$WEBDK_DB_CONNECTION->escape($scan_res['status'])."'";
1548 $av_msg = "'".$WEBDK_DB_CONNECTION->escape($scan_res['msg'])."'";
1549 $av_stime = "'".$WEBDK_DB_CONNECTION->escape($scan_res['stime'])."'";
1550 $av_etime = "'".$WEBDK_DB_CONNECTION->escape($scan_res['etime'])."'";
1551 }
1552 else
1553 {
1554 $av_status = 'NULL';
1555 $av_msg = 'NULL';
1556 $av_stime = 'NULL';
1557 $av_etime = 'NULL';
1558 }
1559
1560 $res = array(
1561 'request_for_fti'=>true,
1562 'override_icon' => $options['override_icon']?$file->getIcon():false,
1563 'values' =>
1564 $field_name.'_id='.$file->getID().','.
1565 $field_name.'_size='.$file->getSize().",".
1566 $field_name."_md5_sum='".$WEBDK_DB_CONNECTION->escape($file->getMD5Sum())."',".
1567 $field_name."_avstt=".$av_status.",".
1568 $field_name."_avstm=".$av_stime.",".
1569 $field_name."_avetm=".$av_etime.",".
1570 $field_name."_avmsg=".$av_msg
1571 );
1572
1573 if(!$WEBDK_FILE_NO_NAME_UPDATE)
1574 {
1575 $res['item_name_value'] = $file->getName();
1576
1577 $res['values'] .= ', '.$field_name."_name='".$WEBDK_DB_CONNECTION->escape($file->getName())."',".
1578 $field_name."_name_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape($file->getName())."')";
1579 }
1580
1581 return $res;
1582 }
1583 else if($namespace['field_'.$field_desc['dynobj_field_id'].'_delete'])
1584 {
1585 $options = unserialize($field_desc['dynobj_field_options']);
1586
1587 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1588
1589 $field_id_name = $field_name."_id";
1590
1591 if(isset($old_item[$field_id_name]) && ($file_id = $old_item[$field_id_name]))
1592 webdk_file_move_to_log($file_id);
1593
1594 webdk_delete_file($item_id,$namespace['field_'.$field_desc['dynobj_field_id']]);
1595
1596 $res = $field_name.'_id=NULL,'.
1597 $field_name.'_name=NULL,'.
1598 $field_name.'_name_lower=NULL,'.
1599 $field_name.'_size=NULL,'.
1600 $field_name.'_md5_sum=NULL';
1601
1602 return $res;
1603 }
1604 else if($old_item[$field_name.'_name'])
1605 return array('item_name_value' => $old_item[$field_name.'_name']);
1606
1607 else
1608 return '';
1609 }
1610 }
1611
1612 // --- PICTURE ---
1613 function webdk_dynamic_object_picture_edit_value2html($field_desc,$namespace)
1614 {
1615 global $webdk_html_quote,$webdk_translate,$webdk_file_size_to_hr,$webdk_make_hint,$WEBDK_BASE_URL,
1616 $WEBDK_CURRENT_PARENT_ID,$WEBDK_UNIQ;
1617
1618 $options = unserialize($field_desc['dynobj_field_options']);
1619 $field_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
1620
1621 $res = sprintf("<input type=\"file\" class=\"filectrl\" name=\"field_%d\" size=\"%d\" value=\"\">",
1622 $field_desc['dynobj_field_id'],
1623 $options['field_size']);
1624
1625 if($namespace[$field_name.'_id'])
1626 {
1627
1628 $file_id = $namespace[$field_name.'_id'];
1629 $name = $namespace[$field_name.'_name'].' ('.webdk_file_size_to_hr($namespace[$field_name.'_size']).')';
1630
1631 if($options['field_doe'])
1632 {
1633 if($options['field_width']) $width_attr = sprintf('width="%d"',$options['field_width']);
1634 else $width_attr = '';
1635
1636 if($options['field_height']) $height_attr = sprintf('width="%d"',$options['field_height']);
1637 else $height_attr = '';
1638
1639 $res .= "<br><a href=\"$WEBDK_BASE_URL?page=pub_dynobj_file&pid=$WEBDK_CURRENT_PARENT_ID&file_id=$file_id&u=$WEBDK_UNIQ\" class=\"link\"><img src=\"$WEBDK_BASE_URL?page=pub_dynobj_file&pid=$WEBDK_CURRENT_PARENT_ID&file_id=$file_id&u=$WEBDK_UNIQ\" $width_attr $height_attr></a><br>";
1640 }
1641
1642 $res .= sprintf("<br><a href=\"$WEBDK_BASE_URL?page=pub_dynobj_file&pid=$WEBDK_CURRENT_PARENT_ID&file_id=$file_id&u=$WEBDK_UNIQ\" class=\"link\">%s</a>",
1643 webdk_html_quote($name));
1644
1645 $hint = webdk_make_hint('If this checked and no new file selected then file content of this field will be deleted on save');
1646 $res .= sprintf(" %s: <input type=checkbox class=checkctrl name=\"field_%d_delete\" value=\"1\"> $hint",
1647 webdk_translate('delete'),$field_desc['dynobj_field_id']);
1648 }
1649
1650 return $res;
1651 }
1652
1653 // --- SELECTION ---
1654 function webdk_dynamic_object_update_selection_value2sql($item_id,$field_desc,$namespace,$old_item)
1655 {
1656 global $WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE,$WEBDK_ACTIVE_LANGUAGES,$WEBDK_ACTIVE_LANG;
1657
1658 $field_id = $field_desc['dynobj_field_id'];
1659
1660 $options = unserialize($field_desc['dynobj_field_options']);
1661 if ($options['clsf_use_codes'] === 'f')
1662 $options['clsf_use_codes'] = false;
1663
1664 // kui kasutatakse klassifikaatorit, siis v6tame v22rtused spets tabelist
1665 if (isset($options['classifier_id']))
1666 $options = array_merge($options, webdk_get_classifier_values($options['classifier_id']));
1667
1668 //Empty lang_fields
1669 $lang_values = array();
1670 foreach($WEBDK_ACTIVE_LANGUAGES as $lang)
1671 {
1672 $lang_values[$lang] = '';
1673 }
1674
1675 $code = $namespace['field_'.$field_id];
1676 $value = $namespace['field_'.$field_id . '_value'];
1677
1678 //This retains the previous functionality, so we leave this here for backwards compability
1679 if(empty($value))
1680 $value = $code;
1681
1682 $fgcolor = $bgcolor = '';
1683
1684 if($options)
1685 {
1686 $use_codes = isset($options['clsf_use_codes']) ? $options['clsf_use_codes'] : false;
1687
1688 foreach($options AS $k=>$arr)
1689 {
1690 if(is_int($k))
1691 {
1692 if((isset($arr['from']) && $arr['from'] && $arr['from'] > date('Y-m-d')) ||
1693 (isset($arr['to']) && $arr['to'] && $arr['to'] < date('Y-m-d')))
1694 continue;
1695
1696 if (($use_codes && $arr['code'] === $code && $arr['value_' . $WEBDK_ACTIVE_LANG] === $value) ||
1697 ($use_codes && $arr['code'] === $code && $code === $value) || //In case value isn't given
1698 (!$use_codes && $arr['value_' . $WEBDK_ACTIVE_LANG] === $value))
1699 {
1700 $value = $arr['value'];
1701 $code = $arr['code'];
1702 $fgcolor = $arr['fgcolor'];
1703 $bgcolor = $arr['bgcolor'];
1704
1705 foreach($WEBDK_ACTIVE_LANGUAGES as $lang)
1706 {
1707 $lang_values[$lang] = $arr['value_' . $lang];
1708 }
1709
1710 break;
1711 }
1712 }
1713 }
1714 }
1715
1716 $edit_string = sprintf("
1717dyn_table_field_{$field_id}='%s',
1718dyn_table_field_{$field_id}_code='%s',
1719dyn_table_field_{$field_id}_lower=webdk_lower('%s'),
1720dyn_table_field_{$field_id}_fgcolor='%s',
1721dyn_table_field_{$field_id}_bgcolor='%s'
1722",$WEBDK_DB_CONNECTION->escape($value),
1723 $WEBDK_DB_CONNECTION->escape($code),
1724 $WEBDK_DB_CONNECTION->escape(mb_substr($value,0,$WEBDK_MAX_INDEXED_TEXT_SIZE)),
1725 $WEBDK_DB_CONNECTION->escape($fgcolor),
1726 $WEBDK_DB_CONNECTION->escape($bgcolor)
1727);
1728
1729 foreach($lang_values as $lang => $lang_val)
1730 {
1731 $esc_value = $WEBDK_DB_CONNECTION->escape($lang_val);
1732 $edit_string .= sprintf(",\n dyn_table_field_%d_%s='%s'", $field_id, $lang, $esc_value);
1733 $edit_string .= sprintf(",\n dyn_table_field_%d_%s_lower='%s'", $field_id, $lang, webdk_lower($esc_value));
1734 }
1735
1736 $field_changed = false;
1737 $old_value = trim($old_item['dyn_table_field_'.$field_id]);
1738
1739 if($value !== $old_value)
1740 $field_changed = true;
1741
1742 $res = array('field_changed' => $field_changed, 'values' => $edit_string);
1743 return $res;
1744 }
1745
1746 function webdk_dynamic_object_selection_edit_value2html($field_desc,$namespace)
1747 {
1748 global $WEBDK_UNITS_ENABLED,$webdk_dynamic_object_selection_events,$webdk_dynamic_object_htmlattrs, $WEBDK_DYNAMIC_OBJECT_AJAX_ENABLED, $WEBDK_ACTIVE_LANG;
1749
1750 $options = unserialize($field_desc['dynobj_field_options']);
1751 if ($options['clsf_use_codes'] === 'f')
1752 $options['clsf_use_codes'] = false;
1753
1754 $res = '';
1755
1756 if($field_desc['dynobj_field_uniq'])
1757 {
1758 //
1759 $och = "webdk_ajax_field_check_uniq_{$field_desc['dynobj_field_id']}();";
1760
1761 //
1762 if($options['onChange'])
1763 $options['onChange'] .= ";".$och;
1764 else
1765 $options['onChange'] = $och;
1766
1767 $res.= webdk_dynamic_object_print_unique_check_js($field_desc,$namespace);
1768 }
1769
1770 $arr = webdk_dynamic_object_make_html_options_string($field_desc,$options,
1771 $webdk_dynamic_object_selection_events,
1772 $htmlattrs=$webdk_dynamic_object_htmlattrs);
1773
1774 // kui kasutatakse klassifikaatorit, siis v6tame v22rtused spets tabelist
1775 if (isset($options['classifier_id']))
1776 {
1777 if($WEBDK_UNITS_ENABLED)
1778 $unit = $options['use_unit_clsf']?Wd_App::getInstance()->getUser()->getUnit():null;
1779
1780 if($WEBDK_DYNAMIC_OBJECT_AJAX_ENABLED && isset($options['sel_type']) && (($options['sel_type'] == 1) || ($options['sel_type'] == 'AJAX')))
1781 return $arr['pre'].webdk_dynamic_object_clsf_add_edit_html_ajax($field_desc,$namespace);
1782 else if(isset($options['sel_type']) && ($options['sel_type'] == 'AJAX2'))
1783 return $arr['pre'].webdk_dynamic_object_clsf_add_edit_html_ajax2($field_desc,$namespace);
1784 else
1785 {
1786 $clsf_values = webdk_get_classifier_values($options['classifier_id'],false,false,$unit);
1787 if(!is_array($clsf_values))
1788 {
1789 $field_names = unserialize($field_desc['dynobj_field_name']);
1790 $field_name = $field_names[$WEBDK_ACTIVE_LANG];
1791 WEBDK_Global_Messages::addNOkMessage(sprintf("%s: %s", webdk_translate('Classificator which was bound to field does not exist anymore! Please fix following field\'s classificator'), $field_name), null, false);
1792 }
1793 else
1794 $options = array_merge($options, $clsf_values);
1795 }
1796 }
1797
1798 $value = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id'].'_'.$WEBDK_ACTIVE_LANG];
1799 $code = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id'].'_code'];
1800
1801 if($arr['pre']) $res .= $arr['pre'];
1802
1803 $res .= sprintf("<input type=\"hidden\" name=\"field_%d_value\" id=\"field_%d_value\">", $field_desc['dynobj_field_id'], $field_desc['dynobj_field_id']);
1804 $res .= sprintf("<select class=selectctrl name=\"field_%d\" id=\"field_%d\" %s>\n",$field_desc['dynobj_field_id'],$field_desc['dynobj_field_id'],$arr['attr']);
1805 $res .= sprintf("<option value=\"\">%s</option>\n",str_repeat(' ',25));
1806
1807 if($options)
1808 {
1809 foreach($options AS $k=>$arr)
1810 {
1811 if (is_int($k))
1812 $res .= webdk_dynamic_object_selection_value_handler($arr, $options, $code, $value, "html");
1813 }
1814 }
1815
1816 $res .= "</select>\n";
1817
1818 $res .= sprintf("
1819<script>
1820 function field_%d_value_callback()
1821 {
1822 var outlook = '%s';
1823 var selected_text = $('#field_%d option:selected').text();
1824
1825 if(outlook == 'cv')
1826 {
1827 var sel_text_split = selected_text.split(' -- ');
1828 if(sel_text_split[1])
1829 selected_text = sel_text_split[1];
1830 }
1831 else if(outlook == 'vc')
1832 {
1833 var sel_text_split = selected_text.split(' (');
1834 if(sel_text_split[0])
1835 selected_text = sel_text_split[0];
1836 }
1837 else if(outlook == 'oc')
1838 {
1839 selected_text = '';
1840 }
1841
1842 $('#field_%d_value').val(selected_text.trim());
1843 }
1844
1845 $('#field_%d').change(field_%d_value_callback);
1846
1847 field_%d_value_callback();
1848</script>
1849",
1850$field_desc['dynobj_field_id'],
1851$options['Outlook'],
1852$field_desc['dynobj_field_id'],
1853$field_desc['dynobj_field_id'],
1854$field_desc['dynobj_field_id'],$field_desc['dynobj_field_id'],
1855$field_desc['dynobj_field_id']
1856);
1857
1858 return $res;
1859 }
1860
1861 // --- MULTIPLE SELECTION ---
1862 function webdk_dynamic_object_update_multisel_value2sql($item_id,$field_desc,$namespace,$old_item)
1863 {
1864 global $WEBDK_UNITS_ENABLED,$WEBDK_DB_CONNECTION,$WEBDK_MAX_INDEXED_TEXT_SIZE,$WEBDK_ACTIVE_LANG,$WEBDK_ACTIVE_LANGUAGES;
1865
1866
1867 $field_id = $field_desc['dynobj_field_id'];
1868 $field_name = 'field_'.$field_id;
1869 $options = unserialize($field_desc['dynobj_field_options']);
1870 if ($options['clsf_use_codes'] === 'f')
1871 $options['clsf_use_codes'] = false;
1872 // kui kasutatakse klassifikaatorit, siis v6tame v22rtused spets tabelist
1873 if (isset($options['classifier_id']))
1874 {
1875 if($WEBDK_UNITS_ENABLED)
1876 $unit = $options['use_unit_clsf']?Wd_App::getInstance()->getUser()->getUnit():null;
1877
1878 $options = array_merge($options, webdk_get_classifier_values($options['classifier_id'],false,false,$unit));
1879 }
1880
1881 $cur_date = date("Y-m-d");
1882
1883 if(isset($namespace[$field_name]) && ($vals = $namespace[$field_name]))
1884 {
1885 $f_values = array();
1886 if($options)
1887 {
1888 foreach($options AS $k=>$arr)
1889 {
1890 if(is_int($k))
1891 {
1892 if((!$arr['from'] && $cur_date < $arr['to']) || (!$arr['to'] && $cur_date > $arr['from']) || ($cur_date < $arr['to'] && $cur_date > $arr['from']))
1893 {
1894 if (($options['clsf_use_codes'] AND in_array($arr['code'], $vals)) OR
1895 in_array($arr['value_' . $WEBDK_ACTIVE_LANG], $vals))
1896 {
1897 $buff_arr = array(
1898 "value" => $arr['value'],
1899 "code" => $arr['code'],
1900 "fgcolor" => $arr['fgcolor'],
1901 "bgcolor" => $arr['bgcolor']
1902 );
1903
1904 foreach($WEBDK_ACTIVE_LANGUAGES as $lang)
1905 {
1906 $buff_arr['value_' . $lang] = $arr['value_' . $lang];
1907 }
1908 $f_values[] = $buff_arr;
1909 }
1910 }
1911 }
1912 }
1913 }
1914
1915 // set cache
1916 webdk_set_multiple_value_selection($item_id,$field_id,$f_values);
1917
1918 // return update sql
1919 $value = serialize($f_values);
1920 $value = $WEBDK_DB_CONNECTION->escape($value);
1921
1922 return "dyn_table_field_{$field_id}='{$value}'";
1923 }
1924 else
1925 return "dyn_table_field_{$field_id}=''";
1926 }
1927
1928 function webdk_dynamic_object_multisel_edit_value2html($field_desc,$namespace)
1929 {
1930 global $webdk_html_quote,$webdk_dynamic_object_selection_events,$webdk_dynamic_object_htmlattrs,$WEBDK_DYNOBJ_MUSEL_MAX_SIZE,$WEBDK_ACTIVE_LANG;
1931
1932 $options = unserialize($field_desc['dynobj_field_options']);
1933 if ($options['clsf_use_codes'] === 'f')
1934 $options['clsf_use_codes'] = false;
1935
1936 // kui kasutatakse klassifikaatorit, siis v6tame v22rtused spets tabelist
1937 if(isset($options['classifier_id']) && $options['classifier_id'])
1938 {
1939 if($WEBDK_UNITS_ENABLED)
1940 $unit = $options['use_unit_clsf']?Wd_App::getInstance()->getUser()->getUnit():null;
1941 else
1942 $unit = null;
1943
1944 $options = array_merge($options, webdk_get_classifier_values($options['classifier_id'],false,false,$unit));
1945 }
1946
1947
1948 $values = unserialize($namespace['dyn_table_field_'.$field_desc['dynobj_field_id']]);
1949
1950 $res = '';
1951 $target_id = "field_{$field_desc['dynobj_field_id']}";
1952 $field_size = $options['field_size']?$options['field_size']:4;
1953
1954 if($WEBDK_DYNOBJ_MUSEL_MAX_SIZE)
1955 $onMouseEvents = "onmouseover=\"this.size={$WEBDK_DYNOBJ_MUSEL_MAX_SIZE};\" onmouseout=\"this.size={$field_size}\"";
1956
1957 $musel_search_field = webdk_create_multisel_search_input("field_{$field_desc['dynobj_field_id']}");
1958
1959 $res .= sprintf("<div style='float:left;'><div style='margin-bottom:5px;'>{$musel_search_field}</div><select multiple class=selectctrl name=\"field_%d[]\" id=\"field_%d\" %s size='{$field_size}' $onMouseEvents onChange=show_multisel_values('{$target_id}')>\n",$field_desc['dynobj_field_id'],$field_desc['dynobj_field_id'],$arr['attr']);
1960
1961 // teeme multidimens. arrayst tavalise
1962 $v_arr = array();
1963 $c_arr = array();
1964
1965 if (is_array($values))
1966 {
1967 foreach ($values AS $v)
1968 {
1969 $v_arr[] = $v["value_".$WEBDK_ACTIVE_LANG];
1970 $c_arr[] = $v['code'];
1971 }
1972 }
1973
1974 $cur_date = date("Y-m-d");
1975 if($options)
1976 {
1977 foreach($options AS $k2=>$arr2)
1978 {
1979 if (is_int($k2))
1980 {
1981 if((!$arr2['from'] && $cur_date < $arr2['to']) || (!$arr2['to'] && $cur_date > $arr2['from']) || ($cur_date < $arr2['to'] && $cur_date > $arr2['from']))
1982 $res .= webdk_dynamic_object_selection_value_handler($arr2, $options, '', '', "html", $v_arr, $c_arr);
1983 }
1984 }
1985 }
1986
1987 $res .= "</select></div>\n";
1988
1989 //shows selected values
1990 $res .= "<div style='vertical-align:top;float:left;margin-left:20px;' id='multisel_val_{$target_id}'></div>";
1991
1992 return $res;
1993 }
1994
1995
1996 // --- BOOLEAN ---
1997 function webdk_dynamic_object_boolean_edit_html($field_desc,$namespace)
1998 {
1999 global $webdk_translate;
2000
2001 $options = unserialize($field_desc['dynobj_field_options']);
2002 $value = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id']];
2003
2004 $is_true = $value=='t';
2005 $is_false = $value=='f';
2006
2007 $field_name = 'field_'.$field_desc['dynobj_field_id'];
2008
2009 $res = '';
2010
2011 if($options['field_input_type']=='2')
2012 {
2013 // radio
2014 $res .= sprintf("%s: <input type=radio name=\"$field_name\" id=\"$field_name\" class=radioctrl value=\"1\"%s>\n",webdk_translate('Yes'),$is_true?' CHECKED':'');
2015 $res .= sprintf("%s: <input type=radio name=\"$field_name\" id=\"$field_name\" class=radioctrl value=\"0\"%s>\n",webdk_translate('No'),$is_false?' CHECKED':'');
2016 }
2017 else if($options['field_input_type']=='3')
2018 {
2019 // checkbox
2020 $res .= sprintf("<input type=checkbox name=\"$field_name\" id=\"$field_name\" class=radioctrl value=\"1\"%s>\n",$is_true?' CHECKED':'');
2021 }
2022 else
2023 {
2024 // selection
2025 $res .= "<select class=selectctrl name=\"$field_name\" id=\"$field_name\" >\n";
2026 $res .= sprintf("<option value=\"\">--- %s ---</option>\n",webdk_translate('None'));
2027 $res .= sprintf("<option value=\"1\"%s>%s</option>\n",$is_true?' SELECTED':'',webdk_translate('Yes'));
2028 $res .= sprintf("<option value=\"0\"%s>%s</option>\n",$is_false?' SELECTED':'',webdk_translate('No'));
2029 $res .= "</select>\n";
2030 }
2031
2032 return $res;
2033 }
2034
2035 function webdk_dynamic_object_update_boolean_value2sql($item_id,$field_desc,$namespace,$old_item)
2036 {
2037 $field_id = $field_desc['dynobj_field_id'];
2038 $field_name = 'dyn_table_field_'.$field_id;
2039
2040 if($namespace['field_'.$field_id]==='')
2041 $value = 'NULL';
2042
2043 else if((int)$namespace['field_'.$field_id])
2044 $value = 'true';
2045
2046 else
2047 $value = 'false';
2048
2049 return $field_name.'='.$value;
2050 }
2051
2052#if ENABLE_EV_DOCS
2053 // --- REGISTER INDEX ---
2054 require_once('lib/webdk_register_utils.inc');
2055
2056 function webdk_dynamic_object_regindex_edit_value2html($field_desc,$namespace)
2057 {
2058 global $webdk_translate,$WEBDK_DB_CONNECTION,$webdk_html_quote,$WEBDK_DB_ASSOC,
2059 $webdk_dynamic_object_regindex_events,$WEBDK_ACCESS_LEVEL_UNIT_ADMIN,
2060 $WEBDK_ACCESS_LEVEL_ADMIN,$WEBDK_CURRENT_USER_ACCESS_LEVEL,$WEBDK_REGIDX_MANUAL_NUMBER_MIN_ACCESS,$WEBDK_REQUEST;
2061
2062 if($WEBDK_REQUEST['dublicate'] && !$field_desc['dynobj_field_dup'])
2063 {
2064 require_once("lib/webdk_dynamic_object_add_utils.inc");
2065 return webdk_dynamic_object_regindex_add_html($field_desc);
2066 }
2067
2068 //
2069 $min_acc = null;
2070
2071 //
2072 if($cb = webdk_get_first_callback('edit_regidx_min_acc'))
2073 $min_acc = $cb($field_desc,$namespace);
2074
2075 if($min_acc === null)
2076 {
2077 if(isset($WEBDK_REGIDX_MANUAL_NUMBER_MIN_ACCESS))
2078 $min_acc = $WEBDK_REGIDX_MANUAL_NUMBER_MIN_ACCESS;
2079 else
2080 $min_acc = $WEBDK_ACCESS_LEVEL_UNIT_ADMIN;
2081 }
2082
2083 $options = unserialize($field_desc['dynobj_field_options']);
2084 $field_id = (int)$field_desc['dynobj_field_id'];
2085 $value = $namespace['dyn_table_field_'.$field_id];
2086
2087 $res = '';
2088 $onBlur = $onFocus = $onChange = '';
2089 $arr = webdk_dynamic_object_make_html_options_regindex($field_desc,$options,
2090 $webdk_dynamic_object_regindex_events,
2091 $htmlattrs=false);
2092
2093 if($arr['pre']) $res .= $arr['pre'];
2094 if($arr['e']) {
2095 foreach($arr['e'] as $event => $func)
2096 switch($event) {
2097 case "onBlur":
2098 $onBlur="onBlur=\"return $func(this,this.form);\"";
2099 break;
2100 case "onFocus":
2101 $onFocus=";return $func(this,this.form);";
2102 break;
2103 case "onChange":
2104 $onChange="return $func(this,this.form);";
2105 break;
2106 }
2107 }
2108
2109 if($value)
2110 {
2111 $res .= sprintf("<input type=hidden name=field_{$field_id} value=\"%s\">\n",webdk_html_quote($value));
2112
2113 if($min_acc <= $WEBDK_CURRENT_USER_ACCESS_LEVEL)
2114 {
2115 $res .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr>";
2116
2117 // admin is allowed to change register number
2118 $msg_cnf_force = webdk_translate('Are you sure you want to replace current register index');
2119
2120 $res .= "<td nowrap><input type=radio class=radioctrl name=\"field_radio_ed_{$field_id}\" value=\"1\" CHECKED>\n";
2121 $res .= webdk_html_quote($value).'</tr><tr>';
2122 $res .= "<input type=\"hidden\" name=\"field_{$field_id}_has_idx\" value=1>";
2123 $res .= "<td nowrap><input type=radio class=radioctrl name=\"field_radio_ed_{$field_id}\" value=\"2\" onClick=\"if(confirm('{$msg_cnf_force}?!')){ this.form['field_ed_{$field_id}'].focus() } else { this.checked=true; this.form['field_radio_ed_{$field_id}'][0].checked=true; }\"></td>\n";
2124 $res .= sprintf("<td nowrap><input type=text class=textctrl name=\"field_ed_{$field_id}\" value=\"%s\" onFocus=\"if(this.form['field_radio_ed_{$field_id}'][1].checked || confirm('{$msg_cnf_force}?!')){ this.form['field_radio_ed_{$field_id}'][1].checked=true; } else this.blur();\">\n",webdk_html_quote($value));
2125 $res .= webdk_make_hint('Set register index manually')."</td></tr></table>";
2126
2127 return $res;
2128 }
2129 else
2130 return webdk_html_quote($value);
2131 }
2132 else
2133 {
2134 $res .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr>";
2135
2136 if($min_acc <= $WEBDK_CURRENT_USER_ACCESS_LEVEL)
2137 $res .= "<td nowrap><input type=radio class=radioctrl name=\"field_radio_{$field_id}\" onClick=\"this.form['field_{$field_id}'].focus()\" value=\"0\"></td>\n";
2138
2139 $res .= "<td nowrap id=\"field_pref_{$field_id}_layer\"><input type=text class=textctrl name=field_pref_{$field_id} size=3 value=\"\" onClick=\"this.form['field_{$field_id}'].onfocus()\"> ";
2140 $res .= webdk_make_hint('Prefix (if leaved empty then register prefix will be used)')."</td>\n";
2141 $res .= "<td nowrap><select name=\"field_{$field_id}\" class=selectctrl onFocus=\"".(($min_acc <= $WEBDK_CURRENT_USER_ACCESS_LEVEL)?"this.form['field_radio_{$field_id}'][0].checked=true;":'')."this.onchange(){$onFocus}\" onChange=\"if(this.form['restr_mode']){ if(this.selectedIndex && (this.form.restr_mode[0].checked || !restr_set_man))this.form.restr_mode[($('li[name=restr_item_vis]').length?2:0)].checked=true; else if(!this.selectedIndex) this.form.restr_mode[1].checked=true; }{$onChange};rewrite_prefix_and_suffix_{$field_id}(this.form);\" {$onBlur}>\n";
2142 $res .= "<option value=\"\"> </option>\n";
2143
2144 $query = sprintf(get_sql_select_registers(),$field_desc['dynobj_item_type_id']);
2145 $xres = $WEBDK_DB_CONNECTION->query($query);
2146 $i = 0;
2147
2148 while($row=$WEBDK_DB_CONNECTION->fetchArray($xres,$i++,$WEBDK_DB_ASSOC))
2149 $res .= sprintf("<option value=\"%d\"%s>%s</option>\n",$row['register_id'],
2150 $options['field_checked'] && $i==1?' SELECTED':'',webdk_html_quote($row['register_name']));
2151
2152 $res .= "</select> ";
2153
2154 $res .= webdk_make_hint('Register')."</td>\n";
2155
2156 $res .= "<script>\n";
2157
2158 $res .= "var webdk_reg_prefixes_{$field_id} = {};\n";
2159 $res .= "var webdk_reg_suffixes_{$field_id} = {};\n";
2160
2161 $i = 0;
2162
2163 while($row=$WEBDK_DB_CONNECTION->fetchArray($xres,$i++,$WEBDK_DB_ASSOC))
2164 {
2165 $res .= "webdk_reg_prefixes_{$field_id}['{$row['register_id']}'] = new Array();\n";
2166 $res .= "var a = webdk_reg_prefixes_{$field_id}['{$row['register_id']}'];\n";
2167
2168 //
2169 $prefs = explode("\n",$row['register_prefix']);
2170 $prefs = array_filter(array_map("trim",$prefs));
2171
2172 foreach($prefs AS $p)
2173 {
2174 $p = str_replace("'","\\'",$p);
2175 $p = webdk_html_quote($p);
2176
2177 $res .= sprintf("a[a.length] = '%s';\n",$p);
2178 }
2179
2180 //
2181 $res .= "webdk_reg_suffixes_{$field_id}['{$row['register_id']}'] = new Array();\n";
2182 $res .= "var a = webdk_reg_suffixes_{$field_id}['{$row['register_id']}'];\n";
2183
2184 $suffs = explode("\n",$row['register_suffix']);
2185 $suffs = array_filter(array_map("trim",$suffs));
2186 foreach($suffs AS $p)
2187 {
2188 $p = str_replace("'","\\'",$p);
2189 $p = webdk_html_quote($p);
2190
2191 $res .= sprintf("a[a.length] = '%s';\n",$p);
2192 }
2193 }
2194
2195 $res .= "</script>";
2196
2197 $res .= "<td nowrap id=\"field_suff_{$field_id}_layer\"><input type=text class=textctrl name=field_suff_{$field_id} size=3 value=\"\" onClick=\"this.form['field_{$field_id}'].onfocus()\"> ";
2198 $res .= webdk_make_hint('Suffix (if leaved empty then register suffix will be used)')."</td>\n";
2199
2200 $res .= '</tr>';
2201
2202 if($min_acc <= $WEBDK_CURRENT_USER_ACCESS_LEVEL)
2203 {
2204 $res .= "<tr><td nowrap><input type=radio class=radioctrl name=\"field_radio_{$field_id}\" CHECKED onClick=\"this.form['field_man_{$field_id}'].focus()\" value=\"2\"></td>\n";
2205
2206 $res .= sprintf("<td nowrap colspan=\"3\"><input type=text class=textctrl size=10 onFocus=\"this.form['field_radio_{$field_id}'][1].checked=true;this.onchange()\" onChange=\"if(this.form['restr_mode']){ if(this.value && (this.form.restr_mode[0].checked || !restr_set_man))this.form.restr_mode[0].checked=true; else if(!this.value) this.form.restr_mode[1].checked=true; }\"name=\"field_man_%d\" value=\"\" onKeyUp=\"this.onchange()\">\n",$field_desc['dynobj_field_id']);
2207 $res .= webdk_make_hint('Set register index manually')."</td></tr>";
2208 }
2209
2210 $res .= "</table>";
2211
2212 $res .= "
2213<script>
2214function _rewrite_prefix_and_suffix_{$field_id}(p,vals,name)
2215{
2216 if(!p)
2217 return false;
2218
2219 //
2220 var h = '';
2221
2222 if(vals.length == 0)
2223 h = '<input type=text class=textctrl name=' + name + ' size=3 value=\"\">';
2224
2225 else if((vals.length == 1) && (vals[0] == '-'))
2226 h = ' ';
2227
2228 else if((vals.length == 1))
2229 h = '<input type=hidden name=\"' + name + '\" value=\"'+vals[0]+'\">'+vals[0];
2230
2231 else
2232 {
2233 h = '<select name=\"' + name + '\" class=\"selectctrl\">';
2234
2235 for(var i=0;i<vals.length;i++)
2236 {
2237 if(vals[i] == '-')
2238 h += '<option value=\" \"> </option>';
2239 else
2240 h += '<option value=\"' + vals[i] + '\">' + vals[i] + '</option>';
2241 }
2242
2243 h += '</select>';
2244 }
2245 //
2246 p.innerHTML = h;
2247}
2248
2249function rewrite_prefix_and_suffix_{$field_id}(f)
2250{
2251 var reg_sel = f.field_{$field_id};
2252 var reg_id = reg_sel[reg_sel.selectedIndex].value;
2253
2254 //
2255 var pref_lay = document.getElementById('field_pref_{$field_id}_layer');
2256 var suff_lay = document.getElementById('field_suff_{$field_id}_layer');
2257
2258 //
2259 if(!reg_id)
2260 {
2261 _rewrite_prefix_and_suffix_{$field_id}(pref_lay,new Array(),'field_pref_{$field_id}');
2262 _rewrite_prefix_and_suffix_{$field_id}(suff_lay,new Array(),'field_suff_{$field_id}');
2263 }
2264
2265 //
2266 var prefs = webdk_reg_prefixes_{$field_id}[''+reg_id];
2267
2268 if(!prefs)
2269 return false;
2270
2271 //
2272 var suffs = webdk_reg_suffixes_{$field_id}[''+reg_id];
2273
2274 if(!suffs)
2275 return false;
2276 //
2277 _rewrite_prefix_and_suffix_{$field_id}(pref_lay,prefs,'field_pref_{$field_id}');
2278 _rewrite_prefix_and_suffix_{$field_id}(suff_lay,suffs,'field_suff_{$field_id}');
2279}
2280
2281function rewrite_prefix_and_suffix_{$field_id}_cb()
2282{
2283 rewrite_prefix_and_suffix_{$field_id}(document.dynobj_edit_form);
2284}
2285
2286on_load_cbs[on_load_cbs.length] = new create_callback(rewrite_prefix_and_suffix_{$field_id}_cb);
2287";
2288
2289 $res .= "</script>";
2290
2291 return $res;
2292 }
2293 }
2294
2295 function webdk_dynamic_object_update_regindex_value2sql($item_id,$field_desc,$namespace,$old_item)
2296 {
2297 global $WEBDK_DB_CONNECTION,$WEBDK_CURRENT_PARENT_INFO,
2298 $WEBDK_TYPE_EV_FUNCTION,$WEBDK_TYPE_EV_SERIES,$WEBDK_TYPE_EV_SUBFUNCTION,$WEBDK_TYPE_EV_SUBSERIES,
2299 $WEBDK_TYPE_UNIT,$webdk_register_generate_index,$webdk_register_next_register_index,
2300 $WEBDK_DB_ASSOC,$WEBDK_ACCESS_LEVEL_UNIT_ADMIN,
2301 $WEBDK_ACCESS_LEVEL_ADMIN,$WEBDK_CURRENT_USER_ACCESS_LEVEL,$WEBDK_REGIDX_MANUAL_NUMBER_MIN_ACCESS,$WEBDK_REQUEST;
2302
2303 if($WEBDK_REQUEST['dublicate'] && !$field_desc['dynobj_field_dup'])
2304 {
2305 require_once("lib/webdk_dynamic_object_add_utils.inc");
2306 $result = webdk_dynamic_object_insert_regindex_value2sql($item_id,$field_desc,$namespace);
2307
2308 $a = explode(",",$result['names']);
2309 $b = explode(",",$result['values']);
2310
2311 $arr = array_combine($a,$b);
2312 $res = array();
2313 $s = '';
2314 foreach($arr as $k => $v)
2315 {
2316 $s .= $k."=".$v.",";
2317 }
2318
2319 $res['values'] = substr($s,0,-1);
2320 $res['item_name_value'] = $result['item_name_value'];
2321 $res['post_query'] = $result['post_query'];
2322
2323 return $res;
2324 }
2325
2326 //
2327 $min_acc = null;
2328
2329 //
2330 if($cb = webdk_get_first_callback('edit_regidx_min_acc'))
2331 $min_acc = $cb($field_desc,$namespace);
2332
2333 if($min_acc === null)
2334 {
2335 if(isset($WEBDK_REGIDX_MANUAL_NUMBER_MIN_ACCESS))
2336 $min_acc = $WEBDK_REGIDX_MANUAL_NUMBER_MIN_ACCESS;
2337 else
2338 $min_acc = $WEBDK_ACCESS_LEVEL_UNIT_ADMIN;
2339 }
2340
2341 $field_id = $field_desc['dynobj_field_id'];
2342 $field_name = 'field_'.$field_id;
2343 $field_name_ed = 'field_ed_'.$field_id;
2344 $field_dbname = 'dyn_table_field_'.$field_id;
2345
2346 if((array_key_exists($field_name_ed,$namespace) && $namespace[$field_name]) ||
2347 $namespace["field_{$field_id}_has_idx"])
2348 {
2349 // it has already value
2350 // only admin is allowed to force new register value now
2351 if($namespace[$field_name_ed] && $namespace['field_radio_ed_'.$field_id]==='2' &&
2352 ($min_acc <= $WEBDK_CURRENT_USER_ACCESS_LEVEL))
2353 {
2354 $index = $WEBDK_DB_CONNECTION->escape($namespace['field_ed_'.$field_id]);
2355 $query = "{$field_dbname}='".$index."',{$field_dbname}_lower='".webdk_lower($index)."',{$field_dbname}_sort='".webdk_format_regindex_lower($index)."',{$field_dbname}_short='".webdk_format_regindex_short($index)."'";
2356 return array('item_name_value'=>$index,'values'=>$query);
2357 }
2358 else return false;
2359 }
2360 else if($namespace['field_radio_'.$field_id]=='2')
2361 {
2362 if($min_acc <= $WEBDK_CURRENT_USER_ACCESS_LEVEL)
2363 {
2364 $index = trim($WEBDK_DB_CONNECTION->escape($namespace['field_man_'.$field_id]));
2365 $query = "{$field_dbname}='".$WEBDK_DB_CONNECTION->escape($index)."'";
2366
2367 $post_query = sprintf("
2368UPDATE items SET
2369item_status='COMPLETED',
2370item_status_date=%s
2371WHERE
2372item_id=%d
2373",$namespace['item_status_date']?"'".$WEBDK_DB_CONNECTION->escape($namespace['item_status_date'])."'":'current_date',$item_id);
2374
2375 $WEBDK_REQUEST['wd_no_item_status_post_query'] = $namespace['wd_no_item_status_post_query'] = 1;
2376
2377 return array('item_name_value'=>$index,'values'=>$query,'post_query'=>$post_query);
2378 }
2379 }
2380 else if(array_key_exists($field_name,$namespace))
2381 {
2382 if($namespace['field_radio_'.$field_id]==='1')
2383 $register = intval($namespace['field_reldoc_'.$field_id]);
2384 else
2385 $register = intval($namespace['field_'.$field_id]);
2386
2387 if($register)
2388 {
2389 $desktop_id = $WEBDK_CURRENT_PARENT_INFO['item_desktop_id'];
2390 $query = "select * from items i, registers r where i.item_id=r.register_id AND r.register_id={$register} AND i.item_desktop_id={$desktop_id}";
2391 $res = $WEBDK_DB_CONNECTION->query($query);
2392 $reginfo = $WEBDK_DB_CONNECTION->fetchArray($res,0,$WEBDK_DB_ASSOC);
2393
2394 if(!$reginfo)
2395 webdk_error('Permission denied!');
2396
2397 $pref = isset($namespace['field_pref_'.$field_id])?$namespace['field_pref_'.$field_id]:'';
2398 $suff = isset($namespace['field_suff_'.$field_id])?$namespace['field_suff_'.$field_id]:'';
2399
2400 if($old_item["{$field_dbname}_odid"] &&
2401 $old_item["{$field_dbname}_odtid"] &&
2402 $old_item["{$field_dbname}_odidx"] &&
2403 $old_item["{$field_dbname}_role"]=='answer')
2404 {
2405 $query = sprintf("SELECT item_tree_path FROM item_tree_paths WHERE item_tree_path_item_id=%d",$item_id);
2406 $xres = $WEBDK_DB_CONNECTION->query($query);
2407
2408 if(!($xrow = $WEBDK_DB_CONNECTION->fetchArray($xres,0,$WEBDK_DB_ASSOC)))
2409 webdk_error('Item not found!');
2410
2411 $tree_path = $xrow['item_tree_path'];
2412
2413 $index = webdk_register_next_answer_register_index($old_item["{$field_dbname}_odid"],
2414 $old_item["{$field_dbname}_odtid"],
2415 $field_id,
2416 $old_item["{$field_dbname}_odidx"],
2417 $reginfo['register_id'],$tree_path);
2418
2419 $query = sprintf("
2420UPDATE items SET
2421 item_status='ANSWERED',
2422 item_status_date=%s
2423WHERE
2424 item_id=%d
2425",$namespace['item_status_date']?"'".$WEBDK_DB_CONNECTION->escape($namespace['item_status_date'])."'":'current_date',$old_item["{$field_dbname}_odid"]);
2426 $WEBDK_DB_CONNECTION->query($query);
2427 }
2428 else
2429 $index = webdk_register_next_register_index($register,$WEBDK_CURRENT_PARENT_INFO['item_tree_path'],$pref,$suff);
2430
2431 // check for restrictions
2432 // if item is restricted and type is not for restriction then set restriction to none
2433 if(!$WEBDK_CURRENT_PARENT_INFO['item_type_is_strictly_rstrctd'] && $WEBDK_CURRENT_PARENT_INFO['item_is_restricted'])
2434 {
2435 $query = sprintf("UPDATE items SET item_is_restricted=0 WHERE item_id=%d",$item_id);
2436 $WEBDK_DB_CONNECTION->query($query);
2437 }
2438
2439 $query = "$field_dbname='".$WEBDK_DB_CONNECTION->escape($index).
2440 "',\n{$field_dbname}_lower='".$WEBDK_DB_CONNECTION->escape(webdk_lower($index)).
2441 "',\n{$field_dbname}_sort='".$WEBDK_DB_CONNECTION->escape(webdk_format_regindex_lower($index)).
2442 "',\n{$field_dbname}_short='".$WEBDK_DB_CONNECTION->escape(webdk_format_regindex_short($index))."'".
2443 ",\n{$field_dbname}_cid=".($reginfo['register_id']?intval($reginfo['register_id']):'NULL').
2444 ",\n{$field_dbname}_pref='".$WEBDK_DB_CONNECTION->escape($pref)."'".
2445 ",\n{$field_dbname}_suf='".$WEBDK_DB_CONNECTION->escape($suff)."'"
2446 ;
2447
2448 if($index)
2449 {
2450 $post_query = sprintf("
2451UPDATE items SET
2452 item_status='COMPLETED',
2453 item_status_date=%s
2454WHERE
2455 item_id=%d
2456",$namespace['item_status_date']?"'".$WEBDK_DB_CONNECTION->escape($namespace['item_status_date'])."'":'current_date',$item_id);
2457
2458 $WEBDK_REQUEST['wd_no_item_status_post_query'] = $namespace['wd_no_item_status_post_query'] = 1;
2459 }
2460
2461 return array('item_name_value'=>$index,'values'=>$query,'post_query'=>$post_query);
2462 }
2463 else
2464 return "$field_dbname='',{$field_dbname}_lower=''";
2465 }
2466 else
2467 return array('item_name_value'=>$old_item['field_dbname']);
2468 }
2469#endif
2470
2471 // --- SINGLE USER SELECTION ---
2472 function webdk_dynamic_object_update_susel_value2sql($item_id,$field_desc,$namespace,$old_item)
2473 {
2474 global $WEBDK_DB_CONNECTION,$WEBDK_CURRENT_USER_ID, $WEBDK_MAX_INDEXED_TEXT_SIZE;
2475
2476 $field_id = $field_desc['dynobj_field_id'];
2477 $options = unserialize($field_desc['dynobj_field_options']);
2478 $values = explode(',', $namespace['field_'.$field_id]); //This workaround was for when there is birthyear after name
2479 if(is_numeric(end($values)))
2480 array_pop($values);
2481 $value = trim(implode(',', $values));
2482
2483 if($namespace['field_'.$field_id.'_uid'])
2484 $uid = (int)$namespace['field_'.$field_id.'_uid'];
2485 else
2486 {
2487 $uid = 'NULL';
2488 $value = '';
2489 }
2490
2491// print "<pre>";print_r($old_item);print "</pre>";webdk_error('x');
2492
2493 $old_uid = $old_item['dyn_table_field_'.$field_id.'_uid'];
2494 if($options['crt_own_rel'] && $uid)
2495 {
2496 if($old_uid)
2497 webdk_relation_unbind_items($item_id,$old_uid,'owner');
2498
2499 if($uid && $uid!='NULL')
2500 webdk_create_relation($item_id,$uid,'owner');
2501 }
2502 if($options['dup_rels'] && $uid && $uid!='NULL') {
2503 if($old_uid)
2504 webdk_relation_unbind_items($item_id,$old_uid,'');
2505
2506 if($uid && $uid!='NULL')
2507 webdk_create_relation($item_id,$uid); // FIXME peaks olema kontroll, et kui on mitu susel valja ja mitu dubleerimist, et kas isik on
2508 // mone teise valja peal seotud ja siis ei tohiks seost maha kustutada
2509
2510 }
2511
2512 return 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($value)."',".
2513 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($value,0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."'),".
2514 'dyn_table_field_'.$field_id.'_uid'."=$uid";
2515 }
2516
2517 function webdk_dynamic_object_susel_edit_html($field_desc,$namespace)
2518 {
2519 global $webdk_html_quote,$WEBDK_CURRENT_USER,$WEBDK_CURRENT_USER_ID,$WEBDK_BASE_IMG_URL,
2520 $WEBDK_BASE_URL,$WEBDK_UNIQ,$WEBDK_TYPE_USER,$webdk_dynamic_object_text_events,$webdk_dynamic_object_htmlattrs,
2521 $WEBDK_DYNAMIC_OBJECT_AJAX_ENABLED,$WEBDK_CURRENT_USER_HAS_ADMIN_ACCESS;
2522
2523 $options = unserialize($field_desc['dynobj_field_options']);
2524
2525 $form_name = 'dynobj_edit_form';
2526 $text_field_name = 'field_'.$field_desc['dynobj_field_id'];
2527 $hidd_field_name = 'field_'.$field_desc['dynobj_field_id'].'_uid';
2528 $div_field_name = 'field_'.$field_desc['dynobj_field_id'].'_div';
2529
2530 $text_value = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id']];
2531 $hidd_value = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id'].'_uid'];
2532
2533 //For namesakes
2534 $text_value = webdk_check_if_user_has_namesake_and_add_year($text_value, $hidd_value);
2535
2536 $res = '';
2537
2538 $arr = webdk_dynamic_object_make_html_options_string($field_desc,$options,
2539 $webdk_dynamic_object_text_events,
2540 $htmlattrs=$webdk_dynamic_object_htmlattrs);
2541 if($arr['pre']) $res .= $arr['pre'];
2542
2543 if($options['is_ed_on_ed'])
2544 {
2545 if(!isset($options['sel_type']) || empty($options['sel_type']) || $options['sel_type']=='AJAX')
2546 {
2547 $addButtonStatus = ($WEBDK_CURRENT_USER_HAS_ADMIN_ACCESS)?true:false;
2548
2549 //$res .= webdk_dynamic_object_susel_add_edit_html_ajax($field_desc,$namespace);
2550 $res .= sprintf("
2551<input type=text class=textctrl name=\"{$text_field_name}\" size=\"%d\" maxlength=\"255\" id=\"{$text_field_name}\" value=\"%s\" %s autocomplete=\"off\">
2552<div id=\"{$div_field_name}\" style=\"position:absolute;background-color:#F8F8F8;\"></div>
2553<input type=hidden id=\"$hidd_field_name\" name=\"$hidd_field_name\" value=\"{$hidd_value}\">
2554<script>\$(document).ready(function(){
2555 var obj = \$wd.create('Wd_Dynobj_Ajax_Susel_Selection','{$div_field_name}',2,'{$div_field_name}','{$text_field_name}','{$hidd_field_name}','{$hidd_value}','{$text_value}');obj.setAddButtonEnabled($addButtonStatus);
2556 $('#{$text_field_name}').keyup(function() {
2557 $('#{$hidd_field_name}').val('');
2558 });
2559});
2560</script>
2561",
2562 $options['field_size'],
2563 webdk_html_quote($text_value),
2564 $arr['attr']
2565);
2566 }
2567 else
2568 {
2569// TN 20.12.09: lisasin input valjale id, et teda oleks voimalik javascriptiga leida
2570 $res .= sprintf("
2571<input type=text class=textctrl name=\"$text_field_name\" id=\"$text_field_name\" size=\"%d\" value=\"%s\" onFocus=\"this.blur()\" onClick=\"set_callback(new create_callback(cb_set_text_hidden_field_value,'$form_name','$text_field_name','$hidd_field_name'));load_and_show_popup_frame('$WEBDK_BASE_URL?page=user_popup_fs&u=$WEBDK_UNIQ',false,550);return false;\" %s>
2572<input type=hidden name=\"$hidd_field_name\" id=\"$hidd_field_name\" value=\"%s\">",
2573 $options['field_size'],
2574 webdk_html_quote($text_value),
2575 $arr['attr'],
2576 webdk_html_quote($hidd_value)
2577);
2578
2579 $res .= sprintf("
2580<a href=\"#\" class=link onClick=\"set_callback(new create_callback(cb_set_text_hidden_field_value,'$form_name','$text_field_name','$hidd_field_name'));load_and_show_popup_frame('$WEBDK_BASE_URL?page=user_popup_fs&u=$WEBDK_UNIQ',false,550);return false;\"><img title=\"%s\" src=\"%swebdk_icon_user.gif\"></a>
2581<a href=\"#\" class=link onClick=\"document['$form_name']['$text_field_name'].value='';document['$form_name']['$hidd_field_name'].value='';if(document['$form_name']['$text_field_name'].onchange)document['$form_name']['$text_field_name'].onchange(null);return false;\"> [%s]</a>
2582",webdk_translate('Single user selection'),$WEBDK_BASE_IMG_URL,webdk_translate('Clear')
2583);
2584
2585 }
2586 }
2587 else
2588 {
2589 $res .= sprintf("
2590%s
2591<input type=hidden name=\"$text_field_name\" id=\"$text_field_name\" value=\"%s\">
2592<input type=hidden name=\"$hidd_field_name\" id=\"$hidd_field_name\" value=\"%s\">",
2593 $text_value?webdk_html_quote($text_value):' ',
2594 webdk_html_quote($text_value),
2595 webdk_html_quote($hidd_value)
2596);
2597
2598 }
2599
2600 return $res;
2601 }
2602
2603 // --- SINGLE OBJECT SELECTION ---
2604 function webdk_dynamic_object_update_sosel_value2sql($item_id,$field_desc,$namespace,$old_item)
2605 {
2606 global $WEBDK_DB_CONNECTION,$WEBDK_CURRENT_USER_ID, $WEBDK_MAX_INDEXED_TEXT_SIZE;
2607
2608 $field_id = $field_desc['dynobj_field_id'];
2609 $field = 'field_'.$field_id.'_id';
2610 $options = unserialize($field_desc['dynobj_field_options']);
2611 $value = $namespace['field_'.$field_id];
2612
2613 if($namespace[$field])
2614 $id = (int)$namespace[$field];
2615 else
2616 {
2617 $id = 'NULL';
2618 $value = '';
2619 }
2620
2621 $res = array('values' =>
2622 'dyn_table_field_'.$field_id."='".$WEBDK_DB_CONNECTION->escape($value)."',".
2623 'dyn_table_field_'.$field_id."_lower=webdk_lower('".$WEBDK_DB_CONNECTION->escape(mb_substr($value,0,$WEBDK_MAX_INDEXED_TEXT_SIZE))."'),".
2624 'dyn_table_field_'.$field_id.'_id'."=$id");
2625
2626 //
2627 $old_id = $old_item['dyn_table_field_'.$field_id.'_id'];
2628
2629 // create post query
2630 if(isset($options['dup_rels']) && $options['dup_rels'])
2631 {
2632 if($old_id && ($old_id !== 'NULL') && $id && ($id !== 'NULL') && ($old_id != $id))
2633 {
2634 webdk_create_relation($item_id,$old_id,'');
2635 webdk_create_relation($item_id, $id,'');
2636 }
2637 if(($old_id && ($old_id !== 'NULL') && $id && ($id !== 'NULL') && ($old_id == $id)) || // has not chaneged, ensure relation
2638 (!$old_id && $id && ($id !== 'NULL'))) // was empty and now is filled
2639 {
2640 webdk_create_relation($item_id, $id,'');
2641 }
2642 else if($old_id && !$id)
2643 {
2644 webdk_relation_unbind_items($item_id,$old_id);
2645 }
2646 }
2647
2648 return $res;
2649 }
2650
2651 function webdk_dynamic_object_sosel_edit_html($field_desc,$namespace)
2652 {
2653 global $webdk_html_quote,$WEBDK_CURRENT_USER,$WEBDK_CURRENT_USER_ID,$WEBDK_BASE_IMG_URL,
2654 $WEBDK_BASE_URL,$WEBDK_UNIQ,$webdk_dynamic_object_text_events,$webdk_dynamic_object_htmlattrs;
2655
2656 $options = unserialize($field_desc['dynobj_field_options']);
2657
2658 $type_id = $options['type'];
2659
2660 $form_name = 'dynobj_edit_form';
2661 $text_field_name = 'field_'.$field_desc['dynobj_field_id'];
2662 $hidd_field_name = 'field_'.$field_desc['dynobj_field_id'].'_id';
2663 $div_field_name = 'field_'.$field_desc['dynobj_field_id'].'_div';
2664
2665 $text_value = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id'].''];
2666 $hidd_value = $namespace['dyn_table_field_'.$field_desc['dynobj_field_id'].'_id'];
2667
2668 $res = '';
2669
2670 if($field_desc['dynobj_field_uniq'])
2671 {
2672 //
2673 $och = "webdk_ajax_field_check_uniq_{$field_desc['dynobj_field_id']}();";
2674
2675 //
2676 if($options['onChange'])
2677 $options['onChange'] .= ";".$och;
2678 else
2679 $options['onChange'] = $och;
2680
2681 $res .= webdk_dynamic_object_print_unique_check_js($field_desc,$namespace);
2682 }
2683
2684 $arr = webdk_dynamic_object_make_html_options_string($field_desc,$options,
2685 $webdk_dynamic_object_text_events,
2686 $htmlattrs=$webdk_dynamic_object_htmlattrs);
2687
2688 if($arr['pre'])
2689 $res .= $arr['pre'];
2690
2691 $params = explode("::",$options['field_ext_params']);
2692 $ext_params = array();
2693 foreach($params as $param)
2694 {
2695 $key_value = explode("=",$param);
2696 $ext_params[$key_value[0]] = $key_value[1];
2697 }
2698
2699 $text_value_enc = json_encode($text_value, JSON_HEX_APOS | JSON_HEX_QUOT);
2700
2701 $res .= sprintf("
2702<input type=text class=textctrl name=\"$text_field_name\" size=\"%d\" maxlength=\"%d\" id=\"$text_field_name\" value=\"%s\" autocomplete=\"off\" %s>
2703<div id=\"{$div_field_name}\" style=\"position:absolute;display:none\"></div>
2704<input type=hidden id=\"$hidd_field_name\" name=\"$hidd_field_name\" value=\"%s\">
2705<script>\$(document).ready(function(){
2706 var wd_obj=\$wd.create('Wd_Dynobj_Ajax_Sosel_Selection','{$div_field_name}',{$type_id},'{$div_field_name}','{$text_field_name}','{$hidd_field_name}','{$hidd_value}','{$text_value}',%s,%s);
2707 wd_obj.setCalledFieldId(%d);
2708 });
2709 \$('#{$text_field_name}').keyup(function(){
2710 $('#{$hidd_field_name}').val('');
2711 });
2712</script>
2713",
2714 $options['field_size'],
2715 $options['field_maxlength'],
2716 webdk_html_quote($text_value),
2717 $arr['attr'],
2718 webdk_html_quote($hidd_value),
2719 json_encode($ext_params),
2720 isset($options['sosel_add_new_btn_off']) && $options['sosel_add_new_btn_off']?'false':'true',
2721 $field_desc['dynobj_field_id']
2722);
2723
2724 $res .= sprintf("
2725<a href=\"#\" class=link onClick=\"document['$form_name']['$text_field_name'].value='';document['$form_name']['$hidd_field_name'].value='';return false;\"> [X]</a>
2726",$options['field_ext_params']?'&'.$options['field_ext_params']:'');
2727
2728 return $res;
2729 }
2730
2731 // --- MULTI USER SELECTION ---
2732 function webdk_dynamic_object_update_musel_value2sql($item_id,$field_desc,$namespace,$old_item)
2733 {
2734 global $WEBDK_DB_CONNECTION, $WEBDK_MAX_INDEXED_TEXT_SIZE;
2735
2736 $field_id = $field_desc['dynobj_field_id'];
2737 $field_name = 'field_'.$field_id.'_sel_users';
2738 $options = unserialize($field_desc['dynobj_field_options']);
2739
2740 if(isset($namespace[$field_name]) && ($values = $namespace[$field_name]))
2741 {
2742 // get values
2743 $arr = webdk_create_multiuser_selbox_get_values($values);
2744
2745 // set cache
2746 webdk_set_multi_user_selection($item_id,$field_id,$arr);
2747
2748 if($options['crt_own_rel'])
2749 {
2750 foreach($arr AS $u)
2751 {
2752 if($u['id'])
2753 webdk_create_relation($item_id,$u['id'],'owner');
2754 }
2755 }
2756
2757 // return update sql
2758 $value = webdk_serialize_multi_user_selection($arr);
2759 $value = $WEBDK_DB_CONNECTION->escape($value);
2760 $value_lower = webdk_lower(mb_substr($value,0,$WEBDK_MAX_INDEXED_TEXT_SIZE));
2761
2762 $res = "dyn_table_field_{$field_id}='{$value}',dyn_table_field_{$field_id}_lower='{$value_lower}'";
2763 }
2764 else
2765 $res = "dyn_table_field_{$field_id}='',dyn_table_field_{$field_id}_lower=''";
2766
2767 if(!$values)
2768 webdk_set_multi_user_selection($item_id,$field_id,array()); // clean up values
2769
2770 return $res;
2771 }
2772
2773 function webdk_dynamic_object_musel_edit_html($field_desc,$namespace)
2774 {
2775 $form_name = 'dynobj_edit_form';
2776 $field_name = 'field_'.$field_desc['dynobj_field_id'];
2777 $options = unserialize($field_desc['dynobj_field_options']);
2778
2779 $field_db_name = 'dyn_table_field_'.$field_desc['dynobj_field_id'];
2780
2781 $users = array();
2782
2783 if(isset($namespace[$field_db_name]) && ($values = $namespace[$field_db_name]))
2784 {
2785 // get values
2786 $users = webdk_unserialize_multi_user_selection($values);
2787 }
2788
2789 $options['users'] = $users;
2790
2791 return webdk_create_multiuser_selbox($field_name,$form_name,$options);
2792 }
2793
2794 // --- SYSTEM FIELD ---
2795 function webdk_dynamic_object_update_sysfld_value2sql($item_id,$field_desc,$namespace,$old_item)
2796 {
2797 global $WEBDK_DB_CONNECTION,$WEBDK_STATUSES,$WEBDK_SUBSTATUSES;
2798
2799 $item_status = $namespace['item_status'];
2800 $item_substatus = $namespace['item_substatus'];
2801 $item_status_date = $namespace['item_status_date'];
2802
2803 if(!array_key_exists($item_status,$WEBDK_STATUSES))
2804 webdk_error('Invalid item status!');
2805
2806 if(!array_key_exists($item_substatus,$WEBDK_SUBSTATUSES))
2807 webdk_error('Invalid item substatus!');
2808
2809 if($item_status!==$old_item['item_status'] ||
2810 $item_substatus!==$old_item['item_substatus'] ||
2811 $item_status_date!==$old_item['item_status_date'])
2812 {
2813 $query = sprintf("UPDATE items SET item_status='%s',item_substatus='%s',item_status_date=%s WHERE item_id=%d",
2814 $WEBDK_DB_CONNECTION->escape($item_status),
2815 $WEBDK_DB_CONNECTION->escape($item_substatus),
2816 ($item_status_date?"'".$WEBDK_DB_CONNECTION->escape($item_status_date)."'":'NULL'),$item_id);
2817
2818 $WEBDK_DB_CONNECTION->query($query);
2819 }
2820 }
2821
2822 function webdk_dynamic_object_sysfld_edit_html_item_status($field_desc,$namespace,$options)
2823 {
2824 global $WEBDK_STATUSES,$WEBDK_SUBSTATUSES;
2825
2826 $buf = '';
2827
2828 if(!$options['SF_SUBS_DIS'])
2829 {
2830 $buf .= "<select name=\"item_substatus\" class=\"selectctrl\">\n";
2831
2832 foreach($WEBDK_SUBSTATUSES AS $key => $value)
2833 $buf .= sprintf("<option value=\"%s\"%s>%s</option>\n",$key,$key===$namespace['item_substatus']?' SELECTED':'',webdk_translate($value));
2834
2835 $buf .= "</select>\n";
2836 }
2837
2838 $buf .= " <select name=\"item_status\" class=\"selectctrl\">\n";
2839
2840 foreach($WEBDK_STATUSES AS $key => $value)
2841 $buf .= sprintf("<option value=\"%s\"%s>%s</option>\n",$key,$key===$namespace['item_status']?' SELECTED':'',webdk_translate($value));
2842
2843 $buf .= "</select>\n";
2844 if($namespace['item_status_date'])
2845 $buf .= " ".webdk_make_date_field('item_status_date',(int)substr($namespace['item_status_date'],0,4),
2846 (int)substr($namespace['item_status_date'],5,2),
2847 (int)substr($namespace['item_status_date'],8,2),
2848 false,'dynobj_edit_form');
2849 else
2850 $buf .= " ".webdk_make_date_field('item_status_date',false,false,false,false,'dynobj_edit_form');
2851
2852 return $buf;
2853 }
2854
2855 function webdk_dynamic_object_sysfld_edit_value2html($field_desc,$namespace)
2856 {
2857 $options = unserialize($field_desc['dynobj_field_options']);
2858
2859 switch($options['field_key'])
2860 {
2861 case 'item_status': return webdk_dynamic_object_sysfld_edit_html_item_status($field_desc,$namespace,$options);
2862 default: webdk_error("Invalid system field: ".$options['field_key']."!");
2863 }
2864 }
2865
2866 function webdk_dynamic_object_tags_edit_value2html($field_desc, $namespace)
2867 {
2868 return Wd_Dynobj_Field_Tags::valueToAddEditHtml($field_desc, $namespace);
2869 }
2870
2871 function webdk_dynamic_object_update_tags_value2sql($item_id,$field_desc,$namespace,$old_item)
2872 {
2873 global $WEBDK_DB_CONNECTION;
2874
2875 $clean_tags = A74_Util::toLower(A74_Pg_Query::escapeString($namespace['field_'.$field_desc['dynobj_field_id']]));
2876
2877 $tags = explode(',', $clean_tags);
2878
2879 //Lisan tags andmebaasi
2880 Wd_Dynobj_Field_Tags::recacheTags($item_id, $tags);
2881
2882 $serial_tags = serialize($tags);
2883
2884 return 'dyn_table_field_'.$field_desc['dynobj_field_id']."='".$serial_tags."'";
2885
2886 }
2887
2888 // --- VEHICLE LOGBOOK ROWS
2889 function webdk_dynamic_object_vehicle_logbook_rows_edit_value2html($field_desc,$namespace)
2890 {
2891 return Wd_Dynobj_Field_VehicleLogbookRows::valueToAddEditHtml($field_desc,$namespace);
2892 }
2893
2894 function webdk_dynamic_object_update_vehicle_logbook_rows_value2sql($item_id,$field_desc,$namespace,$old_item)
2895 {
2896 return Wd_Dynobj_Field_VehicleLogbookRows::valueToEditSql($item_id,$field_desc,$namespace,$old_item);
2897 }
2898
2899 //
2900 $WEBDK_UPDATE_VALUE2SQL = array(
2901 'text' => "webdk_dynamic_object_update_text_value2sql",
2902 'mltext' => "webdk_dynamic_object_update_mltext_value2sql",
2903 'number' => "webdk_dynamic_object_update_number_value2sql",
2904 'email' => "webdk_dynamic_object_update_email_value2sql",
2905 'homepage' => "webdk_dynamic_object_update_text_value2sql",
2906 'date' => "webdk_dynamic_object_update_date_value2sql",
2907 'datetime' => "webdk_dynamic_object_update_datetime_value2sql",
2908 'mlfiles' => "webdk_dynamic_object_update_mlfiles_value2sql",
2909 'file' => "webdk_dynamic_object_update_file_value2sql",
2910 'picture' => "webdk_dynamic_object_update_file_value2sql",
2911 'selection' => "webdk_dynamic_object_update_selection_value2sql",
2912 'multisel' => "webdk_dynamic_object_update_multisel_value2sql",
2913 'boolean' => "webdk_dynamic_object_update_boolean_value2sql",
2914 'susel' => "webdk_dynamic_object_update_susel_value2sql",
2915 'sosel' => "webdk_dynamic_object_update_sosel_value2sql",
2916 'musel' => "webdk_dynamic_object_update_musel_value2sql",
2917 'sysfld' => "webdk_dynamic_object_update_sysfld_value2sql",
2918 'invoicerows' => "webdk_dynamic_object_update_invoicerows_value2sql",
2919 'crstbl' => "webdk_dynamic_object_update_crstbl_value2sql",
2920 'contacts' => "webdk_dynamic_object_update_contacts_value2sql",
2921 'address' => "webdk_dynamic_object_update_address_value2sql",
2922#if ENABLE_EV_DOCS
2923 'regindex' => "webdk_dynamic_object_update_regindex_value2sql",
2924#endif
2925 'tags' => "webdk_dynamic_object_update_tags_value2sql",
2926 'vehicle_logbook_rows' => "webdk_dynamic_object_update_vehicle_logbook_rows_value2sql",
2927 );
2928
2929 function webdk_dynamic_object_update_value2sql($item_id,$field_desc,$namespace,$old_item)
2930 {
2931 global $WEBDK_UPDATE_VALUE2SQL,$webdk_error;
2932
2933 $field_type = $field_desc['dynobj_field_type'];
2934
2935 if(array_key_exists($field_type,$WEBDK_UPDATE_VALUE2SQL))
2936 return $WEBDK_UPDATE_VALUE2SQL[$field_type]($item_id,$field_desc,$namespace,$old_item);
2937 else
2938 webdk_error("Type not implemented (upd val '{$field_type}')!");
2939
2940 }
2941
2942 //
2943 $WEBDK_EDIT_VALUE2HTML = array(
2944 'text' => "webdk_dynamic_object_text_edit_value2html",
2945 'mltext' => "webdk_dynamic_object_mltext_edit_value2html",
2946 'number' => "webdk_dynamic_object_number_edit_value2html",
2947 'email' => "webdk_dynamic_object_text_edit_value2html",
2948 'homepage' => "webdk_dynamic_object_text_edit_value2html",
2949 'date' => "webdk_dynamic_object_date_edit_value2html",
2950 'datetime' => "webdk_dynamic_object_datetime_edit_value2html",
2951 'mlfiles' => "webdk_dynamic_object_mlfiles_edit_value2html",
2952 'file' => "webdk_dynamic_object_file_edit_value2html",
2953 'picture' => "webdk_dynamic_object_picture_edit_value2html",
2954 'selection' => "webdk_dynamic_object_selection_edit_value2html",
2955 'multisel' => "webdk_dynamic_object_multisel_edit_value2html",
2956 'boolean' => "webdk_dynamic_object_boolean_edit_html",
2957 'susel' => "webdk_dynamic_object_susel_edit_html",
2958 'sosel' => "webdk_dynamic_object_sosel_edit_html",
2959 'musel' => "webdk_dynamic_object_musel_edit_html",
2960 'sysfld' => "webdk_dynamic_object_sysfld_edit_value2html",
2961 'invoicerows' => "webdk_dynamic_object_invoicerows_edit_value2html",
2962 'crstbl' => "webdk_dynamic_object_crstbl_edit_value2html",
2963 'contacts' => "webdk_dynamic_object_contacts_edit_value2html",
2964 'address' => "webdk_dynamic_object_address_edit_value2html",
2965#if ENABLE_EV_DOCS
2966 'regindex' => "webdk_dynamic_object_regindex_edit_value2html",
2967#endif
2968 'tags' => "webdk_dynamic_object_tags_edit_value2html",
2969 'vehicle_logbook_rows' => "webdk_dynamic_object_vehicle_logbook_rows_edit_value2html",
2970 );
2971
2972 function webdk_dynamic_object_edit_value2html($field_desc,$namespace)
2973 {
2974 global $WEBDK_EDIT_VALUE2HTML,$webdk_error;
2975
2976 $field_type = $field_desc['dynobj_field_type'];
2977
2978 if(array_key_exists($field_type,$WEBDK_EDIT_VALUE2HTML))
2979 return $WEBDK_EDIT_VALUE2HTML[$field_type]($field_desc,$namespace);
2980 else
2981 webdk_error("Type not implemented ({$field_type})!");
2982 }
2983
2984
2985
2986/**
2987* Including extension file [WEBDK_EXT_FS_DIR]/lib/webdk_ext_dynamic_object_edit_utils.inc.
2988* Existents of an extension is optional.
2989*/
2990@include_once("{$WEBDK_EXT_FS_DIR}/lib/webdk_ext_dynamic_object_edit_utils.inc");