diff --git a/application/configs/dist/versions.php b/application/configs/dist/versions.php index 9a4b848f..590ce2a3 100644 --- a/application/configs/dist/versions.php +++ b/application/configs/dist/versions.php @@ -1,7 +1,7 @@ '1.0.2', - 'designer'=>'1.1', + 'core'=>'1.0.3', + 'designer'=>'1.2', 'medialib'=>'0.6', 'orm'=>'0.9.9' ); \ No newline at end of file diff --git a/console.php b/console.php index 8d1bb614..2873d410 100644 --- a/console.php +++ b/console.php @@ -7,7 +7,7 @@ * 2 - Wrong URI * 3 - Application Error */ -if (isset($_SERVER['argc']) && $_SERVER['argc']!==2 ){ +if (isset($_SERVER['argc']) && $_SERVER['argc']<2 ){ exit(1); } diff --git a/data/gpl-3.0_en.txt b/data/gpl-3.0_en.txt index 97168d3c..4c75e101 100644 --- a/data/gpl-3.0_en.txt +++ b/data/gpl-3.0_en.txt @@ -1,4 +1,4 @@ -DVelum 1.0.2 PROFESSIONAL WEB-DEVELOPMENT PLATFORM +DVelum 1.0.3 PROFESSIONAL WEB-DEVELOPMENT PLATFORM Copyright (C) 2011-2017, Kirill A Egorov, Andrew Zamotaev, Sergey Leschenko http://dvelum.net/license.html diff --git a/data/gpl-3.0_ru.txt b/data/gpl-3.0_ru.txt index e31edd74..92d87289 100644 --- a/data/gpl-3.0_ru.txt +++ b/data/gpl-3.0_ru.txt @@ -1,4 +1,4 @@ -DVelum 1.0.2 платформа профессиональной web-разработки +DVelum 1.0.3 платформа профессиональной web-разработки Copyright (C) 2011-2017 Кирилл Егоров, Андрей Замотаев, Сергей Лещенко diff --git a/dvelum/app/Backend/Orm/Dataview.php b/dvelum/app/Backend/Orm/Dataview.php index e10540f6..9121ac84 100644 --- a/dvelum/app/Backend/Orm/Dataview.php +++ b/dvelum/app/Backend/Orm/Dataview.php @@ -305,7 +305,26 @@ public function editorvcAction() $router->runController('Backend_Orm_Dataview_Editor_Vc' , $request->getPart(4)); } - public function otitleAction() + public function deleteAction() + { + $request = Request::getInstance(); + + $object = Request::post('d_object','string', false); + + if(!$object || !Db_Object_Config::configExists($object)){ + Response::jsonError($this->_lang->get('WRONG_REQUEST')); + } + + $config = Db_Object_Config::getInstance($object); + $router = new Backend_Router(); + if($config->isRevControl()){ + $router->runController('Backend_Orm_Dataview_Editor' , 'delete'); + }else{ + $router->runController('Backend_Orm_Dataview_Editor_Vc' , 'delete'); + } + } + + public function otitleAction() { $object = Request::post('object','string', false); $id = Request::post('id', 'string', false); diff --git a/dvelum/app/Modules/Generator.php b/dvelum/app/Modules/Generator.php index 91ba27b7..853b96ab 100644 --- a/dvelum/app/Modules/Generator.php +++ b/dvelum/app/Modules/Generator.php @@ -11,6 +11,8 @@ class Modules_Generator */ protected $appConfig; + protected $linkedFieldPostfix = '_title'; + public $tabTypes = array('Component_Field_System_Medialibhtml' , 'Component_Field_System_Related', 'Component_Field_System_Objectslist'); public function __construct(){ @@ -44,15 +46,14 @@ protected function _createControllerFile($dir , $content) return $dir . '/' . 'Controller.php'; } - public function createVcModule($object , $projectFile) { $lang = Lang::lang(); //prepare class name - $name = Utils_String::formatClassName($object); + $objectName = Utils_String::formatClassName($object); - $jsName = str_replace('_','', $name); + $jsName = str_replace('_','', $objectName); $runNamespace = 'app'.$jsName.'Application'; $classNamespace = 'app'.$jsName.'Components'; @@ -73,7 +74,7 @@ public function createVcModule($object , $projectFile) $linkedObjects[] = $objectConfig->getLinkedObject($key); } - if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true) || $objectConfig->isObjectLink($key) || $objectConfig->isMultiLink($key)) + if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true)) continue; if(isset($item['hidden']) && $item['hidden']) @@ -88,7 +89,7 @@ public function createVcModule($object , $projectFile) $dataFields = array(); foreach($objectConfig->getFieldsConfig(true) as $key => $item) { - if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true)) + if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true) || $objectConfig->isMultiLink($key)) continue; if(isset($item['hidden']) && $item['hidden']) @@ -99,8 +100,8 @@ public function createVcModule($object , $projectFile) } array_unshift($objectFields , $objectConfig->getPrimaryKey()); - - $linksToShow = array_keys($objectConfig->getLinks( + $linksToShow = []; + $links = array_keys($objectConfig->getLinks( [ Db_Object_Config::LINK_OBJECT, Db_Object_Config::LINK_OBJECT_LIST, @@ -109,29 +110,36 @@ public function createVcModule($object , $projectFile) false )); - foreach($linksToShow as $k=>$v){ - if($objectConfig->isSystem($v)){ - unset($linksToShow[$v]); + $additionalModelFields = []; + + foreach($links as $k=>$v){ + if(!$objectConfig->isSystemField($v)){ + $linksToShow[$v . $this->linkedFieldPostfix] = $v; + if($objectConfig->isObjectLink($v) || $objectConfig->isMultiLink($v)){ + $additionalModelFields[$v] = $v . $this->linkedFieldPostfix; + } } } - $controllerContent = 'appConfig->get('local_controllers') . $this->appConfig->get('backend_controllers_dir') . '/' . str_replace('_' , '/' , $name); + $controllerDir = $this->appConfig->get('local_controllers') . $this->appConfig->get('backend_controllers_dir') . '/' . str_replace('_' , '/' , $objectName); $controllerFile = $this->_createControllerFile($controllerDir , $controllerContent); /* @@ -162,13 +170,34 @@ public function createVcModule($object , $projectFile) $storeFields = array_merge($storeFields , Backend_Designer_Import::checkImportORMFields($object , $dataFields)); - $urlTemplates = $this->designerConfig->get('templates'); + foreach ($storeFields as $itemObject){ + /** + * @var Ext_Object $object + */ + $name = $itemObject->name; + if(isset($linkToField[$name])){ + $storeFields[] = Ext_Factory::object('Data_Field',array( + 'name'=> $linkToField[$name], + 'type' => 'string' + )); + } + } + // Add fields for linked lists + if(!empty($additionalModelFields)){ + foreach ($additionalModelFields as $dataIndex){ + $storeFields[] = Ext_Factory::object('Data_Field',array( + 'name'=> $dataIndex, + 'type' => 'string' + )); + } + } + $urlTemplates = $this->designerConfig->get('templates'); $controllerUrl = Request::url(array($urlTemplates['adminpath'] , $object , '') , false); $storeUrl = Request::url(array($urlTemplates['adminpath'] , $object , 'list')); - $modelName = $name.'Model'; + $modelName = str_replace('_','',$objectName).'Model'; $model = Ext_Factory::object('Model'); $model->setName($modelName); $model->idProperty = $primaryKey; @@ -220,8 +249,25 @@ public function createVcModule($object , $projectFile) $eventManager->setEvent('dataGrid', 'itemdblclick', 'this.showEditWindow(record.get("id"));'); - $objectFieldList = Backend_Designer_Import::checkImportORMFields($object , $objectFields); + $column = Ext_Factory::object('Grid_Column_Action'); + $column->text = ''; + $column->setName($dataGrid->getName().'_pre_actions'); + $column->align = 'center'; + $column->width = 40; + + $editButton = Ext_Factory::object('Grid_Column_Action_Button'); + $editButton->setName($dataGrid->getName().'_actions_edit'); + $editButton->text = ''; + $editButton->icon = '[%wroot%]i/system/edit.png'; + $editButton->tooltip = '[js:] appLang.EDIT_ITEM'; + $editButton->isDisabled = 'function(){return !this.canEdit;}'; + $eventManager->setEvent($editButton->getName(), 'handler', 'this.showEditWindow(grid.getStore().getAt(rowIndex).get("id"));'); + + $column->addAction($editButton->getName() ,$editButton); + $dataGrid->addColumn($column->getName() , $column , $parent = 0); + + $objectFieldList = Backend_Designer_Import::checkImportORMFields($object , $objectFields); $publishedRec = new stdClass(); $publishedRec->name = 'published'; @@ -240,6 +286,10 @@ public function createVcModule($object , $projectFile) foreach($objectFieldList as $fieldConfig) { + // skip object link column (will be set with $additionalModelFields) + if($objectConfig->isObjectLink($fieldConfig->name)){ + continue; + } switch($fieldConfig->type){ case 'boolean': @@ -315,6 +365,21 @@ public function createVcModule($object , $projectFile) $dataGrid->addColumn($column->getName() , $column , $parent = 0); } + + // Add fields for linked lists + if(!empty($additionalModelFields)){ + foreach ($additionalModelFields as $field=>$dataIndex){ + $column = Ext_Factory::object('Grid_Column'); + $column->setName($dataIndex); + $column->dataIndex = $dataIndex; + $column->sortable = false; + $column->itemId = $dataIndex; + $cfg = $objectConfig->getFieldConfig($field); + $column->text = $cfg['title']; + $dataGrid->addColumn($column->getName() , $column , $parent = 0); + } + } + $column = Ext_Factory::object('Grid_Column_Action'); $column->text = '[js:] appLang.ACTIONS'; $column->setName($dataGrid->getName().'_actions'); @@ -470,9 +535,9 @@ public function createModule($object , $projectFile) $lang = Lang::lang(); //prepare class name - $name = Utils_String::formatClassName($object); + $objectName = Utils_String::formatClassName($object); - $jsName = str_replace('_','', $name); + $jsName = str_replace('_','', $objectName); $runNamespace = 'app'.$jsName.'Application'; $classNamespace = 'app'.$jsName.'Components'; @@ -494,7 +559,7 @@ public function createModule($object , $projectFile) $linkedObjects[] = $objectConfig->getLinkedObject($key); } - if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true) || $objectConfig->isObjectLink($key) || $objectConfig->isMultiLink($key)) + if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true)) continue; if(isset($item['hidden']) && $item['hidden']) @@ -508,7 +573,7 @@ public function createModule($object , $projectFile) $dataFields = array(); foreach($objectConfig->getFieldsConfig(true) as $key => $item) { - if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true)) + if(in_array($item['db_type'] , Db_Object_Builder::$textTypes , true) || $objectConfig->isMultiLink($key)) continue; if(isset($item['hidden']) && $item['hidden']) @@ -518,8 +583,8 @@ public function createModule($object , $projectFile) } array_unshift($objectFields , $primaryKey); - - $linksToShow = array_keys($objectConfig->getLinks( + $linksToShow = []; + $links = array_keys($objectConfig->getLinks( [ Db_Object_Config::LINK_OBJECT, Db_Object_Config::LINK_OBJECT_LIST, @@ -528,32 +593,38 @@ public function createModule($object , $projectFile) false )); - foreach($linksToShow as $k=>$v){ - if($objectConfig->isSystem($v)){ - unset($linksToShow[$v]); + $additionalModelFields = []; + + foreach($links as $k=>$v){ + if(!$objectConfig->isSystemField($v)){ + $linksToShow[$v . $this->linkedFieldPostfix] = $v; + if($objectConfig->isObjectLink($v) || $objectConfig->isMultiLink($v)){ + $additionalModelFields[$v] = $v . $this->linkedFieldPostfix; + } } } + $linkToField = array_flip($linksToShow); - $controllerContent = 'appConfig->get('local_controllers') . $this->appConfig->get('backend_controllers_dir') . '/' . str_replace('_' , '/' , $name); + $controllerDir = $this->appConfig->get('local_controllers') . $this->appConfig->get('backend_controllers_dir') . '/' . str_replace('_' , '/' , $objectName); $this->_createControllerFile($controllerDir , $controllerContent); - @chmod( $controllerDir . DIRECTORY_SEPARATOR . 'Controller.php' , $controllerContent, 0775); + @chmod( $controllerDir . DIRECTORY_SEPARATOR . 'Controller.php', 0775); /* @@ -568,16 +639,37 @@ public function createModule($object , $projectFile) */ $eventManager = $project->getEventManager(); - $storeFields = Backend_Designer_Import::checkImportORMFields($object , $dataFields); + foreach ($storeFields as $itemObject){ + /** + * @var Ext_Object $object + */ + $name = $itemObject->name; + if(isset($linkToField[$name])){ + $storeFields[] = Ext_Factory::object('Data_Field',array( + 'name'=> $linkToField[$name], + 'type' => 'string' + )); + } + } + // Add fields for linked lists + if(!empty($additionalModelFields)){ + foreach ($additionalModelFields as $dataIndex){ + $storeFields[] = Ext_Factory::object('Data_Field',array( + 'name'=> $dataIndex, + 'type' => 'string' + )); + } + } + $urlTemplates = $this->designerConfig->get('templates'); $controllerUrl = Request::url(array($urlTemplates['adminpath'] , $object , ''),false); $storeUrl = Request::url(array($urlTemplates['adminpath'] , $object , 'list')); - $modelName = $name.'Model'; + $modelName = str_replace('_','',$objectName).'Model'; $model = Ext_Factory::object('Model'); $model->setName($modelName); $model->idProperty = $primaryKey; @@ -590,7 +682,6 @@ public function createModule($object , $projectFile) $dataStore->setName('dataStore'); $dataStore->autoLoad = true; $dataStore->model = $modelName; - // $dataStore->addFields($storeFields); $dataProxy = Ext_Factory::object('Data_Proxy_Ajax'); $dataProxy->type = 'ajax'; @@ -635,8 +726,30 @@ public function createModule($object , $projectFile) if(!empty($objectFieldList)) { + $column = Ext_Factory::object('Grid_Column_Action'); + $column->text = ''; + $column->setName($dataGrid->getName().'_pre_actions'); + $column->align = 'center'; + $column->width = 40; + + $editButton = Ext_Factory::object('Grid_Column_Action_Button'); + $editButton->setName($dataGrid->getName().'_actions_edit'); + $editButton->text = ''; + $editButton->icon = '[%wroot%]i/system/edit.png'; + $editButton->tooltip = '[js:] appLang.EDIT_ITEM'; + $editButton->isDisabled = 'function(){return !this.canEdit;}'; + + $eventManager->setEvent($editButton->getName(), 'handler', 'this.showEditWindow(grid.getStore().getAt(rowIndex).get("id"));'); + + $column->addAction($editButton->getName() ,$editButton); + $dataGrid->addColumn($column->getName() , $column , $parent = 0); + foreach($objectFieldList as $fieldConfig) { + // skip object link column (will be set with $additionalModelFields) + if($objectConfig->isObjectLink($fieldConfig->name)){ + continue; + } switch($fieldConfig->type){ case 'boolean': @@ -685,6 +798,20 @@ public function createModule($object , $projectFile) $dataGrid->addColumn($column->getName() , $column , $parent = 0); } + // Add fields for linked lists + if(!empty($additionalModelFields)){ + foreach ($additionalModelFields as $field=>$dataIndex){ + $column = Ext_Factory::object('Grid_Column'); + $column->setName($dataIndex); + $column->dataIndex = $dataIndex; + $column->sortable = false; + $column->itemId = $dataIndex; + $cfg = $objectConfig->getFieldConfig($field); + $column->text = $cfg['title']; + $dataGrid->addColumn($column->getName() , $column , $parent = 0); + } + } + $column = Ext_Factory::object('Grid_Column_Action'); $column->text = '[js:] appLang.ACTIONS'; $column->setName($dataGrid->getName().'_actions'); diff --git a/dvelum/library/Ext/Object.php b/dvelum/library/Ext/Object.php index 5e00f3ea..05be7dbe 100644 --- a/dvelum/library/Ext/Object.php +++ b/dvelum/library/Ext/Object.php @@ -248,6 +248,17 @@ public function getDefineJs($namespace = false) "\t".'},'."\n"; } + if(!isset($this->_methods['destroy'])){ + $code .= "\t".'destroy:function(){'."\n". + "\t\t".'Ext.Object.each(this.childObjects,function(index, item){'."\n". + "\t\t".' if(item.destroy){'."\n". + "\t\t".' item.destroy();'."\n". + "\t\t".' }'."\n". + "\t\t".' });'."\n". + "\t\t".'this.callParent(arguments);'."\n". + "\t".'},'."\n"; + } + $code .="\t".'addDesignerItems:function(){'."\n". "\t\t".'var me = this;'."\n"; diff --git a/dvelum/library/Ext/Property/Component/Field/System/Objectlink.php b/dvelum/library/Ext/Property/Component/Field/System/Objectlink.php index ce770239..53c1c35c 100644 --- a/dvelum/library/Ext/Property/Component/Field/System/Objectlink.php +++ b/dvelum/library/Ext/Property/Component/Field/System/Objectlink.php @@ -8,6 +8,7 @@ class Ext_Property_Component_Field_System_Objectlink extends Ext_Property_Form_F public $extraParams = self::Object; public $readOnly = self::Boolean; public $name = self::String; + public $valueType = self::String; static public $extend = 'app.objectLink.Field'; static public $xtype = 'objectlinkfield'; diff --git a/dvelum/library/Ext/Property/Component/Field/System/Searchfield.php b/dvelum/library/Ext/Property/Component/Field/System/Searchfield.php index 8af33386..52c2ad47 100644 --- a/dvelum/library/Ext/Property/Component/Field/System/Searchfield.php +++ b/dvelum/library/Ext/Property/Component/Field/System/Searchfield.php @@ -1,13 +1,15 @@ _path[$index]) && !empty($this->_path[$index])) { + if(isset($this->_path[$index]) && strlen($this->_path[$index])) { return $this->_path[$index]; } else { return false; diff --git a/license.txt b/license.txt index a95c8692..b7476c11 100644 --- a/license.txt +++ b/license.txt @@ -1,4 +1,4 @@ -DVelum 1.0.2 PROFESSIONAL WEB-DEVELOPMENT PLATFORM +DVelum 1.0.3 PROFESSIONAL WEB-DEVELOPMENT PLATFORM Copyright (C) 2011-2017, Kirill A Egorov, Andrew Zamotaev, Sergey Leschenko http://dvelum.net/license.html diff --git a/www/js/app/system/ContentWindow.js b/www/js/app/system/ContentWindow.js index a777e5a3..49f78a07 100644 --- a/www/js/app/system/ContentWindow.js +++ b/www/js/app/system/ContentWindow.js @@ -675,5 +675,30 @@ Ext.define('app.contentWindow',{ */ setExtraParam:function(name , value){ this.extraParams[name] = value; - } + }, + destroy:function(){ + this.rightPanel = null; + var toDestroy = [ + this.rightPanel, + this.eastPanel, + this.historyPanel, + this.revisionPanel, + this.contentPanel, + this.contentTabs + ]; + + Ext.Array.each(toDestroy, function (item) { + if(item && item.destroy){ + item.destroy(); + } + }); + + Ext.Array.each(this.linkedComponents,function(item){ + if(item.destroy){ + item.destroy(); + } + }); + toDestroy = null; + this.callParent(arguments); + } }); \ No newline at end of file diff --git a/www/js/app/system/Designer.js b/www/js/app/system/Designer.js index 24c36076..c3f967c0 100644 --- a/www/js/app/system/Designer.js +++ b/www/js/app/system/Designer.js @@ -1,6 +1,7 @@ -Ext.define('SearchPanel',{extend:'Ext.toolbar.Toolbar',alias:'widget.searchpanel',searchField:null,resetButton:null,store:null,fieldNames:[],local:false,lastQuery:'',searchParam:'search',constructor:function(config){config=Ext.apply({frame:false,border:false,bodyBorder:false,width:230,hideLabel:false,frame:false,style:{border:0}},config||{});this.callParent(arguments);},initComponent:function(){this.resetButton=Ext.create('Ext.Button',{iconCls:'deleteIcon',flat:false,tooltip:appLang.RESET_SEARCH,listeners:{'click':{fn:function(){this.searchField.setValue('');this.clearFilter();},scope:this}}});this.searchField=Ext.create('Ext.form.field.Text',{enableKeyEvents:true,flex:2,listeners:{'keyup':{fn:this.startFilter,buffer:700,scope:this}}});this.items=[];if(!this.hideLabel){this.items.push(appLang.SEARCH+':');} +Ext.define('SearchPanel',{extend:'Ext.toolbar.Toolbar',alias:'widget.searchpanel',searchField:null,resetButton:null,store:null,fieldNames:[],local:false,lastQuery:'',searchParam:'search',minChars:0,fieldLabel:null,constructor:function(config){config=Ext.apply({frame:false,border:false,bodyBorder:false,width:230,hideLabel:false,style:{border:0},fieldLabel:appLang.SEARCH+':'},config||{});this.callParent(arguments);},initComponent:function(){this.resetButton=Ext.create('Ext.Button',{iconCls:'deleteIcon',flat:false,tooltip:appLang.RESET_SEARCH,listeners:{'click':{fn:function(){this.searchField.setValue('');this.clearFilter();},scope:this}}});this.searchField=Ext.create('Ext.form.field.Text',{enableKeyEvents:true,flex:2,listeners:{'keyup':{fn:this.startFilter,buffer:700,scope:this}}});this.items=[];if(!this.hideLabel){this.items.push(this.fieldLabel);} this.items.push(this.searchField,this.resetButton);this.callParent(arguments);},clearFilter:function(){this.store.clearFilter();this.lastQuery='';if(!this.local){this.store.proxy.setExtraParam(this.searchParam,'');this.store.load({scope:this,callback:function(records,operation,success){this.fireEvent('reset');}});}else{this.fireEvent('reset');}},startFilter:function(){var query=this.searchField.getValue();if(this.lastQuery===query){return;} +if(query.lengthfunction( '},{xtype:'textfield',name:'params',flex:2,fieldStyle:{border:'none',background:'none',backgroundColor:'#F4F4F4',color:'#5C3BFB'}},{xtype:'displayfield',value:' )'}]}]});this.items=[this.dataForm];this.callParent();this.on('show',function(){this.loadMethodData();app.checkSize(this);Ext.WindowMgr.register(this);Ext.WindowMgr.bringToFront(this);},this);},loadMethodData:function(){var me=this;Ext.Ajax.request({url:this.controllerUrl+'methoddata',method:'post',scope:this,params:this.extraParams,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);return;} -me.editor=Ext.create('designer.codeEditor',{readOnly:false,showSaveBtn:false,flex:1,sourceCode:response.data['code'],headerText:'{',footerText:'}',extraKeys:{"Ctrl-Space":function(cm){CodeMirror.simpleHint(cm,CodeMirror.javascriptHint);},"Ctrl-S":function(cm){me.saveMethod();},"Ctrl-Z":function(cm){me.editor.undoAction();},"Ctrl-Y":function(cm){me.editor.redoAction();},"Shift-Ctrl-Z":function(cm){me.editor.redoAction();}}});var form=this.dataForm.getForm();form.findField('description').setValue(response.data['description']);form.findField('method_name').setValue(response.data['name']);form.findField('params').setValue(response.data['paramsLine']);this.add(me.editor);this.saveButton.enable();},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},saveMethod:function(){var form=this.dataForm.getForm();var code=this.editor.getValue();var params=Ext.clone(this.extraParams);params['code']=code;form.submit({clientValidation:true,waitMsg:appLang.SAVING,method:'post',scope:this,params:params,url:this.controllerUrl+'update',success:function(form,action){if(!action.result.success){Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}else{designer.msg(appLang.MESSAGE,desLang.msg_codeSaved);this.fireEvent('codeSaved');this.extraParams['method']=form.findField('method_name').getValue();this.methodName=this.extraParams['method'];}},failure:app.formFailure});}});Ext.define('designer.methodsModel',{extend:'Ext.data.Model',fields:[{name:'object',type:'string'},{name:'method',type:'string'},{name:'params',type:'string'},{name:'has_code',type:'boolean'}],idProperty:'method'});Ext.define('designer.methodsPanel',{extend:'Ext.grid.Panel',objectName:'',controllerUrl:'',columnLines:true,searchField:null,addButton:null,autoLoadData:true,extraParams:null,searchField:false,constructor:function(config){Ext.apply({extraParams:{}},config||{});this.callParent(arguments);},initComponent:function() +me.editor=Ext.create('designer.codeEditor',{readOnly:false,showSaveBtn:false,flex:1,sourceCode:response.data['code'],headerText:'{',footerText:'}',extraKeys:{"Ctrl-Space":function(cm){CodeMirror.simpleHint(cm,CodeMirror.javascriptHint);},"Ctrl-S":function(cm){me.saveMethod();},"Ctrl-Z":function(cm){me.editor.undoAction();},"Ctrl-Y":function(cm){me.editor.redoAction();},"Shift-Ctrl-Z":function(cm){me.editor.redoAction();}}});var form=this.dataForm.getForm();form.findField('description').setValue(response.data['description']);form.findField('method_name').setValue(response.data['name']);form.findField('params').setValue(response.data['paramsLine']);this.add(me.editor);this.saveButton.enable();},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},saveMethod:function(){var form=this.dataForm.getForm();var code=this.editor.getValue();var params=Ext.clone(this.extraParams);params['code']=code;form.submit({clientValidation:true,waitMsg:appLang.SAVING,method:'post',scope:this,params:params,url:this.controllerUrl+'update',success:function(form,action){if(!action.result.success){Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}else{designer.msg(appLang.MESSAGE,desLang.msg_codeSaved);this.fireEvent('codeSaved');this.extraParams['method']=form.findField('method_name').getValue();this.methodName=this.extraParams['method'];}},failure:app.formFailure});}});Ext.define('designer.methodsModel',{extend:'Ext.data.Model',fields:[{name:'object',type:'string'},{name:'method',type:'string'},{name:'params',type:'string'},{name:'has_code',type:'boolean'}],idProperty:'method'});Ext.define('designer.methodsPanel',{extend:'Ext.grid.Panel',objectName:'',controllerUrl:'',columnLines:true,addButton:null,autoLoadData:true,extraParams:null,searchField:false,constructor:function(config){Ext.apply({extraParams:{}},config||{});this.callParent(arguments);},initComponent:function() {if(!this.controllerUrl.length){this.controllerUrl=app.createUrl([designer.controllerUrl,'methods','']);} this.extraParams['object']=this.objectName;this.store=Ext.create('Ext.data.Store',{model:'designer.methodsModel',proxy:{type:'ajax',url:this.controllerUrl+'objectmethods',reader:{type:'json',rootProperty:'data'},extraParams:this.extraParams,simpleSortMode:true},remoteSort:false,autoLoad:this.autoLoadData,sorters:[{property:'object',direction:'DESC'},{property:'method',direction:'DESC'}]});this.searchField=Ext.create('SearchPanel',{store:this.store,local:true,width:130,hideLabel:true,fieldNames:['method']});this.addButton=Ext.create('Ext.Button',{iconCls:'addIcon',text:desLang.addMethod,scope:this,handler:this.addMethod});this.tbar=[this.addButton,'->',this.searchField];this.columns=[{xtype:'actioncolumn',width:20,items:[{width:20,tooltip:desLang.edit,scope:this,iconCls:'editIcon',handler:function(grid,rowIndex,colIndex){var rec=grid.getStore().getAt(rowIndex);this.editMethod(rec);}}]},{dataIndex:'method',text:desLang.method,flex:1},{dataIndex:'params',text:desLang.params,flex:1},{xtype:'actioncolumn',width:25,items:[{iconCls:'deleteIcon',tooltip:desLang.removeAction,handler:function(grid,rowIndex,colIndex){var rec=grid.getStore().getAt(rowIndex);this.removeMethod(rec);},width:25,scope:this}]}];this.on('celldblclick',function(table,td,cellIndex,record,tr,rowIndex,e,eOpts){this.editMethod(record);},this);this.callParent();},addMethod:function(){Ext.MessageBox.prompt(appLang.MESSAGE,desLang.enterMethodName,function(btn,methodName){if(btn!='ok'){return;} var params=Ext.clone(this.extraParams);params['method']=methodName;var store=this.getStore();Ext.Ajax.request({url:this.controllerUrl+'addmethod',method:'post',scope:this,params:params,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);return;} store.load({scope:this,callback:function(){var index=store.findExact('method',methodName);if(index!=-1){this.editMethod(store.getAt(index));}}});this.fireEvent('methodsUpdated');},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},this);},removeMethod:function(record){var params=Ext.clone(this.extraParams);params['method']=record.get('method');Ext.Ajax.request({url:this.controllerUrl+'removemethod',method:'post',scope:this,params:params,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);return;} designer.msg(appLang.MESSAGE,desLang.msg_methodRemoved);this.getStore().remove(record);this.fireEvent('methodsUpdated');},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},editMethod:function(record) -{Ext.create('designer.methodEditorWindow',{controllerUrl:this.controllerUrl,objectName:this.objectName,methodName:record.get('method'),paramsString:record.get('params'),extraParams:this.extraParams,modal:true,listeners:{'codeSaved':{fn:function(){this.getStore().load();this.fireEvent('methodsUpdated');},scope:this}}}).show();},getSearchText:function(){return this.searchField.getValue();},setSearchText:function(text){this.searchField.setValue(text);}});Ext.define('designer.eventsEditorModel',{extend:'Ext.data.Model',fields:[{name:'id',type:'integer'},{name:'object',type:'string'},{name:'event',type:'string'},{name:'params',type:'string'},{name:'is_local',type:'boolean'}],idProperty:'id'});Ext.define('designer.eventsEditor',{extend:'Ext.grid.Panel',scrollable:true,controllerUrl:null,searchField:null,columnLines:true,viewConfig:{stripeRows:true,enableTextSelection:true},initComponent:function(){if(!this.controllerUrl.length){this.controllerUrl=app.createUrl([designer.controllerUrl,'events','']);} +{Ext.create('designer.methodEditorWindow',{controllerUrl:this.controllerUrl,objectName:this.objectName,methodName:record.get('method'),paramsString:record.get('params'),extraParams:this.extraParams,modal:true,listeners:{'codeSaved':{fn:function(){this.getStore().load();this.fireEvent('methodsUpdated');},scope:this}}}).show();},getSearchText:function(){return this.searchField.getValue();},setSearchText:function(text){this.searchField.setValue(text);},destroy:function(){this.searchField.destroy();this.store.destroy();this.callParent(arguments);}});Ext.define('designer.eventsEditorModel',{extend:'Ext.data.Model',fields:[{name:'id',type:'integer'},{name:'object',type:'string'},{name:'event',type:'string'},{name:'params',type:'string'},{name:'is_local',type:'boolean'}],idProperty:'id'});Ext.define('designer.eventsEditor',{extend:'Ext.grid.Panel',scrollable:true,controllerUrl:null,searchField:null,columnLines:true,viewConfig:{stripeRows:true,enableTextSelection:true},initComponent:function(){if(!this.controllerUrl.length){this.controllerUrl=app.createUrl([designer.controllerUrl,'events','']);} this.store=Ext.create('Ext.data.Store',{model:'designer.eventsEditorModel',proxy:{type:'ajax',url:this.controllerUrl+'list',reader:{type:'json',rootProperty:'data',idProperty:'id'},simpleSortMode:true},groupField:'object',remoteSort:false,autoLoad:false,sorters:[{property:'object',direction:'DESC'},{property:'event',direction:'DESC'}]});this.searchField=Ext.create('SearchPanel',{store:this.store,local:true,fieldNames:['object','event']});this.tbar=[{iconCls:'refreshIcon',tooltip:desLang.refresh,scope:this,handler:function(){this.store.load();}},this.searchField];this.columns=[{xtype:'actioncolumn',width:20,items:[{iconCls:'editIcon',handler:function(grid,rowIndex,colIndex){var rec=grid.getStore().getAt(rowIndex);this.editEvent(rec);},scope:this}]},{text:desLang.object,dataIndex:'object',width:150},{text:desLang.event,dataIndex:'event',width:150},{text:desLang.params,dataIndex:'params',flex:1},{xtype:'actioncolumn',width:20,items:[{iconCls:'deleteIcon',handler:function(grid,rowIndex,colIndex){var rec=grid.getStore().getAt(rowIndex);this.removeEvent(rec);},scope:this}]}];this.features=[Ext.create('Ext.grid.feature.Grouping',{groupHeaderTpl:'{name} ({rows.length})',startCollapsed:0,enableGroupingMenu:1,hideGroupedHeader:0})];this.on('itemdblclick',function(view,record,number,event,options){this.editEvent(record);},this);this.callParent();},removeEvent:function(record){Ext.Ajax.request({url:this.controllerUrl+'removeevent',method:'post',scope:this,params:{object:record.get('object'),event:record.get('event')},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);return;} designer.msg(appLang.MESSAGE,desLang.msg_listenerRemoved);this.getStore().remove(record);this.getStore().commitChanges();this.fireEvent('eventsUpdated');},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},editEvent:function(record) {Ext.create('designer.eventsEditorWindow',{controllerUrl:this.controllerUrl,objectName:record.get('object'),eventName:record.get('event'),paramsString:record.get('params'),modal:false,listeners:{'codeSaved':{fn:function(){record.set('has_code',true);record.commit();this.fireEvent('eventsUpdated');},scope:this}}}).show();}});Ext.define('designer.eventsEditorWindow',{extend:'Ext.Window',modal:true,width:800,height:600,layout:{type:'vbox',align:'stretch',pack:'start'},autoRender:true,maximizable:true,extraParams:null,closeAction:'destroy',controllerUrl:'',objectName:'',eventName:'',paramsString:'',editor:null,loadedConfig:null,constructor:function(){this.extraParams={};this.callParent(arguments);},initComponent:function(){this.extraParams['object']=this.objectName;this.extraParams['event']=this.eventName;this.title=this.objectName+' on '+this.eventName;this.saveButton=Ext.create('Ext.Button',{disabled:true,text:desLang.save,scope:this,handler:this.saveEvent});this.cancelButton=Ext.create('Ext.Button',{text:desLang.close,scope:this,handler:this.close});this.buttons=[this.saveButton,this.cancelButton];this.dataForm=Ext.create('Ext.form.Panel',{bodyPadding:5,bodyCls:'formBody',border:false,bosyPadding:5,autoHeight:true,split:false,items:[{xtype:'fieldcontainer',layout:{type:'hbox',pack:'start',align:'stretch'},height:22,items:[{xtype:'textfield',name:'new_name',flex:1,fieldStyle:{border:'none',background:'none',backgroundColor:'#F4F4F4'}},{xtype:'displayfield',value:' : function( '},{xtype:'textfield',name:'params',flex:2,fieldStyle:{border:'none',background:'none',backgroundColor:'#F4F4F4',color:'#5C3BFB'}},{xtype:'displayfield',value:' )'}]}]});this.callParent();this.on('show',function(){this.loadCode();app.checkSize(this);Ext.WindowMgr.register(this);Ext.WindowMgr.bringToFront(this);},this);},loadCode:function(){var me=this;Ext.Ajax.request({url:this.controllerUrl+'eventcode',method:'post',scope:this,params:this.extraParams,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);return;} @@ -115,10 +116,10 @@ me.fireEvent('dataSaved');me.close();},failure:app.formFailure});}});Ext.define( this.itemPropertiesPanel.setExtraParams({'id':sm.getSelection()[0].get('id')});this.itemPropertiesPanel.loadProperties();},this);},addFilter:function(){Ext.MessageBox.prompt(appLang.MESSAGE,desLang.enterFilterId,function(btn,text){if(btn!='ok'){return;} Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'gridfilters','addfilter']),method:'post',params:{'id':text,'object':this.objectName},scope:this,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){this.dataStore.load();}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},this);},removeFilter:function(grid,row,col) {var record=grid.getStore().getAt(row);Ext.MessageBox.confirm(appLang.MESSAGE,desLang.remove+'?',function(btn){if(btn!='yes'){return;} -Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'gridfilters','removefilter']),method:'post',params:{'id':record.get('id'),'object':this.objectName},scope:this,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){grid.getStore().load();}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},this);}});Ext.ns('designer.properties');Ext.define('designer.properties.Panel',{extend:'Ext.Panel',layout:'fit',border:false,searchPanel:null,dataStore:null,dataGrid:null,controllerUrl:'',scrollable:false,controllerUr:'',eventsControllerUrl:'',eventsPanel:null,methodsPanel:null,objectName:null,tabs:null,showEvents:true,showMethods:false,extraParams:null,alignData:[['left'],['center'],['right']],labelAlignData:[['left'],['top'],['right']],iconAlignData:[['top'],['right'],['bottom'],['left']],regionData:[['center'],['west'],['north'],['east'],['south']],layoutData:[['Auto'],['border'],['card'],['fit'],['hbox'],['vbox'],['anchor']],dockData:[['top'],['right'],['left'],['bottom']],mainConfigTitle:desLang.properties,autoLoadData:true,methodsSearch:false,useTabs:true,constructor:function(){this.extraParams={};this.sourceConfig={};this.callParent(arguments);},initComponent:function(){var me=this;this.extraParams.object=this.objectName;var storesStore=app.designer.getStoreSelector();var menuStore=app.designer.getMenuStore();this.objectNames={};this.sourceConfig=Ext.apply({'region':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.regionData}),valueField:'id',displayField:'id',allowBlank:true,forceSelection:false})},'layout':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.layoutData}),valueField:'id',displayField:'id',allowBlank:true})},'dock':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.dockData}),valueField:'id',displayField:'id',allowBlank:true})},'align':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.alignData}),valueField:'id',displayField:'id',allowBlank:true})},'titleAlign':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.alignData}),valueField:'id',displayField:'id',allowBlank:true})},'labelAlign':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.labelAlignData}),valueField:'id',displayField:'id',allowBlank:true})},'iconAlign':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.iconAlignData}),valueField:'id',displayField:'id',allowBlank:true})},'store':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:false,queryMode:'remote',displayField:'title',valueField:'id',store:storesStore})},'menu':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:false,queryMode:'remote',displayField:'title',valueField:'id',store:menuStore})},'url':{editor:Ext.create('designer.urlField',{controllerUrl:app.createUrl([designer.controllerUrl,'url','actions','']),listeners:{select:{fn:function(url){me.dataGrid.setProperty('url',url);},scope:me}}})},'icon':{editor:Ext.create('designer.iconField',{controllerUrl:app.createUrl([designer.controllerUrl,'url','']),listeners:{select:{fn:function(url){me.dataGrid.setProperty('icon',url);},scope:me}}})},'controllerUrl':{editor:Ext.create('designer.urlField',{onlyController:true,controllerUrl:app.createUrl([designer.controllerUrl,'url','actions','']),listeners:{select:{fn:function(url){me.dataGrid.setProperty('controllerUrl',url);},scope:me}}})},'defaults':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showDefaultsWindow('defaults');},scope:me}}}),renderer:function(){return'...';}},'extraParams':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showParamsWindow('extraParams');},scope:me}}}),renderer:function(){return'...';}},'fieldDefaults':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showDefaultsWindow('fieldDefaults');},scope:me}}}),renderer:function(){return'...';}},'isExtended':{editor:Ext.create('Ext.form.field.Display',{})},'dictionary':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:false,queryMode:'remote',displayField:'title',valueField:'id',store:Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'listdictionaries',reader:{type:'json',rootProperty:'data',idProperty:'id'},simpleSortMode:true},remoteSort:false,autoLoad:false,sorters:[{property:'title',direction:'DESC'}]})})},'config':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showDefaultsWindow('config');},scope:me}}})},'objectName':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',displayField:'title',valueField:'name',store:Ext.create('Ext.data.Store',{proxy:{type:'ajax',url:app.createUrl([designer.controllerUrl,'orm','list']),reader:{type:'json',idProperty:'name',rootProperty:'data'}},fields:[{name:'name',type:'string'},{name:'title',type:'string'}],autoLoad:true,listeners:{scope:me,load:function(store){me.objectNames={};store.each(function(record){me.objectNames[record.get('name')]=record.get('title');},me);}}}),renderer:function(){return'...';}})}},this.sourceConfig);this.searchPanel=Ext.create('SearchPanel',{fieldNames:['name'],local:true,width:130,hideLabel:true});var showCodeBtn=Ext.create('Ext.Button',{scope:me,iconCls:'jsIcon',handler:me.showCode,tooltip:desLang.showCode});this.dataGrid=Ext.create('Ext.grid.property.Grid',{border:false,region:'center',split:true,scrollable:true,title:this.mainConfigTitle,tbar:[this.searchPanel,'->',showCodeBtn],sourceConfig:this.sourceConfig,customRenderers:this.customRenderers,nameColumnWidth:150,listeners:{propertychange:{fn:this.onChange,scope:this}},source:{}});this.searchPanel.store=this.dataGrid.getStore();var itemsList=[this.dataGrid];if(this.showEvents){this.eventsPanel=Ext.create('designer.eventsPanel',{title:desLang.events,controllerUrl:this.eventsControllerUrl,objectName:this.objectName,extraParams:this.extraParams,autoLoadData:this.autoLoadData,listeners:{'eventsUpdated':{fn:function(){this.fireEvent('eventsUpdated');},scope:this}}});itemsList.push(this.eventsPanel);} +Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'gridfilters','removefilter']),method:'post',params:{'id':record.get('id'),'object':this.objectName},scope:this,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){grid.getStore().load();}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},this);}});Ext.ns('designer.properties');Ext.define('designer.properties.idStringModel',{extend:'Ext.data.Model',idProperty:'id',fields:[{name:'id',type:'string'}]});Ext.define('designer.properties.nameTitleModel',{extend:'Ext.data.Model',idProperty:'name',fields:[{name:'name',type:'string'},{name:'title',type:'string'}]});Ext.define('designer.properties.Panel',{extend:'Ext.Panel',layout:'fit',border:false,searchPanel:null,dataStore:null,dataGrid:null,controllerUrl:'',scrollable:false,controllerUr:'',eventsControllerUrl:'',eventsPanel:null,methodsPanel:null,objectName:null,tabs:null,showEvents:true,showMethods:false,extraParams:null,alignData:[['left'],['center'],['right']],labelAlignData:[['left'],['top'],['right']],iconAlignData:[['top'],['right'],['bottom'],['left']],regionData:[['center'],['west'],['north'],['east'],['south']],layoutData:[['Auto'],['border'],['card'],['fit'],['hbox'],['vbox'],['anchor']],dockData:[['top'],['right'],['left'],['bottom']],mainConfigTitle:desLang.properties,autoLoadData:true,methodsSearch:false,useTabs:true,constructor:function(){this.extraParams={};this.sourceConfig={};this.callParent(arguments);},initComponent:function(){var me=this;this.extraParams.object=this.objectName;var storesStore=app.designer.getStoreSelector();var menuStore=app.designer.getMenuStore();this.objectNames={};this.sourceConfig=Ext.apply({'region':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.regionData}),valueField:'id',displayField:'id',allowBlank:true,forceSelection:false})},'layout':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.layoutData}),valueField:'id',displayField:'id',allowBlank:true})},'dock':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.dockData}),valueField:'id',displayField:'id',allowBlank:true})},'align':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.alignData}),valueField:'id',displayField:'id',allowBlank:true})},'titleAlign':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.alignData}),valueField:'id',displayField:'id',allowBlank:true})},'labelAlign':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.labelAlignData}),valueField:'id',displayField:'id',allowBlank:true})},'iconAlign':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',store:Ext.create('Ext.data.ArrayStore',{model:'designer.properties.idStringModel',data:this.iconAlignData}),valueField:'id',displayField:'id',allowBlank:true})},'store':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:false,queryMode:'remote',displayField:'title',valueField:'id',store:storesStore})},'menu':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:false,queryMode:'remote',displayField:'title',valueField:'id',store:menuStore})},'url':{editor:Ext.create('designer.urlField',{controllerUrl:app.createUrl([designer.controllerUrl,'url','actions','']),listeners:{select:{fn:function(url){me.dataGrid.setProperty('url',url);},scope:me}}})},'icon':{editor:Ext.create('designer.iconField',{controllerUrl:app.createUrl([designer.controllerUrl,'url','']),listeners:{select:{fn:function(url){me.dataGrid.setProperty('icon',url);},scope:me}}})},'controllerUrl':{editor:Ext.create('designer.urlField',{onlyController:true,controllerUrl:app.createUrl([designer.controllerUrl,'url','actions','']),listeners:{select:{fn:function(url){me.dataGrid.setProperty('controllerUrl',url);},scope:me}}})},'defaults':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showDefaultsWindow('defaults');},scope:me}}}),renderer:function(){return'...';}},'extraParams':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showParamsWindow('extraParams');},scope:me}}}),renderer:function(){return'...';}},'fieldDefaults':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showDefaultsWindow('fieldDefaults');},scope:me}}}),renderer:function(){return'...';}},'isExtended':{editor:Ext.create('Ext.form.field.Display',{})},'dictionary':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:false,queryMode:'remote',displayField:'title',valueField:'id',store:Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'listdictionaries',reader:{type:'json',rootProperty:'data',idProperty:'id'},simpleSortMode:true},remoteSort:false,autoLoad:false,sorters:[{property:'title',direction:'DESC'}]})})},'config':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:function(){me.showDefaultsWindow('config');},scope:me}}})},'objectName':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',displayField:'title',valueField:'name',store:Ext.create('Ext.data.Store',{proxy:{type:'ajax',url:app.createUrl([designer.controllerUrl,'orm','list']),reader:{type:'json',idProperty:'name',rootProperty:'data'}},model:'designer.properties.nameTitleModel',autoLoad:true,listeners:{scope:me,load:function(store){me.objectNames={};store.each(function(record){me.objectNames[record.get('name')]=record.get('title');},me);}}}),renderer:function(){return'...';}})}},this.sourceConfig);this.searchPanel=Ext.create('SearchPanel',{fieldNames:['name'],local:true,width:130,hideLabel:true});var showCodeBtn=Ext.create('Ext.Button',{scope:me,iconCls:'jsIcon',handler:me.showCode,tooltip:desLang.showCode});this.dataGrid=Ext.create('Ext.grid.property.Grid',{border:false,region:'center',split:true,scrollable:true,title:this.mainConfigTitle,tbar:[this.searchPanel,'->',showCodeBtn],sourceConfig:this.sourceConfig,customRenderers:this.customRenderers,nameColumnWidth:150,listeners:{propertychange:{fn:this.onChange,scope:this}},source:{}});this.searchPanel.store=this.dataGrid.getStore();var itemsList=[this.dataGrid];if(this.showEvents){this.eventsPanel=Ext.create('designer.eventsPanel',{title:desLang.events,controllerUrl:this.eventsControllerUrl,objectName:this.objectName,extraParams:this.extraParams,autoLoadData:this.autoLoadData,listeners:{'eventsUpdated':{fn:function(){this.fireEvent('eventsUpdated');},scope:this}}});itemsList.push(this.eventsPanel);} if(this.showMethods){this.methodsPanel=Ext.create('designer.methodsPanel',{title:desLang.methods,controllerUrl:this.methodsControllerUrl,objectName:this.objectName,extraParams:this.extraParams,autoLoadData:this.autoLoadData,listeners:{'methodsUpdated':{fn:function(){this.fireEvent('methodsUpdated');},scope:this}}});itemsList.push(this.methodsPanel);if(this.methodsSearch){this.methodsPanel.setSearchText(this.methodsSearch);this.methodsSearch=false;}} if(this.useTabs){this.tabs=Ext.create('Ext.tab.Panel',{items:itemsList});this.items=[this.tabs];}else{this.items=[this.dataGrid];} -this.callParent();if(this.autoLoadData){this.loadProperties();}},refreshEvents:function(){if(this.showEvents){this.eventsPanel.getStore().proxy.extraParams=this.extraParams;this.eventsPanel.getStore().load();}},refreshMethods:function(){if(this.showMethods){this.methodsPanel.getStore().proxy.extraParams=this.extraParams;this.methodsPanel.getStore().load();}},resetProperties:function(){this.dataGrid.getStore().removeAll();},loadProperties:function(){Ext.Ajax.request({url:this.controllerUrl+'list',method:'post',scope:this,params:this.extraParams,success:function(response){response=Ext.JSON.decode(response.responseText);if(response.success){if(!Ext.isEmpty(this.eventsPanel)&&!Ext.isEmpty(this.methodsPanel)){if(!Ext.isEmpty(response.data.isExtended)&&response.data.isExtended){this.eventsPanel.setCanEditLocalEvents(true);this.methodsPanel.enable();}else{this.eventsPanel.setCanEditLocalEvents(false);this.methodsPanel.disable();}} +this.callParent();if(this.autoLoadData){this.loadProperties();}},refreshEvents:function(){if(this.showEvents){this.eventsPanel.getStore().proxy.extraParams=this.extraParams;this.eventsPanel.getStore().load();}},refreshMethods:function(){if(this.showMethods){this.methodsPanel.getStore().proxy.extraParams=this.extraParams;this.methodsPanel.getStore().load();}},resetProperties:function(){this.dataGrid.getStore().removeAll();},loadProperties:function(){this.loadRequest=Ext.Ajax.request({url:this.controllerUrl+'list',method:'post',scope:this,params:this.extraParams,success:function(response){response=Ext.JSON.decode(response.responseText);if(response.success){if(!Ext.isEmpty(this.eventsPanel)&&!Ext.isEmpty(this.methodsPanel)){if(!Ext.isEmpty(response.data.isExtended)&&response.data.isExtended){this.eventsPanel.setCanEditLocalEvents(true);this.methodsPanel.enable();}else{this.eventsPanel.setCanEditLocalEvents(false);this.methodsPanel.disable();}} this.dataGrid.setSource(response.data);this.dataGrid.getStore().sort('name','ASC');this.fireEvent('afterLoad',response);}else{this.dataGrid.setSource({});}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},setExtraParams:function(params){this.extraParams=Ext.apply(this.extraParams,params);},getExtraParam:function(name){return this.extraParams[name];},getSearchText:function(){if(this.searchPanel.searchField){return this.searchPanel.searchField.getValue();} return false;},setSearchText:function(text){if(this.searchPanel){this.searchPanel.setValue(text);}},setEventsSearchText:function(text){if(this.eventsPanel){this.eventsPanel.setSearchText(text);}},setMethodsSearchText:function(text){if(this.methodsPanel){this.methodsPanel.setSearchText(text);}else{this.methodsSearch=text;}},getEventsSearchText:function(){if(!Ext.isEmpty(this.eventsPanel)){return this.eventsPanel.getSearchText();} return'';},getMethodsSearchText:function(){if(!Ext.isEmpty(this.methodsPanel)){return this.methodsPanel.getSearchText();} @@ -127,8 +128,12 @@ var params=Ext.apply({name:recordId,value:value},this.extraParams);Ext.Ajax.requ Ext.Msg.alert(appLang.MESSAGE,desLang.cantSaveProperty+' "'+recordId+'".'+msg);}else{this.fireEvent('dataSaved',recordId,value);designer.msg(desLang.msg,desLang.msg_propertySaved);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},resetSerchField:function(){this.searchPanel.searchField.reset();},showCode:function(){Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'code','objectcode']),method:'post',scope:this,params:{object:this.objectName},success:function(response){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);return;} var editor=Ext.create('designer.codeEditor',{sourceCode:response.data,readOnly:true});Ext.create('Ext.Window',{title:desLang.sourceCodeFor+' "'+this.objectName+'"',layout:'fit',width:750,height:600,modal:true,maximizable:true,items:[editor]}).show();},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},showDefaultsWindow:function(property){var me=this;var source=this.dataGrid.getSource();var data=[];if(!Ext.isEmpty(source[property])){var tmp=Ext.JSON.decode(source[property]);for(var i in tmp){if(typeof tmp[i]!='function'){data.push({'key':i,'value':tmp[i]});}}} var win=Ext.create('designer.defaultsWindow',{title:property,initialData:data});win.on('dataChanged',function(value){me.dataGrid.setProperty(property,value);},me);Ext.defer(function(){win.show().toFront();},50);},showParamsWindow:function(property){var me=this;var source=this.dataGrid.getSource();var data=[];if(!Ext.isEmpty(source[property])){var tmp=Ext.JSON.decode(source[property]);for(var i in tmp){if(typeof tmp[i]!='function'){data.push({'key':i,'value':tmp[i]});}}} -var win=Ext.create('designer.paramsWindow',{title:property,initialData:data});win.on('dataChanged',function(value){me.dataGrid.setProperty(property,value);},me);Ext.defer(function(){win.show().toFront();},50);}});Ext.define('designer.properties.Grid',{extend:'designer.properties.Panel',layout:'accordion',advancedForm:null,initComponent:function(){var me=this;this.mainConfigTitle=desLang.properties;this.tbar=[{iconCls:'gridIcon',tooltip:desLang.columns,scope:me,handler:me.showColumnsWindow}];this.sourceConfig=Ext.apply({'columns':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:this.showColumnsWindow,scope:this}}}),renderer:function(v){return'...';}}});this.advancedForm=Ext.create('Ext.form.Panel',{bodyCls:'formBody',title:desLang.advancedOptions,defaults:{margin:'3 3 3 3'},fieldDefaults:{labelWidth:150},frame:true,border:false,scrollable:true,items:[{xtype:'fieldset',title:desLang.grouping,checkboxName:'grouping',checkboxToggle:true,collapsed:true,items:[{name:'groupsummary',fieldLabel:desLang.useGroupSummary,xtype:'checkbox',value:1,uncheckedValue:0},{name:'startCollapsed',fieldLabel:desLang.startCollapsed,xtype:'checkbox',value:1,uncheckedValue:0},{name:'hideGroupedHeader',fieldLabel:desLang.hideGroupedHeader,xtype:'checkbox',value:1,uncheckedValue:0},{name:'enableGroupingMenu',fieldLabel:desLang.enableGroupingMenu,xtype:'checkbox',value:1,uncheckedValue:0},{name:'groupHeaderTpl',fieldLabel:'groupHeaderTpl',xtype:'textfield',anchor:'100%'},{name:'remoteRoot',fieldLabel:'remoteRoot',xtype:'textfield',anchor:'100%'}]},{xtype:'fieldset',checkboxName:'editable',title:desLang.editable,checkboxToggle:true,collapsed:true,items:[{fieldLabel:desLang.clicksToEdit,name:'clicksToEdit',xtype:'numberfield',value:1,minValue:1,maxValue:2,width:190,allowDecimals:false}]},{xtype:'fieldset',checkboxName:'rowexpander',title:desLang.rowExpander,checkboxToggle:true,collapsed:true,items:[{fieldLabel:desLang.expanderRowBodyTpl,name:'expander_rowbodytpl',xtype:'textfield',anchor:'100%'}]},{name:'summary',fieldLabel:desLang.useSummary,margin:'0 0 0 15',xtype:'checkbox'},{fieldLabel:desLang.paging,name:'paging',margin:'0 0 0 15',xtype:'checkbox'},{name:'checkboxSelection',fieldLabel:desLang.checkboxSelection,xtype:'checkbox',margin:'0 0 0 15'},{name:'numberedRows',fieldLabel:desLang.numberedRows,xtype:'checkbox',margin:'0 0 0 15'}],buttons:[{text:desLang.save,handler:this.saveAdvancedProperties,scope:this}]});this.callParent();this.add(this.advancedForm);this.advancedForm.load({url:app.createUrl([designer.controllerUrl,'grid','loadadvanced']),params:{object:this.objectName}});},showFiltersWindow:function(){Ext.create('designer.grid.filters.Window',{objectName:this.objectName,storeName:this.dataGrid.getSource().store,listeners:{dataSaved:{fn:function(){this.fireEvent('dataSaved');},scope:this}}}).show();},showColumnsWindow:function(){var win=Ext.create('designer.grid.column.Window',{title:desLang.gridColumnsConfig,objectName:this.objectName,storeName:this.dataGrid.getSource().store});win.show();},saveAdvancedProperties:function(){var handle=this;this.advancedForm.getForm().submit({clientValidation:true,waitMsg:appLang.SAVING,method:'post',url:app.createUrl([designer.controllerUrl,'grid','setadvanced']),params:{object:this.objectName},success:function(form,action){if(!action.result.success){Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}else{handle.fireEvent('dataSaved');}},failure:app.formFailure});}});Ext.define('designer.properties.GridColumn',{extend:'designer.properties.Panel',autoLoadData:false,initComponent:function(){var me=this;this.renderersStore=Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'renderers',reader:{type:'json',rootProperty:'data',idProperty:'id'},extraParams:{object:this.objectName},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'title',direction:'DESC'}]});var summaryEditor=Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',displayField:'title',valueField:'id',store:this.renderersStore});this.sourceConfig=Ext.apply({'summaryType':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',store:[['count','count'],['sum','sum'],['min','min'],['max','max'],['average','average']]}),renderer:function(v){if(Ext.isEmpty(v)){return'...';}else{return v;}}},'summaryRenderer':{editor:summaryEditor,renderer:app.comboBoxRenderer(summaryEditor)},'renderer':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:me.showRendererWindow,scope:me}}}),renderer:function(v){return'...';}},'items':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:me.showItemsWindow,scope:me}}}),renderer:function(v){return'...';}},'filter':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:me.showFilterWindow,scope:me}}}),renderer:function(v){return'...';}}},this.sourceConfig);this.callParent();},showRendererWindow:function(){var win=Ext.create('designer.grid.column.RendererWindow',{title:desLang.renderer,modal:true,objectName:this.objectName,columnId:this.extraParams.id,controllerUrl:this.controllerUrl});Ext.defer(function(){win.show().toFront();},50);},showItemsWindow:function() -{var win=Ext.create('designer.grid.column.ActionsWindow',{title:desLang.items,objectName:this.objectName,columnId:this.extraParams.id,controllerUrl:this.controllerUrl});Ext.defer(function(){win.show().toFront();},50);},showFilterWindow:function(){var win=Ext.create('designer.grid.column.FilterWindow',{title:desLang.filter,objectName:this.objectName,columnId:this.extraParams.id,controllerUrl:this.controllerUrl});Ext.defer(function(){win.show().toFront();},50);}});Ext.define('designer.properties.GridFilter',{extend:'designer.properties.Panel',autoLoadData:false,initComponent:function(){this.sourceConfig=Ext.apply({'options':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:this.showOptionsWindow,scope:this}}}),renderer:function(v){return'...';}}},this.sourceConfig);this.callParent();},showOptionsWindow:function(){var source=this.dataGrid.getSource();var result=[];var data=[];if(source.options.length){data=Ext.JSON.decode(source.options);} +var win=Ext.create('designer.paramsWindow',{title:property,initialData:data});win.on('dataChanged',function(value){me.dataGrid.setProperty(property,value);},me);Ext.defer(function(){win.show().toFront();},50);},destroy:function(){if(this.loadRequest&&this.loadRequest.destroy){this.loadRequest.abort();this.loadRequest.destroy();} +this.dataGrid.destroy();this.searchPanel.destroy();if(this.methodsPanel){this.methodsPanel.destroy();} +if(this.eventsPanel){this.eventsPanel.destroy();} +Ext.Object.each(this.sourceConfig,function(index,item){if(item.editor&&item.editor.destroy){if(item.getStore){item.getStore().destroy();} +item.editor.destroy();}});this.callParent(arguments)}});Ext.define('designer.properties.Grid',{extend:'designer.properties.Panel',layout:'accordion',advancedForm:null,initComponent:function(){var me=this;this.mainConfigTitle=desLang.properties;this.tbar=[{iconCls:'gridIcon',tooltip:desLang.columns,scope:me,handler:me.showColumnsWindow}];this.sourceConfig=Ext.apply({'columns':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:this.showColumnsWindow,scope:this}}}),renderer:function(v){return'...';}}});this.advancedForm=Ext.create('Ext.form.Panel',{bodyCls:'formBody',title:desLang.advancedOptions,defaults:{margin:'3 3 3 3'},fieldDefaults:{labelWidth:150},frame:true,border:false,scrollable:true,items:[{xtype:'fieldset',title:desLang.grouping,checkboxName:'grouping',checkboxToggle:true,collapsed:true,items:[{name:'groupsummary',fieldLabel:desLang.useGroupSummary,xtype:'checkbox',value:1,uncheckedValue:0},{name:'startCollapsed',fieldLabel:desLang.startCollapsed,xtype:'checkbox',value:1,uncheckedValue:0},{name:'hideGroupedHeader',fieldLabel:desLang.hideGroupedHeader,xtype:'checkbox',value:1,uncheckedValue:0},{name:'enableGroupingMenu',fieldLabel:desLang.enableGroupingMenu,xtype:'checkbox',value:1,uncheckedValue:0},{name:'groupHeaderTpl',fieldLabel:'groupHeaderTpl',xtype:'textfield',anchor:'100%'},{name:'remoteRoot',fieldLabel:'remoteRoot',xtype:'textfield',anchor:'100%'}]},{xtype:'fieldset',checkboxName:'editable',title:desLang.editable,checkboxToggle:true,collapsed:true,items:[{fieldLabel:desLang.clicksToEdit,name:'clicksToEdit',xtype:'numberfield',value:1,minValue:1,maxValue:2,width:190,allowDecimals:false}]},{xtype:'fieldset',checkboxName:'rowexpander',title:desLang.rowExpander,checkboxToggle:true,collapsed:true,items:[{fieldLabel:desLang.expanderRowBodyTpl,name:'expander_rowbodytpl',xtype:'textfield',anchor:'100%'}]},{name:'summary',fieldLabel:desLang.useSummary,margin:'0 0 0 15',xtype:'checkbox'},{fieldLabel:desLang.paging,name:'paging',margin:'0 0 0 15',xtype:'checkbox'},{name:'checkboxSelection',fieldLabel:desLang.checkboxSelection,xtype:'checkbox',margin:'0 0 0 15'},{name:'numberedRows',fieldLabel:desLang.numberedRows,xtype:'checkbox',margin:'0 0 0 15'}],buttons:[{text:desLang.save,handler:this.saveAdvancedProperties,scope:this}]});this.callParent();this.add(this.advancedForm);this.advancedForm.load({url:app.createUrl([designer.controllerUrl,'grid','loadadvanced']),params:{object:this.objectName}});},showFiltersWindow:function(){Ext.create('designer.grid.filters.Window',{objectName:this.objectName,storeName:this.dataGrid.getSource().store,listeners:{dataSaved:{fn:function(){this.fireEvent('dataSaved');},scope:this}}}).show();},showColumnsWindow:function(){var win=Ext.create('designer.grid.column.Window',{title:desLang.gridColumnsConfig,objectName:this.objectName,storeName:this.dataGrid.getSource().store});win.show();},saveAdvancedProperties:function(){var handle=this;this.advancedForm.getForm().submit({clientValidation:true,waitMsg:appLang.SAVING,method:'post',url:app.createUrl([designer.controllerUrl,'grid','setadvanced']),params:{object:this.objectName},success:function(form,action){if(!action.result.success){Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}else{handle.fireEvent('dataSaved');}},failure:app.formFailure});},destroy:function(){this.advancedForm.destroy();this.callParent(arguments);}});Ext.define('designer.properties.GridColumn',{extend:'designer.properties.Panel',autoLoadData:false,initComponent:function(){var me=this;this.renderersStore=Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'renderers',reader:{type:'json',rootProperty:'data',idProperty:'id'},extraParams:{object:this.objectName},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'title',direction:'DESC'}]});var summaryEditor=Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',displayField:'title',valueField:'id',store:this.renderersStore});this.sourceConfig=Ext.apply({'summaryType':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',store:[['count','count'],['sum','sum'],['min','min'],['max','max'],['average','average']]}),renderer:function(v){if(Ext.isEmpty(v)){return'...';}else{return v;}}},'summaryRenderer':{editor:summaryEditor,renderer:app.comboBoxRenderer(summaryEditor)},'renderer':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:me.showRendererWindow,scope:me}}}),renderer:function(v){return'...';}},'items':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:me.showItemsWindow,scope:me}}}),renderer:function(v){return'...';}},'filter':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:me.showFilterWindow,scope:me}}}),renderer:function(v){return'...';}}},this.sourceConfig);this.callParent();},showRendererWindow:function(){var win=Ext.create('designer.grid.column.RendererWindow',{title:desLang.renderer,modal:true,objectName:this.objectName,columnId:this.extraParams.id,controllerUrl:this.controllerUrl});Ext.defer(function(){win.show().toFront();},50);},showItemsWindow:function() +{var win=Ext.create('designer.grid.column.ActionsWindow',{title:desLang.items,objectName:this.objectName,columnId:this.extraParams.id,controllerUrl:this.controllerUrl});Ext.defer(function(){win.show().toFront();},50);},showFilterWindow:function(){var win=Ext.create('designer.grid.column.FilterWindow',{title:desLang.filter,objectName:this.objectName,columnId:this.extraParams.id,controllerUrl:this.controllerUrl});Ext.defer(function(){win.show().toFront();},50);},destroy:function(){this.renderersStore.destroy();this.callParent(arguments);}});Ext.define('designer.properties.GridFilter',{extend:'designer.properties.Panel',autoLoadData:false,initComponent:function(){this.sourceConfig=Ext.apply({'options':{editor:Ext.create('Ext.form.field.Text',{listeners:{focus:{fn:this.showOptionsWindow,scope:this}}}),renderer:function(v){return'...';}}},this.sourceConfig);this.callParent();},showOptionsWindow:function(){var source=this.dataGrid.getSource();var result=[];var data=[];if(source.options.length){data=Ext.JSON.decode(source.options);} if(!Ext.isEmpty(data)){Ext.each(data,function(record,index){result.push({value:record});});} var win=Ext.create('designer.grid.filterOptionsWindow',{objectName:this.objectName,controllerUrl:this.controllerUrl,initialData:result});win.on('dataChanged',this.dataGrid.setProperty,this.dataGrid);win.show();}});Ext.define('designer.properties.dataField',{extend:'designer.properties.Panel',fieldtypes:[['boolean'],['integer'],['float'],['string'],['date']],directions:[['ASC'],['DESC']],initComponent:function() {this.sourceConfig=Ext.apply({'type':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,typeAhead:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',forceSelection:true,store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.fieldtypes}),valueField:'id',displayField:'id',allowBlank:true})},'sortDir':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,typeAhead:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'local',forceSelection:true,store:Ext.create('Ext.data.ArrayStore',{fields:['id'],data:this.directions}),valueField:'id',displayField:'id',allowBlank:true})}});this.callParent();}});Ext.define('designer.properties.Store',{extend:'designer.properties.Panel',initComponent:function() @@ -145,7 +150,7 @@ if(source.validators.length){validators=Ext.JSON.decode(source.validators);} var win=Ext.create('designer.model.configWindow',{objectName:this.objectName,controllerUrl:this.controllerUrl,activeTab:activeTab,initFields:fields,initAssociations:associations,initValidators:validators});win.on('dataChanged',function(fields,associations,validators){this.dataGrid.setProperty('associations',associations,true);this.dataGrid.setProperty('validators',validators,true);},this);win.show();}});Ext.define('designer.properties.FieldTypeWindow',{extend:'Ext.Window',objectName:'',width:300,height:150,resizable:false,modal:true,setupForm:null,layout:'fit',controllerUrl:'',title:desLang.changeFieldType,constructor:function(){this.extraParams={};this.callParent(arguments);},initComponent:function(){this.setupForm=Ext.create('Ext.form.Panel',{region:'north',bodyCls:'formBody',border:false,autoHeight:true,fieldDefaults:{labelAlign:'left',anchor:'100%',labelWidth:150},defaults:{xtype:'textfield',margin:'3 3 3 3 '},items:[{fieldLabel:desLang.Type,xtype:'combobox',typeAhead:true,triggerAction:'all',selectOnTab:true,fieldLabel:desLang.type,labelWidth:80,name:'type',forceSelection:true,store:[['Form_Field_Checkbox','Checkbox'],['Form_Field_Combobox','Combobox'],['Form_Field_File','File'],['Form_Field_Hidden','Hidden'],['Form_Field_Htmleditor','Htmleditor'],['Form_Field_Number','Number'],['Form_Field_Radio','Radio'],['Form_Field_Text','Text'],['Form_Field_Textarea','Textarea'],['Form_Field_Time','Time'],['Form_Field_Date','Date'],['Form_Fieldset','Fieldset'],['Form_Field_Display','Display'],['Form_Fieldcontainer','Fieldcontainer'],['Form_Checkboxgroup','CheckboxGroup'],['Form_Radiogroup','Radiogroup'],['Form_Field_Adapter','Adapter']],listeners:{select:function(field,value,options){this.onTypeSelected(field.getValue());},scope:this}},{hidden:true,name:'adapter',xtype:'combobox',typeAhead:true,triggerAction:'all',selectOnTab:true,fieldLabel:desLang.adapter,labelWidth:80,matchFieldWidth:false,forceSelection:true,valueField:'id',displayField:'title',qyeryMode:'local',store:Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'listadapters',reader:{type:'json',rootProperty:'data',idProperty:'id'},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'title',direction:'DESC'}]}),listeners:{select:function(field,value,options){this.onAdapterSelected(field.getValue());},scope:this}},{hidden:true,name:'dictionary',xtype:'combobox',typeAhead:true,triggerAction:'all',selectOnTab:true,fieldLabel:desLang.dictionary,labelWidth:80,forceSelection:true,valueField:'id',displayField:'title',qyeryMode:'local',store:Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'listdictionaries',reader:{type:'json',rootProperty:'data',idProperty:'id'},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'title',direction:'DESC'}]})}]});this.items=[this.setupForm];this.buttons=[{text:desLang.save,scope:this,handler:this.saveType},{text:desLang.close,scope:this,handler:this.close}];this.callParent();},onTypeSelected:function(type){var form=this.setupForm.getForm();if(type=='Form_Field_Adapter'){form.findField('adapter').show();}else{form.findField('adapter').hide();form.findField('dictionary').hide();}},onAdapterSelected:function(adapter){var form=this.setupForm.getForm();if(adapter=='Ext_Component_Field_System_Dictionary'){form.findField('dictionary').show();}else{form.findField('dictionary').hide();}},saveType:function(){var type=this.setupForm.getForm().findField('type').getValue();if(type==='Form_Field_Adapter'){var adapter=this.setupForm.getForm().findField('adapter').getValue();if(!adapter){Ext.Msg.alert(appLang.MESSAGE,desLang.selectAdapter);return;} if(adapter==='Ext_Component_Field_System_Dictionary') {var dictionary=this.setupForm.getForm().findField('dictionary').getValue();if(!dictionary){Ext.Msg.alert(appLang.MESSAGE,desLang.selectDictionary);return;}}} -var me=this;var params=Ext.apply(this.extraParams,{'object':this.objectName});this.setupForm.getForm().submit({clientValidation:true,waitMsg:appLang.SAVING,method:'post',url:this.controllerUrl+'changetype',params:params,success:function(form,action){if(!action.result.success){Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}else{me.fireEvent('objectsUpdated');me.close();}},failure:app.formFailure});}});Ext.define('designer.properties.Field',{extend:'designer.properties.Panel',constructor:function(){this.tbar=[];this.callParent(arguments);},initComponent:function() +var me=this;var params=Ext.apply(this.extraParams,{'object':this.objectName});this.setupForm.getForm().submit({clientValidation:true,waitMsg:appLang.SAVING,method:'post',url:this.controllerUrl+'changetype',params:params,success:function(form,action){if(!action.result.success){Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}else{me.fireEvent('objectsUpdated');me.close();}},failure:app.formFailure});},destroy:function(){this.setupForm.destroy();this.callParent(arguments);}});Ext.define('designer.properties.Field',{extend:'designer.properties.Panel',constructor:function(){this.tbar=[];this.callParent(arguments);},initComponent:function() {this.tbar.push({text:desLang.changeFieldType,scope:this,handler:this.selectType});this.callParent();},selectType:function(){Ext.create('designer.properties.FieldTypeWindow',{objectName:this.objectName,controllerUrl:this.controllerUrl,extraParams:this.extraParams,listeners:{'objectsUpdated':{fn:function(){this.fireEvent('objectsUpdated');this.loadProperties();},scope:this}}}).show();}});Ext.define('designer.properties.Window',{extend:'designer.properties.Panel',initComponent:function() {if(!this.tbar){this.tbar=[];} this.tbar.push({icon:app.wwwRoot+'i/system/designer/window-open.png',text:desLang.showWindow,scope:this,handler:this.showWindow});this.callParent();},showWindow:function(){app.designer.switchView(0);app.designer.sendCommand({command:'showWindow',params:{name:this.objectName}});}});Ext.define('designer.properties.CrudWindow',{extend:'designer.properties.Window',initComponent:function() @@ -153,7 +158,7 @@ this.tbar.push({icon:app.wwwRoot+'i/system/designer/window-open.png',text:desLan this.tbar.push({iconCls:'importOrmIcon',tooltip:desLang.importOrm,scope:this,handler:this.showImportFromOrm});this.callParent();},showImportFromOrm:function(){this.importWindow=Ext.create('designer.ormSelectorWindow',{listeners:{select:{fn:this.importFields,scope:this}}});this.importWindow.show();},importFields:function(object,fields){this.importWindow.close();Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'crudwindow','importfields']),method:'post',scope:this,params:{'object':this.objectName,'importobject':object,'importfields[]':fields},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){this.application.onChange();}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});}});Ext.define('designer.properties.Form',{extend:'designer.properties.Panel',importWindow:null,initComponent:function() {this.tbar=[{iconCls:'importOrmIcon',tooltip:desLang.importOrm,scope:this,handler:this.showImportFromOrm},{iconCls:'importDbIcon',tooltip:desLang.importDb,scope:this,handler:this.showImportFromDb}];this.callParent();},showImportFromOrm:function(){this.importWindow=Ext.create('designer.ormSelectorWindow',{listeners:{select:{fn:this.importFields,scope:this}}});this.importWindow.show();},showImportFromDb:function(){this.importWindow=Ext.create('designer.importDBWindow',{listeners:{select:{fn:this.importDbFields,scope:this}}});this.importWindow.show();},importFields:function(object,fields){this.importWindow.close();Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'form','importfields']),method:'post',scope:this,params:{'object':this.objectName,'importobject':object,'importfields[]':fields},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){this.fireEvent('objectsUpdated');}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},importDbFields:function(fields,connection,table,contype){this.importWindow.close();Ext.Ajax.request({url:app.createUrl([designer.controllerUrl,'form','importdbfields']),method:'post',scope:this,params:{'object':this.objectName,'connection':connection,'table':table,'type':contype,'importfields[]':fields},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){this.fireEvent('objectsUpdated');}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});}});Ext.define('designer.properties.GridEditor',{extend:'designer.properties.Field',columnName:null,initComponent:function(){this.tbar.push({text:desLang.removeEditor,scope:this,handler:this.removeEditor,iconCls:'deleteIcon'});this.setExtraParams({column:this.columnName});this.callParent(arguments);},removeEditor:function() {Ext.Ajax.request({url:this.controllerUrl+'remove',method:'post',scope:this,params:this.extraParams,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){this.dataGrid.setSource({});this.fireEvent('editorRemoved',response);}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});this.fireEvent('editorRemoved');}});Ext.define('designer.properties.FilterComponent',{extend:'designer.properties.Panel',layout:'accordion',fieldProperties:null,initComponent:function() -{this.eventsControllerUrl=app.createUrl([designer.controllerUrl,'filterEvents','']);this.mainConfigTitle=desLang.properties;this.fieldsStore=Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'storefields',reader:{type:'json',rootProperty:'data',idProperty:'id'},extraParams:{object:this.objectName},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'id',direction:'ASC'}]});this.sourceConfig=Ext.apply({'storeField':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'remote',store:this.fieldsStore,valueField:'id',displayField:'id',allowBlank:true,forceSelection:false})},'type':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',store:[['Component',desLang.component],['Field',desLang.field]]})}});var me=this;this.callParent();this.fieldProperties=Ext.create('designer.properties.Field',{title:desLang.advancedOptions,controllerUrl:app.createUrl([designer.controllerUrl,'filter','']),objectName:this.objectName,application:me,showEvents:false});this.fieldProperties.on('dataSaved',function(){this.fireEvent('dataSaved');},this);this.fieldProperties.on('objectsUpdated',function(){this.fireEvent('objectsUpdated');},this);this.add(this.fieldProperties);}});Ext.define('designer.properties.Search',{extend:'designer.properties.Field',initComponent:function() +{this.eventsControllerUrl=app.createUrl([designer.controllerUrl,'filterEvents','']);this.mainConfigTitle=desLang.properties;this.fieldsStore=Ext.create('Ext.data.Store',{model:'app.comboStringModel',proxy:{type:'ajax',url:this.controllerUrl+'storefields',reader:{type:'json',rootProperty:'data',idProperty:'id'},extraParams:{object:this.objectName},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'id',direction:'ASC'}]});this.sourceConfig=Ext.apply({'storeField':{editor:Ext.create('Ext.form.ComboBox',{selectOnFocus:true,editable:true,triggerAction:'all',anchor:'100%',queryMode:'remote',store:this.fieldsStore,valueField:'id',displayField:'id',allowBlank:true,forceSelection:false})},'type':{editor:Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',store:[['Component',desLang.component],['Field',desLang.field]]})}});var me=this;this.callParent();this.fieldProperties=Ext.create('designer.properties.Field',{title:desLang.advancedOptions,controllerUrl:app.createUrl([designer.controllerUrl,'filter','']),objectName:this.objectName,application:me,showEvents:false});this.fieldProperties.on('dataSaved',function(){this.fireEvent('dataSaved');},this);this.fieldProperties.on('objectsUpdated',function(){this.fireEvent('objectsUpdated');},this);this.add(this.fieldProperties);},destroy:function(){this.fieldsStore.destroy();this.fieldProperties.destroy();this.callParent(arguments);}});Ext.define('designer.properties.Search',{extend:'designer.properties.Field',initComponent:function() {var me=this;this.sourceConfig=Ext.apply({'fieldNames':{editor:Ext.create('Ext.form.field.Text',{listeners:{'focus':{fn:me.namesEdior,scope:me}}}),renderer:function(v){return'...';}}},this.sourceConfig);this.callParent();},namesEdior:function(){var storeProperty=this.dataGrid.getSource().store;var fieldsList=this.dataGrid.getSource().fieldNames;if(fieldsList.length){fieldsList=Ext.JSON.decode(fieldsList);}else{fieldsList=[];} if(!storeProperty.length){Ext.Msg.alert(appLang.MESSAGE,desLang.selectDataStore);return;} Ext.create('designer.properties.SearchFieldsWindow',{fieldsStore:storeProperty,initData:fieldsList,listeners:{dataChanged:{fn:function(data){this.dataGrid.setProperty('fieldNames',data);this.fireEvent('dataChanged');},scope:this}}}).show();}});Ext.define('designer.properties.SearchFieldsWindow',{extend:'Ext.Window',width:200,height:300,title:'fieldNames',initData:null,dataGrid:null,dataStore:null,fieldsStore:null,closeAction:'destroy',resizable:false,layout:'fit',storeName:'',initComponent:function(){if(Ext.isEmpty(this.initData)){this.initData=[];}else{var data=[];Ext.each(this.initData,function(item){data.push([item]);},this);this.initData=data;} diff --git a/www/js/app/system/EditWindow.js b/www/js/app/system/EditWindow.js index ad5fc603..2f2d6324 100644 --- a/www/js/app/system/EditWindow.js +++ b/www/js/app/system/EditWindow.js @@ -446,5 +446,29 @@ Ext.define('app.editWindow',{ */ setExtraParam:function(name , value){ this.extraParams[name] = value; - } + }, + destroy:function(){ + var toDestroy = [ + this.rightPanel, + this.eastPanel, + this.historyPanel, + this.contentTabs, + this.contentPanel + ]; + + Ext.Array.each(toDestroy, function (item) { + if(item && item.destroy){ + item.destroy(); + } + }); + + Ext.Array.each(this.linkedComponents,function(item){ + if(item.destroy){ + item.destroy(); + } + }); + + toDestroy = null; + this.callParent(arguments); + } }); \ No newline at end of file diff --git a/www/js/app/system/ORM.js b/www/js/app/system/ORM.js index 77fdd6f6..371459bf 100644 --- a/www/js/app/system/ORM.js +++ b/www/js/app/system/ORM.js @@ -107,9 +107,11 @@ link.addTo(this.graph);this.allItems[umlItem].linksObj[umlItemLink]=link;}}} this.allIsRendered=true;},loadData:function(){Ext.Ajax.request({url:this.controllerUrl+'getumldata',params:this.params,method:'post',scope:this,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);}else{this.umlData=response.data.items;this.mapWidth=response.data.mapWidth;this.mapHeight=response.data.mapHeight;this.renderUML();}},failure:app.ajaxFailure});},saveMap:function(){var map={};var drawX=this.drawEl.getEl().getX();var drawY=this.drawEl.getEl().getY();Ext.Object.each(this.allItems,function(index,item){map[index]=item.get('position');map[index].links={};Ext.Object.each(this.allItems[index].linksObj,function(target,link){map[index].links[target]={};map[index].links[target]['vertices']=link.prop('vertices');});},this);this.getEl().mask(appLang.SAVING);Ext.Ajax.request({url:this.controllerUrl+'saveumlmap',method:'post',scope:this,params:{map:Ext.JSON.encode(map)},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);} this.getEl().unmask();},failure:function(){this.getEl().unmask();app.ajaxFailure(arguments);}});}});Ext.define('app.crud.orm.DataViewWindow',{extend:'Ext.window.Window',objectName:'',controllerUrl:'',width:800,height:600,maximizable:true,readOnly:false,layout:'fit',dataGrid:null,dataStore:null,searchField:null,isVc:null,primaryKey:'id',editorCfg:false,selectMode:false,closeOnSelect:true,modal:true,relatedGrids:null,initComponent:function(){if(this.selectMode){this.buttons=[{text:appLang.SELECT,scope:this,handler:this.selectItem},{text:appLang.CLOSE,scope:this,handler:this.close}];} this.callParent();this.on('show',function(){app.checkSize(this);this.loadInterface();},this);},loadInterface:function(){var me=this;me.getEl().mask(appLang.LOADING);Ext.Ajax.request({url:this.controllerUrl+'viewconfig',method:'post',params:{object:this.objectName},scope:this,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){Ext.Msg.alert(appLang.MESSAGE,response.msg);}else{this.configurate(response.data);} -me.getEl().unmask();},failure:function(){me.getEl().unmask();app.ajaxFailure(arguments);}});},configurate:function(data){this.dataStore=Ext.create('Ext.data.Store',{fields:data.fields,remoteSort:true,proxy:{type:'ajax',url:this.controllerUrl+'list',directionParam:"pager[dir]",limitParam:"pager[limit]",simpleSortMode:true,sortParam:"pager[sort]",startParam:"pager[start]",extraParams:{object:this.objectName},reader:{type:'json',idProperty:"id",rootProperty:"data",totalProperty:"count"},simpleSortMode:true},autoLoad:true});var cols=[];if(!this.selectMode) +me.getEl().unmask();},failure:function(){me.getEl().unmask();app.ajaxFailure(arguments);}});},configurate:function(data){this.dataStore=Ext.create('Ext.data.Store',{fields:data.fields,remoteSort:true,proxy:{type:'ajax',url:this.controllerUrl+'list',directionParam:"pager[dir]",limitParam:"pager[limit]",simpleSortMode:true,sortParam:"pager[sort]",startParam:"pager[start]",extraParams:{object:this.objectName},reader:{type:'json',idProperty:"id",rootProperty:"data",totalProperty:"count"}},autoLoad:true});var cols=[];if(!this.selectMode) {cols.push({xtype:'actioncolumn',width:30,items:[{iconCls:'editIcon',scope:this,tooltip:appLang.EDIT,handler:function(grid,rowIndex,colIndex){var rec=grid.getStore().getAt(rowIndex);this.showEdit(rec.get('id'));}}]});} -Ext.each(data.columns,function(item){cols.push(item);});var tBar=[];if(!this.selectMode&&!this.readOnly) +Ext.each(data.columns,function(item){cols.push(item);});if(!this.selectMode) +{cols.push({xtype:'actioncolumn',align:'center',width:30,items:[{iconCls:'deleteIcon',scope:this,tooltip:appLang.DELETE,handler:function(grid,rowIndex,colIndex){var rec=grid.getStore().getAt(rowIndex);this.deleteItem(rec.get('id'));}}]});} +var tBar=[];if(!this.selectMode&&!this.readOnly) {tBar.push({text:appLang.ADD_ITEM,scope:this,handler:function(){this.showEdit(0);}});} this.searchField=Ext.create('SearchPanel',{store:this.dataStore,isLocal:false,fieldNames:data.searchFields});tBar.push('->',this.searchField);this.dataGrid=Ext.create('Ext.grid.Panel',{columns:cols,selModel:Ext.create('Ext.selection.RowModel',{mode:'single'}),columnLines:true,store:this.dataStore,loadMask:true,tbar:tBar,viewConfig:{enableTextSelection:true},bbar:Ext.create("Ext.PagingToolbar",{store:this.dataStore,displayInfo:true,displayMsg:appLang.DISPLAYING_RECORDS+" {0} - {1} "+appLang.OF+" {2}",emptyMsg:appLang.NO_RECORDS_TO_DISPLAY})});if(this.selectMode){this.dataGrid.on('celldblclick',function(table,td,cellIndex,record,tr,rowIndex,e,eOpts){this.fireEvent('select',record);if(this.closeOnSelect){this.close();}},this);}else{this.dataGrid.on('celldblclick',function(table,td,cellIndex,record,tr,rowIndex,e,eOpts){this.showEdit(record.get(this.primaryKey));},this);} this.add(this.dataGrid);},selectItem:function() @@ -121,7 +123,8 @@ me.getEl().unmask();},failure:function(){me.getEl().unmask();app.ajaxFailure(arg {var win;var me=this;var related=this.editorCfg.related;var fields=Ext.JSON.decode(this.editorCfg.fields);this.relatedGrids=[];if(!Ext.isEmpty(related)){Ext.each(related,function(item){var grid=Ext.create('app.relatedGridPanel',{title:item.title,fieldName:item.field,listeners:{addItemCall:{fn:function(){Ext.create('app.crud.orm.DataViewWindow',{width:600,height:500,selectMode:true,closeOnSelect:false,objectName:item.object,controllerUrl:this.controllerUrl,isVc:this.isVc,title:item.title,readOnly:this.editorCfg.readOnly,primaryKey:this.editorCfg.primaryKey,listeners:{scope:this,select:function(record){if(record.get('published')!=undefined){published=record.get('published');}else{published=1;} me.relatedGrids[item.field].addRecord(app.relatedGridModel.create({'id':record.get('id'),'published':published,'title':record.get(item.titleField),'deleted':0}));}}}).show();},scope:this}}});this.relatedGrids[item.field]=grid;fields.push(grid);},this);} if(this.isVc){win=Ext.create('app.contentWindow',{width:800,height:800,objectName:this.objectName,hasPreview:false,items:fields,dataItemId:id,primaryKey:this.primaryKey,controllerUrl:this.controllerUrl+app.createUrl(['editorvc','']),canEdit:!this.readOnly,canDelete:!this.readOnly,canPublish:!this.readOnly,listeners:{dataSaved:{fn:function(){me.dataStore.load();},scope:me}}});}else{win=Ext.create('app.editWindow',{width:800,height:800,dataItemId:id,canEdit:!this.readOnly,canDelete:!this.readOnly,primaryKey:this.primaryKey,items:fields,objectName:this.objectName,controllerUrl:this.controllerUrl+app.createUrl(['editor','']),listeners:{dataSaved:{fn:function(){me.dataStore.load();},scope:me}}});} -win.show();}});Ext.define('app.crud.orm.ObjectField',{extend:'Ext.form.FieldContainer',alias:'widget.objectfield',triggerCls:'urlTrigger',dataField:null,triggerButton:null,layout:'vbox',onlyController:false,controllerUrl:'',objectName:'',value:"",isVc:'',fieldLabel:'',initComponent:function(){var me=this;this.dataField=Ext.create('Ext.form.field.Text',{anchor:"100%",readOnly:true,name:this.name,listeners:{change:{fn:this.getObjectTitle,scope:this}}});this.dataFieldLabel=Ext.create('Ext.form.field.Display',{anchor:"100%",value:"..."});this.triggerButton=Ext.create('Ext.button.Button',{iconCls:'searchIcon',width:20,scope:me,tooltip:appLang.SELECT,handler:function(){var win=Ext.create('app.crud.orm.DataViewWindow',{width:600,height:500,selectMode:true,objectName:this.objectName,controllerUrl:this.controllerUrl,isVc:this.isVc,title:this.fieldLabel,listeners:{scope:me,select:function(record){me.setValue(record.get('id'));me.fireEvent('completeEdit');}}});win.show();app.checkSize(win);}});this.removeButton=Ext.create('Ext.button.Button',{iconCls:'deleteIcon',width:20,tooltip:appLang.CLEAR,scope:me,handler:function(){me.setValue("");}});var valueContainer={anchor:"100%",xtype:'fieldcontainer',layout:'hbox',items:[this.dataField,this.triggerButton,this.removeButton]};this.items=[this.dataFieldLabel,valueContainer];this.callParent();},setValue:function(value){this.dataField.setValue(value);},getValue:function(){return this.dataField.getValue();},reset:function(){this.dataField.reset();},isValid:function(){return true;},getObjectTitle:function(){var me=this;var curValue=me.getValue();if(curValue==""||curValue==0){me.dataFieldLabel.setValue('');return;} +win.show();},deleteItem:function(itemId){if(!Ext.isNumeric(itemId)){return false;} +var me=this;Ext.Ajax.request({url:this.controllerUrl+'delete',waitMsg:appLang.PROCESSING,method:'post',params:{'id':itemId,'d_object':this.objectName},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){me.dataStore.load();}else{Ext.MessageBox.alert(appLang.MESSAGE,response.msg);}}});}});Ext.define('app.crud.orm.ObjectField',{extend:'Ext.form.FieldContainer',alias:'widget.objectfield',triggerCls:'urlTrigger',dataField:null,triggerButton:null,layout:'vbox',onlyController:false,controllerUrl:'',objectName:'',value:"",isVc:'',fieldLabel:'',initComponent:function(){var me=this;this.dataField=Ext.create('Ext.form.field.Text',{anchor:"100%",readOnly:true,name:this.name,listeners:{change:{fn:this.getObjectTitle,scope:this}}});this.dataFieldLabel=Ext.create('Ext.form.field.Display',{anchor:"100%",value:"..."});this.triggerButton=Ext.create('Ext.button.Button',{iconCls:'searchIcon',width:20,scope:me,tooltip:appLang.SELECT,handler:function(){var win=Ext.create('app.crud.orm.DataViewWindow',{width:600,height:500,selectMode:true,objectName:this.objectName,controllerUrl:this.controllerUrl,isVc:this.isVc,title:this.fieldLabel,listeners:{scope:me,select:function(record){me.setValue(record.get('id'));me.fireEvent('completeEdit');}}});win.show();app.checkSize(win);}});this.removeButton=Ext.create('Ext.button.Button',{iconCls:'deleteIcon',width:20,tooltip:appLang.CLEAR,scope:me,handler:function(){me.setValue("");}});var valueContainer={anchor:"100%",xtype:'fieldcontainer',layout:'hbox',items:[this.dataField,this.triggerButton,this.removeButton]};this.items=[this.dataFieldLabel,valueContainer];this.callParent();},setValue:function(value){this.dataField.setValue(value);},getValue:function(){return this.dataField.getValue();},reset:function(){this.dataField.reset();},isValid:function(){return true;},getObjectTitle:function(){var me=this;var curValue=me.getValue();if(curValue==""||curValue==0){me.dataFieldLabel.setValue('');return;} me.dataFieldLabel.getEl().mask(appLang.LOADING);Ext.Ajax.request({url:this.controllerUrl+'otitle',method:'post',params:{object:this.objectName,id:curValue},scope:this,success:function(response,request){response=Ext.JSON.decode(response.responseText);if(!response.success){me.dataFieldLabel.getEl().unmask();Ext.Msg.alert(appLang.MESSAGE,response.msg);}else{me.dataFieldLabel.getEl().unmask();me.dataFieldLabel.setValue(response.data.title);me.updateLayout();}},failure:function(){me.dataFieldLabel.getEl().unmask();app.ajaxFailure(arguments);}});}});Ext.ns('app.orm.connections');Ext.define('app.orm.connections.Window',{extend:'Ext.Window',dataGrid:null,dataStore:null,controllerUrl:'',dbConfigs:null,modal:true,constructor:function(config){config=Ext.apply({title:appLang.DB_CONNECTIONS,width:700,height:300,layout:'fit',closeAction:'destroy',maximizable:true},config||{});this.callParent(arguments);},initComponent:function(){var me=this;var defaultConnectionId=this.dbConfigs[0]['id'];this.dataStore=Ext.create('Ext.data.Store',{fields:[{name:'id',type:'string'},{name:'system',type:'boolean'},{name:'devType',type:'integer'},{name:'username',type:'string'},{name:'dbname',type:'string'},{name:'host',type:'string'},{name:'adapter',type:'string'}],proxy:{type:'ajax',url:this.controllerUrl+'list',extraParams:{devType:defaultConnectionId},reader:{type:'json',rootProperty:'data',idProperty:'id'},simpleSortMode:true},remoteSort:false,autoLoad:true,sorters:[{property:'id',direction:'DESC'}]});this.filter=Ext.create('Ext.form.field.ComboBox',{typeAhead:true,triggerAction:'all',selectOnTab:true,labelWidth:80,forceSelection:true,queryMode:'local',displayField:'title',valueField:'id',value:defaultConnectionId,store:Ext.create('Ext.data.Store',{fields:[{name:'id',type:'integer'},{name:'title',type:'string'}],data:this.dbConfigs}),listeners:{change:{fn:function(){this.dataStore.proxy.setExtraParam('devType',this.filter.getValue());this.dataStore.load();},scope:this}}});this.dataGrid=Ext.create('Ext.grid.Panel',{store:this.dataStore,viewConfig:{stripeRows:false},frame:false,loadMask:true,columnLines:true,scrollable:true,forceFit:true,viewConfig:{enableTextSelection:true},tbar:[{text:appLang.ADD_ITEM,handler:function(){this.showEditWindow(false,this.filter.getValue());},scope:this},'-',appLang.TYPE,this.filter],columns:[{xtype:'actioncolumn',width:30,items:[{iconCls:'editIcon',width:30,scope:this,handler:function(grid,rowIndex,colIndex){var rec=this.dataStore.getAt(rowIndex);this.showEditWindow(rec.get('id'),rec.get('devType'));}}]},{text:appLang.NAME,dataIndex:'id'},{sortable:true,text:appLang.DB_HOST,dataIndex:'host',align:'center'},{sortable:true,text:appLang.DB_NAME,dataIndex:'dbname',align:'center'},{sortable:true,text:appLang.USER,dataIndex:'username',align:'center'},{sortable:true,text:appLang.DB_ADAPTER,dataIndex:'adapter',align:'center'},{width:30,align:'center',dataIndex:'system',colid:'deleteindex',renderer:function(value,metaData,record,rowIndex,colIndex,store){if(value){return'';}else{return'';}}}],listeners:{'itemdblclick':{fn:function(view,record,number,event,options){this.showEditWindow(record.get('id'),record.get('devType'));},scope:this},'cellclick':{fn:function(grid,cell,columnIndex,record,node,rowIndex,evt){var column=grid.getHeaderCt().getHeaderAtIndex(columnIndex).colid;if(record.get('primary')) return;switch(column){case'deleteindex':if(record.get('system')){return;} this.removeItem(record);break;}},scope:this}}});this.items=[this.dataGrid];this.callParent();this.on('show',function(){app.checkSize(this);});},removeItem:function(record){Ext.Ajax.request({url:this.controllerUrl+'remove',method:'post',scope:this,params:{'id':record.get('id')},success:function(response,request){response=Ext.JSON.decode(response.responseText);if(response.success){this.dataStore.remove(record);}else{Ext.Msg.alert(appLang.MESSAGE,response.msg);}},failure:function(){Ext.Msg.alert(appLang.MESSAGE,appLang.MSG_LOST_CONNECTION);}});},showEditWindow:function(id,devtype){var win=Ext.create('app.orm.connections.EditWindow',{recordId:id,devType:devtype,controllerUrl:this.controllerUrl});win.on('dataSaved',function(){this.dataStore.load();},this);win.show();}});Ext.define('app.orm.connections.EditWindow',{extend:'Ext.Window',dataForm:null,recordId:null,controllerUrl:'',devType:false,recordId:false,constructor:function(config){config=Ext.apply({title:appLang.DB_CONNECTIONS,width:400,height:430,layout:'fit',modal:true,closeAction:'destroy',maximizable:false},config||{});this.callParent(arguments);},initComponent:function(){this.dataForm=Ext.create('Ext.form.Panel',{bodyCls:'formBody',bodyPadding:10,fieldDefaults:{anchor:'100%',labelWidth:140},items:[{xtype:'textfield',fieldLabel:appLang.NAME,allowBlank:false,vtype:'alphanum',value:'',name:'id'},{xtype:'textfield',fieldLabel:appLang.DB_HOST,allowBlank:false,name:'host'},{xtype:'textfield',fieldLabel:appLang.DB_PORT,allowBlank:true,name:'port'},{xtype:'textfield',fieldLabel:appLang.DB_NAME,allowBlank:false,name:'dbname'},{xtype:'textfield',fieldLabel:appLang.DB_CHARSET,allowBlank:false,value:'UTF8',name:'charset'},{xtype:'textfield',fieldLabel:appLang.DB_PREFIX,name:'prefix'},Ext.create('Ext.form.field.ComboBox',{xtype:'combo',name:'adapter',fieldLabel:appLang.DB_ADAPTER,queryMode:'local',allowBlank:false,forceSelection:true,displayField:'title',valueField:'title',value:'Mysqli',store:Ext.create('Ext.data.Store',{fields:[{name:'title',type:'string'}],data:[{title:'Mysqli'}],sorters:[{property:'title',direction:'ASC'}]})}),Ext.create('Ext.form.field.ComboBox',{xtype:'combo',allowBlank:false,name:'adapterNamespace',fieldLabel:appLang.DB_ADAPTER_NAMESPACE,queryMode:'local',forceSelection:true,displayField:'title',valueField:'id',value:'Db_Adapter',store:Ext.create('Ext.data.Store',{fields:[{name:'id',type:'string'},{name:'title',type:'string'}],data:[{title:'DVelum (recomended)',id:'Db_Adapter'},{title:'Zend',id:'Zend_Db_Adapter'}],sorters:[{property:'title',direction:'ASC'}]})}),{xtype:'textfield',fieldLabel:appLang.USER,allowBlank:false,name:'username'},{name:'setpass',value:1,readOnly:true,fieldLabel:appLang.CHANGE_PASSWORD,submitValue:true,checked:true,readOnly:true,xtype:'checkbox',listeners:{change:{fn:this.denyBlankPassword,scope:this,buffer:350}}},{fieldLabel:appLang.PASSWORD,inputType:"password",name:"password",xtype:"textfield",enableKeyEvents:true,allowBlank:false},{fieldLabel:appLang.PASSWORD_CONFIRM,inputType:"password",name:"pass2",submitValue:false,xtype:"textfield",enableKeyEvents:true,vtype:'password',initialPassField:'password',allowBlank:false}]});this.buttons=[{text:appLang.TEST,scope:this,handler:this.testAction},{text:appLang.SAVE,scope:this,handler:this.saveAction},{text:appLang.CANCEL,scope:this,handler:this.close},];this.items=[this.dataForm];this.callParent(arguments);if(this.recordId){this.dataForm.load({url:this.controllerUrl+'load',params:{id:this.recordId,devType:this.devType},scope:this,success:function(form,action){if(action.result.success){form.findField('setpass').enable();form.findField('setpass').setValue(false);form.findField('setpass').setReadOnly(false);}else{Ext.Msg.alert(appLang.MESSAGE,action.result.msg);}},failure:app.formFailure});}},denyBlankPassword:function(field,bool){var handle=this.dataForm.getForm();if(!bool){handle.findField('password').disable();handle.findField('pass2').disable();}else{handle.findField('password').enable();handle.findField('pass2').enable();} diff --git a/www/js/app/system/ObjectLink.js b/www/js/app/system/ObjectLink.js index e4316f5c..affc16e7 100644 --- a/www/js/app/system/ObjectLink.js +++ b/www/js/app/system/ObjectLink.js @@ -20,6 +20,7 @@ Ext.define('app.objectLink.Field',{ layout:'fit', readOnly:false, allowBlank:true, + valueType:'integer', /** * Extra params for requests * @property {Object} @@ -108,6 +109,7 @@ Ext.define('app.objectLink.Field',{ objectName:this.objectName, controllerUrl:this.controllerUrl + this.ajaxActions.list, title:this.fieldLabel, + valueType:this.valueType, extraParams:this.extraParams }); @@ -226,6 +228,7 @@ Ext.define('app.objectLink.SelectWindow',{ objectName:'', fieldName:'', singleSelect:true, + valueType:'integer', /** * Extra params for requests * @property {Object} @@ -243,7 +246,7 @@ Ext.define('app.objectLink.SelectWindow',{ this.dataStore = Ext.create('Ext.data.Store',{ fields:[ - {name:'id' , type:'integer'}, + {name:'id' , type:this.valueType}, {name:'title' , type:'string'}, {name:'published' , type:'boolean'}, {name:'deleted' , type:'boolean'} @@ -337,6 +340,7 @@ Ext.define('app.objectLink.Panel',{ alias:'widget.objectlinkpanel', name:'', objectName:'', + valueType:'integer', controllerUrl:'', initComponent:function(){ @@ -350,6 +354,7 @@ Ext.define('app.objectLink.Panel',{ height:500, selectMode:true, objectName:this.objectName, + valueType:this.valueType, controllerUrl:this.controllerUrl + 'linkedlist', title:this.fieldLabel, extraParams:this.extraParams diff --git a/www/js/app/system/SearchPanel.js b/www/js/app/system/SearchPanel.js index 18efdf9d..863b302c 100755 --- a/www/js/app/system/SearchPanel.js +++ b/www/js/app/system/SearchPanel.js @@ -8,152 +8,165 @@ * */ Ext.define('SearchPanel', { - extend:'Ext.toolbar.Toolbar', - alias:'widget.searchpanel', - /** - * @var {Ext.form.TextField} - */ - searchField:null, - /** - * @var {Ext.Button} - */ - resetButton:null, - /** - * @var {Ext.data.Store} - */ - store:null, - /** - * @var {Array} - */ - fieldNames:[], - /** - * @property string - local / remote - */ - local:false, - /** - * @property string - last search query - */ - lastQuery:'', - /** - * @property string request param - */ - searchParam:'search', + extend:'Ext.toolbar.Toolbar', + alias:'widget.searchpanel', + /** + * @var {Ext.form.TextField} + */ + searchField:null, + /** + * @var {Ext.Button} + */ + resetButton:null, + /** + * @var {Ext.data.Store} + */ + store:null, + /** + * @var {Array} + */ + fieldNames:[], + /** + * @property string - local / remote + */ + local:false, + /** + * @property string - last search query + */ + lastQuery:'', + /** + * @property string request param + */ + searchParam:'search', + /** + * @property integer - minimum chars for start search + */ + minChars:0, + /** + * Default field label + * @property string + */ + fieldLabel:null, - constructor: function(config) { + constructor: function(config) { - config = Ext.apply({ - frame:false, - border:false, - bodyBorder:false, - width:230, - hideLabel:false, - frame:false, - style: { - border:0 - } - } , config || {}); + config = Ext.apply({ + frame:false, + border:false, + bodyBorder:false, + width:230, + hideLabel:false, + style: { + border:0 + }, + fieldLabel:appLang.SEARCH + ':' + } , config || {}); - this.callParent(arguments); - }, + this.callParent(arguments); + }, - initComponent:function(){ + initComponent:function(){ - this.resetButton = Ext.create('Ext.Button',{ - iconCls:'deleteIcon', - flat:false, - tooltip:appLang.RESET_SEARCH, - listeners:{ - 'click':{ - fn:function(){ - this.searchField.setValue(''); - this.clearFilter(); - }, - scope:this - } - } - }); + this.resetButton = Ext.create('Ext.Button',{ + iconCls:'deleteIcon', + flat:false, + tooltip:appLang.RESET_SEARCH, + listeners:{ + 'click':{ + fn:function(){ + this.searchField.setValue(''); + this.clearFilter(); + }, + scope:this + } + } + }); - this.searchField = Ext.create('Ext.form.field.Text',{ - enableKeyEvents:true, - flex:2, - listeners:{ - 'keyup' : { - fn:this.startFilter, - buffer:700, - scope: this - } - } - }); + this.searchField = Ext.create('Ext.form.field.Text',{ + enableKeyEvents:true, + flex:2, + listeners:{ + 'keyup' : { + fn:this.startFilter, + buffer:700, + scope: this + } + } + }); - this.items = []; + this.items = []; - if(!this.hideLabel){ - this.items.push(appLang.SEARCH+':'); - } + if(!this.hideLabel){ + this.items.push(this.fieldLabel); + } - this.items.push(this.searchField , this.resetButton); - this.callParent(arguments); - }, - /** - * Clear filter - */ - clearFilter:function(){ - this.store.clearFilter(); - this.lastQuery = ''; - if(!this.local){ - this.store.proxy.setExtraParam(this.searchParam , ''); - this.store.load({ - scope: this, - callback: function(records, operation, success) { - this.fireEvent('reset'); - } - }); - }else{ - this.fireEvent('reset'); - } - }, - /** - * Start filtering data - */ - startFilter : function(){ - var query = this.searchField.getValue(); + this.items.push(this.searchField , this.resetButton); + this.callParent(arguments); + }, + /** + * Clear filter + */ + clearFilter:function(){ + this.store.clearFilter(); + this.lastQuery = ''; + if(!this.local){ + this.store.proxy.setExtraParam(this.searchParam , ''); + this.store.load({ + scope: this, + callback: function(records, operation, success) { + this.fireEvent('reset'); + } + }); + }else{ + this.fireEvent('reset'); + } + }, + /** + * Start filtering data + */ + startFilter : function(){ + var query = this.searchField.getValue(); - if(this.lastQuery === query){ - return; - } + if(this.lastQuery === query){ + return; + } - if(this.local){ - this.clearFilter(); - this.store.filter({fn:this.isSearched,scope:this}); - } else{ - this.store.getProxy().setExtraParam(this.searchParam , this.searchField.getValue()); - this.store.loadPage(1); - } - this.lastQuery = query; - }, - /** - * Record filter function - */ - isSearched : function(record){ - var flag = false; - var recordHandle = record; - var searchText = this.searchField.getValue(); - var pattern = new RegExp(searchText,"gi"); + if(query.length < this.minChars){ + return; + } - Ext.each(this.fieldNames, function(item){ - if(pattern.exec(recordHandle.get(item)) != null){ - flag = true; - return; - } - }, this); + if(this.local){ + this.clearFilter(); + this.store.filter({fn:this.isSearched,scope:this}); + } else{ + this.store.getProxy().setExtraParam(this.searchParam , this.searchField.getValue()); + this.store.loadPage(1); + } + this.lastQuery = query; + }, + /** + * Record filter function + */ + isSearched : function(record){ + var flag = false; + var recordHandle = record; + var searchText = this.searchField.getValue(); + var pattern = new RegExp(searchText,"gi"); - return flag; - }, - setValue : function(text){ - this.searchField.setValue(text); - this.startFilter(); - }, - getValue : function(){ - return this.searchField.getValue(); - } + Ext.each(this.fieldNames, function(item){ + if(pattern.exec(recordHandle.get(item)) != null){ + flag = true; + return; + } + }, this); + + return flag; + }, + setValue : function(text){ + this.searchField.setValue(text); + this.startFilter(); + }, + getValue : function(){ + return this.searchField.getValue(); + } }); \ No newline at end of file diff --git a/www/js/app/system/common.js b/www/js/app/system/common.js index ba12118c..0d819f35 100644 --- a/www/js/app/system/common.js +++ b/www/js/app/system/common.js @@ -395,12 +395,14 @@ app.progressRenderer = function(value, metaData, record, rowIndex, colIndex, sto * @param {Object} eOpts - The options object passed to Ext.util.Observable.addListener. */ app.storeException = function(proxy, response, operation, eOpts){ + if(response.aborted){ + return; + } if(response.responseText === null){ Ext.Msg.alert(appLang.MESSAGE, appLang.INVALID_RESPONSE); } - var resp = Ext.JSON.decode(response.responseText); - if(resp.msg != null){ + if(resp && resp.msg != null){ Ext.Msg.alert(appLang.MESSAGE, resp.msg); }else{ Ext.Msg.alert(appLang.MESSAGE, appLang.INVALID_RESPONSE); diff --git a/www/js/app/system/designer/eventsPanel.js b/www/js/app/system/designer/eventsPanel.js index 1823fb53..ea1de36c 100644 --- a/www/js/app/system/designer/eventsPanel.js +++ b/www/js/app/system/designer/eventsPanel.js @@ -309,5 +309,9 @@ Ext.define('designer.eventsPanel',{ */ setSearchText:function(text){ this.searchField.setValue(text); + }, + destroy:function(){ + this.store.destroy(); + this.callParent(arguments); } }); \ No newline at end of file diff --git a/www/js/app/system/designer/methodsPanel.js b/www/js/app/system/designer/methodsPanel.js index 48fea327..660365d3 100644 --- a/www/js/app/system/designer/methodsPanel.js +++ b/www/js/app/system/designer/methodsPanel.js @@ -18,7 +18,6 @@ Ext.define('designer.methodsPanel',{ objectName:'', controllerUrl:'', columnLines:true, - searchField:null, addButton:null, autoLoadData:true, extraParams:null, @@ -229,6 +228,11 @@ Ext.define('designer.methodsPanel',{ */ setSearchText:function(text){ this.searchField.setValue(text); - } + }, + destroy:function(){ + this.searchField.destroy(); + this.store.destroy(); + this.callParent(arguments); + } }); diff --git a/www/js/app/system/designer/properties.js b/www/js/app/system/designer/properties.js index a645dcfd..33e93356 100644 --- a/www/js/app/system/designer/properties.js +++ b/www/js/app/system/designer/properties.js @@ -1,5 +1,21 @@ Ext.ns('designer.properties'); +Ext.define('designer.properties.idStringModel',{ + extend: 'Ext.data.Model', + idProperty:'id', + fields:[ + {name:'id', type:'string'} + ] +}); + +Ext.define('designer.properties.nameTitleModel',{ + extend: 'Ext.data.Model', + idProperty:'name', + fields:[ + {name:'name', type:'string'}, + {name:'title', type:'string'} + ] +}); /** * Properties editor base * @@ -79,6 +95,7 @@ Ext.define('designer.properties.Panel', { this.objectNames = {}; + this.sourceConfig = Ext.apply({ 'region': { @@ -89,7 +106,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.regionData }), valueField: 'id', @@ -107,7 +124,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.layoutData }), valueField: 'id', @@ -123,7 +140,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.dockData }), valueField: 'id', @@ -139,7 +156,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.alignData }), valueField: 'id', @@ -155,7 +172,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.alignData }), valueField: 'id', @@ -171,7 +188,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.labelAlignData }), valueField: 'id', @@ -187,7 +204,7 @@ Ext.define('designer.properties.Panel', { anchor: '100%', queryMode: 'local', store: Ext.create('Ext.data.ArrayStore', { - fields: ['id'], + model:'designer.properties.idStringModel', data: this.iconAlignData }), valueField: 'id', @@ -385,10 +402,7 @@ Ext.define('designer.properties.Panel', { rootProperty: 'data' } }, - fields: [ - {name: 'name', type: 'string'}, - {name: 'title', type: 'string'} - ], + model:'designer.properties.nameTitleModel', autoLoad: true, listeners: { scope: me, @@ -543,7 +557,7 @@ Ext.define('designer.properties.Panel', { * Load object properties */ loadProperties: function () { - Ext.Ajax.request({ + this.loadRequest = Ext.Ajax.request({ url: this.controllerUrl + 'list', method: 'post', scope: this, @@ -784,5 +798,28 @@ Ext.define('designer.properties.Panel', { Ext.defer(function () { win.show().toFront(); }, 50); + }, + destroy:function(){ + if(this.loadRequest && this.loadRequest.destroy){ + this.loadRequest.abort(); + this.loadRequest.destroy(); + } + this.dataGrid.destroy(); + this.searchPanel.destroy(); + if(this.methodsPanel){ + this.methodsPanel.destroy(); + } + if(this.eventsPanel){ + this.eventsPanel.destroy(); + } + Ext.Object.each(this.sourceConfig,function(index, item){ + if(item.editor && item.editor.destroy){ + if(item.getStore){ + item.getStore().destroy(); + } + item.editor.destroy(); + } + }); + this.callParent(arguments) } }); \ No newline at end of file diff --git a/www/js/app/system/designer/properties/column.js b/www/js/app/system/designer/properties/column.js index c3e3af97..62d65742 100644 --- a/www/js/app/system/designer/properties/column.js +++ b/www/js/app/system/designer/properties/column.js @@ -34,7 +34,7 @@ Ext.define('designer.properties.GridColumn',{ }] }); - var summaryEditor = Ext.create('Ext.form.field.ComboBox',{ + var summaryEditor = Ext.create('Ext.form.field.ComboBox',{ typeAhead: true, triggerAction: 'all', selectOnTab: true, @@ -146,5 +146,9 @@ Ext.define('designer.properties.GridColumn',{ Ext.defer(function () { win.show().toFront(); }, 50); + }, + destroy:function(){ + this.renderersStore.destroy(); + this.callParent(arguments); } }); diff --git a/www/js/app/system/designer/properties/field.js b/www/js/app/system/designer/properties/field.js index 288805fb..15cbec3f 100644 --- a/www/js/app/system/designer/properties/field.js +++ b/www/js/app/system/designer/properties/field.js @@ -223,7 +223,11 @@ Ext.define('designer.properties.FieldTypeWindow',{ }, failure: app.formFailure }); - } + }, + destroy:function(){ + this.setupForm.destroy(); + this.callParent(arguments); + } }); diff --git a/www/js/app/system/designer/properties/filterComponent.js b/www/js/app/system/designer/properties/filterComponent.js index 683d9bf8..8eb1e2b9 100644 --- a/www/js/app/system/designer/properties/filterComponent.js +++ b/www/js/app/system/designer/properties/filterComponent.js @@ -92,5 +92,10 @@ Ext.define('designer.properties.FilterComponent',{ },this); this.add(this.fieldProperties); - } + }, + destroy:function(){ + this.fieldsStore.destroy(); + this.fieldProperties.destroy(); + this.callParent(arguments); + } }); diff --git a/www/js/app/system/designer/properties/grid.js b/www/js/app/system/designer/properties/grid.js index 5acd93fc..f0153fc9 100644 --- a/www/js/app/system/designer/properties/grid.js +++ b/www/js/app/system/designer/properties/grid.js @@ -209,5 +209,9 @@ Ext.define('designer.properties.Grid',{ }, failure: app.formFailure }); - } + }, + destroy:function(){ + this.advancedForm.destroy(); + this.callParent(arguments); + } }); \ No newline at end of file diff --git a/www/js/app/system/orm/dataViewWindow.js b/www/js/app/system/orm/dataViewWindow.js index 035a3f51..ecf7336d 100644 --- a/www/js/app/system/orm/dataViewWindow.js +++ b/www/js/app/system/orm/dataViewWindow.js @@ -93,8 +93,7 @@ Ext.define('app.crud.orm.DataViewWindow', { idProperty:"id", rootProperty:"data", totalProperty:"count" - }, - simpleSortMode: true + } }, autoLoad: true }); @@ -126,7 +125,28 @@ Ext.define('app.crud.orm.DataViewWindow', { cols.push(item); }); - var tBar = []; + if(!this.selectMode) + { + cols.push( + { + xtype:'actioncolumn', + align:'center', + width:30, + items:[ + { + iconCls:'deleteIcon', + scope:this, + tooltip:appLang.DELETE, + handler:function(grid, rowIndex, colIndex){ + var rec = grid.getStore().getAt(rowIndex); + this.deleteItem(rec.get('id')); + } + } + ] + }); + } + + var tBar = []; if(!this.selectMode && !this.readOnly) { @@ -321,5 +341,31 @@ Ext.define('app.crud.orm.DataViewWindow', { }); } win.show(); - } + }, + /** + * Delete record + */ + deleteItem : function(itemId){ + if(!Ext.isNumeric(itemId)){ + return false; + } + var me = this; + Ext.Ajax.request({ + url: this.controllerUrl + 'delete', + waitMsg:appLang.PROCESSING, + method: 'post', + params: { + 'id':itemId, + 'd_object':this.objectName + }, + success: function(response, request) { + response = Ext.JSON.decode(response.responseText); + if(response.success){ + me.dataStore.load(); + }else{ + Ext.MessageBox.alert(appLang.MESSAGE,response.msg); + } + } + }); + } }); \ No newline at end of file