/** * print_profile_fields * * prints profile input fields in right format; * used in object/user/group/etc edit-popup window; * prints 2 columns: 1) profile label 2) input field * * Note: function "print_profile_fields()" is used for EDITING profile fields, * function "format_profile_values()" is used for just SHOWING profile fields * * @package CMS * * @param array field_values - array of object values, $field_values['field_name'] = $field_value * @param array profile_fields - array of profile fields, already unserialized data * @param fields_width - width of cell, where field located. Can be used as integer or with % (150 or 50%) * @param boolean return_fields - 0: print hml (default); 1: return fields html as array * */ function print_profile_fields() { global $site; $args = func_get_arg(0); $profile_fields = $args['profile_fields']; $field_values = $args['field_values']; $fields_width = $args['fields_width'] ? $args['fields_width'] : ''; $return_fields = $args['return_fields'] ? true : false; $load_defaults = $args['load_defaults'] ? true : false; $fields_html = array(); ## for gathering fields html into array (if "return_fields" is true) $row_html = ''; ## row html generated in this function $field_html = ''; ## one field html generated in this function $form_error = $site->fdat['form_error']; # is array of errors, keys are fieldnames and values are error messages ################### # loop over attributes / profile fields if (is_array($profile_fields)) { foreach ($profile_fields as $field => $value) { $field = strtolower($field); #Bug #2560 # if field is active if ($value['is_active']) { ########## label if ($value['sys_sona'] && $value['sys_sona_tyyp']) { $label = $site->sys_sona(array('sona' => $value['sys_sona'], 'tyyp' => $value['sys_sona_tyyp'], 'lang_id' => $site->glossary_id)); } else { $label = $site->sys_sona(array('sona' => $value['name'], 'tyyp' => "custom", 'lang_id' => $site->glossary_id)); } $label = $label != '[' . $profile_info["name"] . ']' ? $label : ''; # kui s???steemis???na puudub ########### value # 1) if page was saved and field has error then show uncorrect field value if ($form_error[$field]) { $field_values[$field] = $site->fdat[$field]; } elseif ($site->fdat['refresh']) { ## $field_values[$field] = $site->fdat[$field]; } # for select lists, get profile id $source_profile_id = $value['source_object']; #################### # get selectlist $sel_list = array(); if ($source_profile_id) { # mis on tabeli nimi?? ## get profile -st tabeli nimi!! $sql_table = $site->db->prepare("SELECT source_table FROM object_profiles WHERE profile_id =?", $source_profile_id); $sth_table = new SQL($sql_table); list($source_profile_table) = $sth_table->fetch(); #print "--".$source_profile_table."--"; ########### get all users if ($source_profile_table == 'users') { # if data source is system table "users" $sql_select = $site->db->prepare("\r\n\t\t\t\t\tSELECT CONCAT(users.firstname,' ',users.lastname) AS pealkiri, users.user_id AS id\r\n\t\t\t\t\tFROM users WHERE profile_id LIKE ?\r\n\t\t\t\t\tORDER BY pealkiri ", $source_profile_id == '38' ? '%' : $source_profile_id); } elseif (substr($source_profile_table, 0, 4) == 'ext_') { # prefix is "ext_" $sql_select = $site->db->prepare("\r\n\t\t\t\t\tSELECT name AS pealkiri, id\r\n\t\t\t\t\tFROM " . $source_profile_table . "\r\n\t\t\t\t\tWHERE profile_id LIKE ?\r\n\t\t\t\t\tORDER BY name ", $source_profile_id); } elseif ($source_profile_table == 'obj_asset') { # for compability with version 3: field "varchar_1" is used as additional field for title (for same title values). bug #1582 if (version_compare($site->cms_min_version, "4.0.0") < 0) { # if coming from version 3 $select_add = ", obj_asset.varchar_1 as pealkiri2"; } #NB! maha v???etud: WHERE ---> objekt.keel=? AND <--- + $site->keel, # Bug #2611 $sql_select = $site->db->prepare("\r\n\t\t\t\t\tSELECT objekt.pealkiri,obj_asset.objekt_id AS id " . $select_add . "\r\n\t\t\t\t\tFROM objekt\r\n\t\t\t\t\tLEFT JOIN objekt_objekt on objekt.objekt_id=objekt_objekt.objekt_id\r\n\t\t\t\t\tLEFT JOIN obj_asset on objekt.objekt_id=obj_asset.objekt_id\r\n\t\t\t\t\tWHERE objekt.tyyp_id=? AND obj_asset.profile_id=? AND objekt_objekt.parent_id<>?\r\n\t\t\t\t\tORDER BY objekt.pealkiri ", "20", $source_profile_id, $site->alias("trash")); } elseif ($source_profile_table == 'obj_artikkel') { $sql_select = $site->db->prepare("\r\n\t\t\t\t\tSELECT objekt.pealkiri,obj_artikkel.objekt_id AS id " . $select_add . "\r\n\t\t\t\t\tFROM objekt\r\n\t\t\t\t\tLEFT JOIN objekt_objekt on objekt.objekt_id=objekt_objekt.objekt_id\r\n\t\t\t\t\tLEFT JOIN obj_artikkel on objekt.objekt_id=obj_artikkel.objekt_id\r\n\t\t\t\t\tWHERE objekt.tyyp_id=? AND obj_artikkel.profile_id=? AND objekt_objekt.parent_id<>?\r\n\t\t\t\t\tORDER BY objekt.pealkiri ", "2", $source_profile_id, $site->alias("trash")); } # if source_object #print $sql_select; $sth_select = new SQL($sql_select); ######## 1. add record to array $tmp_title = ''; while ($tmp = $sth_select->fetch()) { # if asset titles are equal, then remember these titles if ($tmp_title == $tmp['pealkiri']) { $rememb_titles[] = $tmp['pealkiri']; } $sel_list[] = $tmp; $tmp_title = $tmp['pealkiri']; } # while asset list #printr($rememb_titles); ######### 2. rare case (for compability with version 3): if asset titles are equal, then show additional title after / symbol # ( info is taken from the field obj_asset.varchar_1) for ($i = 0; $i < sizeof($sel_list); $i++) { if (is_array($rememb_titles) && in_array($sel_list[$i]['pealkiri'], $rememb_titles)) { # get additional asset name: $sql_select2 = $site->db->prepare("SELECT objekt.pealkiri FROM objekt \t\t\t\tLEFT JOIN objekt_objekt on objekt.objekt_id=objekt_objekt.objekt_id\t\t\t\t\tLEFT JOIN obj_asset on objekt.objekt_id=obj_asset.objekt_id\tWHERE objekt.keel=? AND objekt.tyyp_id=? AND objekt_objekt.parent_id<>? AND objekt.objekt_id=?\tORDER BY objekt_objekt.sorteering DESC ", $site->keel, "20", $site->alias("trash"), $sel_list[$i]['pealkiri2']); $sth_select2 = new SQL($sql_select2); $tmp_pealkiri2 = $sth_select2->fetchsingle(); if ($tmp_pealkiri2) { $sel_list[$i]['pealkiri'] .= ' / ' . $tmp_pealkiri2; } } # rare case: if titles are equal } # 2. if asset titles are equal } # / get selectlist #################### # set FIELDNAME: html fieldname can be given as parameter, usually its the same with field value. or with prefix if ($value['html_fieldname']) { $fieldname = $value['html_fieldname']; } else { $fieldname = $field; } # set FIELDVALUE: if error then show previous value, if no error => show object value or default value # fixed Bug #2044: Profiili v???lja vaikev??????rtus ei m???junud tavalise tekstiv???lja korral if (($site->fdat['op'] == 'new' || $load_defaults) && $value['default_value']) { $fieldvalue = $value['default_value']; # default value } elseif ($site->fdat['op'] == 'new' && $site->fdat[$field]) { $fieldvalue = $site->fdat[$field]; } elseif ($field_values[$field] && !$form_error[$field] || $field_values[$field] == "0") { # fixed Bug #2600: Profiilis kohustuslikuks m��ratud v�lja ei saa sisestada v��rtuseks 0 $fieldvalue = $field_values[$field]; # object value } else { # if error $fieldvalue = $site->fdat[$fieldname]; # entered form value } ########################### START ROW HTML $row_html = '<tr>'; ######## LABEL + required ####### $row_html .= '<td nowrap valign=top>' . ($value['is_required'] ? '*' : '') . $label . ':' . '<input type=hidden name="required_' . $fieldname . '" value="' . $value['is_required'] . '"></td>'; ####### FIELD ####### $row_html .= '<td width="100%">'; $field_html = ''; #### 1) kui v???li pole read-only, siis n???ita input elementi: if (!$value['is_readonly']) { #### vali vastavalt t??????bile ???ige html v???ljastuskuju: ##### ########### TEXTAREA ########### if ($value['type'] == "TEXTAREA") { # replace line breaks $fieldvalue = str_replace("<br />", "\n", $fieldvalue); $fieldvalue = str_replace("<br>", "\n", $fieldvalue); /* bug #2230 */ $field_html = '<textarea name="' . $fieldname . '" id="' . $field . '" rows="10" style="width:100%">' . stripslashes($fieldvalue) . '</textarea>'; ########### SELECT ########### } elseif ($value['type'] == "SELECT") { $field_html = '<select name="' . $fieldname . '" id="' . $field . '" style="width:100%"> <option value="" ' . ($field_values[$field] ? "" : "selected") . '></option>'; foreach ($sel_list as $sel_item) { $field_html .= '<option value="' . $sel_item['id'] . '" ' . ($fieldvalue == $sel_item['id'] || ($site->fdat['op'] == 'new' || $load_defaults) && $value['default_value'] == $sel_item['id'] ? "selected" : "") . '>' . htmlspecialchars(stripslashes($sel_item['pealkiri'])) . '</option>'; } $field_html .= '</select>'; ########### MULTIPLE SELECT ########### } elseif ($value['type'] == "MULTIPLE SELECT") { $field_html = '<select name="' . $fieldname . '[]" id="' . $field . '" multiple style="WIDTH: 99%; height: 70px" size=7>'; foreach ($sel_list as $sel_item) { $field_html .= '<option value="' . $sel_item['id'] . '" ' . (in_array($sel_item['id'], split(",", $fieldvalue)) ? "selected" : "") . '>' . htmlspecialchars(stripslashes($sel_item['pealkiri'])) . '</option>'; } $field_html .= '</select>'; ########### BROWSE ########### } elseif ($value['type'] == "BROWSE") { ##### DISABLE invalid data sources by disabling browse button: # right now allow BROWSE only for system table "users" and "groups", # because similar file to "admin/select_group.php" is always needed to open browse popup if (!($source_profile_table == 'users' || $source_profile_table == 'groups')) { $disabled = ' disabled'; } if (!$value) { # if default value was passed as parameter $value = $site->fdat[$fieldname]; } ####### show value : user readable value $show_value = $field_values[$field]; # show value: if data source is system table "users" or "groups", do extra splitting if ($source_profile_table == 'users' || $source_profile_table == 'groups') { # split value 'user_id:65' or 'group_id:20' list($sel_type, $sel_id) = split(":", $field_values[$field]); if ($sel_type == 'group_id') { $group = new Group(array(group_id => $sel_id)); $show_value = $group->name; } elseif ($sel_type == 'user_id') { $user = new User(array(user_id => $sel_id)); $show_value = $user->name; } # if user ID } ####### / show value : user readable value $js = "javascript:void(openpopup('" . $site->CONF['wwwroot'] . $site->CONF['adm_path'] . "/select_group.php?select_one=1&paste2box=" . $fieldname . "&pastename2box=tmptmp_" . $fieldname . "','selectgroup','500','500'))"; $field_html = '<input type="text" name="tmptmp_' . $fieldname . '" id="tmptmp_' . $fieldname . '" value="' . $show_value . '" class="scms_flex_input" style="width:80%" onchange="javascript:if(this.value==\'\'){document.getElementById(\'' . $fieldname . '\').value=\'\';}"><input type="hidden" name="' . $fieldname . '" id="' . $fieldname . '" value="' . $field_values[$field] . '"> <INPUT TYPE="button" value="..." onclick="' . $js . '" ' . $disabled . '>'; ########### RADIO ########### } elseif ($value['type'] == "RADIO") { $field_html = '<table border="0" cellspacing="0" cellpadding="0">'; foreach ($sel_list as $sel_item) { $z++; $field_html .= '<tr> <td style="padding:0px"> <input id="' . $fieldname . $z . '" type=radio name="' . $fieldname . '" value="' . $sel_item['id'] . '" ' . (in_array($sel_item['id'], split(",", $fieldvalue)) || ($site->fdat['op'] == 'new' || $load_defaults) && $value['default_value'] == $sel_item['id'] ? "checked" : "") . '> </td> <td style="padding:0px"><label for="' . $fieldname . $z . '">' . htmlspecialchars(stripslashes($sel_item['pealkiri'])) . '</label></td> </tr>'; } $field_html .= '</table>'; ########### CHECKBOX ########### } elseif ($value['type'] == "CHECKBOX") { $field_html = '<table border="0" cellspacing="0" cellpadding="0">'; foreach ($sel_list as $sel_item) { $z++; ########### undocumented feature: field with value "[separator]" is seprating line if ($sel_item['pealkiri'] == '[separator]') { $field_html .= '<tr><td colspan=2 style="padding:0px"><hr "size=1px"></td></tr>'; } else { $field_html .= '<tr> <td style="padding:0px"><input id="' . $fieldname . $z . '" type=checkbox name="' . $fieldname . '[]" value="' . $sel_item['id'] . '" ' . (in_array($sel_item['id'], split(",", $fieldvalue)) || ($site->fdat['op'] == 'new' || $load_defaults) && $value['default_value'] == $sel_item['id'] ? "checked" : "") . '> </td> <td style="padding:0px"><label for="' . $fieldname . $z . '">' . htmlspecialchars(stripslashes($sel_item['pealkiri'])) . '</label></td> </tr>'; } } $field_html .= '</table>'; ########### BOOLEAN ########### } elseif ($value['type'] == "BOOLEAN") { $field_html = '<table border="0" cellspacing="0" cellpadding="0"> <tr> <td style="padding:0px"> <input type=checkbox id="tmptmp_' . $fieldname . '" name="tmptmp_' . $fieldname . '" value="1" ' . ($fieldvalue || ($site->fdat['op'] == 'new' || $load_defaults) && $value['default_value'] ? "checked" : "") . ' onclick="if(this.checked){document.getElementById(\'' . $fieldname . '\').value=\'1\';}else {document.getElementById(\'' . $fieldname . '\').value=\'0\';}"> <input type=hidden id="' . $fieldname . '" name="' . $fieldname . '" value="' . ($fieldvalue || ($site->fdat['op'] == 'new' || $load_defaults) && $value['default_value'] ? "1" : "0") . '"> </td> <td style="padding:0px"><label for="tmptmp_' . $fieldname . '">' . $site->sys_sona(array(sona => "yes", tyyp => "editor")) . '</label></td> </tr> </table>'; ########### FILE ########### } elseif ($value['type'] == "FILE") { // setup file insert $_SESSION['scms_filemanager_settings']['scms_profile_file_' . $fieldname] = array('select_mode' => 1, 'action_text' => $site->sys_sona(array('sona' => 'fm_choose_file_into_profile_field', 'tyyp' => 'editor')), 'action_trigger' => $site->sys_sona(array('sona' => 'fm_insert_file_into_profile_field', 'tyyp' => 'editor')), 'callback' => 'window.opener.profile_file_callback_' . $fieldname); $field_html = '<script type="text/javascript">var filemanager; function profile_file_callback_' . $fieldname . '(data) { document.getElementById("' . $fieldname . '").value = ".." + data.files[0].folder + "/" + data.files[0].filename; filemanager.window.close();}</script> <table border="0" cellspacing="0" cellpadding="0" width="100%"> <tr> <td style="padding:0px" width="90%"> <input type="text" id="' . $fieldname . '" name="' . $fieldname . '" value="' . $fieldvalue . '" class="scms_flex_input" style="' . ($fields_width ? "width:" . $fields_width : "") . '"> </td> <td style="padding:0px"> <a href="javascript:void(0);" onclick="filemanager = openpopup(\'' . $site->CONF['wwwroot'] . '/admin/filemanager.php?setup=scms_profile_file_' . $fieldname . '\',\'filemanager\', 980, 600);"><IMG title="' . $site->sys_sona(array(sona => "nupp: Lisa pilt", tyyp => "editor")) . '" alt="" src="' . $site->CONF['wwwroot'] . $site->CONF['adm_img_path'] . '/image.gif" border=0></a> </td> </tr> </table>'; ########### DATE ########### } elseif ($value['type'] == "DATE") { $date = $fieldvalue; ### format date but only if there's no error and the date is not already formatted $date = $date && $date != '0000-00-00' ? !$form_error[$field] && !strpos($date, '.') ? $site->db->MySQL_ee($date) : $date : ($date = ""); $field_html = '<table border="0" cellspacing="0" cellpadding="0"> <tr>'; ######### date box $field_html .= '<td style="padding:0px"> <input type="text" id="' . $fieldname . '" name="' . $fieldname . '" value="' . $date . '" class="scms_flex_input" style="width:80px; text-align: right;"> </td> <td style="padding:0px"> </td>'; ######### calendar $field_html .= '<td style="padding:0px"><a href="#"><img src="' . $site->CONF['wwwroot'] . $site->CONF['styles_path'] . '/gfx/calendar/cal.gif" width="16" height="15" hspace="4" border="0" alt="Calendar" onclick="init_datepicker(\'' . $fieldname . '\')"></a></td> </tr> </table>'; ########### DATETIME ########### } elseif ($value['type'] == "DATETIME") { ### format date but only if there's no error and the date is not already formatted $datetime = $fieldvalue; $datetime = $datetime && $datetime != '0000-00-00 00:00:00' ? !$form_error[$field] && !strpos($datetime, '.') ? $site->db->MySQL_ee_long($datetime) : $datetime : ""; # datetime is now in format dd.mm.yyyy hh:mm => split it if (!$form_error[$field]) { $date = substr($datetime, 0, 10); $time = substr($datetime, 11, 5); } else { //split from space $date = trim(substr($datetime, 0, strpos($datetime, ' '))); $time = trim(substr($datetime, strpos($datetime, ' '))); } $field_html = '<table border="0" cellspacing="0" cellpadding="0"> <tr>'; ######### generate result refreshing js $refresh_result = 'document.getElementById(\'' . $fieldname . '\').value=document.getElementById(\'tmp_datedate' . $fieldname . '\').value+ \' \'+document.getElementById(\'tmp_time' . $fieldname . '\').value'; ######### date box $field_html .= '<td style="padding:0px"> <input type="text" id="tmp_datedate' . $fieldname . '" name="tmp_datedate' . $fieldname . '" value="' . $date . '" class="scms_flex_input" style="width:80px; text-align: right;" onkeyup="' . $refresh_result . '" onfocus="' . $refresh_result . '" onblur="' . $refresh_result . '"> </td> <td style="padding:0px"> </td>'; ######### time box $field_html .= '<td style="padding:0px"> <input type="text" id="tmp_time' . $fieldname . '" name="tmp_time' . $fieldname . '" class="scms_flex_input" style="width:40px; text-align: right;" value="' . $time . '" onkeyup="' . $refresh_result . '" onblur="' . $refresh_result . '">'; ######### hidden field with result value $field_html .= ' <input type="hidden" id="' . $fieldname . '" name="' . $fieldname . '" value="' . $datetime . '" > </td>'; ######### calendar $field_html .= '<td style="padding:0px"><a href="#" onblur="' . $refresh_result . '" onclick="init_datepicker(\'tmp_datedate' . $fieldname . '\')"><img src="' . $site->CONF['wwwroot'] . $site->CONF['styles_path'] . '/gfx/calendar/cal.gif" width="16" height="15" hspace="4" border="0" alt="Calendar"></a></td> </tr> </table>'; ########### INTEGER/FLOAT => TEXT (short) ########### } elseif ($value['db_type'] == "integer" || $value['db_type'] == "float") { $field_html = '<input type="text" name="' . $fieldname . '" id="' . $fieldname . '" value="' . htmlspecialchars(stripslashes($fieldvalue)) . '" class="scms_flex_input" style="width:80px; text-align: right;">'; ########### addition type PASSWORD ########### } elseif ($value['type'] == "password" || $value['name'] == 'password') { $field_html = '<input type="password" name="' . $fieldname . '" id="' . $fieldname . '" value="" class="scms_flex_input" style="' . ($fields_width ? "width:" . $fields_width : "") . '">'; ########### else => TEXT (long) ########### } else { $field_html = '<input type="text" name="' . $fieldname . '" id="' . $fieldname . '" value="' . htmlspecialchars(stripslashes($fieldvalue)) . '" class="scms_flex_input" style="' . ($fields_width ? "width:" . $fields_width : "") . '">'; } ######## error message ###### $field_html .= $form_error[$field] ? '<br><font color=red><b>' . $form_error[$field] . '</b></font>' : ''; } else { $formatted_values = format_profile_values(array("profile_data" => $args['profile_fields'], "data" => $args['field_values'])); $field_html = $formatted_values[$value['name']]; ## show hidden field with correct value if ($value['type'] == "DATE") { $fieldvalue = $fieldvalue ? $site->db->MySQL_ee($fieldvalue) : ""; } elseif ($value['type'] == "DATETIME") { $fieldvalue = $fieldvalue ? $site->db->MySQL_ee_long($fieldvalue) : ""; } # elseif($value['type'] == "BOOLEAN") { # $fieldvalue = ($fieldvalue == $site->sys_sona(array(sona => "yes", tyyp=>"editor")) ? 1 : 0); # } $field_html .= '<input type="hidden" name="' . $fieldname . '" value="' . htmlspecialchars(stripslashes($fieldvalue)) . '">'; } # if read-only ####### / field html $row_html .= $field_html; $row_html .= '</td></tr>'; ########################### / END ROW HTML ### depending on parameter "return_fields" either print html out or gather into variable if ($return_fields) { # gather variable $fields_html[$value['name']] = $field_html; } else { echo $row_html; } # print html or save it } # if active ### reset html values $field_html = ''; $row_html = ''; } # foreach } # if array # / loop over attributes ################### if ($return_fields) { # if gather variable return $fields_html; # return html-array } }
echo $href; ?> "><?php echo $asset['pealkiri'] ? $asset['pealkiri'] : ' '; echo $buttons; ?> </a></td> <?php } # asset 'pealkiri' cell ?> <?php if (is_array($profile_data)) { # if is array ######### get field values in right format $formatted_values = format_profile_values(array("profile_data" => &$profile_data, "data" => &$asset)); ######################### # loop over asset fields foreach ($profile_data as $field => $value) { # if field is active if ($value['is_active']) { ########## field value $field_value = $formatted_values[$field]; if (strlen($field_value) > 50) { # strip if necessary $field_value = substr($field_value, 0, 50) . "..."; } # Bug #2567: FILE v�li ajab html-i katki ?> <td width="<?php echo $td_width;