function formulize_setupPreviousEntryUI($screen, $element_id, $type, $owner, $de = false, $entryId = "", $ele_handle, $fid) { // 1. need to get and cache the values of the entry for this screen // 2. need to put the values into a dropdown list with an onchange event that populates the actual form element // this should be cached in some other way, since every instance of the renderer will need to cache this. If it were a GLOBAL or this whole thing were in some other function, that would work. static $cachedEntries = array(); if (!isset($cachedEntries[$screen->getVar('sid')])) { // identify the entry belonging to this user's group(s) in the other form. Currently only group correspondence is supported. global $xoopsUser; $groups = $xoopsUser ? $xoopsUser->getGroups() : array(0 => XOOPS_GROUP_ANONYMOUS); $member_handler =& xoops_gethandler('member'); $gperm_handler =& xoops_gethandler('groupperm'); $mid = getFormulizeModId(); $owner_groups =& $member_handler->getGroupsByUser($owner, FALSE); // in this particular case, it's okay to make the owner_groups based on the users's memberships, since we want to present the single entry that belongs to whichever groups the user is a member of...I think. :-) $singleData = getSingle($screen->getVar('paraentryform'), $owner, $owner_groups, $member_handler, $gperm_handler, $mid); if ($singleData['flag'] == "group" and $singleData['entry'] > 0) { // only proceed if there is a one-entry-per-group situation in the target form formulize_benchmark("Ready to do previous entry query."); $cachedEntries[$screen->getVar('sid')] = getData("", $screen->getVar('paraentryform'), $singleData['entry']); formulize_benchmark("Done query."); } else { return ""; } } $entries = $cachedEntries[$screen->getVar('sid')]; // big assumption below is corresponding captions. In future there will be more ad hoc ways of describing which elements align to which other ones. // 1. figure out the corresponding element ID based on matching captions // 2. grab the previous value from the $entry/entries // 3. create the dropdown list with these values, including javascript $formHandler =& xoops_getmodulehandler('forms', 'formulize'); $currentForm = $formHandler->get($screen->getVar('fid')); $previousForm = $formHandler->get($screen->getVar('paraentryform')); $currentCaptions = $currentForm->getVar('elementCaptions'); $captionToMatch = $currentCaptions[$ele_handle]; $previousCaptions = $previousForm->getVar('elementCaptions'); $previousElementHandle = array_search($captionToMatch, $previousCaptions); if (!$previousElementHandle) { return ""; } $elementName = $de ? "de_" . $fid . "_" . $entryId . "_" . $element_id : "ele_" . $element_id; // displayElement elements have different names from regular elements $previousElementId = formulize_getIdFromElementHandle($previousElementHandle); // function is in extract.php // setup the javascript based on the type of question, and setup other data that is required switch ($type) { case "text": case "date": $javascript = "onchange='javascript:this.form." . $elementName . ".value=this.form.prev_" . $element_id . ".value;'"; break; case "radio": // need to get the options of the question so we know what to match $prevElementMetaData = formulize_getElementMetaData($previousElementId); // use this function in extract instead of the get element method in handler, since this is guaranteed to be already be cached in memory $prevElement_ele_value = unserialize($prevElementMetaData['ele_value']); $prevElementOptions = array_keys($prevElement_ele_value); $javascript = "onchange='javascript:if(this.form.prev_" . $element_id . ".value !== \"\") { this.form." . $elementName . "[this.form.prev_" . $element_id . ".value].checked=true; }'"; break; case "yn": $javascript = "onchange='javascript:if(this.form.prev_" . $element_id . ".value !== \"\") { this.form." . $elementName . "[this.form.prev_" . $element_id . ".value].checked=true; }'"; break; } $previousOptions = array(); $prevOptionsExist = false; foreach ($entries as $id => $entry) { $value = htmlspecialchars(strip_tags(display($entry, $previousElementHandle))); if (is_array($value)) { $value = printSmart(implode(", ", $value)); } if (trim($value) === "" or trim($value) == "0000-00-00") { continue; } $prevOptionsExist = true; switch ($type) { case "text": case "date": $previousOptions[$value] = $value; break; case "radio": $prevElementPosition = array_search($value, $prevElementOptions); // need to figure out which option matches the text of the value if ($prevElementPosition !== false) { $previousOptions[$prevElementPosition] = $value; // for radio buttons, we need to pass the position of the option } break; case "yn": if ($value == _formulize_TEMP_QYES) { $previousOptions[0] = $value; } elseif ($value == _formulize_TEMP_QNO) { $previousOptions[1] = $value; } break; } } if (!$prevOptionsExist) { return ""; } $prevUI = new xoopsFormSelect('', 'prev_' . $element_id, '123qweasdzxc', 1, false); // 123qweasdzxc is meant to be a unique value that will never be selected, since we don't ever want a previous selection showing by default $prevUI->addOption('', _AM_FORMULIZE_PREVIOUS_OPTION); $prevUI->addOptionArray($previousOptions); $prevUI->setExtra($javascript); return $prevUI; }
$grouping->addOption("none", _formulize_DE_NOGROUPING); $grouping->addOption("creation_uid", _formulize_DE_GROUPBYCREATOR); $grouping->addOption("mod_uid", _formulize_DE_GROUPBYMODIFIER); $grouping->addOption("creation_datetime", _formulize_DE_GROUPBYCREATEDATE); $grouping->addOption("mod_datetime", _formulize_DE_GROUPBYMODDATE); $grouping->addOption("creator_email", _formulize_DE_GROUPBYCREATOREMAIL); $grouping->addOptionArray($options2); // grouping option $grouping2 = new xoopsFormSelect(_formulize_DE_CALC_GTEXT2, 'grouping2_' . $calc . "_" . $hidden['column'], $groupingDefaults2); $grouping2->addOption("none", _formulize_DE_NOGROUPING); $grouping2->addOption("creation_uid", _formulize_DE_GROUPBYCREATOR); $grouping2->addOption("mod_uid", _formulize_DE_GROUPBYMODIFIER); $grouping2->addOption("creation_datetime", _formulize_DE_GROUPBYCREATEDATE); $grouping2->addOption("mod_datetime", _formulize_DE_GROUPBYMODDATE); $grouping2->addOption("creator_email", _formulize_DE_GROUPBYCREATOREMAIL); $grouping2->addOptionArray($options2); $tray->addElement($tempcalclabel); $tray->addElement($grouping); $tray->addElement($grouping2); $pickcalc->addElement($tray); unset($tempcalc1); unset($tempcalcCustom); unset($tempcalclabel); unset($grouping); unset($grouping2); unset($tray); } } print $pickcalc->render(); print "</td><td width=5%></td></tr></table>"; print "</center></body>";
$setwho_elementuids->addOption('elementuids', _formulize_DE_SETNOT_WHO_ELEMENTUIDS . $elementlist); $setwho_linkcreatorlist = new xoopsFormSelect('', 'lc_ele_id', $_POST['lc_ele_id'], 1); $setwho_linkcreatorlist->setExtra("onfocus=\"javascript:window.document.setnot.setwho[4].checked=true\""); $setwho_linkcreatorlist->addOptionArray($linkcreator_options); $linkcreatorlist = $setwho_linkcreatorlist->render(); $setwho_linkcreator = new xoopsFormRadio('', 'setwho', $_POST['setwho']); $setwho_linkcreator->addOption('linkcreator', _formulize_DE_SETNOT_WHO_LINKCREATOR . "<br> " . $linkcreatorlist); $setwho_elementemaillist = new xoopsFormSelect('', 'email_ele_id', $_POST['email_ele_id'], 1); $setwho_elementemaillist->setExtra("onfocus=\"javascript:window.document.setnot.setwho[5].checked=true\""); $setwho_elementemaillist->addOptionArray($elementemail_options); $elementemaillist = $setwho_elementemaillist->render(); $setwho_elementemail = new xoopsFormRadio('', 'setwho', $_POST['setwho']); $setwho_elementemail->addOption('elementemail', _formulize_DE_SETNOT_WHO_ELEMENTEMAIL . $elementemaillist); $setwho_grouplist = new xoopsFormSelect('', 'gid', $_POST['gid'], 1); $setwho_grouplist->setExtra("onfocus=\"javascript:window.document.setnot.setwho[6].checked=true\""); $setwho_grouplist->addOptionArray($group_options); $grouplist = $setwho_grouplist->render(); $setwho_group = new xoopsFormRadio('', 'setwho', $_POST['setwho']); $setwho_group->addOption('groupid', _formulize_DE_SETNOT_WHO_GROUP . $grouplist); $setwho->addElement($setwho_me); $setwho->addElement($setwho_curuser); $setwho->addElement($setwho_creator); $setwho->addElement($setwho_elementuids); $setwho->addElement($setwho_linkcreator); $setwho->addElement($setwho_elementemail); $setwho->addElement($setwho_group); $setnot->addElement($setwho); } if (!isset($_POST['setfor'])) { $_POST['setfor'] = 'all'; }
//$returned = addReqdCalcs($pickcalc); //$pickcalc = $returned['form']; $columns_andor = new xoopsFormElementTray('', "<br />"); $columns_and = new xoopsFormRadio('', 'multi_andor', '1'); $columns_and->addOption(1, _formulize_DE_AS_MULTI_AND); $columns_andor->addElement($columns_and); $columns_or = new xoopsFormRadio('', 'multi_andor', '1'); $columns_or->addOption(2, _formulize_DE_AS_MULTI_OR); $columns_andor->addElement($columns_or); $columns = new xoopsFormSelect(_formulize_DE_AS_FIELD . "<br /><br />" . $columns_andor->render(), 'column', '', 5, true); $columns->addOption("creation_uid", _formulize_DE_CALC_CREATOR); $columns->addOption("mod_uid", _formulize_DE_CALC_MODIFIER); $columns->addOption("creation_datetime", _formulize_DE_CALC_CREATEDATE . ' (YYYY-mm-dd)'); $columns->addOption("mod_datetime", _formulize_DE_CALC_MODDATE . ' (YYYY-mm-dd)'); $columns->addOption("creator_email", _formulize_DE_CALC_CREATOR_EMAIL); $columns->addOptionArray($options); $opterm = new xoopsFormElementTray(_formulize_DE_AS_OPTERM, " "); $op = new xoopsFormSelect('', 'op'); $ops['=='] = "="; $ops['!='] = "NOT"; $ops['>'] = ">"; $ops['<'] = "<"; $ops['>='] = ">="; $ops['<='] = "<="; $ops['LIKE'] = "LIKE"; $ops['NOT LIKE'] = "NOT LIKE"; $op->addOptionArray($ops); $term = new xoopsFormText('', 'term', 20, 255); $opterm->addElement($op); $opterm->addElement($term); $addButton = new xoopsFormButton('', 'addq', _formulize_DE_AS_ADD, 'submit');
} } else { exit("Error: no advanced scope permission detected."); } include_once XOOPS_ROOT_PATH . "/class/xoopsformloader.php"; print "<HTML>"; print "<head>"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . _CHARSET . "\" />"; print "<title>" . _formulize_DE_PICKASCOPE . "</title>\n"; scopeJavascript(); print "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"" . XOOPS_URL . "/xoops.css\" />\n"; $themecss = xoops_getcss(); //$themecss = substr($themecss, 0, -6); //$themecss .= ".css"; print "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"{$themecss}\" />\n"; print "</head>\n"; print "<body style=\"background: white; margin-top:20px;\"><center>"; print "<table style=\"width: 100%;\"><tr><td style=\"width: 5%;\"></td><td style=\"width: 90%;\">"; $advscope = new xoopsThemeForm(_formulize_DE_PICKASCOPE, 'advscope', XOOPS_URL . "/modules/formulize/include/advscope.php?fid={$fid}&frid={$frid}"); $gcount = count($availgroups); $size = $gcount < 10 ? $gcount : 10; $grouplist = new xoopsFormSelect(_formulize_DE_AVAILGROUPS, 'newscope', $curgroups, $size, true); $grouplist->addOptionArray($availgroups); $doneButton = new xoopsFormButton('', 'done', _formulize_DE_USETHISSCOPE, 'button'); $doneButton->setExtra("onclick=\"javascript:updateScope(this.form);return false;\""); $advscope->addElement($grouplist); $advscope->addElement($doneButton); print $advscope->render(); print "</td><td style=\"width: 5%;\"></td></tr></table>\n"; print "</center></body>\n"; print "</HTML>";
function editForm($screen, $fid) { // provide ui for title, ui for frid, hidden fid, hidden sid include_once XOOPS_ROOT_PATH . "/class/xoopsformloader.php"; $form = new XoopsThemeForm(_AM_FORMULIZE_SCREEN_FORM, "editscreenform", "editscreen.php"); $form->addElement(new xoopsFormHidden('fid', $fid)); $title = is_object($screen) ? $screen->getVar('title') : ""; $sid = is_object($screen) ? $screen->getVar('sid') : 0; $frid = is_object($screen) ? $screen->getVar('frid') : 0; $form->addElement(new xoopsFormHidden('sid', $sid)); $form->addElement(new xoopsFormHidden('oneditscreen', 1)); $form->addElement(new xoopsFormText(_AM_FORMULIZE_SCREEN_TITLE, 'title', 30, 255, $title)); // get the frameworks that this form is involved in $framework_handler =& xoops_getmodulehandler('frameworks', 'formulize'); $frameworks = $framework_handler->getFrameworksByForm($fid); $options[0] = _AM_FORMULIZE_USE_NO_FRAMEWORK; foreach ($frameworks as $thisFramework) { $options[$thisFramework->getVar('frid')] = $thisFramework->getVar('name'); } $frameworkChoice = new xoopsFormSelect(_AM_FORMULIZE_SELECT_FRAMEWORK, 'frid', $frid, 1, false); $frameworkChoice->setExtra("onchange='javascript:frameworkChange(window.document.editscreenform.frid)'"); // set a javascript event for this element in case parts of some screen forms change depending on the framework selected $frameworkChoice->addOptionArray($options); $form->addElement($frameworkChoice); // show the security token question -- added Jan 25 2008 -- jwe $useTokenDefault = $screen->getVar('sid') ? $screen->getVar('useToken') : 1; $securityQuestion = new xoopsFormRadioYN(_AM_FORMULIZE_SCREEN_SECURITY, 'useToken', $useTokenDefault); $securityQuestion->setDescription(_AM_FORMULIZE_SCREEN_SECURITY_DESC); $form->addElement($securityQuestion); return $form; }
} else { $lastpubgroups[0] = "donotpub"; $currentlock = 1; // default to locked } $overlap = array_intersect($lastpubgroups, array_keys($publishgroups)); if (count($overlap) == 0) { // ie: no default is actually part of the available groups $lastpubgroups[0] = "donotpub"; } $size = count($publishgroups); if ($size > 7) { $size = 7; } $pubgrouplist = new xoopsFormSelect(_formulize_DE_SAVE_PUBGROUPS, 'pubgrouplist', $lastpubgroups, $size, true); $pubgrouplist->addOptionArray($publishgroups); $lockcontrols = new xoopsFormElementTray(_formulize_DE_SAVE_LOCKCONTROLS, "<br>"); $yes = new xoopsFormRadio('', 'lockcontrols', $currentlock); $yes->addOption("1", _YES); $no = new xoopsFormRadio('', 'lockcontrols', $currentlock); $no->addOption("0", _NO); $lockcontrols->addElement($yes); $lockcontrols->addElement($no); $saveform->addElement($pubgrouplist); $saveform->addElement($lockcontrols); } $viewselection = new xoopsFormHidden("viewselection", ""); $saveform->addElement($viewselection); $subButton = new xoopsFormButton('', 'submitx', _formulize_DE_SAVE_BUTTON, 'button'); $subButton->setExtra("onclick=\"javascript:saveSettings(this.form);\""); $saveform->addElement($subButton);
function drawPageUI($pageNumber, $pageTitle, $elements, $conditions, $form, $options, $ops) { // insert page here button $form->addElement(new xoopsFormButton('', 'insertpage' . $pageNumber, _AM_FORMULIZE_SCREEN_INSERTPAGE, 'submit')); // pageNumbers start at 0, since that's how the arrays are indexed, they start from zero // but whatever we show users must start at 1 (there is no page 0 as far as they are concerned), so we add one to make the visiblePageNumber $visiblePageNumber = $pageNumber + 1; // page title $pageTitleBox = new xoopsFormText(_AM_FORMULIZE_SCREEN_PAGETITLE . ' ' . $visiblePageNumber, 'pagetitle_' . $pageNumber, 50, 255, $pageTitle); $form->addElement($pageTitleBox, true); // elements $elementSelection = new xoopsFormSelect(_AM_FORMULIZE_SCREEN_A_PAGE . ' ' . $visiblePageNumber . '<br><br><input type=submit name=delete' . $pageNumber . ' value="' . _AM_FORMULIZE_DELETE_THIS_PAGE . '" onclick="javascript:return confirmDeletePage(\'' . $pageNumber . '\');">', 'page' . $pageNumber, $elements, 10, true); $elementSelection->addOptionArray($options); $form->addElement($elementSelection); // page conditions -- september 6 2007 if (!isset($conditions['pagecons'])) { $conditionsYesNo = 'none'; } else { $conditionsYesNo = $conditions['pagecons']; } $conditionsTray = new xoopsFormElementTray(_AM_FORMULIZE_SCREEN_CONS_PAGE . ' ' . $visiblePageNumber, '<br />'); $conditionsTray->setDescription(_AM_FORMULIZE_SCREEN_CONS_HELP); $nocons = new xoopsFormRadio('', 'pagecons' . $pageNumber, $conditionsYesNo); $nocons->addOption('none', _AM_FORMULIZE_SCREEN_CONS_NONE); $conditionlist = ""; foreach ($conditions['details']['elements'] as $conIndex => $elementValue) { $form->addElement(new xoopsFormHidden('pageelements' . $pageNumber . '[]', $elementValue)); $form->addElement(new xoopsFormHidden('pageops' . $pageNumber . '[]', $conditions['details']['ops'][$conIndex])); $form->addElement(new xoopsFormHidden('pageterms' . $pageNumber . '[]', $conditions['details']['terms'][$conIndex])); $conditionlist .= $options[$conditions['details']['elements'][$conIndex]] . " " . $conditions['details']['ops'][$conIndex] . " " . $conditions['details']['terms'][$conIndex] . "<br />"; } // setup the operator boxes... $opterm = new xoopsFormElementTray('', " "); $element = new xoopsFormSelect('', 'pageelements' . $pageNumber . '[]'); $element->setExtra("onfocus=\"javascript:window.document.editscreenform.pagecons" . $pageNumber . "[1].checked=true\""); $element->addOptionArray($options); $op = new xoopsFormSelect('', 'pageops' . $pageNumber . '[]'); $op->addOptionArray($ops); $op->setExtra("onfocus=\"javascript:window.document.editscreenform.pagecons" . $pageNumber . "[1].checked=true\""); $term = new xoopsFormText('', 'pageterms' . $pageNumber . '[]', 10, 255); $term->setExtra("onfocus=\"javascript:window.document.editscreenform.pagecons" . $pageNumber . "[1].checked=true\""); $opterm->addElement($element); $opterm->addElement($op); $opterm->addElement($term); $addcon = new xoopsFormButton('', 'addcon', _AM_FORMULIZE_SCREEN_CONS_ADDCON, 'submit'); $addcon->setExtra("onfocus=\"javascript:window.document.editscreenform.pagecons" . $pageNumber . "[1].checked=true\""); $conditionui = "<br />{$conditionlist}<nobr>" . $opterm->render() . "</nobr><br />" . $addcon->render(); $yescons = new xoopsFormRadio('', 'pagecons' . $pageNumber, $conditionsYesNo); $yescons->addOption('yes', _AM_FORMULIZE_SCREEN_CONS_YES . $conditionui); $conditionsTray->addElement($nocons); $conditionsTray->addElement($yescons); $form->addElement($conditionsTray); return $form; }
function formulize_createFilterUIMatch($newElementName, $formName, $filterName, $options, $newOpName, $newTermName, $conditionlist) { // setup the new element, operator, term boxes $new_elementOpTerm = new xoopsFormElementTray('', " "); $element = new xoopsFormSelect('', $newElementName); $element->addOptionArray($options); $op = new xoopsFormSelect('', $newOpName); $ops['='] = "="; $ops['NOT'] = "NOT"; $ops['>'] = ">"; $ops['<'] = "<"; $ops['>='] = ">="; $ops['<='] = "<="; $ops['LIKE'] = "LIKE"; $ops['NOT LIKE'] = "NOT LIKE"; $op->addOptionArray($ops); $term = new xoopsFormText('', $newTermName, 10, 255); $term->setExtra(" class=\"condition_term\" "); $new_elementOpTerm->addElement($element); $new_elementOpTerm->addElement($op); $new_elementOpTerm->addElement($term); return "<br />{$conditionlist}" . $new_elementOpTerm->render(); }