diff --git a/_build/config.json b/_build/config.json index 1ba3d30..43efc37 100644 --- a/_build/config.json +++ b/_build/config.json @@ -3,7 +3,7 @@ "lowCaseName": "babel", "description": "The easy way for your multilingual site!", "author": "Jakob Class, Rico Goldsky, Joshua Luckers, Thomas Jakobi", - "version": "3.2.0", + "version": "3.3.0", "package": { "menus": [ { @@ -171,15 +171,16 @@ "readme": "docs/readme.md", "license": "docs/license.md", "changelog": "docs/changelog.md", + "setupOptions": { + "source": "setup.options.php" + }, "resolver": { "after": [ "resolve.setupoptions.php", "resolve.permissions.php", - "resolve.babelevents.php" + "resolve.babelevents.php", + "resolve.treehillstudio.php" ] - }, - "setupOptions": { - "source": "setup.options.php" } } } diff --git a/_build/resolvers/resolve.babelevents.php b/_build/resolvers/resolve.babelevents.php index b124bee..eb707cd 100644 --- a/_build/resolvers/resolve.babelevents.php +++ b/_build/resolvers/resolve.babelevents.php @@ -67,7 +67,8 @@ function removeEvent(modX $modx, $name) $babelEvents = [ 'OnBabelDuplicate', // invoked on duplicating the resource in a new language context 'OnBabelLink', // invoked on link the resource with a target resource - 'OnBabelUnlink' // invoked on unlink the resource from a target resource + 'OnBabelUnlink', // invoked on unlink the resource from a target resource + 'OnBabelTVSynced' // invoked when TVs are synchronized and changed ]; $success = true; diff --git a/_build/resolvers/resolve.treehillstudio.php b/_build/resolvers/resolve.treehillstudio.php new file mode 100644 index 0000000..b07944e --- /dev/null +++ b/_build/resolvers/resolve.treehillstudio.php @@ -0,0 +1,107 @@ +xpdo; +$c = $modx->newQuery('transport.modTransportPackage'); +$c->where( + [ + 'workspace' => 1, + "(SELECT + `signature` + FROM {$modx->getTableName('transport.modTransportPackage')} AS `latestPackage` + WHERE `latestPackage`.`package_name` = `modTransportPackage`.`package_name` + ORDER BY + `latestPackage`.`version_major` DESC, + `latestPackage`.`version_minor` DESC, + `latestPackage`.`version_patch` DESC, + IF(`release` = '' OR `release` = 'ga' OR `release` = 'pl','z',`release`) DESC, + `latestPackage`.`release_index` DESC + LIMIT 1,1) = `modTransportPackage`.`signature`", + ] +); +$c->where( + [ + 'modTransportPackage.signature:LIKE' => $options['namespace'] . '-%', + 'modTransportPackage.installed:IS NOT' => null + ] +); +$c->limit(1); + +/** @var modTransportPackage $oldPackage */ +$oldPackage = $modx->getObject('transport.modTransportPackage', $c); + +$oldVersion = ''; +if ($oldPackage) { + $oldVersion = $oldPackage->get('version_major') . + '.' . $oldPackage->get('version_minor') . + '.' . $oldPackage->get('version_patch') . + '-' . $oldPackage->get('release'); +} + +$version = ''; +if ($transport->version) { + $version = $transport->version; +} + +$modxVersionObj = $modx->getObject('modSystemSetting', ['key' => 'settings_version']); +$modxVersion = ($modxVersionObj) ? $modxVersionObj->get('value') : ''; +$managerLang = $modx->getOption('manager_language'); + +$action = ''; +switch ($options[xPDOTransport::PACKAGE_ACTION]) { + case xPDOTransport::ACTION_INSTALL: + $action = 'install'; + break; + case xPDOTransport::ACTION_UPGRADE: + $action = 'upgrade'; + break; + case xPDOTransport::ACTION_UNINSTALL: + $action = 'uninstall'; + break; +} + +$params = [ + 'name' => $options['namespace'], + 'uuid' => $modx->uuid ?? 'unknown', + 'host' => $modx->getOption('http_host', null, 'unknown'), + 'php_version' => phpversion(), + 'modx_version' => $modxVersion, + 'manager_lang' => $managerLang, + 'installation_type' => $action, + 'package_version_from' => $oldVersion, + 'package_version' => $version, + 'date' => time() +]; + +/** + * Curl POST. + */ +$curl = curl_init(); +if ($curl) { + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); + curl_setopt($curl, CURLOPT_TIMEOUT, 5); + + $response = curl_exec($curl); + $responseInfo = curl_getinfo($curl); + $curlError = curl_error($curl); + curl_close($curl); +} + +return true; diff --git a/_build/setup.options.php b/_build/setup.options.php index 6aa0984..0827e8d 100644 --- a/_build/setup.options.php +++ b/_build/setup.options.php @@ -32,6 +32,18 @@ switch ($options[xPDOTransport::PACKAGE_ACTION]) { case xPDOTransport::ACTION_INSTALL: $output .= '
Thanks for installing Babel. This open source extra is currently + maintained by Treehill Studio - MODX development in Münsterland.
+ +During the installation, we will collect some statistical data (the + hostname, the MODX UUID, the PHP version and the MODX version of your + MODX installation). Your data will be kept confidential and under no + circumstances be used for promotional purposes or disclosed to third + parties. We only like to know the usage count of this package.
+ +If you install this package, you are giving us your permission to + collect, process and use that data for statistical purposes.
+Babel will be installed. Please review the installation options carefully.
Babel will be upgraded. Please review the installation options carefully.
Babel will be upgraded. This open source extra is currently + maintained by Treehill Studio - MODX development in Münsterland.
+ +During the installation, we will collect some statistical data (the + hostname, the MODX UUID, the PHP version and the MODX version of your + MODX installation). Your data will be kept confidential and under no + circumstances be used for promotional purposes or disclosed to third + parties. We only like to know the usage count of this package.
+ +If you upgrade this package, you are giving us your permission to + collect, process and use that data for statistical purposes.
+ +Please review the installation options carefully.
"+e.description+"
",border:!1,cls:"panel-desc"},{layout:"form",cls:"x-form-label-left main-wrapper",defaults:{autoHeight:!0},border:!0,items:[{id:"babel-panel-"+e.tabtype+"-"+e.contenttype,xtype:"babel-"+e.contenttype+"-"+e.tabtype,preventRender:!0,contexts:Babel.config.contexts,listeners:{afterrender:function(){this.store.on("load",function(){var e=this.getTopToolbar().getHeight(),t=this.getView().lockedHd.getHeight(),i=this.getView().lockedBody.getHeight(),s=this.getBottomToolbar().getHeight();this.setHeight(e+t+i+s+14)},this)}}}]}]}),Babel.panel.HomeTab.superclass.constructor.call(this,e)},Ext.extend(Babel.panel.HomeTab,MODx.Panel),Ext.reg("babel-panel-hometab",Babel.panel.HomeTab),Babel.panel.Overview=function(e){e=e||{},this.ident="babel-overview-"+Ext.id(),this.panelOverviewTabs=[{xtype:"babel-panel-hometab",title:_("babel.contexts"),description:""+_("babel.settings_desc")+"
",border:!1,cls:"panel-desc"},{xtype:"babel-grid-system-settings",id:"babel-grid-system-settings",cls:"main-wrapper",preventSaveRefresh:!0}]}),Babel.panel.Settings.superclass.constructor.call(this,e)},Ext.extend(Babel.panel.Settings,MODx.Panel),Ext.reg("babel-panel-settings",Babel.panel.Settings),Babel.grid.SystemSettings=function(e){e=e||{},Ext.applyIf(e,{id:"babel-grid-systemsettings",url:Babel.config.connectorUrl,baseParams:{action:"mgr/settings/getlist",area:MODx.request.area||""},save_action:"mgr/settings/updatefromgrid",tbar:[],queryParam:3<=Babel.config.modxversion?"query":"key"}),Babel.grid.SystemSettings.superclass.constructor.call(this,e)},Ext.extend(Babel.grid.SystemSettings,MODx.grid.SettingsGrid,{_showMenu:function(e,t,i){i.stopEvent(),i.preventDefault(),this.menu.record=this.getStore().getAt(t).data,this.getSelectionModel().isSelected(t)||this.getSelectionModel().selectRow(t),this.menu.removeAll();t=[];this.menu.record.menu?t=this.menu.record.menu:t.push({text:_("setting_update")||_("edit"),handler:this.updateSetting}),0"+_("babel.create_translation_confirm",{context:t,id:i})+"
"},{xtype:"xcheckbox",hideLabel:!0,boxLabel:_("babel.sync_linked_tranlations"),name:"sync",checked:!0}]})).show():Babel.config.hasOwnProperty("menu")&&Babel.config.hasOwnProperty("context_key")?(o.babelMenu=Babel.config.menu,o.babelContext=Babel.config.context_key,o.createTranslations(t,i)):MODx.Ajax.request({url:o.config.connectorUrl,params:{action:"mgr/resource/getmenu",id:i},listeners:{success:{fn:function(e){e.object.menu&&e.object.context_key&&(o.babelMenu=e.object.menu,o.babelContext=e.object.context_key,o.createTranslations(t,i))},scope:this}}})},createTranslations:function(e,t){var i,s=this,o=[];Ext.each(Babel.config.contexts,function(e){e===s.babelContext||!s.babelMenu.hasOwnProperty(e)||"undefined"!==s.babelMenu[e].resourceUrl&&""!==s.babelMenu[e].resourceUrl&&"#"!==s.babelMenu[e].resourceUrl||o.push({boxLabel:s.babelMenu[e].displayText,name:"contexts",inputValue:e})}),o.length?(i=MODx.load({xtype:"modx-window",title:_("babel.create_multiple_translations"),closeAction:"close",buttons:[{text:_("close"),handler:function(){i.close()},scope:this},{text:_("create"),cls:"primary-button",handler:function(){var e=i.fp.getForm().getValues();i.close(),s.addTranslation(t,e)},scope:this}],listeners:{beforeSubmit:{fn:s.loadMask,scope:this},close:{fn:s.hideMask,scope:this},afterrender:function(){var e=Ext.getCmp("babel-all-contexts");e&&e.setValue(1)}},fields:[{xtype:"fieldset",cls:"x-fieldset-check-all",title:_("babel.contexts"),defaults:{hideLabel:!0},items:[{xtype:"xcheckbox",id:"babel-all-contexts",boxLabel:_("babel.all"),itemCls:"x-form-item-check-all",submitValue:!1,listeners:{check:{fn:function(t){var i=[],e=Ext.getCmp("babel-contexts");Ext.each(Babel.config.contexts,function(e){e!==s.babelContext&&s.babelMenu.hasOwnProperty(e)&&i.push(t.getValue())}),e.setValue(i)},scope:this}}},{xtype:"checkboxgroup",id:"babel-contexts",columns:3,anchor:"100%",style:"margin-top: -10px",items:o}]},{xtype:"xcheckbox",hideLabel:!0,boxLabel:_("babel.copy_tv_values"),name:"copy"},{xtype:"xcheckbox",hideLabel:!0,boxLabel:_("babel.sync_linked_tranlations"),name:"sync",checked:!0}]})).show():(MODx.msg.alert("",_("babel.create_multiple_translations_err_no_contexts")),s.hideMask())},addTranslation:function(e,t){var i=this,s=(this.contexts=t.hasOwnProperty("contexts")?Array.isArray(t.contexts)?t.contexts:[t.contexts]:[],delete t.contexts,"/babelduplicate/");this.console=MODx.load({xtype:"modx-console",register:"mgr",topic:s,show_filename:!1,clear:!0,listeners:{complete:{fn:function(){var e=MODx.request.id,e=(MODx.msg.status({title:_("success"),message:_("babel.create_multiple_translations_finished")}),MODx.Ajax.request({url:i.config.connectorUrl,params:{action:"mgr/resource/getmenu",id:e},listeners:{success:{fn:function(e){i.hideMask(),e.object.menu&&i.getMenu(e.object.menu),"resource/update"===MODx.request.a&&MODx.loadPage("resource/update","id="+MODx.request.id)},scope:this}}}),Ext.getCmp("modx-resource-tree"));e&&e.rendered&&e.refresh(),i.hideMask()},scope:this}}}),this.console.show(Ext.getBody()),i.requestTranslation(0,s,e,t)},requestTranslation:function(e,t,i,s){var o=this;MODx.Ajax.request({url:this.config.connectorUrl,params:{action:"mgr/resource/duplicate",register:"mgr",topic:t,id:i,context_key:o.contexts[e],last:e===o.contexts.length-1,copy:s.copy,sync:s.sync},listeners:{success:{fn:function(){(e+=1)"+e.description+"
",border:!1,cls:"panel-desc"},{layout:"form",cls:"x-form-label-left main-wrapper",defaults:{autoHeight:!0},border:!0,items:[{id:"babel-panel-"+e.tabtype+"-"+e.contenttype,xtype:"babel-"+e.contenttype+"-"+e.tabtype,preventRender:!0,contexts:Babel.config.contexts,listeners:{afterrender:function(){this.store.on("load",function(){var e=this.getTopToolbar().getHeight(),t=this.getView().lockedHd.getHeight(),i=this.getView().lockedBody.getHeight(),s=this.getView().lockedScroller.getHeight(),o=this.getBottomToolbar().getHeight(),l=this.getView().lockedBody.getWidth(),n=this.getView().mainBody.getWidth(),a=this.getEl().getWidth();this.setHeight(e+t+(i=a"+_("babel.settings_desc")+"
",border:!1,cls:"panel-desc"},{xtype:"babel-grid-system-settings",id:"babel-grid-system-settings",cls:"main-wrapper",preventSaveRefresh:!0}]}),Babel.panel.Settings.superclass.constructor.call(this,e)},Ext.extend(Babel.panel.Settings,MODx.Panel),Ext.reg("babel-panel-settings",Babel.panel.Settings),Babel.grid.SystemSettings=function(e){e=e||{},Ext.applyIf(e,{id:"babel-grid-systemsettings",url:Babel.config.connectorUrl,baseParams:{action:"mgr/settings/getlist",area:MODx.request.area||""},save_action:"mgr/settings/updatefromgrid",tbar:[],queryParam:3<=Babel.config.modxversion?"query":"key"}),Babel.grid.SystemSettings.superclass.constructor.call(this,e)},Ext.extend(Babel.grid.SystemSettings,MODx.grid.SettingsGrid,{_showMenu:function(e,t,i){i.stopEvent(),i.preventDefault(),this.menu.record=this.getStore().getAt(t).data,this.getSelectionModel().isSelected(t)||this.getSelectionModel().selectRow(t),this.menu.removeAll();t=[];this.menu.record.menu?t=this.menu.record.menu:t.push({text:_("setting_update")||_("edit"),handler:this.updateSetting}),0"+_("babel.create_translation_confirm",{context:t,id:n})+"
"},{xtype:"xcheckbox",hideLabel:!0,boxLabel:_("babel.sync_linked_tranlations"),name:"sync",checked:!0}]})).show():Babel.config.hasOwnProperty("menu")&&Babel.config.hasOwnProperty("context_key")?(o.babelMenu=Babel.config.menu,o.babelContext=Babel.config.context_key,o.createTranslations(t,n)):MODx.Ajax.request({url:o.config.connectorUrl,params:{action:"mgr/resource/getmenu",id:n},listeners:{success:{fn:function(e){e.object.menu&&e.object.context_key&&(o.babelMenu=e.object.menu,o.babelContext=e.object.context_key,o.createTranslations(t,n))},scope:this}}})},createTranslations:function(e,t){var n,s=this,o=[];Ext.each(Babel.config.contexts,function(e){e===s.babelContext||!s.babelMenu.hasOwnProperty(e)||"undefined"!==s.babelMenu[e].resourceUrl&&""!==s.babelMenu[e].resourceUrl&&"#"!==s.babelMenu[e].resourceUrl||o.push({boxLabel:s.babelMenu[e].displayText,name:"contexts",inputValue:e})}),o.length?(n=MODx.load({xtype:"modx-window",title:_("babel.create_multiple_translations"),closeAction:"close",buttons:[{text:_("close"),handler:function(){n.close()},scope:this},{text:_("create"),cls:"primary-button",handler:function(){var e=n.fp.getForm().getValues();n.close(),s.addTranslation(t,e)},scope:this}],listeners:{beforeSubmit:{fn:s.loadMask,scope:this},close:{fn:s.hideMask,scope:this},afterrender:function(){var e=Ext.getCmp("babel-all-contexts");e&&e.setValue(1)}},fields:[{xtype:"fieldset",cls:"x-fieldset-check-all",title:_("babel.contexts"),defaults:{hideLabel:!0},items:[{xtype:"xcheckbox",id:"babel-all-contexts",boxLabel:_("babel.all"),itemCls:"x-form-item-check-all",submitValue:!1,listeners:{check:{fn:function(t){var n=[],e=Ext.getCmp("babel-contexts");Ext.each(Babel.config.contexts,function(e){e!==s.babelContext&&s.babelMenu.hasOwnProperty(e)&&n.push(t.getValue())}),e.setValue(n)},scope:this}}},{xtype:"checkboxgroup",id:"babel-contexts",columns:3,anchor:"100%",style:"margin-top: -10px",items:o}]},{xtype:"xcheckbox",hideLabel:!0,boxLabel:_("babel.copy_tv_values"),name:"copy"},{xtype:"xcheckbox",hideLabel:!0,boxLabel:_("babel.sync_linked_tranlations"),name:"sync",checked:!0}]})).show():(MODx.msg.alert("",_("babel.create_multiple_translations_err_no_contexts")),s.hideMask())},addTranslation:function(e,t){var n=this,s=(this.contexts=t.hasOwnProperty("contexts")?Array.isArray(t.contexts)?t.contexts:[t.contexts]:[],delete t.contexts,"/babelduplicate/");this.console=MODx.load({xtype:"modx-console",register:"mgr",topic:s,show_filename:!1,clear:!0,listeners:{complete:{fn:function(){var e=MODx.request.id,e=(MODx.msg.status({title:_("success"),message:_("babel.create_multiple_translations_finished")}),MODx.Ajax.request({url:n.config.connectorUrl,params:{action:"mgr/resource/getmenu",id:e},listeners:{success:{fn:function(e){n.hideMask(),e.object.menu&&n.getMenu(e.object.menu),"resource/update"===MODx.request.a&&MODx.loadPage("resource/update","id="+MODx.request.id)},scope:this}}}),Ext.getCmp("modx-resource-tree"));e&&e.rendered&&e.refresh(),n.hideMask()},scope:this}}}),this.console.show(Ext.getBody()),n.requestTranslation(0,s,e,t)},requestTranslation:function(e,t,n,s){var o=this;MODx.Ajax.request({url:this.config.connectorUrl,params:{action:"mgr/resource/duplicate",register:"mgr",topic:t,id:n,context_key:o.contexts[e],last:e===o.contexts.length-1,copy:s.copy,sync:s.sync},listeners:{success:{fn:function(){(e+=1)