/** * Return JS for preload dependent ctrl * * @param string $fName - field name * @param string $fval - value of field * @return array */ function getPreloadArr($fName, $value) { // category control field $strCategoryControl = $this->hasDependField($fName); if ($strCategoryControl === false) { return false; } // Is field appear or not $fieldAppear = true; if ($this->pageType == PAGE_ADD) { if (!AppearOnInlineAdd($fName)) { $fieldAppear = $this->mode != ADD_INLINE; } elseif (!AppearOnAddPage($fName)) { $fieldAppear = $this->mode == ADD_INLINE; } // Is category control appear or not if ($this->mode == ADD_INLINE) { if (AppearOnInlineAdd($strCategoryControl)) { $categoryFieldAppear = true; } else { $categoryFieldAppear = false; } } else { if (AppearOnAddPage($strCategoryControl)) { $categoryFieldAppear = true; } else { $categoryFieldAppear = false; } } } elseif ($this->pageType == PAGE_EDIT) { if (!AppearOnInlineEdit($fName)) { $fieldAppear = $this->mode != EDIT_INLINE; } elseif (!AppearOnEditPage($fName)) { $fieldAppear = $this->mode == EDIT_INLINE; } $categoryFieldAppear = true; } else { if ($strCategoryControl) { $categoryFieldAppear = true; } else { $categoryFieldAppear = false; } } if (!$fieldAppear) { return false; } if (GetFieldData($this->tName, $fName, 'freeInput', false)) { $output = array(0 => @$value[$fName], 1 => @$value[$fName]); } else { $output = loadSelectContent($fName, @$value[$strCategoryControl], $categoryFieldAppear, @$value[$fName]); } $valF = ""; if (count($value)) { $valF = $value[$fName]; } if ($this->pageType == PAGE_EDIT) { if (SelectSize($fName) == 1 && LookupControlType($fName) != LCT_CBLIST) { $fVal = $valF; } else { $fVal = splitvalues($valF); } } else { $fVal = $valF; } return array('vals' => $output, "fVal" => $fVal); }
function BuildSelectControl($field, $value, $fieldNum = 0, $mode, $id = "", $additionalCtrlParams, &$pageObj) { global $conn, $strTableName; // read control settings $table = $strTableName; $strLabel = Label($field); $is508 = isEnableSection508(); $alt = ""; if (($mode == MODE_INLINE_EDIT || $mode == MODE_INLINE_ADD) && $is508) { $alt = ' alt="' . htmlspecialchars($strLabel) . '" '; } $cfield = "value_" . GoodFieldName($field) . "_" . $id; $clookupfield = "display_value_" . GoodFieldName($field) . "_" . $id; $openlookup = "open_lookup_" . GoodFieldName($field) . "_" . $id; $ctype = "type_" . GoodFieldName($field) . "_" . $id; if ($fieldNum) { $cfield = "value" . $fieldNum . "_" . GoodFieldName($field) . "_" . $id; $ctype = "type" . $fieldNum . "_" . GoodFieldName($field) . "_" . $id; } $addnewitem = false; $advancedadd = false; $strCategoryControl = CategoryControl($field, $table); $categoryFieldId = GoodFieldName(CategoryControl($field, $table)); $bUseCategory = UseCategory($field, $table); $dependentLookups = GetFieldData($table, $field, "DependentLookups", array()); $lookupType = GetLookupType($field, $table); $LCType = LookupControlType($field, $table); $horizontalLookup = GetFieldData($table, $field, "HorizontalLookup", false); $inputStyle = $additionalCtrlParams['style'] ? 'style="' . $additionalCtrlParams['style'] . '"' : ''; $lookupTable = GetLookupTable($field, $table); $strLookupWhere = LookupWhere($field, $table); $lookupSize = SelectSize($field, $table); if ($LCType == LCT_CBLIST) { $lookupSize = 2; } // simply > 1 for CBLIST $add_page = GetTableURL($lookupTable) . "_add.php"; $list_page = GetTableURL($lookupTable) . "_list.php"; $strPerm = GetUserPermissions($lookupTable); // alter "add on the fly" settings if (strpos($strPerm, "A") !== false) { $addnewitem = GetFieldData($table, $field, "AllowToAdd", false); $advancedadd = !GetFieldData($table, $field, "SimpleAdd", false); if (!$advancedadd) { $addnewitem = false; } } // alter lookuptype settings if ($LCType == LCT_LIST && strpos($strPerm, "S") === false) { $LCType = LCT_DROPDOWN; } if ($LCType == LCT_LIST) { $addnewitem = false; } if ($mode == MODE_SEARCH) { $addnewitem = false; } // prepare multi-select attributes $multiple = ""; $postfix = ""; if ($lookupSize > 1) { $avalue = splitvalues($value); $multiple = " multiple"; $postfix = "[]"; } else { $avalue = array((string) $value); } // prepare JS code $className = "DropDownLookup"; if ($LCType == LCT_AJAX) { $className = "EditBoxLookup"; } elseif ($LCType == LCT_LIST) { $className = "ListPageLookup"; } elseif ($LCType == LCT_CBLIST) { $className = "CheckBoxLookup"; } // build the control /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // list of values /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if ($lookupType == LT_LISTOFVALUES) { // read lookup values $arr = GetFieldData($table, $field, "LookupValues", array()); // print Type control to allow selecting nothing if ($lookupSize > 1) { echo "<input id=\"" . $ctype . "\" type=hidden name=\"" . $ctype . "\" value=\"multiselect\">"; } // dropdown control if ($LCType == LCT_DROPDOWN) { $alt = ""; echo '<select id="' . $cfield . '" size = "' . $lookupSize . '" ' . $alt . 'name="' . $cfield . $postfix . '" ' . $multiple . '>'; if ($lookupSize < 2) { echo '<option value="">' . mlang_message("PLEASE_SELECT") . '</option>'; } else { if ($mode == MODE_SEARCH) { echo '<option value=""> </option>'; } } foreach ($arr as $opt) { $res = array_search((string) $opt, $avalue); if (!($res === NULL || $res === FALSE)) { echo '<option value="' . htmlspecialchars($opt) . '" selected>' . htmlspecialchars($opt) . '</option>'; } else { echo '<option value="' . htmlspecialchars($opt) . '">' . htmlspecialchars($opt) . '</option>'; } } echo "</select>"; } elseif ($LCType == LCT_CBLIST) { echo '<div align=\'left\'>'; $spacer = '<br/>'; if ($horizontalLookup) { $spacer = ' '; } $i = 0; foreach ($arr as $opt) { echo '<input id="' . $cfield . '_' . $i . '" type="checkbox" ' . $alt . ' name="' . $cfield . $postfix . '" value="' . htmlspecialchars($opt) . '"'; $res = array_search((string) $opt, $avalue); if (!($res === NULL || $res === FALSE)) { echo ' checked="checked" '; } echo '/>'; echo ' <b id="data_' . $cfield . '_' . $i . '">' . htmlspecialchars($opt) . '</b>' . $spacer; $i++; } echo '</div>'; } return; } // build table-based lookup //////////////////////////////////////////////////////////////////////////////////////////// // table-based ajax-lookup control //////////////////////////////////////////////////////////////////////////////////////////// if ($LCType == LCT_AJAX || $LCType == LCT_LIST) { //////////////////////////////////////////////////////////////////////////////////////////// // dependent ajax-lookup control //////////////////////////////////////////////////////////////////////////////////////////// if (UseCategory($field)) { // ajax dependent dropdown // get parent value $celementvalue = "var parVal = ''; var parCtrl = Runner.controls.ControlManager.getAt('" . jsreplace($strTableName) . "', " . $id . ", '" . jsreplace($field) . "', 0).parentCtrl; if (parCtrl){ parVal = parCtrl.getStringValue();};"; if ($LCType == LCT_AJAX) { echo '<input type="text" categoryId="' . $categoryFieldId . '" autocomplete="off" id="' . $clookupfield . '" name="' . $clookupfield . '" ' . $inputStyle . '>'; } elseif ($LCType == LCT_LIST) { echo '<input type="text" categoryId="' . $categoryFieldId . '" autocomplete="off" id="' . $clookupfield . '" name="' . $clookupfield . '" readonly ' . $inputStyle . '>'; echo " <a href=# id=" . $openlookup . ">" . mlang_message("SELECT_LIST") . "</a>"; } echo '<input type="hidden" id="' . $cfield . '" name="' . $cfield . '">'; // add new item link if ($addnewitem) { echo " <a href=# id='addnew_" . $cfield . "'>" . mlang_message("ADD_NEW") . "</a>"; } return; } //////////////////////////////////////////////////////////////////////////////////////////// // regular ajax-lookup control //////////////////////////////////////////////////////////////////////////////////////////// // get the initial value $lookup_value = ""; $lookupSQL = buildLookupSQL($field, $table, "", $value, false, true, false, true); $rs_lookup = db_query($lookupSQL, $conn); if ($data = db_fetch_numarray($rs_lookup)) { $lookup_value = $data[1]; } elseif (strlen($strLookupWhere)) { // try w/o WHERE expression $lookupSQL = buildLookupSQL($field, $table, "", $value, false, true, false, true); $rs_lookup = db_query($lookupSQL, $conn); if ($data = db_fetch_numarray($rs_lookup)) { $lookup_value = $data[1]; } } // build the control if ($LCType == LCT_AJAX) { if (!strlen($lookup_value) && GetFieldData($strTableName, $field, "freeInput", false)) { $lookup_value = $value; } echo '<input type="text" ' . $inputStyle . ' autocomplete="off" ' . (($mode == MODE_INLINE_EDIT || $mode == MODE_INLINE_ADD) && $is508 == true ? 'alt="' . $strLabel . '" ' : '') . 'id="' . $clookupfield . '" name="' . $clookupfield . '" value="' . htmlspecialchars($lookup_value) . '">'; } elseif ($LCType == LCT_LIST) { echo '<input type="text" autocomplete="off" ' . $inputStyle . ' id="' . $clookupfield . '" ' . (($mode == MODE_INLINE_EDIT || $mode == MODE_INLINE_ADD) && $is508 == true ? 'alt="' . $strLabel . '" ' : '') . 'name="' . $clookupfield . '" value="' . htmlspecialchars($lookup_value) . '" readonly >'; echo " <a href=# id=" . $openlookup . ">" . mlang_message("SELECT_LIST") . "</a>"; } echo '<input type="hidden" id="' . $cfield . '" name="' . $cfield . '" value="' . htmlspecialchars($value) . '">'; // add new item if ($addnewitem) { echo " <a href=# id='addnew_" . $cfield . "'>" . mlang_message("ADD_NEW") . "</a>"; } return; } //////////////////////////////////////////////////////////////////////////////////////////// // classic lookup - start //////////////////////////////////////////////////////////////////////////////////////////// $lookupSQL = buildLookupSQL($field, $table, "", "", false, false, false); $rs = db_query($lookupSQL, $conn); //////////////////////////////////////////////////////////////////////////////////////////// // dependent classic lookup //////////////////////////////////////////////////////////////////////////////////////////// if ($bUseCategory) { // print Type control to allow selecting nothing if ($lookupSize > 1) { echo "<input id=\"" . $ctype . "\" type=hidden name=\"" . $ctype . "\" value=\"multiselect\">"; } echo '<select size = "' . $lookupSize . '" id="' . $cfield . '" name="' . $cfield . $postfix . '"' . $multiple . '>'; echo '<option value="">' . mlang_message("PLEASE_SELECT") . '</option>'; echo "</select>"; if ($addnewitem) { echo " <a href=# id='addnew_" . $cfield . "'>" . mlang_message("ADD_NEW") . "</a>"; } return; } //////////////////////////////////////////////////////////////////////////////////////////// // simple classic lookup //////////////////////////////////////////////////////////////////////////////////////////// // print control header if ($lookupSize > 1) { echo "<input id=\"" . $ctype . "\" type=hidden name=\"" . $ctype . "\" value=\"multiselect\">"; } if ($LCType != LCT_CBLIST) { echo '<select size = "' . $lookupSize . '" id="' . $cfield . '" ' . (($mode == MODE_INLINE_EDIT || $mode == MODE_INLINE_ADD) && $is508 == true ? 'alt="' . $strLabel . '" ' : '') . 'name="' . $cfield . $postfix . '"' . $multiple . '>'; if ($lookupSize < 2) { echo '<option value="">' . mlang_message("PLEASE_SELECT") . '</option>'; } else { if ($mode == MODE_SEARCH) { echo '<option value=""> </option>'; } } } else { echo '<div align=\'left\'>'; $spacer = '<br/>'; if ($horizontalLookup) { $spacer = ' '; } } // print lookup data $found = false; $i = 0; while ($data = db_fetch_numarray($rs)) { $res = array_search((string) $data[0], $avalue); $checked = ""; if (!($res === NULL || $res === FALSE)) { $found = true; if ($LCType == LCT_CBLIST) { $checked = " checked=\"checked\""; } else { $checked = " selected"; } } if ($LCType == LCT_CBLIST) { echo '<input id="' . $cfield . '_' . $i . '" type="checkbox" ' . $alt . ' name="' . $cfield . $postfix . '" value="' . htmlspecialchars($data[0]) . '"' . $checked . '/>'; echo ' <b id="data_' . $cfield . '_' . $i . '">' . htmlspecialchars($data[1]) . '</b>' . $spacer; } else { echo '<option value="' . htmlspecialchars($data[0]) . '"' . $checked . '>' . htmlspecialchars($data[1]) . '</option>'; } $i++; } // try the same query w/o WHERE clause if current value not found if (!$found && strlen($value) && $mode == MODE_EDIT && strlen($strLookupWhere)) { $lookupSQL = buildLookupSQL($field, $table, "", $value, false, true, false, false, true); $rs = db_query($lookupSQL, $conn); if ($data = db_fetch_numarray($rs)) { if ($LCType == LCT_CBLIST) { echo '<input id="' . $cfield . '_' . $i . '" type="checkbox" ' . $alt . ' name="' . $cfield . $postfix . '" value="' . htmlspecialchars($data[0]) . '" checked="checked"/>'; echo ' <b id="data_' . $cfield . '_' . $i . '">' . htmlspecialchars($data[1]) . '</b>' . $spacer; } else { echo '<option value="' . htmlspecialchars($data[0]) . '" selected>' . htmlspecialchars($data[1]) . '</option>'; } } } // print footer if ($LCType != LCT_CBLIST) { echo "</select>"; } else { echo '</div>'; } // add new item if ($addnewitem) { echo " <a href=# id='addnew_" . $cfield . "'>" . mlang_message("ADD_NEW") . "</a>"; } }