function get_instance_by_field_id($field_id) { global $db; $field_format = $db->get_var("SELECT Format\n FROM Field\n WHERE Field_ID=" . (int) $field_id . "\n AND TypeOfData_ID=9"); if (!$field_format) { trigger_error("get_instance_by_field_id - wrong field ID?", E_USER_ERROR); } return field_relation_factory::get_instance($field_format); }
/** * Элементы для редактирования поля типа "связь с другим объектом" * Функция не должна использоваться внутри s_list_class. * Работает только в admin_mode. * * @param string имя поля * @param string кнопка/ссылка на изменение связанного объекта * например '<a href="#" onclick="%s">выбрать</a>' * где на место %s будет подставлен Javascript-код. * Обрабатывается через sprintf, поэтому не должно быть неэкранированного "%". * Разработчику следует учитывать, что внутри вставляемого JS-кода * используются одинарные кавычки. * @param string удаление (... $action_remove) * @return string */ function nc_related_field($field_name, $change_template = "", $remove_template = "") { require_once $GLOBALS['ADMIN_FOLDER'] . "related/format.inc.php"; $result = ""; global $fld, $fldID, $fldValue, $fldName, $fldFmt, $fldNotNull, $fldType, $message, $db, $admin_mode, $inside_admin, $ADMIN_PATH; if (!$admin_mode) { return ""; } if (is_array($fld) && !in_array($field_name, $fld)) { trigger_error("<b>nc_related_field</b>: incorrect field name ({$field_name})", E_USER_WARNING); return; } if (!is_array($fld)) { return; } $tmp_array = array_flip($fld); $field_index = $tmp_array[$field_name]; $field_id = $fldID[$field_index]; if ($fldType[$field_index] != 9) { trigger_error("<b>nc_related_field</b>: field '{$field_name}' is not a link", E_USER_WARNING); return; } // заголовок поля $description = $fldName[$field_index] ? $fldName[$field_index] : $fld[$field_index]; $result .= $description; if ($fldNotNull[$field_index]) { $result .= " (*)"; } $result .= ": <br />\n"; $result .= "<ul class='nc-toolbar nc--left'>"; $result .= "<li><div id='nc_rel_{$field_id}_caption'>"; $related_id = (int) $fldValue[$field_index]; $field_data = field_relation_factory::get_instance($fldFmt[$field_index]); // вывод значения if ($related_id) { $related_caption = listQuery($field_data->get_object_query($related_id), $field_data->get_full_admin_template()); $result .= $related_caption ? $related_caption : sprintf(NETCAT_MODERATION_RELATED_INEXISTENT, $related_id); } else { $result .= NETCAT_MODERATION_NO_RELATED; } $result .= "</div></li>"; $result .= "<li class='nc-divider'></li>"; // кнопки действий: заменить и удалить связь if (!$change_template) { $change_template = "<li><a href=\"#\" onclick=\"%s\"><i class='nc-icon nc--edit'></i> " . NETCAT_MODERATION_CHANGE_RELATED . "</a></li>"; } $change_link = "window.open('" . $ADMIN_PATH . "related/select_" . $field_data->get_relation_type() . ".php?field_id={$fldID[$field_index]}', " . "'nc_popup_{$fld[$field_index]}', " . "'width={$field_data->popup_width},height={$field_data->popup_height},menubar=no,resizable=no,scrollbars=yes,toolbar=no,resizable=yes'); " . "return false;"; $result .= sprintf($change_template, $change_link); if (!$fldNotNull[$field_index]) { if (!$remove_template) { $remove_template = "<li><a href='#' onclick=\"%s\"><i class='nc-icon nc--remove'></i> " . NETCAT_MODERATION_REMOVE_RELATED . "</a></li>"; } $remove_link = "document.getElementById('nc_rel_{$field_id}_value').value='';" . "document.getElementById('nc_rel_{$field_id}_caption').innerHTML = '" . NETCAT_MODERATION_NO_RELATED . "';" . "return false;"; $result .= sprintf($remove_template, $remove_link); } // hidden $result .= "<input type='hidden' name='f_{$fld[$field_index]}' id='nc_rel_{$field_id}_value' value='{$related_id}' />\n"; // готово $result .= "</ul>"; //.nc-toolbar $result .= "<br />\n"; return $result; }