$actions->addAction(array('iconCls' => 'icon-minus', 'tooltip' => 'Delete')); $grid2->endRowActions($actions); new afExtjsLinkButton($grid2, array('label' => 'www.immune.dk', 'url' => 'http://www.immune.dk')); new afExtjsLinkButton($grid2, array('label' => 'www.immune.dk', 'url' => 'http://www.immune.dk', 'icon' => '/images/famfamfam/cancel.png')); $grid2->end(); $group1->addItem($grid, array('title' => 'First grid', 'tabTip' => 'First grid')); $group1->addItem($grid2, array('title' => 'Second grid', 'tabTip' => 'Second grid')); $layout->endGroup($group1); /** * start a second group */ $group2 = $layout->startGroup(); /** * A GRID 3 IN THE COLUMN */ $grid3 = new afExtjsGrid(array('autoHeight' => true, 'clearGrouping' => true, 'title' => 'Grid 3')); /** * columns */ $grid3->addColumn(array('name' => 'company', 'label' => 'Company', 'sort' => 'ASC', 'id' => true, 'width' => 40, 'sortable' => true)); $grid3->addColumn(array('name' => 'industry', 'label' => 'Industry', 'groupField' => true, 'width' => 20, 'sortable' => true)); /** * proxy */ $grid3->setProxy(array('url' => '/interface/jsonactions', 'limit' => 3)); /** * row actions */ $actions = $grid3->startRowActions(); /** * action1
$layout = new afExtjsPortalLayout(array('id' => 'center_panel', 'tools' => $toolsA, 'idxml' => $idXml, 'layoutType' => $layoutType)); //$layout->setExtjsVersion(3); $html = '<b>Lorem ipsum dolor sit amet</b>, consectetur adipiscing elit. Ut est neque, feugiat venenatis elementum a, tincidunt non massa. Cras sagittis, augue nec porttitor scelerisque, elit lorem ornare massa, eu euismod odio massa vitae justo. Mauris erat nunc, luctus tincidunt lacinia ac, sagittis id risus. Mauris ut quam nisl. Mauris tortor eros, tincidunt sit amet fringilla lacinia, faucibus vel augue. Sed dolor felis, faucibus nec elementum at, cursus in magna. Nam erat nibh, auctor fermentum convallis id, ornare vitae urna. Ut placerat elementum felis. Donec quis libero mauris, vitae vehicula mauris. Donec sit amet urna id justo tempus aliquam. Duis aliquam gravida dictum. Nullam ac nibh eros. Donec lacinia risus id velit congue sed placerat nibh fringilla. Vivamus condimentum varius lacus et facilisis. Curabitur sed tellus sit amet diam dictum ornare. Donec dui lacus, vehicula sit amet semper a, auctor sed sem. Nam pulvinar iaculis libero sed varius. Quisque volutpat posuere sapien quis condimentum.'; $layout->setTitle('Dashboard'); $tools = new afExtjsTools(); $tools->addItem(array('id' => 'gear', 'handler' => array('parameters' => 'e,target,panel', 'source' => "console.log(panel);"))); $tools->addItem(array('id' => 'close', 'handler' => array('parameters' => 'e,target,panel', 'source' => "panel.ownerCt.remove(panel, true);"))); /** * GRID TREE */ /** * USE: * pager = true/false => activate/disable pagination * stateful = true/false => activate/disable state restore from cookies */ $grid = new afExtjsGrid(array('idxml' => 'interface/somegrid', 'autoHeight' => true, 'root_title' => 'Companies', 'tree' => true, 'pager' => false, 'select' => true, 'portal' => true)); $grid->addHelp($html); /** * columns */ $grid->addColumn(array('name' => 'company', 'label' => 'Company', 'sort' => 'ASC', 'sortable' => true, 'hidden' => false, 'hideable' => true)); $grid->addColumn(array('name' => 'industry', 'label' => 'Industry', 'sortable' => true)); /** * proxy * * REMEMBER: * stateId attribute must be unique for each view, because with this id Extjs keeps in a cookie the state of start & limit attributes for listjson, see ticket #574; if stateId attribute is not defined, then the state is not kept ! */ $grid->setProxy(array('url' => '/interface/jsonactionstree', 'limit' => 2)); /** * row actions
<?php $layout = new afExtjsPanelLayout(); /** * FIRST GRID */ /** * USE: * pager = true/false => activate/disable pagination * stateful = true/false => activate/disable state restore from cookies */ $grid = new afExtjsGrid(array('autoHeight' => true, 'root_title' => 'Companies', 'tree' => true, 'pager' => false, 'select' => true, 'frame' => false)); $grid->addHelp('test help'); /** * columns */ $grid->addColumn(array('name' => 'company', 'label' => 'Company', 'sort' => 'ASC', 'sortable' => true, 'hidden' => false, 'hideable' => true, 'align' => 'left')); $grid->addColumn(array('name' => 'industry', 'label' => 'Industry', 'sortable' => true)); /** * proxy * * REMEMBER: * stateId attribute must be unique for each view, because with this id Extjs keeps in a cookie the state of start & limit attributes for listjson, see ticket #574; if stateId attribute is not defined, then the state is not kept ! */ $grid->setProxy(array('url' => '/interface/jsonactionstree', 'limit' => 2)); /** * row actions */ $actions = $grid->startRowActions(); /** * action1
* action2 */ $actions->addAction(array('iconCls' => 'icon-minus', 'tooltip' => 'Delete')); /** * REMEMBER: * $grid->endRowActions($actions) is commented so you can see that if no actions are associated with the grid then the actions column doesn't appear */ //$grid->endRowActions($actions); new afExtjsLinkButton($grid, array('label' => 'www.immune.dk', 'url' => 'http://www.immune.dk')); new afExtjsLinkButton($grid, array('label' => 'www.immune.dk', 'url' => 'http://www.immune.dk', 'icon' => '/images/famfamfam/cancel.png')); $grid->end(); $layout->addItem('center', $grid); /** * SECOND GRID */ $grid1 = new afExtjsGrid(array('autoHeight' => true, 'clearGrouping' => false, 'pager' => false)); /** * columns */ $grid1->addColumn(array('name' => 'industry', 'type' => 'int', 'label' => 'Industry', 'groupField' => false, 'width' => 20, 'sortable' => true, 'qtip' => false)); $grid1->addColumn(array('name' => 'industry', 'type' => 'int', 'label' => 'Industry2', 'groupField' => false, 'width' => 20, 'sortable' => true, 'qtip' => false)); $grid1->addColumn(array('name' => 'company', 'label' => 'Company', 'sort' => 'ASC', 'id' => true, 'width' => 10, 'sortable' => true, 'qtip' => true)); /** * proxy * * REMEMBER: * stateId attribute must be unique for each view, because with this id Extjs keeps in a cookie the state of start & limit attributes for listjson, see ticket #574; if stateId attribute is not defined, then the state is not kept ! */ $grid1->setProxy(array('url' => '/interface/jsonactions', 'limit' => 3, 'stateId' => 'gd2')); /** * row actions
* action1 */ $actions->addAction(array('iconCls' => 'icon-edit-record', 'tooltip' => 'Edit')); /** * action2 */ $actions->addAction(array('iconCls' => 'icon-minus', 'tooltip' => 'Delete')); /** * REMEMBER: * $grid->endRowActions($actions) is commented so you can see that if no actions are associated with the grid then the actions column doesn't appear */ //$grid->endRowActions($actions); new afExtjsLinkButton($grid, array('label' => 'www.immune.dk', 'url' => 'http://www.immune.dk')); new afExtjsLinkButton($grid, array('label' => 'www.immune.dk', 'url' => 'http://www.immune.dk', 'icon' => '/images/famfamfam/cancel.png')); $grid->end(); $gridf = new afExtjsGrid(array('autoHeight' => true, 'clearGrouping' => true, 'title' => 'Title', 'frame' => false, 'idxml' => '/interface/grid', 'remoteSort' => true, 'tools' => $tools)); //$grid->addHelp('<b>Lorem ipsum dolor sit amet</b>, consectetur adipiscing elit. Ut est neque, feugiat venenatis elementum a, tincidunt non massa. Cras sagittis, augue nec porttitor scelerisque, elit lorem ornare massa, eu euismod odio massa vitae justo. Mauris erat nunc, luctus tincidunt lacinia ac, sagittis id risus. Mauris ut quam nisl. Mauris tortor eros, tincidunt sit amet fringilla lacinia, faucibus vel augue. Sed dolor felis, faucibus nec elementum at, cursus in magna. Nam erat nibh, auctor fermentum convallis id, ornare vitae urna. Ut placerat elementum felis. Donec quis libero mauris, vitae vehicula mauris. Donec sit amet urna id justo tempus aliquam. Duis aliquam gravida dictum. Nullam ac nibh eros. Donec lacinia risus id velit congue sed placerat nibh fringilla. Vivamus condimentum varius lacus et facilisis. Curabitur sed tellus sit amet diam dictum ornare. Donec dui lacus, vehicula sit amet semper a, auctor sed sem. Nam pulvinar iaculis libero sed varius. Quisque volutpat posuere sapien quis condimentum.'); /** * columns */ $gridf->addColumn(array('name' => 'company', 'type' => 'string', 'label' => 'Company', 'sort' => 'ASC', 'id' => true, 'width' => 40, 'sortable' => true, 'hidden' => false, 'hideable' => true, 'qtip' => true, 'align' => 'right', 'filter' => array('type' => 'string'))); $gridf->addColumn(array('name' => 'industry', 'type' => 'int', 'label' => 'Industry', 'groupField' => true, 'width' => 20, 'sortable' => true, 'qtip' => false, 'filter' => array('type' => 'numeric'))); /** * proxy * * REMEMBER: * stateId attribute must be unique for each view, because with this id Extjs keeps in a cookie the state of start & limit attributes for listjson, see ticket #574; if stateId attribute is not defined, then the state is not kept ! */ $gridf->setProxy(array('url' => '/interface/jsonactions', 'limit' => 2, 'start' => 2)); /** * row actions
private function postProcess($build = false, $uri = null) { if ($uri) { $this->process["parses"][$this->iteration]["module"] = strtok($uri, "/"); $this->process["parses"][$this->iteration]["component_name"] = strtok("/"); } Console::profile('postProcess'); /* * Create widgets in advanced for the text link script (widget launcher) */ sfApplicationConfiguration::getActive()->loadHelpers(array("Helper", "Url", "afUrl")); // Update session if needed.. $module = $this->context->getModuleName(); $action = $this->context->getActionName(); $this->context->getUser()->getAttributeHolder()->removeNamespace('parser/grid'); if ($this->type === self::WIZARD) { if (isset($this->attribute_holder["init"])) { $this->context->getUser()->getAttributeHolder()->removeNamespace('parser/wizard'); } self::updateSession(false, "parser/wizard", null, $this->datastore, $this->process); } if (!$build) { $pageHelp = $this->type !== self::WIZARD && isset($this->process["parses"][0]["extra"]) && $this->widgetHelpSettings->getWidgetHelpIsEnabled(); } else { $pageHelp = null; } if ($this->multi) { $this->page = $this->process["parses"][0]; unset($this->process["parses"][0]); if ($pageHelp) { $this->layout->addHelp($this->page["extra"]); } $this->layout->setTitle($this->page["title"] . (class_exists('afExtjsWidgetConfig') ? afExtjsWidgetConfig::getPostfixTitle() : '')); } if ($this->tree) { $this->layout->addItem('west', $this->tree); } foreach ($this->process["parses"] as $it => $parse) { // Parse additional scripts.. if (array_key_exists("scripts", $parse)) { $this->parseScripts($parse); } /* * Moved the tools in this loop to have different tools on different portlets depending upon their types. */ $tools = new afExtjsTools(); // Help popup if ($this->widgetHelpSettings && $this->widgetHelpSettings->getPopupHelpIsEnabled()) { $tools->addItem(array('id' => 'help', 'qtip' => "Widget Help", 'handler' => array('parameters' => 'e,target,panel', 'source' => "afApp.loadPopupHelp(panel.idxml);"))); } //Print - for grids it is added later due parameters. if ($parse["view"] != "list") { $tools->addItem(array('id' => 'print', 'qtip' => "Printer friendly version", 'handler' => array('parameters' => 'e,target,panel', 'source' => "window.open('/'+panel.idxml+'?af_format=pdf&" . $this->getQueryString() . "','print');"))); } if (isset($parse['params']) && isset($parse['params']['settings'])) { $tools->addItem(array('id' => 'gear', 'qtip' => 'Setting', 'handler' => array('parameters' => 'e,target,panel', 'source' => "afApp.widgetPopup('" . $parse['params']['settings'] . "','Settings',panel)"))); } //$tools->addItem(array('id'=>'start-reload','handler'=>array('parameter'=>'e,target,panel','source'=>'this.id="stop-reload"'))); $tools->addItem(array('id' => 'close', 'qtip' => 'Close', 'handler' => array('parameters' => 'e,target,panel', 'source' => "var portal=panel.ownerCt.ownerCt;panel.ownerCt.remove(panel, true);portal.onWidgetDrop();"))); /***********************************************************/ if (!$build) { $widgetHelp = $this->type !== self::WIZARD && isset($parse["description"]) && $this->widgetHelpSettings->getWidgetHelpIsEnabled(); if ($widgetHelp) { if ($this->type === self::PANEL) { $this->layout->addHelp($parse["description"]); } } } if ($this->multi) { $current_area = $this->page["areas"][$parse["area"]]; } else { $current_area = isset($parse["area"]) ? $parse["area"] : null; } $view = $parse["view"]; $parsedgroups = array(); if (!isset($parse["multipart"])) { $parse["multipart"] = false; } if ($this->multi && isset($this->page["confirm"])) { $this->layout->attributes['listeners']['beforerender'] = $this->layout->afExtjs->asMethod(array('parameters' => 'el', 'source' => "Ext.Msg.confirm('" . $this->page["confirm"]["title"] . "','" . $this->page["confirm"]["text"] . "', function(btn){if (btn=='yes'){ return true; }else{ window.location.href='" . $this->page["confirm"]["url"] . "';return false;} });")); } //echo "<pre>";print_r($parse);exit; $formoptions = $this->multi ? array("title" => $parse["title"], "fileUpload" => $parse["multipart"], "portal" => true, "tools" => $tools) : array("fileUpload" => $parse["multipart"]); if ($it == 1 && $this->multi && $this->type === self::WIZARD) { $panel = $this->layout->startColumn(array('columnWidth' => isset($current_area["attributes"]["width"]) ? $current_area["attributes"]["width"] : '0.98')); } if ($this->type == self::PAGE) { $action_name = preg_replace("/[0-9]+/", "", $parse["component"]); } // Determine group - Wizards if (!$this->openGroup && $this->tabbedWizard) { $this->openGroup = true; $wizard_group = $this->layout->startGroup(); } if ($view == "edit" || $view == "show") { $formoptions["action"] = url_for($parse["form"]); $formoptions["name"] = "form" . $it; $formoptions["classic"] = $parse["classic"] !== "false"; $formoptions["labelWidth"] = isset($parse['labelWidth']) ? $parse['labelWidth'] : '75'; if ($this->type == self::PANEL) { $widget = $this->context->getActionName(); } else { if ($this->type == self::PAGE) { #1048 - element should have unique id $widget = $action_name; $formoptions["idxml"] = $parse['module'] . "/" . $action_name; } } if ($this->type === self::WIZARD) { //$formoptions["classic"] = true; } $form = new afExtjsForm($formoptions); if ($widgetHelp) { if ($this->multi) { $form->addHelp($parse["description"]); } } foreach ($parse["fields"] as $setname => $set) { $this->is_floated = array(); if (!isset($set["attributes"]["tabtitle"])) { if (isset($tabx)) { unset($tabx); } } else { if (!isset($tabs)) { $set["attributes"]["isSetting"] = $parse['isSetting']; $set["attributes"]["description"] = isset($parse['description']) ? $parse['description'] : ""; $tabs = $form->startTabs($set["attributes"]); } } // Fieldset if ($parse["isgrouped"]) { if (!$this->tabbedWizard) { $attributes = array("legend" => $set["attributes"]["title"], "collapsed" => $set["attributes"]["collapsed"]); } else { $attributes = array(); } $this->is_floated[] = !$this->tabbedWizard ? $this->isFloatedSet($set) : false; if ($this->is_floated[0]) { $attrs = array("columnWidth" => sprintf("%1.2f", (double) 1 / $this->is_floated[0]), 'labelAlign' => 'top'); } else { $attrs = array('columnWidth' => 1, 'labelAlign' => 'left'); } } else { $attributes = array(); $fieldset = $form; $set = $parse["fields"]; $attrs = array('columnWidth' => 1, 'labelAlign' => 'left'); } if (isset($set["attributes"]["tabtitle"])) { $tabattrs = array('title' => $set["attributes"]["tabtitle"], 'height' => $set["attributes"]["tabHeight"], "iconCls" => $set["attributes"]["tabIconCls"]); if ($set["attributes"]["tabIcon"] && file_exists($this->root . "/web" . $set["attributes"]["tabIcon"])) { $tabattrs["icon"] = $set["attributes"]["tabIcon"]; unset($tabattrs["iconCls"]); } $tabx = $tabs->startTab($tabattrs); $fieldset = $tabx->startFieldset($attributes); } else { $fieldset = $form->startFieldSet($attributes); } if ($parse["isgrouped"]) { $columns = $fieldset->startColumns(); } // Field data foreach ($set as $name => $data) { $rcf = new ReConfigureFields($data); $data = $rcf->getField(); if ($parse["isgrouped"]) { $columnx = $columns->startColumn($attrs); } if ($name == "attributes" || !is_array($data)) { continue; } // Convert to attributes field's children's default values here! $this->childToAttribute($data, $it); $attributes = $data["attributes"]; $attributes['labelStyle'] = 'width:' . $parse['labelWidth'] . 'px;font-size:11px;font-weight:bold;padding:0 3px 3px 0;'; // Put validators into af_formcfg. if (isset($data['validators'])) { $form->addValidator($name, $data['validators']); } $classname = $attributes["type"]; // Add file types for af_formcfg $form->addFieldType($name, $classname); if ($setname == $name) { $this->process["parses"][$it]["fields"][$name]["attributes"] = $attributes; } else { $this->process["parses"][$it]["fields"][$setname][$name]["attributes"] = $attributes; } if ($attributes["type"] == "link") { continue; } else { if ($attributes["type"] == "radio" || $attributes["type"] == "checkbox" && $this->isInGroup($attributes["name"])) { $groupname = $attributes["group"]; if (!in_array($groupname, $parsedgroups)) { // Radio and Checkbox groups $radiogroup = $fieldset->startGroup($attributes["type"], $parse["groups"][$groupname]["attributes"]); foreach ($parse["groups"][$groupname]["members"] as $key => $member) { $elem = $this->shiftItem($member); $this->childToAttribute($elem, $it); $attributes = $elem["attributes"]; $attributes["name"] = $groupname; $tmp_name = "afExtjsField" . ucfirst($classname); if ($view == "edit") { $obj = new $tmp_name($radiogroup, $attributes); } else { $this->showAttributes($attributes); $obj = new afExtjsFieldStatic($radiogroup, $attributes); } } $fieldset->endGroup($radiogroup); $parsedgroups[] = $groupname; } } else { if ($attributes["type"] == "linkButton" || $attributes["type"] == "button") { $attributes["url"] = $attributes["action"]; $tmp_name = "afExtjs" . ucfirst($classname); $obj = new $tmp_name($form, $attributes); } else { if ($attributes["type"] == "date" || $attributes["type"] == "datetime") { $classname = "dateTime"; if (!isset($attributes["dateFormat"])) { $attributes["dateFormat"] = "Y-m-d"; } } if ($attributes["type"] == "multicombo" || $attributes["type"] == "doublemulticombo" || $attributes["type"] == "itemSelectorAutoSuggest" || $attributes["type"] == "doubletree") { switch ($attributes["type"]) { case "multicombo": $classname = "multiCombo"; break; case "doublemulticombo": $classname = "doubleMultiCombo"; break; case "doubletree": $classname = "doubleTree"; break; } $attributes["clear"] = true; if (!isset($attributes["selected"])) { $attributes["selected"] = array(); } else { if (!is_array($attributes["selected"]) && $classname != "doubleTree") { $attributes["selected"] = explode(",", $attributes["selected"]); } } } if ($attributes["type"] == "textarea" && $attributes["rich"] == "false") { $attributes["rich"] = false; } if ($attributes["type"] != "include") { $tmp_name = "afExtjsField" . ucfirst($classname); if ($view == "edit" || $attributes["type"] == "doubletree") { if ($tmp_name == 'afExtjsFieldCombo') { $obj = new $tmp_name(isset($columnx) ? $columnx : $form, $attributes, $data); } else { $obj = new $tmp_name(isset($columnx) ? $columnx : $form, $attributes); } /* if(isset($attributes["window"])) { //$obj = new afExtjsFieldCombo($fieldset,array('name'=>'my_combo_button','label'=>'My combo button','help'=>"combo box with button",'comment'=>'comment for combo w button','options'=>array('a'=>'Value A','b'=>'Value B'),'selected'=>'b','button'=>array('text'=>'Trigger','icon'=>'/images/famfamfam/cancel.png'),'window'=>array('title'=>'Window Title','component'=>$this->getForm(),'className'=>'ServerPeer','methodName'=>'getAllAsOptions'))); //$columnx = $columns->startColumn(array('columnWidth'=>5,'labelAlign'=> 'left')); //$obj = new afExtjsFieldCombo($columnx,array('name'=>'my_combo_button','label'=>'My combo button','help'=>"combo box with button",'comment'=>'comment for combo w button','options'=>array('a'=>'Value A','b'=>'Value B'),'selected'=>'b','button'=>array('text'=>'Trigger','icon'=>'/images/famfamfam/cancel.png'),'window'=>array('title'=>'Window Title','component'=>$this->getForm(),'className'=>'ServerPeer','methodName'=>'getAllAsOptions'))); //$obj = new afExtjsFieldCombo($columnx,$attributes); } else { ; } */ } else { if ($attributes["type"] != "file") { $this->showAttributes($attributes); $obj = new afExtjsFieldStatic(isset($columnx) ? $columnx : $form, $attributes); } } } else { $prs = new XmlParser(self::PANEL, false, false, false, false, $attributes["url"]); if (isset($columnx)) { $columnx->addMember($prs->getResult()); } else { $form->addMember($prs->getResult()); } } } } } if ($parse["isgrouped"]) { $columns->endColumn($columnx); } if (isset($attributes["break"]) && $attributes["break"] == "true") { $attrs["columnWidth"] = 1; $columnx = $columns->startColumn($attrs); $columns->endColumn($columnx); $this->is_floated[] = $this->isFloatedSet($set, Util::arraySum($this->is_floated)); if (!$this->is_floated[sizeof($this->is_floated) - 1]) { $this->is_floated[sizeof($this->is_floated) - 1] = 1; } $attrs["columnWidth"] = sprintf("%1.2f", (double) 1 / $this->is_floated[sizeof($this->is_floated) - 1]); } } if ($parse["isgrouped"]) { $fieldset->endColumns($columns); if (isset($tabx)) { $tabx->endFieldSet($fieldset); $tabs->endTab($tabx); } else { $form->endFieldSet($fieldset); } } else { break; } } if ($view == "edit") { if ($this->type !== self::WIZARD && $parse["submit"] !== "false") { if (!$this->multisubmit) { $form_params = null; if (isset($parse["redirect"])) { if ($parse["redirect"]) { $form_params = array("redirect" => $parse["redirect"], "message" => ""); } } $obj = new afExtjsSubmitButton($form, array("action" => $formoptions["action"], "label" => $parse["submitlabel"], "params" => $form_params)); } else { $this->formaction = $formoptions["action"]; } if ((!isset($parse['isSetting']) || $parse['isSetting'] === "false") && $parse["resetable"] !== "false") { $obj = new afExtjsResetButton($form, array("action" => $formoptions["action"], "text" => $parse["resetlabel"])); } } } if (isset($parse["actions"]) && $this->type !== self::WIZARD) { foreach ($parse["actions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } if (array_key_exists("handlers", $action)) { ExtEvent::attachAll($action); } $action["attributes"]["label"] = ucfirst($action["attributes"]["name"]); $action["attributes"]["name"] = $this->view . $this->iteration . "_" . $action["attributes"]["name"]; $action["attributes"]["url"] = url_for($action["attributes"]["url"]); //$temp_grid = new afExtjsGrid(); //$params = $temp_grid->getListenerParams($action,"action"); // TODO:foo if ($action["attributes"]["post"] === "true") { $this->prepareButton($form, $action['attributes']); } else { if ($action["attributes"]["updater"] === "true") { $updater = new afExtjsUpdater(array('url' => $action["attributes"]["url"], 'width' => 500)); $action["attributes"]["handlers"]["click"] = array('parameters' => 'field,event', 'source' => $updater->privateName . '.start();'); $obj = new afExtjsButton($form, $action['attributes']); } else { $obj = $this->prepareButton($form, $action['attributes']); } } } } if (isset($parse["moreactions"]) && $this->type !== self::WIZARD) { foreach ($parse["moreactions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } if (isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action, "moreactions", $this->view . $this->iteration, $parse["select"]); $form->addMenuActionsItem($parameterForButton); } } if (isset($tabs)) { $form->endTabs($tabs); } if (array_key_exists("scripts", $parse)) { $form->addScripts($parse["scripts"]); } if (!$this->multisubmit) { $form->end(); } $this->forms[] = $form; if ($this->type == self::PAGE && $current_area["attributes"]["type"] == "content") { $this->addPortal($form, $parse["module"] . "/" . $parse["component"]); } if ($build) { $this->result = $form; return $form; } if (!$this->multi) { $this->layout->addItem($this->area_types[$current_area], $form); if ($this->area_types[$current_area] == "center") { $this->layout->addCenterComponent($tools, array('title' => $parse["title"] . (class_exists('afExtjsWidgetConfig') ? afExtjsWidgetConfig::getPostfixTitle() : ''), "idxml" => $this->panelIdXml)); } } else { if ($current_area["attributes"]["type"] == "content") { if ($this->type != self::PAGE) { $panel->addItem($form); } } else { $this->layout->addItem($this->area_types[$current_area["attributes"]["type"]], $form); } } } else { if ($view == "html") { if (!isset($parse["options"])) { $parse["options"]["autoScroll"] = true; $parse["options"]["border"] = false; $parse["options"]["header"] = true; $parse["options"]["autoHeight"] = true; $parse["options"]["autoEnd"] = false; } $plugins = afExtjsWidgets::getReloadPlugin($parse); if ($this->multi) { if (isset($action_name)) { $idxml = $parse["module"] . "/" . $action_name; } else { $idxml = false; } $pn = new afExtjsPanel(array('plugins' => $plugins, 'title' => $parse["title"], 'autoScroll' => $parse["options"]["autoScroll"], 'border' => $parse["options"]["border"], 'header' => $parse["options"]["header"], 'style' => '', 'autoHeight' => $parse["options"]["autoHeight"], 'autoEnd' => $parse["options"]["autoEnd"], 'portal' => true, 'tools' => $tools, 'idxml' => $idxml)); if (isset($parse["description"])) { $html = $parse["description"]; if ($this->widgetHelpSettings->getWidgetHelpIsEnabled()) { $pn->addHelp($html); } } $pn->addMember(self::defineHtmlComponent($parse['params'])); /*if(isset($parse["actions"])) { foreach($parse["actions"] as $aname => $action) { if(!self::toggleAction($aname,$action)) { continue; } if(isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action,"actions",$this->view.$this->iteration,$parse["select"]); $obj = new afExtjsButton($pn,$parameterForButton); } }*/ if (isset($parse["moreactions"])) { foreach ($parse["moreactions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } if (isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action, "moreactions", $this->view . $this->iteration, false); $pn->addMenuActionsItem($parameterForButton); } } $pn->end(); if ($this->type != self::PAGE) { $panel->addItem($pn); } if ($build) { $this->result = $pn; return $pn; } //radu if ($this->type == self::PAGE && $current_area["attributes"]["type"] == "content") { $this->addPortal($pn, $parse["module"] . "/" . $action_name); } } else { $pn = new afExtjsPanel(array('plugins' => $plugins, 'title' => $parse["title"], 'autoScroll' => $parse["options"]["autoScroll"], 'border' => $parse["options"]["border"], 'header' => $parse["options"]["header"], 'style' => '', 'autoHeight' => $parse["options"]["autoHeight"], 'autoEnd' => $parse["options"]["autoEnd"], 'portal' => true)); $pn->addMember(self::defineHtmlComponent($parse['params'])); /*if(isset($parse["actions"])) { foreach($parse["actions"] as $aname => $action) { if(!self::toggleAction($aname,$action)) { continue; } if(isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action,"actions",$this->view.$this->iteration,false); $obj = new afExtjsButton($pn,$parameterForButton); } } */ if (isset($parse["moreactions"])) { foreach ($parse["moreactions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } if (isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action, "moreactions", $this->view . $this->iteration, false); $pn->addMenuActionsItem($parameterForButton); } } $pn->end(); if ($build) { $this->result = $pn; return $pn; } $this->layout->addItem("center", $pn); $this->layout->addCenterComponent($tools, array('title' => $parse["title"] . (class_exists('afExtjsWidgetConfig') ? afExtjsWidgetConfig::getPostfixTitle() : ''), "idxml" => $this->panelIdXml)); } } else { if ($view == "info") { $form = new afExtjsForm($formoptions); if (isset($parse["settitle"])) { $legend = $parse["settitle"]; } else { $legend = "Default"; } $attributes = array("legend" => $legend, "collapsed" => false); $fieldset = $form->startFieldSet($attributes); if (isset($parse["actions"])) { foreach ($parse["actions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } $action["attributes"]["label"] = ucfirst($action["attributes"]["name"]); $action["attributes"]["name"] = $this->view . $this->iteration . "_" . $action["attributes"]["name"]; $action["attributes"]["url"] = url_for($action["attributes"]["url"]); $obj = $this->prepareButton($form, $action['attributes']); } } $attributes = array('name' => 'msg', 'label' => 'Message:', 'value' => $parse["message"], 'comment' => '', 'submitValue' => false); $obj = new afExtjsFieldStatic($fieldset, $attributes); $form->endFieldSet($fieldset); $form->end(); if ($build) { return $form; } if (!$this->multi) { $this->layout->addItem('center', $form); $this->layout->addCenterComponent($tools, array('title' => $parse["title"] . (class_exists('afExtjsWidgetConfig') ? afExtjsWidgetConfig::getPostfixTitle() : ''))); } else { if ($this->type != self::PAGE) { $panel->addItem($form); } else { if ($current_area["attributes"]["type"] == "content") { $this->addPortal($form, $parse["module"] . "/" . $action_name); } } } } else { if ($view == "list") { if (isset($parse["params"]["name"])) { $formoptions['name'] = $parse["params"]["name"]; } if (isset($parse["remoteSort"])) { $formoptions["remoteSort"] = $parse["remoteSort"] == "false" ? false : true; } if (isset($parse["pagerTemplate"])) { $formoptions["pagerTemplate"] = $parse["pagerTemplate"]; } if (isset($this->page) && is_array($this->page)) { foreach ($this->page["areas"]["content"]["tabs"] as $thisTab) { if (isset($thisTab["components"][$parse["component"]]) && isset($thisTab["components"][$parse["component"]]["bindForm"])) { $formoptions["bindForm"] = $thisTab["components"][$parse["component"]]["bindForm"]; } } } if (!isset($formoptions["bindForm"])) { $formoptions["bindForm"] = -1; } $formoptions["autoHeight"] = true; $formoptions["clearGrouping"] = false; $formoptions["frame"] = false; $formoptions["tree"] = $parse["tree"] == "false" ? false : true; $formoptions["select"] = $parse["select"] == "false" ? false : true; $formoptions["pager"] = $parse["pager"] == "false" ? false : true; $formoptions["border"] = $parse["border"] == "false" ? false : true; $formoptions["portal"] = $parse["portal"] == "false" ? false : true; //$formoptions["id"] = strtolower(str_replace(" ","_",$parse['title'])); $formoptions["remoteLoad"] = ArrayUtil::isTrue($parse, 'remoteLoad'); $formoptions["remoteFilter"] = isset($parse['remoteFilter']) ? true : false; $formoptions["expandButton"] = isset($parse['expandButton']) ? true : false; $formoptions["path"] = $this->context->getModuleName() . "/" . $this->context->getActionName(); if ($parse['action'] != '') { $formoptions['action'] = $parse['action']; } if ($this->type == self::PAGE) { $formoptions["idxml"] = $parse["module"] . "/" . $action_name; } if (isset($parse["plugin"])) { $formoptions["plugin"] = $parse["plugin"]; } if (isset($parse["iconCls"])) { $formoptions["iconCls"] = $parse["iconCls"]; } if (isset($parse["bodyStyle"])) { $formoptions["bodyStyle"] = $parse["bodyStyle"]; } if (is_array($current_area) && $this->area_types[$current_area["attributes"]["type"]] == "south" || $current_area == "footer") { $formoptions["title"] = ""; } if (!isset($formoptions["title"])) { if ($current_area == "footer") { $formoptions["title"] = " "; } else { if (isset($parse["title"])) { $formoptions["title"] = $parse["title"]; } } } if ($formoptions["tree"]) { $formoptions["root_title"] = isset($parse["title"]) ? $parse["title"] : "root"; } if (is_array($current_area) && $this->area_types[$current_area["attributes"]["type"]] == "west" || $current_area == "sidebar") { $formoptions["tools"] = null; } $formoptions['datasource'] = $parse['datasource']; // Add the select fields in grid if it has moreactions.............. if (isset($parse["moreactions"])) { $formoptions['select'] = "true"; } //.................................................................. $formoptions['plugins'][] = afExtjsWidgets::getReloadPlugin($parse); $grid = new afExtjsGrid($formoptions); if (!$build && $widgetHelp) { if ($this->multi) { $grid->addHelp($parse["description"]); } } foreach ($parse["fields"] as $colname => $column) { unset($column["attributes"]["id"]); $column["attributes"]["hidden"] = ArrayUtil::isTrue($column['attributes'], 'hidden'); if (isset($column["attributes"]["qtip"]) && $column["attributes"]["qtip"] == "false") { $column["attributes"]["qtip"] = false; } $grid->addColumn($column["attributes"]); } $grid->setProxy(self::getProxyAttributes($parse)); if (isset($parse["rowactions"])) { $actions = $grid->startRowActions(array('header' => 'Actions')); $cnt = 1; foreach ($parse["rowactions"] as $action_name => $action) { self::addConfirmation($action_name, $action['attributes']); self::fillTooltip($action["attributes"]); if (isset($parse["form"]) && $action["attributes"]["url"] === "/#") { $parse["rowactions"][$action_name]["attributes"]["url"] = $parse["form"] . "#"; } if (isset($action["attributes"]["condition"])) { $parse["conditions"]["rowaction" . $cnt] = $action["attributes"]["condition"]; } $parameterForRowAction = ExtEvent::getButtonParams($action, "rowactions", $this->view . $this->iteration, $parse["select"], $grid); $actions->addAction($action["attributes"]); $cnt++; } $grid->endRowActions($actions); } /** * ticket 1140 */ //Check for more actions.................................................... $export_config = sfConfig::get('app_parser_export'); if (isset($export_config["enabled"]) && $export_config["enabled"] === true && $parse["exportable"] == "true") { $exportConfig = array(); if (isset($parse["pager"]) && $parse["pager"] === "true") { //$grid->addMenuActionsItem(array('label'=>'Export Page as CSV', 'icon'=>'/images/famfamfam/database_save.png','listeners'=>array('click'=> array('parameters'=>'','source'=>'window.location.href='.$grid->getFileExportJsUrl('page'))))); $exportConfig['csv']['current'] = 'window.location.href=' . $grid->getFileExportJsUrl('page'); } if ($parse["tree"] === "false") { $confirmFunction = ' Ext.Msg.show({ title:"Confirmation Required", msg: "Are you sure you want export ' . sfConfig::get("app_parser_max_items") . ' items? This may take a while..", buttons: Ext.Msg.YESNO, fn: function(buttonId){if(buttonId == "yes"){' . 'window.location.href=' . $grid->getFileExportJsUrl('all') . '}}, icon: Ext.MessageBox.QUESTION }); '; //$grid->addMenuActionsItem(array('label'=>'Export first '.sfConfig::get("app_parser_max_items").' rows as CSV', 'confirmMsg' => 'foo', 'icon'=>'/images/famfamfam/database_save.png','listeners'=>array('click'=> array('parameters'=>'','source'=>$confirmFunction)))); $exportConfig['csv']['firstx'] = $confirmFunction; } if ($formoptions["select"]) { $noItemsSelectedFunction = ' if(!' . $grid->privateName . '.getSelectionModel().getCount()){ Ext.Msg.alert("No items selected","Please select at least one item"); return; } '; if (!ArrayUtil::isTrue($parse, 'remoteLoad')) { /*$grid->addMenuActionsItem(array('label'=>'Export Selected as CSV', 'forceSelection' => "true", 'icon'=>'/images/famfamfam/database_save.png','listeners'=>array('click'=> array('parameters'=>'','source'=> "frm = document.createElement('form'); field = document.createElement('input'); field.setAttribute('type','hidden'); field.setAttribute('name','selections'); field.value = ". $grid->privateName.".getSelectionModel().getSelectionsJSON(); frm.appendChild(field); frm.action = ".$grid->getFileExportJsUrl('selected')."+'&_csrf_token=".$this->context->getRequest()->getAttribute("_csrf_token")."'; frm.method='POST'; frm.name='frm1'; document.body.appendChild(frm); ".$noItemsSelectedFunction." frm.submit();"))));*/ $exportConfig['csv']['selected'] = "frm = document.createElement('form'); field = document.createElement('input'); field.setAttribute('type','hidden'); field.setAttribute('name','selections'); field.value = " . $grid->privateName . ".getSelectionModel().getSelectionsJSON(); frm.appendChild(field); frm.action = " . $grid->getFileExportJsUrl('selected') . "+'&_csrf_token=" . $this->context->getRequest()->getAttribute("_csrf_token") . "'; frm.method='POST'; frm.name='frm1'; document.body.appendChild(frm); " . $noItemsSelectedFunction . " frm.submit();"; } } /** sample example of other format type $exportConfig['pdf']['current'] = 'handler source'; $exportConfig['pdf']['selected'] = ''; $exportConfig['xml']['current'] = ''; $exportConfig['xml']['selected'] = ''; $exportConfig['xml']['firstx'] = ''; */ $grid->addMenuActionsExportButton($exportConfig); } if (isset($parse["moreactions"])) { $parse["select"] = "true"; $items = array(); foreach ($parse["moreactions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } if (isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action, "moreactions", $this->view . $this->iteration, $parse["select"], $grid); $grid->addMenuActionsItem($parameterForButton); } } //More actions End............................................................ //........................................................................... if (isset($parse["actions"])) { foreach ($parse["actions"] as $aname => $action) { if (!self::toggleAction($aname, $action)) { continue; } if (isset($action["handlers"])) { ExtEvent::attachAll($action); } $parameterForButton = ExtEvent::getButtonParams($action, "actions", $this->view . $this->iteration, $parse["select"], $grid); $obj = new afExtjsButton($grid, $parameterForButton); } } if ($parse["select"] != "false") { $post_url = $parse["action"] != "false" && $parse["action"] != "n/a" ? "/" . $parse["action"] : "/" . $this->context->getModuleName() . "/" . $this->context->getActionName(); if ($parse["action"] != "false" && $parse["action"] != "n/a") { if (!$this->multisubmit) { new afExtjsButton($grid, array('label' => $parse["label"], 'icon' => $parse["icon"], 'handlers' => array('click' => array('parameters' => 'field,event', 'source' => 'Ext.Ajax.request({ url: "' . $post_url . '", method:"post", params:{"selections":' . $grid->privateName . '.getSelectionModel().getSelectionsJSON()}, success:function(response, options){response=Ext.decode(response.responseText);if(response.message){Ext.Msg.alert("Success",response.message,function(){if(response.redirect){afApp.loadCenterWidget(response.redirect);}});}},failure: function(response,options) {if(response.message){Ext.Msg.alert("Failure",response.message);}}});')))); } } } // Printing for grids.. $grid->updateTools($tools->addItem(array('id' => 'print', 'qtip' => "Printer friendly version", 'handler' => array('parameters' => 'e,target,panel', 'source' => "window.open(" . $grid->getFileExportJsUrl('page', 'pdf') . "+'&" . $this->getQueryString() . "','print');")), "item")); // Add extra scripts.. if (array_key_exists("scripts", $parse)) { $grid->addScripts($parse["scripts"]); } $grid->end(); if ($this->type == self::PAGE && $current_area["attributes"]["type"] == "content") { $this->addPortal($grid, $parse["module"] . "/" . $parse["component"]); } if (is_array($current_area) && $this->area_types[$current_area["attributes"]["type"]] == "center") { $this->multigrid = $grid; } if ($build === false) { if (!$this->multi) { $this->layout->addItem($this->area_types[$current_area], $grid); if ($this->area_types[$current_area] == "center") { $this->layout->addCenterComponent($tools, array('title' => $parse["title"] . (class_exists('afExtjsWidgetConfig') ? afExtjsWidgetConfig::getPostfixTitle() : ''), "idxml" => $this->panelIdXml)); } } else { if ($current_area["attributes"]["type"] == "content") { if ($this->type != self::PAGE) { $panel->addItem($grid); } } else { $this->layout->addItem($this->area_types[$current_area["attributes"]["type"]], $grid); } } } } } } } if ($this->tabbedWizard) { switch ($view) { case "show": case "edit": case "info": $obj = $form; break; case "list": $obj = $grid; break; case "html": $obj = $pn; break; } $wiztab = $this->getTabData($parse["component_name"]); $wizard_group->addItem($obj, array("title" => $wiztab[1], "tabTip" => $wiztab[2], "iconCls" => "")); if ($this->isLastGroupMember($parse["component_name"])) { $this->openGroup = false; $this->layout->endGroup($wizard_group); } } } if ($this->multi) { if ($this->type === self::WIZARD && !$this->tabbedWizard) { $this->layout->endColumn($panel); } } if ($this->multisubmit && $this->type !== self::WIZARD) { new afExtjsSubmitButton($this->forms[0], array('action' => $this->formaction, "label" => $parse["submitlabel"], 'afterSuccess' => ' var myMask = new Ext.LoadMask(Ext.getBody(), {msg:"Saving additional information... <br>Please wait..."}); myMask.show(); Ext.Ajax.request({ url: "' . $this->multisubmit . '", method:"post", params:{"selections":' . $this->multigrid->privateName . '.getSelectionModel().getSelectionsJSON()}, success:function(response, options){response=Ext.decode(response.responseText); if(response.message) { Ext.Msg.alert("Success", response.message, function(){ if(response.redirect) { afApp.loadCenterWidget(response.redirect); } }); } else { if(response.redirect) { afApp.loadCenterWidget(response.redirect); } } myMask.hide(); },failure: function(response,options) {if(response.message){Ext.Msg.alert("Failure",response.message);myMask.hide();}}});')); $form->end(); } // Adding layout buttons if ($this->type == self::WIZARD) { $actions = array("Previous" => 1, "Next" => 1, "Cancel" => 0, "Add new" => 1, "Finish" => 1); $add = "false"; $finish = false; foreach ($actions as $key => $value) { if (isset($this->attribute_holder["last"]) && $key == "Next") { continue; } if ($key == "Finish" && isset($this->page["actions"][$key])) { $finish = true; } if ($key == "Add new" && isset($this->page["actions"][$key])) { $add = "true"; } if ($key == "Next") { $icon = "/images/famfamfam/arrow_right.png"; } else { if ($key == "Previous") { $icon = "/images/famfamfam/arrow_left.png"; } else { $icon = "/images/famfamfam/accept.png"; } } if (isset($this->page["actions"][$key])) { /* * Find if grid data save request */ $preExecute = ''; //$file = 'appFlowerPlugin/js/custom/'.self::isRequest($this->page["actions"][$key]["attributes"]["url"],'js').".js"; $file = ''; if (isset($this->page["actions"][$key]["attributes"]["script"])) { if (file_exists(sfConfig::get('sf_root_dir') . "/plugins/appFlowerPlugin/web/js/custom/" . $this->page["actions"][$key]["attributes"]["script"] . ".js")) { $file = 'appFlowerPlugin/js/custom/' . $this->page["actions"][$key]["attributes"]["script"] . ".js"; } else { $file = '/js/custom/' . $this->page["actions"][$key]["attributes"]["script"] . ".js"; } } $preExecute = $file; if ($this->page["actions"][$key]["attributes"]["post"] === "false" || !$value) { new afExtjsLinkButton($this->layout, array('preExecute' => $preExecute, 'label' => $key, 'loadas' => 'page', 'url' => $this->page["actions"][$key]["attributes"]["url"], 'icon' => isset($icon) ? $icon : $this->page["actions"][$key]["attributes"]["icon"])); } else { $wizardSubmit = ArrayUtil::get($parse, 'params', 'wizard_submit', 'true') === 'true'; new afExtjsSubmitButton($this->layout, array('wizard' => $wizardSubmit, 'preExecute' => $preExecute, 'label' => $key, 'icon' => isset($icon) ? $icon : "/images/famfamfam/accept.png", 'action' => $this->page["actions"][$key]["attributes"]["url"]), $this->forms[0]); } } } if (!$finish && isset($this->attribute_holder["last"])) { $id = ''; if (isset($this->attribute_holder["id"])) { $id = $this->attribute_holder["id"]; } new afExtjsSubmitButton($this->layout, array('wizard' => true, 'label' => 'Finish', 'action' => "/wizard/finalize?last=" . $this->current . "&end=" . urlencode($this->attribute_holder['end']) . "&id=" . $id . "&add=" . $add), $this->forms[0]); } } if ($this->type == self::PAGE) { if ($this->portalStateObj->getLayoutType() == afPortalStatePeer::TYPE_TABBED) { $content = $this->portalStateObj->getContent(); foreach ($content as $item => $itemDetails) { $portalLayoutType = $this->portalStateObj->getPortalLayoutType($item); $portalColumns = $this->portalStateObj->getColumns($item); $portalColumnsSize = $this->portalStateObj->getColumnsSize($item); ${'tab' . $item} = $this->layout->startTab(array('title' => isset($itemDetails["tabTitle"]) ? $itemDetails["tabTitle"] : $itemDetails["portalTitle"], 'portalLayoutType' => $portalLayoutType, 'portalWidgets' => $this->filterWidgets($item, $content, $this->widgets))); foreach ($portalColumns as $k => $widgets) { //instanciate a column ${'column' . $k} = ${'tab' . $item}->startColumn(array('columnWidth' => $portalColumnsSize[$k] / 100)); foreach ($widgets as $widget) { if (isset($this->extobjects[$widget->idxml])) { ${'column' . $k}->addItem($this->extobjects[$widget->idxml]); } } //end the instanciation of a column ${'tab' . $item}->endColumn(${'column' . $k}); } $this->layout->endTab(${'tab' . $item}); } } else { foreach ($this->portalColumns as $k => $widgets) { //instanciate a column ${'column' . $k} = $this->layout->startColumn(array('columnWidth' => $this->portalColumnsSize[$k] / 100)); foreach ($widgets as $widget) { if (isset($this->extobjects[$widget->idxml])) { ${'column' . $k}->addItem($this->extobjects[$widget->idxml]); } } //end the instanciation of a column $this->layout->endColumn(${'column' . $k}); } } } if ($this->multi) { self::$instance = null; } if ($build) { $this->result = $grid; } $layout_items = afExtjs::getInstance()->private; if (is_array($layout_items)) { $gridNames = $formIds = array(); foreach ($layout_items as $privateName => $it) { if (preg_match("/bindForm: ([0-9]+),/", $it, $match)) { $gridNames[$privateName] = trim($match[1]); } if (preg_match("/^form_[0-9a-zA-Z]+\$/", $privateName)) { $formIds[] = $privateName; } } foreach ($gridNames as $privateName => $fid) { if (isset($formIds[$fid])) { $layout_items[$privateName] = str_replace("bindForm: " . $fid . ",", "bindForm: '" . $formIds[$fid] . "',", $layout_items[$privateName]); } } afExtjs::$instance->private = $layout_items; } return true; }
$layout = new afExtjsPortalLayout(array('id' => 'center_panel')); $html = '<b>Lorem ipsum dolor sit amet</b>, consectetur adipiscing elit. Ut est neque, feugiat venenatis elementum a, tincidunt non massa. Cras sagittis, augue nec porttitor scelerisque, elit lorem ornare massa, eu euismod odio massa vitae justo. Mauris erat nunc, luctus tincidunt lacinia ac, sagittis id risus. Mauris ut quam nisl. Mauris tortor eros, tincidunt sit amet fringilla lacinia, faucibus vel augue. Sed dolor felis, faucibus nec elementum at, cursus in magna. Nam erat nibh, auctor fermentum convallis id, ornare vitae urna. Ut placerat elementum felis. Donec quis libero mauris, vitae vehicula mauris. Donec sit amet urna id justo tempus aliquam. Duis aliquam gravida dictum. Nullam ac nibh eros. Donec lacinia risus id velit congue sed placerat nibh fringilla. Vivamus condimentum varius lacus et facilisis. Curabitur sed tellus sit amet diam dictum ornare. Donec dui lacus, vehicula sit amet semper a, auctor sed sem. Nam pulvinar iaculis libero sed varius. Quisque volutpat posuere sapien quis condimentum.'; //if(sfContext::getInstance()->getUser()->getProfile()->getWidgetHelpIsEnabled()) //{ $layout->addHelp('<b>help text on top of everything</b>'); //} $layout->setTitle('Dashboard'); $tools = new afExtjsTools(); $tools->addItem(array('id' => 'gear', 'handler' => array('parameters' => 'e,target,panel', 'source' => "console.log(panel);"))); $tools->addItem(array('id' => 'close', 'handler' => array('parameters' => 'e,target,panel', 'source' => "panel.ownerCt.remove(panel, true);"))); $column1 = $layout->startColumn(array('columnWidth' => '0.98')); /** * A GRID IN THE COLUMN */ $grid = new afExtjsGrid(array('autoHeight' => true, 'clearGrouping' => false, 'title' => 'Grid', 'tools' => $tools)); /** * columns */ $grid->addColumn(array('name' => 'company', 'label' => 'Company', 'sort' => 'ASC', 'id' => true, 'width' => 40, 'sortable' => true)); $grid->addColumn(array('name' => 'industry', 'label' => 'Industry', 'groupField' => true, 'width' => 20, 'sortable' => true)); /** * proxy */ $grid->setProxy(array('url' => '/interface/jsonactions', 'limit' => 3)); /** * row actions */ $actions = $grid->startRowActions(); /** * action1