Skip to content

Commit

Permalink
MDL-48494 admin: Fail validation of plugins with no component declared
Browse files Browse the repository at this point in the history
  • Loading branch information
mudrd8mz committed Aug 31, 2015
1 parent 98ea697 commit 033761f
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 16 deletions.
31 changes: 17 additions & 14 deletions admin/tool/installaddon/classes/validator.php
Expand Up @@ -322,21 +322,24 @@ protected function validate_version_php() {
$this->add_message(self::INFO, 'requiresmoodle', $this->versionphp['requires']);
}

if (isset($info['plugin->component'])) {
$this->versionphp['component'] = $info['plugin->component'];
list($reqtype, $reqname) = core_component::normalize_component($this->versionphp['component']);
if ($reqtype !== $this->assertions['plugintype']) {
$this->add_message(self::ERROR, 'componentmismatchtype', array(
'expected' => $this->assertions['plugintype'],
'found' => $reqtype));
return false;
}
if ($reqname !== $this->rootdir) {
$this->add_message(self::ERROR, 'componentmismatchname', $reqname);
return false;
}
$this->add_message(self::INFO, 'componentmatch', $this->versionphp['component']);
if (!isset($info['plugin->component'])) {
$this->add_message(self::ERROR, 'missingcomponent');
return false;
}

$this->versionphp['component'] = $info['plugin->component'];
list($reqtype, $reqname) = core_component::normalize_component($this->versionphp['component']);
if ($reqtype !== $this->assertions['plugintype']) {
$this->add_message(self::ERROR, 'componentmismatchtype', array(
'expected' => $this->assertions['plugintype'],
'found' => $reqtype));
return false;
}
if ($reqname !== $this->rootdir) {
$this->add_message(self::ERROR, 'componentmismatchname', $reqname);
return false;
}
$this->add_message(self::INFO, 'componentmatch', $this->versionphp['component']);

if (isset($info['plugin->maturity'])) {
$this->versionphp['maturity'] = $info['plugin->maturity'];
Expand Down
3 changes: 3 additions & 0 deletions admin/tool/installaddon/lang/en/tool_installaddon.php
Expand Up @@ -71,6 +71,9 @@
$string['validationmsg_foundlangfile'] = 'Found language file';
$string['validationmsg_maturity'] = 'Declared maturity level';
$string['validationmsg_maturity_help'] = 'The plugin can declare its maturity level. If the maintainer considers the plugin stable, the declared maturity level will read MATURITY_STABLE. All other maturity levels (such as alpha or beta) should be considered unstable and a warning is raised.';
$string['validationmsg_missingcomponent'] = 'Plugin does not declare its component name';
$string['validationmsg_missingcomponent_help'] = 'All plugins must provide their full component name via the `$plugin->component` declaration in the version.php file.';
$string['validationmsg_missingcomponent_link'] = 'Development:version.php';
$string['validationmsg_missingexpectedlangenfile'] = 'English language file name mismatch';
$string['validationmsg_missingexpectedlangenfile_info'] = 'The given plugin type is missing the expected English language file {$a}.';
$string['validationmsg_missinglangenfile'] = 'No English language file found';
Expand Down
@@ -0,0 +1,3 @@
<?php

$string['pluginname'] = 'This is a plugin with $plugin->component missing in its version.php';
@@ -0,0 +1,5 @@
<?php

$plugin->version = 2015080600;
$plugin->release = 'B.A.Z. Auth fake plugin';
//$plugin->component is missing here so the validation must fail.
@@ -1,3 +1,4 @@
<?php

$plugin->version = 2014122455;
$plugin->component = 'mod_bah';
@@ -0,0 +1,3 @@
<?php

$string['pluginname'] = 'This would be valid filename for module, not a block';
@@ -0,0 +1,4 @@
<?php

$plugin->version = 2014122455;
$plugin->component = 'block_bah';
13 changes: 12 additions & 1 deletion admin/tool/installaddon/tests/validator_test.php
Expand Up @@ -145,6 +145,17 @@ public function test_validate_version_php() {
$this->assertFalse($validator->execute());
$this->assertTrue($this->has_message($validator->get_messages(), $validator::ERROR, 'versionphpsyntax', '$module'));

$validator = testable_tool_installaddon_validator::instance($fixtures.'/nocomponent', array(
'baz/' => true,
'baz/version.php' => true,
'baz/lang/' => true,
'baz/lang/en/' => true,
'baz/lang/en/auth_baz.php' => true));
$validator->assert_plugin_type('auth');
$validator->assert_moodle_version(0);
$this->assertFalse($validator->execute());
$this->assertTrue($this->has_message($validator->get_messages(), $validator::ERROR, 'missingcomponent'));

$validator = testable_tool_installaddon_validator::instance($fixtures.'/plugindir', array(
'foobar/' => true,
'foobar/version.php' => true,
Expand Down Expand Up @@ -216,7 +227,7 @@ public function test_validate_language_pack() {
$this->assertTrue($this->has_message($validator->get_messages(), $validator::WARNING, 'multiplelangenfiles'));
$this->assertTrue(is_null($validator->get_language_file_name()));

$validator = testable_tool_installaddon_validator::instance($fixtures.'/nolang', array(
$validator = testable_tool_installaddon_validator::instance($fixtures.'/wronglang', array(
'bah/' => true,
'bah/version.php' => true,
'bah/lang/' => true,
Expand Down
2 changes: 1 addition & 1 deletion admin/tool/installaddon/version.php
Expand Up @@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();

$plugin->component = 'tool_installaddon';
$plugin->version = 2015051100;
$plugin->version = 2015080601;
$plugin->requires = 2015050500;
$plugin->maturity = MATURITY_STABLE;

0 comments on commit 033761f

Please sign in to comment.