protected function makeJsProperty($strProp, $strKey)
 {
     $objValue = $this->{$strProp};
     if (null === $objValue) {
         return '';
     }
     return $strKey . ': ' . JavaScriptHelper::toJsObject($objValue) . ', ';
 }
 public function toJsObject()
 {
     $a = array('value' => $this->strName, 'id' => $this->strValue);
     if ($this->strLabel) {
         $a['label'] = $this->strLabel;
     }
     if ($this->strItemGroup) {
         $a['category'] = $this->strItemGroup;
     }
     return JavaScriptHelper::toJsObject($a);
 }
 /**
  * PHP __set Magic method
  * @param string $strName Property Name
  * @param string $mixValue Property Value
  *
  * @throws Exception|QInvalidCastException
  */
 public function __set($strName, $mixValue)
 {
     switch ($strName) {
         case 'DataSource':
             // Assign data to a DataSource from within the data binder function only.
             // Data should be array items that at a minimum contain a 'value' and an 'id'
             // They can also contain a 'label', which will be displayed in the popup menu only
             if ($this->blnUseAjax) {
                 $this->prepareAjaxList($mixValue);
             } else {
                 $this->Source = $mixValue;
             }
             break;
         case 'SelectedId':
             // Set this at creation time to initialize the selected id.
             // This is also set by the javascript above to keep track of subsequent selections made by the user.
             try {
                 $this->strSelectedId = QType::Cast($mixValue, QType::String);
             } catch (QInvalidCastException $objExc) {
                 $objExc->IncrementOffset();
                 throw $objExc;
             }
             break;
         case 'MustMatch':
             try {
                 $this->blnMustMatch = QType::Cast($mixValue, QType::Boolean);
                 $this->blnModified = true;
                 // Be sure control gets redrawn
             } catch (QInvalidCastException $objExc) {
                 $objExc->IncrementOffset();
                 throw $objExc;
             }
             break;
         case 'Source':
             try {
                 if (is_array($mixValue) && count($mixValue) > 0 && $mixValue[0] instanceof QListItem) {
                     // figure out what item is selected
                     foreach ($mixValue as $objItem) {
                         if ($objItem->Selected) {
                             $this->strSelectedId = $objItem->Value;
                             $this->Text = $objItem->Name;
                         }
                     }
                 }
                 if ($this->MultipleValueDelimiter) {
                     $strBody = 'response(jQuery.ui.autocomplete.filter(' . JavaScriptHelper::toJsObject($mixValue) . ', this.element.data("curTerm")(this.element.get(0))))';
                     $mixValue = new QJsClosure($strBody, array('request', 'response'));
                 }
                 // do parent action too
                 parent::__set($strName, $mixValue);
             } catch (QInvalidCastException $objExc) {
                 $objExc->IncrementOffset();
                 throw $objExc;
             }
             break;
         case 'MultipleValueDelimiter':
             $a = $this->GetAllActions('QAutocomplete_SourceEvent');
             if (!empty($a)) {
                 throw new Exception('Must set MultipleValueDelimiter BEFORE calling SetDataBinder');
             }
             try {
                 $this->strMultipleValueDelimiter = QType::Cast($mixValue, QType::String);
             } catch (QInvalidCastException $objExc) {
                 $objExc->IncrementOffset();
                 throw $objExc;
             }
             break;
         case 'DisplayHtml':
             try {
                 $this->blnDisplayHtml = QType::Cast($mixValue, QType::Boolean);
             } catch (QInvalidCastException $objExc) {
                 $objExc->IncrementOffset();
                 throw $objExc;
             }
             break;
         default:
             try {
                 parent::__set($strName, $mixValue);
             } catch (QInvalidCastException $objExc) {
                 $objExc->IncrementOffset();
                 throw $objExc;
             }
             break;
     }
 }
Beispiel #4
0
 /**
  * Call a JQuery UI Method on the object. 
  * 
  * A helper function to call a jQuery UI Method. Takes variable number of arguments.
  * 
  * @param string $strMethodName the method name to call
  * @internal param $mixed [optional] $mixParam1
  * @internal param $mixed [optional] $mixParam2
  */
 protected function CallJqUiMethod($strMethodName)
 {
     $args = func_get_args();
     $strArgs = JavaScriptHelper::toJsObject($args);
     $strJs = sprintf('jQuery("#%s").%s(%s)', $this->getJqControlId(), $this->getJqSetupFunction(), substr($strArgs, 1, strlen($strArgs) - 2));
     // params without brackets
     QApplication::ExecuteJavaScript($strJs);
 }
 /**
  * Default "toJsObject" handler
  * Specifies how the object should be displayed in JQuery UI lists and menus. Note that these lists use
  * value and label differently.
  *
  * value 	= The short form of what to display in the list and selection.
  * label 	= [optional] If defined, is what is displayed in the menu
  * id 		= Primary key of object.
  *
  * @return an array that specifies how to display the object
  */
 public function toJsObject()
 {
     return JavaScriptHelper::toJsObject(array('value' => $this->__toString(), 'id' => $this->intId));
 }
 /**
  * Default "toJsObject" handler
  * Specifies how the object should be displayed in JQuery UI lists and menus. Note that these lists use
  * value and label differently.
  *
  * value 	= The short form of what to display in the list and selection.
  * label 	= [optional] If defined, is what is displayed in the menu
  * id 		= Primary key of object.
  *
  * @return an array that specifies how to display the object
  */
 public function toJsObject()
 {
     return JavaScriptHelper::toJsObject(array('value' => $this->__toString(), 'id' => array($this->intSuggestionId, $this->intContextId, $this->intUserId)));
 }
    /**
     * Renders the end of the form, including the closing form and body tags.
     * Renders the html for hidden controls.
     * @param bool $blnDisplayOutput should the output be returned or directly printed to screen.
     *
     * @return null|string
     * @throws QCallerException
     */
    public function RenderEnd($blnDisplayOutput = true)
    {
        // Ensure that RenderEnd() has not yet been called
        switch ($this->intFormStatus) {
            case QFormBase::FormStatusUnrendered:
                throw new QCallerException('$this->RenderBegin() was never called');
            case QFormBase::FormStatusRenderBegun:
                break;
            case QFormBase::FormStatusRenderEnded:
                throw new QCallerException('$this->RenderEnd() has already been called');
                break;
            default:
                throw new QCallerException('FormStatus is in an unknown status');
        }
        $strHtml = '';
        // This will be the final output
        /**** Render any controls that get automatically rendered ****/
        foreach ($this->GetAllControls() as $objControl) {
            if ($objControl->AutoRender && !$objControl->Rendered) {
                $strRenderMethod = $objControl->PreferredRenderMethod;
                $strHtml .= $objControl->{$strRenderMethod}(false) . _nl();
            }
        }
        /**** Prepare Javascripts ****/
        // Clear included javascript array since we are completely redrawing the page
        $this->strIncludedJavaScriptFileArray = array();
        $strControlIdToRegister = array();
        $strEventScripts = '';
        // Add form level javascripts and libraries
        $strJavaScriptArray = $this->ProcessJavaScriptList($this->GetFormJavaScripts());
        QApplication::AddJavaScriptFiles($strJavaScriptArray);
        $strFormJsFiles = QApplication::RenderFiles();
        // Render the form-level javascript files separately
        // Go through all controls and gather up any JS or CSS to run or Form Attributes to modify
        foreach ($this->GetAllControls() as $objControl) {
            if ($objControl->Rendered || $objControl->ScriptsOnly) {
                $strControlIdToRegister[] = $objControl->ControlId;
                /* Note: GetEndScript may cause the control to register additional commands, or even add javascripts, so those should be handled after this. */
                if ($strControlScript = $objControl->GetEndScript()) {
                    $strControlScript = JavaScriptHelper::TerminateScript($strControlScript);
                    // Add comments for developer version of output
                    if (!QApplication::$Minimize) {
                        // Render a comment
                        $strControlScript = _nl() . _nl() . sprintf('/*** EndScript -- Control Type: %s, Control Name: %s, Control Id: %s  ***/', get_class($objControl), $objControl->Name, $objControl->ControlId) . _nl() . _indent($strControlScript);
                    }
                    $strEventScripts .= $strControlScript;
                }
            }
            // Include the javascripts specified by each control.
            if ($strScriptArray = $this->ProcessJavaScriptList($objControl->JavaScripts)) {
                QApplication::AddJavaScriptFiles($strScriptArray);
            }
            // Include any StyleSheets?  The control would have a
            // comma-delimited list of stylesheet files to include (if applicable)
            if ($strScriptArray = $this->ProcessStyleSheetList($objControl->StyleSheets)) {
                QApplication::AddStyleSheets(array_keys($strScriptArray));
            }
            // Form Attributes?
            if ($objControl->FormAttributes) {
                QApplication::ExecuteControlCommand($this->strFormId, 'attr', $objControl->FormAttributes);
                foreach ($objControl->FormAttributes as $strKey => $strValue) {
                    if (!array_key_exists($strKey, $this->strFormAttributeArray)) {
                        $this->strFormAttributeArray[$strKey] = $strValue;
                    } else {
                        if ($this->strFormAttributeArray[$strKey] != $strValue) {
                            $this->strFormAttributeArray[$strKey] = $strValue;
                        }
                    }
                }
            }
        }
        // Add grouping commands to events (Used for deprecated drag and drop, but not removed yet)
        foreach ($this->objGroupingArray as $objGrouping) {
            $strGroupingScript = $objGrouping->Render();
            if (strlen($strGroupingScript) > 0) {
                $strGroupingScript = JavaScriptHelper::TerminateScript($strGroupingScript);
                $strEventScripts .= $strGroupingScript;
            }
        }
        /*** Build the javascript block ****/
        // Start with variable settings and initForm
        $strEndScript = sprintf('qc.initForm("%s"); ', $this->strFormId);
        // Register controls
        if ($strControlIdToRegister) {
            $strEndScript .= sprintf("qc.regCA(%s); \n", JavaScriptHelper::toJsObject($strControlIdToRegister));
        }
        // Design mode event
        if (defined('__DESIGN_MODE__') && __DESIGN_MODE__ == 1) {
            // attach an event listener to the form to send context menu selections to the designer dialog for processing
            $strEndScript .= sprintf('$j("#%s").on("contextmenu", "[id]", 
						function(event) {
							$j("#qconnectoreditdlg").trigger("qdesignerclick", 
								[{id: event.target.id ? event.target.id : $j(event.target).parents("[id]").attr("id"), for: $j(event.target).attr("for")}]
							);
							return false;
						}
					);', $this->FormId);
        }
        // Add any application level js commands.
        // This will include high and medimum level commands
        $strEndScript .= QApplication::RenderJavascript(true);
        // Add the javascript coming from controls and events just after the medium level commands
        $strEndScript .= ';' . $strEventScripts;
        // Add low level commands and other things that need to execute at the end
        $strEndScript .= ';' . QApplication::RenderJavascript(false);
        // Create Final EndScript Script
        $strEndScript = sprintf('<script type="text/javascript">$j(document).ready(function() { %s; });</script>', $strEndScript);
        /**** Render the HTML itself, appending the javascript we generated above ****/
        foreach ($this->GetAllControls() as $objControl) {
            if ($objControl->Rendered) {
                $strHtml .= $objControl->GetEndHtml();
            }
            $objControl->ResetFlags();
            // Make sure controls are serialized in a reset state
        }
        $strHtml .= $strFormJsFiles . _nl();
        // Add form level javascript files
        // put javascript environment defines up early for use by other js files.
        $strHtml .= '<script type="text/javascript">' . sprintf('qc.baseDir = "%s"; ', __VIRTUAL_DIRECTORY__ . __SUBDIRECTORY__) . sprintf('qc.jsAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __JS_ASSETS__) . sprintf('qc.phpAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __PHP_ASSETS__) . sprintf('qc.cssAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __CSS_ASSETS__) . sprintf('qc.imageAssets = "%s"; ', __VIRTUAL_DIRECTORY__ . __IMAGE_ASSETS__) . '</script>' . _nl();
        $strHtml .= QApplication::RenderFiles() . _nl();
        // add plugin and control js files
        // Render hidden controls related to the form
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormId" id="Qform__FormId" value="%s" />', $this->strFormId) . _nl();
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormControl" id="Qform__FormControl" value="" />') . _nl();
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormEvent" id="Qform__FormEvent" value="" />') . _nl();
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormParameter" id="Qform__FormParameter" value="" />') . _nl();
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormCallType" id="Qform__FormCallType" value="" />') . _nl();
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormUpdates" id="Qform__FormUpdates" value="" />') . _nl();
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormCheckableControls" id="Qform__FormCheckableControls" value="" />') . _nl();
        // Serialize and write out the formstate
        $strHtml .= sprintf('<input type="hidden" name="Qform__FormState" id="Qform__FormState" value="%s" />', QForm::Serialize(clone $this)) . _nl();
        // close the form tag
        $strHtml .= "</form>";
        // Add the JavaScripts rendered above
        $strHtml .= $strEndScript;
        // close the body tag
        if ($this->blnRenderedBodyTag) {
            $strHtml .= '</body>';
        }
        /**** Cleanup ****/
        // Update Form Status
        $this->intFormStatus = QFormBase::FormStatusRenderEnded;
        // Display or Return
        if ($blnDisplayOutput) {
            if (!QApplication::$CliMode) {
                print $strHtml;
            }
            return null;
        } else {
            if (!QApplication::$CliMode) {
                return $strHtml;
            } else {
                return '';
            }
        }
    }
 /**
  * Render plugin javascript
  * @return string
  */
 public function RenderPlugins()
 {
     $strJS = '';
     if (!empty($this->aFixedColumns)) {
         $this->AddPluginJavascriptFile("datatables", __PLUGIN_ASSETS__ . "/datatables/extras/FixedColumns/js/dataTables.fixedColumns.js");
         $strJS .= sprintf("{var oTable = jQuery('#%s').%s();\n", $this->getJqControlId(), $this->getJqSetupFunction());
         $strJS .= 'new $j.fn.DataTable.FixedColumns( oTable, ' . JavaScriptHelper::toJsObject($this->aFixedColumns) . '); };';
     }
     return $strJS;
 }
 /**
  * @deprecated since Qcubed 2.1.1. Please use QListItem
  * @return string
  */
 public function toJsObject()
 {
     trigger_error("QAutocompleteListItem has been deprecated. Please use QListItem", E_USER_NOTICE);
     return JavaScriptHelper::toJsObject(array("value" => $this->Name, "id" => $this->Value));
 }
/**
 * Returns a stringified version of a backtrace.
 * Set $blnShowArgs if you want to see a representation of the arguments. Note that if you are sending
 * in objects, this will unpack the entire structure and display its contents.
 * $intSkipTraces is how many back traces you want to skip. Set this to at least one to skip the
 * calling of this function itself.
 *
 * @param bool $blnShowArgs
 * @param int $intSkipTraces
 * @return string
 */
function QcubedGetBacktrace($blnShowArgs = false, $intSkipTraces = 1)
{
    if (!$blnShowArgs) {
        $b = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
    } else {
        $b = debug_backtrace(false);
    }
    $strRet = "";
    for ($i = $intSkipTraces; $i < count($b); $i++) {
        $item = $b[$i];
        $strFile = array_key_exists("file", $item) ? $item["file"] : "";
        $strLine = array_key_exists("line", $item) ? $item["line"] : "";
        $strClass = array_key_exists("class", $item) ? $item["class"] : "";
        $strType = array_key_exists("type", $item) ? $item["type"] : "";
        $strFunction = array_key_exists("function", $item) ? $item["function"] : "";
        $vals = [];
        if (!empty($item["args"])) {
            foreach ($item["args"] as $val) {
                $vals[] = JavaScriptHelper::toJsObject($val);
            }
        }
        $strArgs = implode(", ", $vals);
        $strRet .= sprintf("#%s %s(%s): %s%s%s(%s)\n", $i, $strFile, $strLine, $strClass, $strType, $strFunction, $strArgs);
    }
    return $strRet;
}
Beispiel #11
0
 public function RenderScript(QControl $objControl)
 {
     $strMessage = JavaScriptHelper::toJsObject($this->strMessage);
     return sprintf("alert(%s);", $strMessage);
 }
 /**
  * Applies CSS styles to a button that is already in the dialog.
  *
  * @param string $strButtonId Id of button to set the style on
  * @param array $styles Array of key/value style specifications
  */
 public function SetButtonStyle($strButtonId, $styles)
 {
     QApplication::ExecuteJavaScript(sprintf('$j("#%s").next().find("button[data-btnid=\'%s\']").css(%s)', $this->getJqControlId(), $strButtonId, JavaScriptHelper::toJsObject($styles)));
 }
 /**
  * Default "toJsObject" handler
  * Specifies how the object should be displayed in JQuery UI lists and menus. Note that these lists use
  * value and label differently.
  *
  * value 	= The short form of what to display in the list and selection.
  * label 	= [optional] If defined, is what is displayed in the menu
  * id 		= Primary key of object.
  *
  * @return an array that specifies how to display the object
  */
 public function toJsObject()
 {
     return JavaScriptHelper::toJsObject(array('value' => $this->__toString(), 'id' => array($this->intObjectId, $this->intTermTaxonomyId)));
 }
 public function toJsObject()
 {
     $strList = '';
     foreach ($this->arrContent as $objItem) {
         if (strlen($strList) > 0) {
             $strList .= ',';
         }
         $strList .= JavaScriptHelper::toJsObject($objItem);
     }
     return $strList;
 }