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