oxidprojects / oxid-module-internals Goto Github PK
View Code? Open in Web Editor NEWOXID eShop module system helper tools
License: GNU General Public License v3.0
OXID eShop module system helper tools
License: GNU General Public License v3.0
A module is installed with composer.
First time after installation, the module title in Backend contains the message 'fixed'. But the status-Page in Backend for this modul ist empty(a white page but without an exception).
The file oxideshop.log contains some new entries, but they looks normal:
[2019-01-07 15:27:51] OXID Logger.ERROR: abc_module fixing module extensions [] []
[2019-01-07 15:27:51] OXID Logger.ERROR: abc_module fixing templates [] []
[2019-01-07 15:27:51] OXID Logger.ERROR: abc_module fixing module version from to 4.0.0.0 [] []
[2019-01-07 15:27:51] OXID Logger.ERROR: abc_module fixing module events [] []
In Checkconsistency, the new modul isn't listed.
But after the module activation, all is fine for the status page and Checkconsistency.
Looks like a bug?
Currently, issues are only visible when only one 'part' from module is open / in use.
An additional periodical check whoul be nice.
This check should work without any action inside the BE.
An Email with the results (only negative results, or positive too - as an option) should send to the shopowner or an other person.
with 2.0.0 alpha automatic fixing was introduced.
that actions should be logged to understand, track why and when problems are disapearing.
reported: starting from Tag v1.1.0 (blank pages, segfaults)
going back to 1.0.x helped
oxid-module-internals/metadata.php
Line 52 in 3ef5180
dependency
use OxidProfessionalServices\OxidConsole\Core\ShopConfig;
is making modules internals kind of incompatible with oxrun
As programmer(user of this module) I want to see the name of templateblock that has errors in the module status tab (like in the kiwi editon of this module )
if a module has missing files, shop should not crash
the system health overview should also report module issues
Idea from @alfredbez
I think we can fix this by configuring a phpmd ruleset: phpmd/phpmd#137 (comment)
btw. thank you @alfredbez for that idea
In a OXID 6.2 project I'm not able to select a newly created subshop in the backend. The problem happens only if this module is activated (version c69cbf6)
Log-Entry:
[2020-01-06 15:38:25] OXID Logger.ERROR: Unable to load shop config values from database ["[object] (OxidEsales\\Eshop\\Core\\Exception\\DatabaseException(code: 0): Unable to load shop config values from database at /var/www/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/Config.php:381, Exception(code: 0): at /var/www/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/Config.php:384)\n[stacktrace]\n#0 /var/www/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/Config.php(427): OxidEsales\\EshopCommunity\\Core\\Config->initVars(3)\n#1 /var/www/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(579): OxidEsales\\EshopCommunity\\Core\\Config->init()\n#2 /var/www/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(134): OxidEsales\\EshopCommunity\\Core\\ShopControl->_runOnce()\n#3 /var/www/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\\EshopCommunity\\Core\\ShopControl->start()\n#4 /var/www/oxideshop/source/index.php(15): OxidEsales\\EshopCommunity\\Core\\Oxid::run()\n#5 /var/www/oxideshop/source/admin/index.php(11): require_once('/var/www/oxides...')\n#6 {main}\n"] []
The problem is that the oxconfig
table is empty:
mysql> SELECT OXID FROM oxconfig WHERE OXSHOPID = 3;
Empty set (0.00 sec)
mysql> SELECT OXID FROM oxshops WHERE OXID = 3;
+------+
| OXID |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
How to reproduce this:
I am searching for additional maintainers that will watch the repository:
johannes, alfred (thank you for support)
more volunteers are welcome
if module internals fixes a module tpl block that is deactivated, it is somehow activating that block.
expectated behavior is, if a block was deactivated module internals should keep that state (even if for example the oxid needs to be rewritten)
reported by @tabsl via slack.
module internals should make sure that a module only extend classes of the unified namespace (and not of edition specific namespace)
The module extends e.g.
OxidEsales\EshopCommunity\Core\Module\ModuleInstaller
. In this class, the PhpDoc states: "@internal Do not make a module extension for this class." With OXID eShop v6.2.0-beta.1 (including https://github.com/OXID-eSales/oxideshop_ce/tree/v6.4.0), e.g. the method OxidEsales\EshopCommunity\Core\Module\ModuleInstaller::validateMetadataExtendSection()
was removed. Therefore, the module does not work anymore. Maybe there are also other issues.
As the whole module installation and activation changed with OXID eShop v6.2.0-beta.1, the strategy how to proceed with this module must be reviewed.
Idea is to make some tests for the issues that occured in the past
Module internals shows warnings and errors on modules that using legacy class names e.g. oxarticle or oxorder in the metadata extends section
the overview page lists all modules with all the details resulting in long list.
It would be useful to have only the title of the module unless you open it or unless it some issues and is automatically opened.
When working on a operating system with case insensitive filesystem
the programmer needs a warning if hir has give the file a different case then in the metadata file.
The additional check from the kiwi edition will only work for the legacy autoloader when not using namespace.
TeamPull@b9f496f
For namespace a additional check could be implemented, that depends on the autoloader setting in the composer file of the module.
Would be nice to check if the metadata-version < 2.0
and report an issue if we use namespaced classes in that module.
Currently, we see just not found files in the State-Tab, but the code seems to work fine.
command to scan for issues without fixing.
I am not sure why people would like to have a scan without fix, but it was requested to have a console command that can be periodically scan for issues.
I am planing to do it by having a --dry-run
option on the module:fix
command.
The module "oxid-module-internals" is compatible with OXID 6.0 (which have as requirement PHP 5.6) but in the code are using features from PHP7.0
for example in version 1.5.2:
oxideshop/vendor/oxid-community/moduleinternals/Core/FixHelper.php $iPosition = $aValue['position'] ?? 1;
and other two places
in version 2.0.0 is also at least one place.
The code should be changed to be compatible to PHP5.6 or the requirement of PHP7.0 should be set in modules composer.json
Issue present in 3.0.0-alpha4. Happens when running vendor/bin/oxid fix:states -a
. The diff function gets multidimensional arrays like this to compare:
[
'vendor/module' =>
[
'something' => 'SomeNamespace\\SomeClass',
],
];
Then the function array_diff_assoc basically takes ['something' => 'SomeNamespace\\SomeClass']
and casts it to a string according to:
https://www.php.net/manual/en/function.array-diff-assoc.php#refsect1-function.array-diff-assoc-notes
Notice: Array to string conversion in /var/www/oxideshop/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php on line 373
Call Stack:
0.0003 351720 1. {main}() /var/www/oxideshop/vendor/oxid-professional-services/oxid-console/bin/oxid:0
0.0083 434568 2. OxidProfessionalServices\OxidConsole\Core\Application->run() /var/www/oxideshop/vendor/oxid-professional-services/oxid-console/bin/oxid:39
0.0182 613632 3. OxidProfessionalServices\OxidConsole\Core\Application->doRun() /var/www/oxideshop/vendor/symfony/console/Application.php:117
0.1721 4671056 4. OxidProfessionalServices\OxidConsole\Core\Application->doRun() /var/www/oxideshop/vendor/oxid-professional-services/oxid-console/src/Core/Application.php:80
0.1723 4671056 5. OxidProfessionalServices\OxidConsole\Core\Application->doRunCommand() /var/www/oxideshop/vendor/symfony/console/Application.php:185
0.1724 4674040 6. OxidProfessionalServices\OxidConsole\Core\Application->doRunCommand() /var/www/oxideshop/vendor/oxid-professional-services/oxid-console/src/Core/Application.php:149
0.1725 4674040 7. OxidCommunity\ModuleInternals\Command\ModuleFixCommand->run() /var/www/oxideshop/vendor/symfony/console/Application.php:835
0.1726 4676784 8. OxidCommunity\ModuleInternals\Command\ModuleFixCommand->execute() /var/www/oxideshop/vendor/symfony/console/Command/Command.php:245
0.4874 8163840 9. OxidCommunity\ModuleInternals\Command\ModuleFixCommand->executeForShop() /var/www/oxideshop/vendor/oxid-community/moduleinternals/Command/ModuleFixCommand.php:78
0.4874 8165192 10. OxidCommunity\ModuleInternals\Core\ModuleStateFixer->cleanUp() /var/www/oxideshop/vendor/oxid-community/moduleinternals/Command/ModuleFixCommand.php:115
0.5054 8400352 11. OxidCommunity\ModuleInternals\Core\ModuleStateFixer->cleanUpControllers() /var/www/oxideshop/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php:145
0.5055 8402424 12. OxidCommunity\ModuleInternals\Core\ModuleStateFixer->diff() /var/www/oxideshop/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php:526
0.5075 8402480 13. array_diff_assoc() /var/www/oxideshop/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php:373
Language files of the modules should be checked
they should contain a charset
be in the correct folder
have the correct name
As maintainer I like to have a example acceptance running in the ci
on sub shops the cleanup for extension for not existing modules is not executed
A new module is installed.
In this case, there is no from-Version inside the logmessage:
'ModuleXyz fixing module version from to 2.0.0.0 [] []'
This message is not wrong. But it looks like there was an error.
Is it possible to check if it's a new installation? Make it sense to add a second sentence like - 'New installation, no former Version set'?
OXID 6.2.0 throw an error in log file:
[2020-04-10 10:22:46] OXID Logger.ERROR: Function 'validateMetadataExtendSection' does not exist or is not accessible! (OxidCommunity\ModuleInternals\Core\ModuleStateFixer) ["[object] (OxidEsales\\Eshop\\Core\\Exception\\SystemComponentException(code: 0): Function 'validateMetadataExtendSection' does not exist or is not accessible! (OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer)\n at /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Core/Base.php:84)\n[stacktrace]\n#0 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(679): OxidEsales\\EshopCommunity\\Core\\Base->__call('validateMetadat...', Array)\n#1 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(540): OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer->checkExtensions(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule), Array, Array)\n#2 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(693): OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer->_addExtensions(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule))\n#3 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(360): OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer->fixExtensions(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule))\n#4 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(107): OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer->restoreModuleInformation(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule), 'bestitamazonpay...')\n#5 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-community/moduleinternals/Core/InternalModule.php(250): OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer->fix(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule))\n#6 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ModuleList.php(72): OxidCommunity\\ModuleInternals\\Core\\InternalModule->getTitle()\n#7 [internal function]: OxidEsales\\EshopCommunity\\Application\\Controller\\Admin\\ModuleList->OxidEsales\\EshopCommunity\\Application\\Controller\\Admin\\{closure}(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule), Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule))\n#8 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ModuleList.php(73): usort(Array, Object(Closure))\n#9 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ModuleList.php(59): OxidEsales\\EshopCommunity\\Application\\Controller\\Admin\\ModuleList->sortModulesByTitleAlphabetically(Array)\n#10 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ModuleList.php(38): OxidEsales\\EshopCommunity\\Application\\Controller\\Admin\\ModuleList->getInstalledModules()\n#11 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(465): OxidEsales\\EshopCommunity\\Application\\Controller\\Admin\\ModuleList->render()\n#12 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ee/Core/ShopControl.php(208): OxidEsales\\EshopCommunity\\Core\\ShopControl->_render(Object(OxidEsales\\Eshop\\Application\\Controller\\Admin\\ModuleList))\n#13 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(357): OxidEsales\\EshopEnterprise\\Core\\ShopControl->_render(Object(OxidEsales\\Eshop\\Application\\Controller\\Admin\\ModuleList))\n#14 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ee/Core/ShopControl.php(98): OxidEsales\\EshopCommunity\\Core\\ShopControl->formOutput(Object(OxidEsales\\Eshop\\Application\\Controller\\Admin\\ModuleList))\n#15 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(281): OxidEsales\\EshopEnterprise\\Core\\ShopControl->formOutput(Object(OxidEsales\\Eshop\\Application\\Controller\\Admin\\ModuleList))\n#16 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(142): OxidEsales\\EshopCommunity\\Core\\ShopControl->_process('OxidEsales\\\\Esho...', NULL, NULL, NULL)\n#17 /var/www/html/oxidproject/releases/releaseinit/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(27): OxidEsales\\EshopCommunity\\Core\\ShopControl->start()\n#18 /var/www/html/oxidproject/releases/releaseinit/source/index.php(16): OxidEsales\\EshopCommunity\\Core\\Oxid::run()\n#19 /var/www/html/oxidproject/releases/releaseinit/source/admin/index.php(12): require_once('/var/www/html/r...')\n#20 {main}\n"] []
See when a module had issues in the past and when they where fixed and what was fixed
If a Module needs state fixes this should be displayed in overview page.
currently each module needs to be checked/fixed for problems.
What I expect:
On a module overview page or the admin start page, a message should be displayed if there is any issue.
This dependency to oxid-console should get either removed or registered via composer. An a fresh CE 6.1.1 this results in:
OXID Logger.ERROR: EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND OxidProfessionalServices\OxidConsole\Core\Module\ModuleExtensionCleanerDebug ["[object] (OxidEsales\\Eshop\\Core\\Exception\\SystemComponentException(code: 0): EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND OxidProfessionalServices\\OxidConsole\\Core\\Module\\ModuleExtensionCleanerDebug at /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php:222)\n[stacktrace]\n#0 /var/www/oxid/source/oxfunctions.php(101): OxidEsales\\EshopCommunity\\Core\\UtilsObject->oxNew('OxidProfessiona...')\n#1 /var/www/oxid/source/modules/oxcom/moduleinternals/Core/ModuleStateFixer.php(23): oxNew('OxidProfessiona...')\n#2 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php(231): OxidCommunity\\ModuleInternals\\Core\\ModuleStateFixer->__construct()\n#3 /var/www/oxid/source/oxfunctions.php(101): OxidEsales\\EshopCommunity\\Core\\UtilsObject->oxNew('OxidCommunity\\\\M...')\n#4 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Registry.php(403): oxNew('OxidCommunity\\\\M...')\n#5 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Registry.php(419): OxidEsales\\EshopCommunity\\Core\\Registry::createObject('OxidCommunity\\\\M...')\n#6 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Registry.php(46): OxidEsales\\EshopCommunity\\Core\\Registry::getObject('OxidCommunity\\\\M...')\n#7 /var/www/oxid/source/modules/oxcom/moduleinternals/Core/InternalModule.php(497): OxidEsales\\EshopCommunity\\Core\\Registry::get('OxidCommunity\\\\M...')\n#8 /var/www/oxid/source/modules/oxcom/moduleinternals/Core/InternalModule.php(683): OxidCommunity\\ModuleInternals\\Core\\InternalModule->checkModuleController()\n#9 /var/www/oxid/source/modules/oxcom/moduleinternals/Core/InternalModule.php(196): OxidCommunity\\ModuleInternals\\Core\\InternalModule->checkState()\n#10 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleList.php(637): OxidCommunity\\ModuleInternals\\Core\\InternalModule->getTitle()\n#11 [internal function]: OxidEsales\\EshopCommunity\\Core\\Module\\ModuleList->_sortModules(Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule), Object(OxidCommunity\\ModuleInternals\\Core\\InternalModule))\n#12 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleList.php(572): uasort(Array, Array)\n#13 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleList.php(540): OxidEsales\\EshopCommunity\\Core\\Module\\ModuleList->getModulesFromDir('/var/www/oxid/s...', 'bestit')\n#14 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ModuleList.php(34): OxidEsales\\EshopCommunity\\Core\\Module\\ModuleList->getModulesFromDir('/var/www/oxid/s...')\n#15 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(453): OxidEsales\\EshopCommunity\\Application\\Controller\\Admin\\ModuleList->render()\n#16 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(344): OxidEsales\\EshopCommunity\\Core\\ShopControl->_render(Object(OxidEsales\\Eshop\\Application\\Controller\\Admin\\ModuleList))\n#17 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(276): OxidEsales\\EshopCommunity\\Core\\ShopControl->formOutput(Object(OxidEsales\\Eshop\\Application\\Controller\\Admin\\ModuleList))\n#18 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): OxidEsales\\EshopCommunity\\Core\\ShopControl->_process('OxidEsales\\\\Esho...', NULL, NULL, NULL)\n#19 /var/www/oxid/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\\EshopCommunity\\Core\\ShopControl->start()\n#20 /var/www/oxid/source/index.php(15): OxidEsales\\EshopCommunity\\Core\\Oxid::run()\n#21 /var/www/oxid/source/admin/index.php(11): require_once('/var/www/oxid/s...')\n#22 {main}\n"] []
@bertrandjackermann reported that if a template is using single quote block name e.g.
[{block name='blockname' }]
instead of [{block name="blockname" }]
module internals shows a a false positive warning
Sometimes you want to change markup that a module have in it's templates.
Giving you the ability to disable/enable certain morule blocks gives you flexibility in overwriting blocks.
Logmessage:
[2019-01-17 10:38:59] OXID Logger.ERROR: Function 'getAutoloader' does not exist or is not accessible! (OxidCommunity\ModuleInternals\Core\InternalModule)
["[object] (OxidEsales\Eshop\Core\Exception\SystemComponentException(code: 0): Function 'getAutoloader' does not exist or is not accessible! (OxidCommunity\ModuleInternals\Core\InternalModule)\n at /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/Base.php:76)\n[stacktrace]\n#0 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleHelper.php(52): OxidEsales\EshopCommunity\Core\Base->__call('getAutoloader', Array)\n#1 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleExtensionCleanerDebug.php(124): OxidCommunity\ModuleInternals\Core\ModuleHelper->getModuleNameSpace()\n#2 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleExtensionCleanerDebug.php(46): OxidCommunity\ModuleInternals\Core\ModuleExtensionCleanerDebug->filterExtensionsByModule(Array, Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#3 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleInstaller.php(594): OxidCommunity\ModuleInternals\Core\ModuleExtensionCleanerDebug->cleanExtensions(Array, Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#4 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(561): OxidEsales\EshopCommunity\Core\Module\ModuleInstaller->_removeNotUsedExtensions(Array, Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#5 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(451): OxidCommunity\ModuleInternals\Core\ModuleStateFixer->checkExtensions(Object(OxidCommunity\ModuleInternals\Core\InternalModule), Array, Array)\n#6 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(579): OxidCommunity\ModuleInternals\Core\ModuleStateFixer->_addExtensions(Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#7 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(277): OxidCommunity\ModuleInternals\Core\ModuleStateFixer->fixExtensions(Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#8 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/ModuleStateFixer.php(72): OxidCommunity\ModuleInternals\Core\ModuleStateFixer->restoreModuleInformation(Object(OxidCommunity\ModuleInternals\Core\InternalModule), 'extsearchmodfix')\n#9 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-community/moduleinternals/Core/InternalModule.php(242): OxidCommunity\ModuleInternals\Core\ModuleStateFixer->fix(Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#10 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleList.php(637): OxidCommunity\ModuleInternals\Core\InternalModule->getTitle()\n#11 [internal function]: OxidEsales\EshopCommunity\Core\Module\ModuleList->_sortModules(Object(OxidCommunity\ModuleInternals\Core\InternalModule), Object(OxidCommunity\ModuleInternals\Core\InternalModule))\n#12 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleList.php(572): uasort(Array, Array)\n#13 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/Module/ModuleList.php(540): OxidEsales\EshopCommunity\Core\Module\ModuleList->getModulesFromDir('/home/vagrant/s...', 'd3')\n#14 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/ModuleList.php(34): OxidEsales\EshopCommunity\Core\Module\ModuleList->getModulesFromDir('/home/vagrant/s...')\n#15 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(453): OxidEsales\EshopCommunity\Application\Controller\Admin\ModuleList->render()\n#16 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(344): OxidEsales\EshopCommunity\Core\ShopControl->_render(Object(OxidEsales\Eshop\Application\Controller\Admin\ModuleList))\n#17 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(276): OxidEsales\EshopCommunity\Core\ShopControl->formOutput(Object(OxidEsales\Eshop\Application\Controller\Admin\ModuleList))\n#18 /home/vagrant/shared_folder/oxid_v610/source/modules/d3/modcfg/Modules/Application/Controller/d3_oxshopcontrol_modcfg_extension.php(163): OxidEsales\EshopCommunity\Core\ShopControl->_process('OxidEsales\\Esho...', NULL, NULL, NULL)\n#19 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): D3\ModCfg\Modules\Application\Controller\d3_oxshopcontrol_modcfg_extension->_process('OxidEsales\\Esho...', NULL, NULL, NULL)\n#20 /home/vagrant/shared_folder/oxid_v610/source/modules/d3/modcfg/Modules/Application/Controller/d3_oxshopcontrol_modcfg_extension.php(93): OxidEsales\EshopCommunity\Core\ShopControl->start('module_list', NULL, NULL, NULL)\n#21 /home/vagrant/shared_folder/oxid_v610/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): D3\ModCfg\Modules\Application\Controller\d3_oxshopcontrol_modcfg_extension->start()\n#22 /home/vagrant/shared_folder/oxid_v610/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()\n#23 /home/vagrant/shared_folder/oxid_v610/source/admin/index.php(11): require_once('/home/vagrant/s...')\n#24 {main}\n"] []
It occurs on open the menue 'Moduls'.
Shop: CE 6.1.0 + CE 6.1.1
Rev Checkout ModulInternals: bdf51bf
IMHO there are two parts with potential to optimize issue detection:
onActivate
event which aren't defined in the metadata.php. Either this is bad practice and ddoewysiwyg
should get fixed or the following part should be removed or mitigated to not raise the "Issue found!" flag:oxid-module-internals/Core/InternalModule.php
Lines 429 to 431 in 3ef5180
PHP Warning: count():
[23-Aug-2019 09:54:42 Europe/Berlin] PHP Warning: count(): Parameter must be an array or an object that implements Countable in /xxx/yyy/zzz/vendor/oxid-community/moduleinternals/Core/InternalModule.php on line 231
Transfer test coverage after build
Not sure it this belongs here, but I see this when running the fix:states
command in our project:
vagrant@oxidproject:~$ php /var/www/shop/vendor/bin/oxid fix:states -a
[warning] in shop 13: oxps/modulesconfig fixing module controllers
[warning] (in md):array (
'admin_oxpsmodulesconfigdashboard' => 'OxidProfessionalServices\\ModulesConfig\\Controller\\Admin\\Dashboard',
)
[warning] (in db):array (
)
[ERROR]: duplicate controllers:OxidProfessionalServices\ModulesConfig\Controller\Admin\Dashboard
We have 41 shops and I see this message for all shops >= 13.
Would also be nice to add a space after duplicate controllers:
Module internals should warn about typos:
[
'groub' => 'service',
'name' => 'services_url_en',
'tupe' => 'str',
],
and things like:
[
'group' => 'service',
'name' => 'services_list_en',
'type' => 'aarr',
'value' => [
'key': 'url'
'value': 'translation in English'
],
[
'group' => 'service',
'name' => 'services_url_en',
'type' => 'str',
],
],
by checking for the correct
As Maintainer I like to remove the effort in maintaining and to increase the quality by removeing duplicate code.
currently that repository is attached to acirtautas/oxid-module-internals and by that all new pull requests by default have that main repository selected by default, also google ignores this repository. To improve that github was asked to detach that repository .
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.