Passed
Push — master ( 02306d...9f9b89 )
by Morris
14:24 queued 10s
created
lib/private/DB/MigrationException.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -25,17 +25,17 @@
 block discarded – undo
25 25
 
26 26
 
27 27
 class MigrationException extends \Exception {
28
-	private $table;
28
+    private $table;
29 29
 
30
-	public function __construct($table, $message) {
31
-		$this->table = $table;
32
-		parent::__construct($message);
33
-	}
30
+    public function __construct($table, $message) {
31
+        $this->table = $table;
32
+        parent::__construct($message);
33
+    }
34 34
 
35
-	/**
36
-	 * @return string
37
-	 */
38
-	public function getTable() {
39
-		return $this->table;
40
-	}
35
+    /**
36
+     * @return string
37
+     */
38
+    public function getTable() {
39
+        return $this->table;
40
+    }
41 41
 }
Please login to merge, or discard this patch.
lib/private/DB/MDB2SchemaWriter.php 1 patch
Indentation   +140 added lines, -140 removed lines patch added patch discarded remove patch
@@ -31,153 +31,153 @@
 block discarded – undo
31 31
 
32 32
 class MDB2SchemaWriter {
33 33
 
34
-	/**
35
-	 * @param string $file
36
-	 * @param \OC\DB\Connection $conn
37
-	 * @return bool
38
-	 */
39
-	static public function saveSchemaToFile($file, \OC\DB\Connection $conn) {
40
-		$config = \OC::$server->getConfig();
34
+    /**
35
+     * @param string $file
36
+     * @param \OC\DB\Connection $conn
37
+     * @return bool
38
+     */
39
+    static public function saveSchemaToFile($file, \OC\DB\Connection $conn) {
40
+        $config = \OC::$server->getConfig();
41 41
 
42
-		$xml = new \SimpleXMLElement('<database/>');
43
-		$xml->addChild('name', $config->getSystemValue('dbname', 'owncloud'));
44
-		$xml->addChild('create', 'true');
45
-		$xml->addChild('overwrite', 'false');
46
-		if($config->getSystemValue('dbtype', 'sqlite') === 'mysql' && $config->getSystemValue('mysql.utf8mb4', false)) {
47
-			$xml->addChild('charset', 'utf8mb4');
48
-		} else {
49
-			$xml->addChild('charset', 'utf8');
50
-		}
42
+        $xml = new \SimpleXMLElement('<database/>');
43
+        $xml->addChild('name', $config->getSystemValue('dbname', 'owncloud'));
44
+        $xml->addChild('create', 'true');
45
+        $xml->addChild('overwrite', 'false');
46
+        if($config->getSystemValue('dbtype', 'sqlite') === 'mysql' && $config->getSystemValue('mysql.utf8mb4', false)) {
47
+            $xml->addChild('charset', 'utf8mb4');
48
+        } else {
49
+            $xml->addChild('charset', 'utf8');
50
+        }
51 51
 
52
-		// FIX ME: bloody work around
53
-		if ($config->getSystemValue('dbtype', 'sqlite') === 'oci') {
54
-			$filterExpression = '/^"' . preg_quote($conn->getPrefix()) . '/';
55
-		} else {
56
-			$filterExpression = '/^' . preg_quote($conn->getPrefix()) . '/';
57
-		}
58
-		$conn->getConfiguration()->setFilterSchemaAssetsExpression($filterExpression);
52
+        // FIX ME: bloody work around
53
+        if ($config->getSystemValue('dbtype', 'sqlite') === 'oci') {
54
+            $filterExpression = '/^"' . preg_quote($conn->getPrefix()) . '/';
55
+        } else {
56
+            $filterExpression = '/^' . preg_quote($conn->getPrefix()) . '/';
57
+        }
58
+        $conn->getConfiguration()->setFilterSchemaAssetsExpression($filterExpression);
59 59
 
60
-		foreach ($conn->getSchemaManager()->listTables() as $table) {
61
-			self::saveTable($table, $xml->addChild('table'));
62
-		}
63
-		file_put_contents($file, $xml->asXML());
64
-		return true;
65
-	}
60
+        foreach ($conn->getSchemaManager()->listTables() as $table) {
61
+            self::saveTable($table, $xml->addChild('table'));
62
+        }
63
+        file_put_contents($file, $xml->asXML());
64
+        return true;
65
+    }
66 66
 
67
-	/**
68
-	 * @param \Doctrine\DBAL\Schema\Table $table
69
-	 * @param \SimpleXMLElement $xml
70
-	 */
71
-	private static function saveTable($table, $xml) {
72
-		$xml->addChild('name', $table->getName());
73
-		$declaration = $xml->addChild('declaration');
74
-		foreach($table->getColumns() as $column) {
75
-			self::saveColumn($column, $declaration->addChild('field'));
76
-		}
77
-		foreach($table->getIndexes() as $index) {
78
-			if ($index->getName() == 'PRIMARY') {
79
-				$autoincrement = false;
80
-				foreach($index->getColumns() as $column) {
81
-					if ($table->getColumn($column)->getAutoincrement()) {
82
-						$autoincrement = true;
83
-					}
84
-				}
85
-				if ($autoincrement) {
86
-					continue;
87
-				}
88
-			}
89
-			self::saveIndex($index, $declaration->addChild('index'));
90
-		}
91
-	}
67
+    /**
68
+     * @param \Doctrine\DBAL\Schema\Table $table
69
+     * @param \SimpleXMLElement $xml
70
+     */
71
+    private static function saveTable($table, $xml) {
72
+        $xml->addChild('name', $table->getName());
73
+        $declaration = $xml->addChild('declaration');
74
+        foreach($table->getColumns() as $column) {
75
+            self::saveColumn($column, $declaration->addChild('field'));
76
+        }
77
+        foreach($table->getIndexes() as $index) {
78
+            if ($index->getName() == 'PRIMARY') {
79
+                $autoincrement = false;
80
+                foreach($index->getColumns() as $column) {
81
+                    if ($table->getColumn($column)->getAutoincrement()) {
82
+                        $autoincrement = true;
83
+                    }
84
+                }
85
+                if ($autoincrement) {
86
+                    continue;
87
+                }
88
+            }
89
+            self::saveIndex($index, $declaration->addChild('index'));
90
+        }
91
+    }
92 92
 
93
-	/**
94
-	 * @param Column $column
95
-	 * @param \SimpleXMLElement $xml
96
-	 */
97
-	private static function saveColumn($column, $xml) {
98
-		$xml->addChild('name', $column->getName());
99
-		switch($column->getType()) {
100
-			case 'SmallInt':
101
-			case 'Integer':
102
-			case 'BigInt':
103
-				$xml->addChild('type', 'integer');
104
-				$default = $column->getDefault();
105
-				if (is_null($default) && $column->getAutoincrement()) {
106
-					$default = '0';
107
-				}
108
-				$xml->addChild('default', $default);
109
-				$xml->addChild('notnull', self::toBool($column->getNotnull()));
110
-				if ($column->getAutoincrement()) {
111
-					$xml->addChild('autoincrement', '1');
112
-				}
113
-				if ($column->getUnsigned()) {
114
-					$xml->addChild('unsigned', 'true');
115
-				}
116
-				$length = '4';
117
-				if ($column->getType() == 'SmallInt') {
118
-					$length = '2';
119
-				}
120
-				elseif ($column->getType() == 'BigInt') {
121
-					$length = '8';
122
-				}
123
-				$xml->addChild('length', $length);
124
-				break;
125
-			case 'String':
126
-				$xml->addChild('type', 'text');
127
-				$default = trim($column->getDefault());
128
-				if ($default === '') {
129
-					$default = false;
130
-				}
131
-				$xml->addChild('default', $default);
132
-				$xml->addChild('notnull', self::toBool($column->getNotnull()));
133
-				$xml->addChild('length', $column->getLength());
134
-				break;
135
-			case 'Text':
136
-				$xml->addChild('type', 'clob');
137
-				$xml->addChild('notnull', self::toBool($column->getNotnull()));
138
-				break;
139
-			case 'Decimal':
140
-				$xml->addChild('type', 'decimal');
141
-				$xml->addChild('default', $column->getDefault());
142
-				$xml->addChild('notnull', self::toBool($column->getNotnull()));
143
-				$xml->addChild('length', '15');
144
-				break;
145
-			case 'Boolean':
146
-				$xml->addChild('type', 'integer');
147
-				$xml->addChild('default', $column->getDefault());
148
-				$xml->addChild('notnull', self::toBool($column->getNotnull()));
149
-				$xml->addChild('length', '1');
150
-				break;
151
-			case 'DateTime':
152
-				$xml->addChild('type', 'timestamp');
153
-				$xml->addChild('default', $column->getDefault());
154
-				$xml->addChild('notnull', self::toBool($column->getNotnull()));
155
-				break;
93
+    /**
94
+     * @param Column $column
95
+     * @param \SimpleXMLElement $xml
96
+     */
97
+    private static function saveColumn($column, $xml) {
98
+        $xml->addChild('name', $column->getName());
99
+        switch($column->getType()) {
100
+            case 'SmallInt':
101
+            case 'Integer':
102
+            case 'BigInt':
103
+                $xml->addChild('type', 'integer');
104
+                $default = $column->getDefault();
105
+                if (is_null($default) && $column->getAutoincrement()) {
106
+                    $default = '0';
107
+                }
108
+                $xml->addChild('default', $default);
109
+                $xml->addChild('notnull', self::toBool($column->getNotnull()));
110
+                if ($column->getAutoincrement()) {
111
+                    $xml->addChild('autoincrement', '1');
112
+                }
113
+                if ($column->getUnsigned()) {
114
+                    $xml->addChild('unsigned', 'true');
115
+                }
116
+                $length = '4';
117
+                if ($column->getType() == 'SmallInt') {
118
+                    $length = '2';
119
+                }
120
+                elseif ($column->getType() == 'BigInt') {
121
+                    $length = '8';
122
+                }
123
+                $xml->addChild('length', $length);
124
+                break;
125
+            case 'String':
126
+                $xml->addChild('type', 'text');
127
+                $default = trim($column->getDefault());
128
+                if ($default === '') {
129
+                    $default = false;
130
+                }
131
+                $xml->addChild('default', $default);
132
+                $xml->addChild('notnull', self::toBool($column->getNotnull()));
133
+                $xml->addChild('length', $column->getLength());
134
+                break;
135
+            case 'Text':
136
+                $xml->addChild('type', 'clob');
137
+                $xml->addChild('notnull', self::toBool($column->getNotnull()));
138
+                break;
139
+            case 'Decimal':
140
+                $xml->addChild('type', 'decimal');
141
+                $xml->addChild('default', $column->getDefault());
142
+                $xml->addChild('notnull', self::toBool($column->getNotnull()));
143
+                $xml->addChild('length', '15');
144
+                break;
145
+            case 'Boolean':
146
+                $xml->addChild('type', 'integer');
147
+                $xml->addChild('default', $column->getDefault());
148
+                $xml->addChild('notnull', self::toBool($column->getNotnull()));
149
+                $xml->addChild('length', '1');
150
+                break;
151
+            case 'DateTime':
152
+                $xml->addChild('type', 'timestamp');
153
+                $xml->addChild('default', $column->getDefault());
154
+                $xml->addChild('notnull', self::toBool($column->getNotnull()));
155
+                break;
156 156
 
157
-		}
158
-	}
157
+        }
158
+    }
159 159
 
160
-	/**
161
-	 * @param Index $index
162
-	 * @param \SimpleXMLElement $xml
163
-	 */
164
-	private static function saveIndex($index, $xml) {
165
-		$xml->addChild('name', $index->getName());
166
-		if ($index->isPrimary()) {
167
-			$xml->addChild('primary', 'true');
168
-		}
169
-		elseif ($index->isUnique()) {
170
-			$xml->addChild('unique', 'true');
171
-		}
172
-		foreach($index->getColumns() as $column) {
173
-			$field = $xml->addChild('field');
174
-			$field->addChild('name', $column);
175
-			$field->addChild('sorting', 'ascending');
160
+    /**
161
+     * @param Index $index
162
+     * @param \SimpleXMLElement $xml
163
+     */
164
+    private static function saveIndex($index, $xml) {
165
+        $xml->addChild('name', $index->getName());
166
+        if ($index->isPrimary()) {
167
+            $xml->addChild('primary', 'true');
168
+        }
169
+        elseif ($index->isUnique()) {
170
+            $xml->addChild('unique', 'true');
171
+        }
172
+        foreach($index->getColumns() as $column) {
173
+            $field = $xml->addChild('field');
174
+            $field->addChild('name', $column);
175
+            $field->addChild('sorting', 'ascending');
176 176
 			
177
-		}
178
-	}
177
+        }
178
+    }
179 179
 
180
-	private static function toBool($bool) {
181
-		return $bool ? 'true' : 'false';
182
-	}
180
+    private static function toBool($bool) {
181
+        return $bool ? 'true' : 'false';
182
+    }
183 183
 }
Please login to merge, or discard this patch.
lib/private/DB/SQLiteMigrator.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -32,62 +32,62 @@
 block discarded – undo
32 32
 
33 33
 class SQLiteMigrator extends Migrator {
34 34
 
35
-	/**
36
-	 * @param \Doctrine\DBAL\Schema\Schema $targetSchema
37
-	 * @throws \OC\DB\MigrationException
38
-	 *
39
-	 * For sqlite we simple make a copy of the entire database, and test the migration on that
40
-	 */
41
-	public function checkMigrate(\Doctrine\DBAL\Schema\Schema $targetSchema) {
42
-		$dbFile = $this->connection->getDatabase();
43
-		$tmpFile = $this->buildTempDatabase();
44
-		copy($dbFile, $tmpFile);
35
+    /**
36
+     * @param \Doctrine\DBAL\Schema\Schema $targetSchema
37
+     * @throws \OC\DB\MigrationException
38
+     *
39
+     * For sqlite we simple make a copy of the entire database, and test the migration on that
40
+     */
41
+    public function checkMigrate(\Doctrine\DBAL\Schema\Schema $targetSchema) {
42
+        $dbFile = $this->connection->getDatabase();
43
+        $tmpFile = $this->buildTempDatabase();
44
+        copy($dbFile, $tmpFile);
45 45
 
46
-		$connectionParams = array(
47
-			'path' => $tmpFile,
48
-			'driver' => 'pdo_sqlite',
49
-		);
50
-		$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
51
-		try {
52
-			$this->applySchema($targetSchema, $conn);
53
-			$conn->close();
54
-			unlink($tmpFile);
55
-		} catch (DBALException $e) {
56
-			$conn->close();
57
-			unlink($tmpFile);
58
-			throw new MigrationException('', $e->getMessage());
59
-		}
60
-	}
46
+        $connectionParams = array(
47
+            'path' => $tmpFile,
48
+            'driver' => 'pdo_sqlite',
49
+        );
50
+        $conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
51
+        try {
52
+            $this->applySchema($targetSchema, $conn);
53
+            $conn->close();
54
+            unlink($tmpFile);
55
+        } catch (DBALException $e) {
56
+            $conn->close();
57
+            unlink($tmpFile);
58
+            throw new MigrationException('', $e->getMessage());
59
+        }
60
+    }
61 61
 
62
-	/**
63
-	 * @return string
64
-	 */
65
-	private function buildTempDatabase() {
66
-		$dataDir = $this->config->getSystemValue("datadirectory", \OC::$SERVERROOT . '/data');
67
-		$tmpFile = uniqid("oc_");
68
-		return "$dataDir/$tmpFile.db";
69
-	}
62
+    /**
63
+     * @return string
64
+     */
65
+    private function buildTempDatabase() {
66
+        $dataDir = $this->config->getSystemValue("datadirectory", \OC::$SERVERROOT . '/data');
67
+        $tmpFile = uniqid("oc_");
68
+        return "$dataDir/$tmpFile.db";
69
+    }
70 70
 
71
-	/**
72
-	 * @param Schema $targetSchema
73
-	 * @param \Doctrine\DBAL\Connection $connection
74
-	 * @return \Doctrine\DBAL\Schema\SchemaDiff
75
-	 */
76
-	protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) {
77
-		$platform = $connection->getDatabasePlatform();
78
-		$platform->registerDoctrineTypeMapping('tinyint unsigned', 'integer');
79
-		$platform->registerDoctrineTypeMapping('smallint unsigned', 'integer');
80
-		$platform->registerDoctrineTypeMapping('varchar ', 'string');
71
+    /**
72
+     * @param Schema $targetSchema
73
+     * @param \Doctrine\DBAL\Connection $connection
74
+     * @return \Doctrine\DBAL\Schema\SchemaDiff
75
+     */
76
+    protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) {
77
+        $platform = $connection->getDatabasePlatform();
78
+        $platform->registerDoctrineTypeMapping('tinyint unsigned', 'integer');
79
+        $platform->registerDoctrineTypeMapping('smallint unsigned', 'integer');
80
+        $platform->registerDoctrineTypeMapping('varchar ', 'string');
81 81
 
82
-		// with sqlite autoincrement columns is of type integer
83
-		foreach ($targetSchema->getTables() as $table) {
84
-			foreach ($table->getColumns() as $column) {
85
-				if ($column->getType() instanceof BigIntType && $column->getAutoincrement()) {
86
-					$column->setType(Type::getType('integer'));
87
-				}
88
-			}
89
-		}
82
+        // with sqlite autoincrement columns is of type integer
83
+        foreach ($targetSchema->getTables() as $table) {
84
+            foreach ($table->getColumns() as $column) {
85
+                if ($column->getType() instanceof BigIntType && $column->getAutoincrement()) {
86
+                    $column->setType(Type::getType('integer'));
87
+                }
88
+            }
89
+        }
90 90
 
91
-		return parent::getDiff($targetSchema, $connection);
92
-	}
91
+        return parent::getDiff($targetSchema, $connection);
92
+    }
93 93
 }
Please login to merge, or discard this patch.
lib/private/App/AppStore/Version/Version.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -22,31 +22,31 @@
 block discarded – undo
22 22
 namespace OC\App\AppStore\Version;
23 23
 
24 24
 class Version {
25
-	/** @var string */
26
-	private $minVersion;
27
-	/** @var string */
28
-	private $maxVersion;
25
+    /** @var string */
26
+    private $minVersion;
27
+    /** @var string */
28
+    private $maxVersion;
29 29
 
30
-	/**
31
-	 * @param string $minVersion
32
-	 * @param string $maxVersion
33
-	 */
34
-	public function __construct($minVersion, $maxVersion) {
35
-		$this->minVersion = $minVersion;
36
-		$this->maxVersion = $maxVersion;
37
-	}
30
+    /**
31
+     * @param string $minVersion
32
+     * @param string $maxVersion
33
+     */
34
+    public function __construct($minVersion, $maxVersion) {
35
+        $this->minVersion = $minVersion;
36
+        $this->maxVersion = $maxVersion;
37
+    }
38 38
 
39
-	/**
40
-	 * @return string
41
-	 */
42
-	public function getMinimumVersion() {
43
-		return $this->minVersion;
44
-	}
39
+    /**
40
+     * @return string
41
+     */
42
+    public function getMinimumVersion() {
43
+        return $this->minVersion;
44
+    }
45 45
 
46
-	/**
47
-	 * @return string
48
-	 */
49
-	public function getMaximumVersion() {
50
-		return $this->maxVersion;
51
-	}
46
+    /**
47
+     * @return string
48
+     */
49
+    public function getMaximumVersion() {
50
+        return $this->maxVersion;
51
+    }
52 52
 }
Please login to merge, or discard this patch.
lib/private/App/CodeChecker/AbstractCheck.php 1 patch
Indentation   +114 added lines, -114 removed lines patch added patch discarded remove patch
@@ -23,118 +23,118 @@
 block discarded – undo
23 23
 namespace OC\App\CodeChecker;
24 24
 
25 25
 abstract class AbstractCheck implements ICheck {
26
-	/** @var ICheck */
27
-	protected $check;
28
-
29
-	/**
30
-	 * @param ICheck $check
31
-	 */
32
-	public function __construct(ICheck $check) {
33
-		$this->check = $check;
34
-	}
35
-
36
-	/**
37
-	 * @param int $errorCode
38
-	 * @param string $errorObject
39
-	 * @return string
40
-	 */
41
-	public function getDescription($errorCode, $errorObject) {
42
-		switch ($errorCode) {
43
-			case CodeChecker::STATIC_CALL_NOT_ALLOWED:
44
-				$functions = $this->getLocalFunctions();
45
-				$functions = array_change_key_case($functions, CASE_LOWER);
46
-				if (isset($functions[$errorObject])) {
47
-					return $this->getLocalDescription();
48
-				}
49
-			// no break;
50
-			case CodeChecker::CLASS_EXTENDS_NOT_ALLOWED:
51
-			case CodeChecker::CLASS_IMPLEMENTS_NOT_ALLOWED:
52
-			case CodeChecker::CLASS_NEW_NOT_ALLOWED:
53
-			case CodeChecker::CLASS_USE_NOT_ALLOWED:
54
-				$classes = $this->getLocalClasses();
55
-				$classes = array_change_key_case($classes, CASE_LOWER);
56
-				if (isset($classes[$errorObject])) {
57
-					return $this->getLocalDescription();
58
-				}
59
-			break;
60
-
61
-			case CodeChecker::CLASS_CONST_FETCH_NOT_ALLOWED:
62
-				$constants = $this->getLocalConstants();
63
-				$constants = array_change_key_case($constants, CASE_LOWER);
64
-				if (isset($constants[$errorObject])) {
65
-					return $this->getLocalDescription();
66
-				}
67
-			break;
68
-
69
-			case CodeChecker::CLASS_METHOD_CALL_NOT_ALLOWED:
70
-				$methods = $this->getLocalMethods();
71
-				$methods = array_change_key_case($methods, CASE_LOWER);
72
-				if (isset($methods[$errorObject])) {
73
-					return $this->getLocalDescription();
74
-				}
75
-			break;
76
-		}
77
-
78
-		return $this->check->getDescription($errorCode, $errorObject);
79
-	}
80
-
81
-	/**
82
-	 * @return string
83
-	 */
84
-	abstract protected function getLocalDescription();
85
-
86
-	/**
87
-	 * @return array
88
-	 */
89
-	abstract protected function getLocalClasses();
90
-
91
-	/**
92
-	 * @return array
93
-	 */
94
-	abstract protected function getLocalConstants();
95
-
96
-	/**
97
-	 * @return array
98
-	 */
99
-	abstract protected function getLocalFunctions();
100
-
101
-	/**
102
-	 * @return array
103
-	 */
104
-	abstract protected function getLocalMethods();
105
-
106
-	/**
107
-	 * @return array E.g.: `'ClassName' => 'oc version',`
108
-	 */
109
-	public function getClasses() {
110
-		return array_merge($this->getLocalClasses(), $this->check->getClasses());
111
-	}
112
-
113
-	/**
114
-	 * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
115
-	 */
116
-	public function getConstants() {
117
-		return array_merge($this->getLocalConstants(), $this->check->getConstants());
118
-	}
119
-
120
-	/**
121
-	 * @return array E.g.: `'functionName' => 'oc version',`
122
-	 */
123
-	public function getFunctions() {
124
-		return array_merge($this->getLocalFunctions(), $this->check->getFunctions());
125
-	}
126
-
127
-	/**
128
-	 * @return array E.g.: `'ClassName::methodName' => 'oc version',`
129
-	 */
130
-	public function getMethods() {
131
-		return array_merge($this->getLocalMethods(), $this->check->getMethods());
132
-	}
133
-
134
-	/**
135
-	 * @return bool
136
-	 */
137
-	public function checkStrongComparisons() {
138
-		return $this->check->checkStrongComparisons();
139
-	}
26
+    /** @var ICheck */
27
+    protected $check;
28
+
29
+    /**
30
+     * @param ICheck $check
31
+     */
32
+    public function __construct(ICheck $check) {
33
+        $this->check = $check;
34
+    }
35
+
36
+    /**
37
+     * @param int $errorCode
38
+     * @param string $errorObject
39
+     * @return string
40
+     */
41
+    public function getDescription($errorCode, $errorObject) {
42
+        switch ($errorCode) {
43
+            case CodeChecker::STATIC_CALL_NOT_ALLOWED:
44
+                $functions = $this->getLocalFunctions();
45
+                $functions = array_change_key_case($functions, CASE_LOWER);
46
+                if (isset($functions[$errorObject])) {
47
+                    return $this->getLocalDescription();
48
+                }
49
+            // no break;
50
+            case CodeChecker::CLASS_EXTENDS_NOT_ALLOWED:
51
+            case CodeChecker::CLASS_IMPLEMENTS_NOT_ALLOWED:
52
+            case CodeChecker::CLASS_NEW_NOT_ALLOWED:
53
+            case CodeChecker::CLASS_USE_NOT_ALLOWED:
54
+                $classes = $this->getLocalClasses();
55
+                $classes = array_change_key_case($classes, CASE_LOWER);
56
+                if (isset($classes[$errorObject])) {
57
+                    return $this->getLocalDescription();
58
+                }
59
+            break;
60
+
61
+            case CodeChecker::CLASS_CONST_FETCH_NOT_ALLOWED:
62
+                $constants = $this->getLocalConstants();
63
+                $constants = array_change_key_case($constants, CASE_LOWER);
64
+                if (isset($constants[$errorObject])) {
65
+                    return $this->getLocalDescription();
66
+                }
67
+            break;
68
+
69
+            case CodeChecker::CLASS_METHOD_CALL_NOT_ALLOWED:
70
+                $methods = $this->getLocalMethods();
71
+                $methods = array_change_key_case($methods, CASE_LOWER);
72
+                if (isset($methods[$errorObject])) {
73
+                    return $this->getLocalDescription();
74
+                }
75
+            break;
76
+        }
77
+
78
+        return $this->check->getDescription($errorCode, $errorObject);
79
+    }
80
+
81
+    /**
82
+     * @return string
83
+     */
84
+    abstract protected function getLocalDescription();
85
+
86
+    /**
87
+     * @return array
88
+     */
89
+    abstract protected function getLocalClasses();
90
+
91
+    /**
92
+     * @return array
93
+     */
94
+    abstract protected function getLocalConstants();
95
+
96
+    /**
97
+     * @return array
98
+     */
99
+    abstract protected function getLocalFunctions();
100
+
101
+    /**
102
+     * @return array
103
+     */
104
+    abstract protected function getLocalMethods();
105
+
106
+    /**
107
+     * @return array E.g.: `'ClassName' => 'oc version',`
108
+     */
109
+    public function getClasses() {
110
+        return array_merge($this->getLocalClasses(), $this->check->getClasses());
111
+    }
112
+
113
+    /**
114
+     * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
115
+     */
116
+    public function getConstants() {
117
+        return array_merge($this->getLocalConstants(), $this->check->getConstants());
118
+    }
119
+
120
+    /**
121
+     * @return array E.g.: `'functionName' => 'oc version',`
122
+     */
123
+    public function getFunctions() {
124
+        return array_merge($this->getLocalFunctions(), $this->check->getFunctions());
125
+    }
126
+
127
+    /**
128
+     * @return array E.g.: `'ClassName::methodName' => 'oc version',`
129
+     */
130
+    public function getMethods() {
131
+        return array_merge($this->getLocalMethods(), $this->check->getMethods());
132
+    }
133
+
134
+    /**
135
+     * @return bool
136
+     */
137
+    public function checkStrongComparisons() {
138
+        return $this->check->checkStrongComparisons();
139
+    }
140 140
 }
Please login to merge, or discard this patch.
lib/private/App/CodeChecker/EmptyCheck.php 1 patch
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -22,47 +22,47 @@
 block discarded – undo
22 22
 namespace OC\App\CodeChecker;
23 23
 
24 24
 class EmptyCheck implements ICheck {
25
-	/**
26
-	 * @param int $errorCode
27
-	 * @param string $errorObject
28
-	 * @return string
29
-	 */
30
-	public function getDescription($errorCode, $errorObject) {
31
-		return '';
32
-	}
25
+    /**
26
+     * @param int $errorCode
27
+     * @param string $errorObject
28
+     * @return string
29
+     */
30
+    public function getDescription($errorCode, $errorObject) {
31
+        return '';
32
+    }
33 33
 
34
-	/**
35
-	 * @return array E.g.: `'ClassName' => 'oc version',`
36
-	 */
37
-	public function getClasses() {
38
-		return [];
39
-	}
34
+    /**
35
+     * @return array E.g.: `'ClassName' => 'oc version',`
36
+     */
37
+    public function getClasses() {
38
+        return [];
39
+    }
40 40
 
41
-	/**
42
-	 * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
43
-	 */
44
-	public function getConstants() {
45
-		return [];
46
-	}
41
+    /**
42
+     * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
43
+     */
44
+    public function getConstants() {
45
+        return [];
46
+    }
47 47
 
48
-	/**
49
-	 * @return array E.g.: `'functionName' => 'oc version',`
50
-	 */
51
-	public function getFunctions() {
52
-		return [];
53
-	}
48
+    /**
49
+     * @return array E.g.: `'functionName' => 'oc version',`
50
+     */
51
+    public function getFunctions() {
52
+        return [];
53
+    }
54 54
 
55
-	/**
56
-	 * @return array E.g.: `'ClassName::methodName' => 'oc version',`
57
-	 */
58
-	public function getMethods() {
59
-		return [];
60
-	}
55
+    /**
56
+     * @return array E.g.: `'ClassName::methodName' => 'oc version',`
57
+     */
58
+    public function getMethods() {
59
+        return [];
60
+    }
61 61
 
62
-	/**
63
-	 * @return bool
64
-	 */
65
-	public function checkStrongComparisons() {
66
-		return false;
67
-	}
62
+    /**
63
+     * @return bool
64
+     */
65
+    public function checkStrongComparisons() {
66
+        return false;
67
+    }
68 68
 }
Please login to merge, or discard this patch.
lib/private/App/CodeChecker/StrongComparisonCheck.php 1 patch
Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -23,57 +23,57 @@
 block discarded – undo
23 23
 namespace OC\App\CodeChecker;
24 24
 
25 25
 class StrongComparisonCheck implements ICheck {
26
-	/** @var ICheck */
27
-	protected $check;
26
+    /** @var ICheck */
27
+    protected $check;
28 28
 
29
-	/**
30
-	 * @param ICheck $check
31
-	 */
32
-	public function __construct(ICheck $check) {
33
-		$this->check = $check;
34
-	}
29
+    /**
30
+     * @param ICheck $check
31
+     */
32
+    public function __construct(ICheck $check) {
33
+        $this->check = $check;
34
+    }
35 35
 
36
-	/**
37
-	 * @param int $errorCode
38
-	 * @param string $errorObject
39
-	 * @return string
40
-	 */
41
-	public function getDescription($errorCode, $errorObject) {
42
-		return $this->check->getDescription($errorCode, $errorObject);
43
-	}
36
+    /**
37
+     * @param int $errorCode
38
+     * @param string $errorObject
39
+     * @return string
40
+     */
41
+    public function getDescription($errorCode, $errorObject) {
42
+        return $this->check->getDescription($errorCode, $errorObject);
43
+    }
44 44
 
45
-	/**
46
-	 * @return array
47
-	 */
48
-	public function getClasses() {
49
-		return $this->check->getClasses();
50
-	}
45
+    /**
46
+     * @return array
47
+     */
48
+    public function getClasses() {
49
+        return $this->check->getClasses();
50
+    }
51 51
 
52
-	/**
53
-	 * @return array
54
-	 */
55
-	public function getConstants() {
56
-		return $this->check->getConstants();
57
-	}
52
+    /**
53
+     * @return array
54
+     */
55
+    public function getConstants() {
56
+        return $this->check->getConstants();
57
+    }
58 58
 
59
-	/**
60
-	 * @return array
61
-	 */
62
-	public function getFunctions() {
63
-		return $this->check->getFunctions();
64
-	}
59
+    /**
60
+     * @return array
61
+     */
62
+    public function getFunctions() {
63
+        return $this->check->getFunctions();
64
+    }
65 65
 
66
-	/**
67
-	 * @return array
68
-	 */
69
-	public function getMethods() {
70
-		return $this->check->getMethods();
71
-	}
66
+    /**
67
+     * @return array
68
+     */
69
+    public function getMethods() {
70
+        return $this->check->getMethods();
71
+    }
72 72
 
73
-	/**
74
-	 * @return bool
75
-	 */
76
-	public function checkStrongComparisons() {
77
-		return true;
78
-	}
73
+    /**
74
+     * @return bool
75
+     */
76
+    public function checkStrongComparisons() {
77
+        return true;
78
+    }
79 79
 }
Please login to merge, or discard this patch.
lib/private/App/CodeChecker/ICheck.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -22,35 +22,35 @@
 block discarded – undo
22 22
 namespace OC\App\CodeChecker;
23 23
 
24 24
 interface ICheck {
25
-	/**
26
-	 * @param int $errorCode
27
-	 * @param string $errorObject
28
-	 * @return string
29
-	 */
30
-	public function getDescription($errorCode, $errorObject);
25
+    /**
26
+     * @param int $errorCode
27
+     * @param string $errorObject
28
+     * @return string
29
+     */
30
+    public function getDescription($errorCode, $errorObject);
31 31
 
32
-	/**
33
-	 * @return array E.g.: `'ClassName' => 'oc version',`
34
-	 */
35
-	public function getClasses();
32
+    /**
33
+     * @return array E.g.: `'ClassName' => 'oc version',`
34
+     */
35
+    public function getClasses();
36 36
 
37
-	/**
38
-	 * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
39
-	 */
40
-	public function getConstants();
37
+    /**
38
+     * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
39
+     */
40
+    public function getConstants();
41 41
 
42
-	/**
43
-	 * @return array E.g.: `'functionName' => 'oc version',`
44
-	 */
45
-	public function getFunctions();
42
+    /**
43
+     * @return array E.g.: `'functionName' => 'oc version',`
44
+     */
45
+    public function getFunctions();
46 46
 
47
-	/**
48
-	 * @return array E.g.: `'ClassName::methodName' => 'oc version',`
49
-	 */
50
-	public function getMethods();
47
+    /**
48
+     * @return array E.g.: `'ClassName::methodName' => 'oc version',`
49
+     */
50
+    public function getMethods();
51 51
 
52
-	/**
53
-	 * @return bool
54
-	 */
55
-	public function checkStrongComparisons();
52
+    /**
53
+     * @return bool
54
+     */
55
+    public function checkStrongComparisons();
56 56
 }
Please login to merge, or discard this patch.
lib/private/App/PlatformRepository.php 1 patch
Indentation   +196 added lines, -196 removed lines patch added patch discarded remove patch
@@ -30,200 +30,200 @@
 block discarded – undo
30 30
  * @package OC\App
31 31
  */
32 32
 class PlatformRepository {
33
-	public function __construct() {
34
-		$this->packages = $this->initialize();
35
-	}
36
-
37
-	protected function initialize() {
38
-		$loadedExtensions = get_loaded_extensions();
39
-		$packages = array();
40
-
41
-		// Extensions scanning
42
-		foreach ($loadedExtensions as $name) {
43
-			if (in_array($name, array('standard', 'Core'))) {
44
-				continue;
45
-			}
46
-
47
-			$ext = new \ReflectionExtension($name);
48
-			try {
49
-				$prettyVersion = $ext->getVersion();
50
-				$prettyVersion = $this->normalizeVersion($prettyVersion);
51
-			} catch (\UnexpectedValueException $e) {
52
-				$prettyVersion = '0';
53
-				$prettyVersion = $this->normalizeVersion($prettyVersion);
54
-			}
55
-
56
-			$packages[$this->buildPackageName($name)] = $prettyVersion;
57
-		}
58
-
59
-		foreach ($loadedExtensions as $name) {
60
-			$prettyVersion = null;
61
-			switch ($name) {
62
-				case 'curl':
63
-					$curlVersion = curl_version();
64
-					$prettyVersion = $curlVersion['version'];
65
-					break;
66
-
67
-				case 'iconv':
68
-					$prettyVersion = ICONV_VERSION;
69
-					break;
70
-
71
-				case 'intl':
72
-					$name = 'ICU';
73
-					if (defined('INTL_ICU_VERSION')) {
74
-						$prettyVersion = INTL_ICU_VERSION;
75
-					} else {
76
-						$reflector = new \ReflectionExtension('intl');
77
-
78
-						ob_start();
79
-						$reflector->info();
80
-						$output = ob_get_clean();
81
-
82
-						preg_match('/^ICU version => (.*)$/m', $output, $matches);
83
-						$prettyVersion = $matches[1];
84
-					}
85
-
86
-					break;
87
-
88
-				case 'libxml':
89
-					$prettyVersion = LIBXML_DOTTED_VERSION;
90
-					break;
91
-
92
-				case 'openssl':
93
-					$prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function ($match) {
94
-						return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96));
95
-					}, OPENSSL_VERSION_TEXT);
96
-					break;
97
-
98
-				case 'pcre':
99
-					$prettyVersion = preg_replace('{^(\S+).*}', '$1', PCRE_VERSION);
100
-					break;
101
-
102
-				case 'uuid':
103
-					$prettyVersion = phpversion('uuid');
104
-					break;
105
-
106
-				case 'xsl':
107
-					$prettyVersion = LIBXSLT_DOTTED_VERSION;
108
-					break;
109
-
110
-				default:
111
-					// None handled extensions have no special cases, skip
112
-					continue 2;
113
-			}
114
-
115
-			try {
116
-				$prettyVersion = $this->normalizeVersion($prettyVersion);
117
-			} catch (\UnexpectedValueException $e) {
118
-				continue;
119
-			}
120
-
121
-			$packages[$this->buildPackageName($name)] = $prettyVersion;
122
-		}
123
-
124
-		return $packages;
125
-	}
126
-
127
-	private function buildPackageName($name) {
128
-		return str_replace(' ', '-', $name);
129
-	}
130
-
131
-	/**
132
-	 * @param $name
133
-	 * @return string
134
-	 */
135
-	public function findLibrary($name) {
136
-		$extName = $this->buildPackageName($name);
137
-		if (isset($this->packages[$extName])) {
138
-			return $this->packages[$extName];
139
-		}
140
-		return null;
141
-	}
142
-
143
-	private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
144
-
145
-	/**
146
-	 * Normalizes a version string to be able to perform comparisons on it
147
-	 *
148
-	 * https://github.com/composer/composer/blob/master/src/Composer/Package/Version/VersionParser.php#L94
149
-	 *
150
-	 * @param string $version
151
-	 * @param string $fullVersion optional complete version string to give more context
152
-	 * @throws \UnexpectedValueException
153
-	 * @return string
154
-	 */
155
-	public function normalizeVersion($version, $fullVersion = null) {
156
-		$version = trim($version);
157
-		if (null === $fullVersion) {
158
-			$fullVersion = $version;
159
-		}
160
-		// ignore aliases and just assume the alias is required instead of the source
161
-		if (preg_match('{^([^,\s]+) +as +([^,\s]+)$}', $version, $match)) {
162
-			$version = $match[1];
163
-		}
164
-		// match master-like branches
165
-		if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
166
-			return '9999999-dev';
167
-		}
168
-		if ('dev-' === strtolower(substr($version, 0, 4))) {
169
-			return 'dev-' . substr($version, 4);
170
-		}
171
-		// match classical versioning
172
-		if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
173
-			$version = $matches[1]
174
-				. (!empty($matches[2]) ? $matches[2] : '.0')
175
-				. (!empty($matches[3]) ? $matches[3] : '.0')
176
-				. (!empty($matches[4]) ? $matches[4] : '.0');
177
-			$index = 5;
178
-		} elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { // match date-based versioning
179
-			$version = preg_replace('{\D}', '-', $matches[1]);
180
-			$index = 2;
181
-		} elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
182
-			$version = $matches[1]
183
-				. (!empty($matches[2]) ? $matches[2] : '.0')
184
-				. (!empty($matches[3]) ? $matches[3] : '.0')
185
-				. (!empty($matches[4]) ? $matches[4] : '.0');
186
-			$index = 5;
187
-		}
188
-		// add version modifiers if a version was matched
189
-		if (isset($index)) {
190
-			if (!empty($matches[$index])) {
191
-				if ('stable' === $matches[$index]) {
192
-					return $version;
193
-				}
194
-				$version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
195
-			}
196
-			if (!empty($matches[$index + 2])) {
197
-				$version .= '-dev';
198
-			}
199
-			return $version;
200
-		}
201
-		$extraMessage = '';
202
-		if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
203
-			$extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
204
-		} elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
205
-			$extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
206
-		}
207
-		throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
208
-	}
209
-
210
-	/**
211
-	 * @param string $stability
212
-	 */
213
-	private function expandStability($stability) {
214
-		$stability = strtolower($stability);
215
-		switch ($stability) {
216
-			case 'a':
217
-				return 'alpha';
218
-			case 'b':
219
-				return 'beta';
220
-			case 'p':
221
-			case 'pl':
222
-				return 'patch';
223
-			case 'rc':
224
-				return 'RC';
225
-			default:
226
-				return $stability;
227
-		}
228
-	}
33
+    public function __construct() {
34
+        $this->packages = $this->initialize();
35
+    }
36
+
37
+    protected function initialize() {
38
+        $loadedExtensions = get_loaded_extensions();
39
+        $packages = array();
40
+
41
+        // Extensions scanning
42
+        foreach ($loadedExtensions as $name) {
43
+            if (in_array($name, array('standard', 'Core'))) {
44
+                continue;
45
+            }
46
+
47
+            $ext = new \ReflectionExtension($name);
48
+            try {
49
+                $prettyVersion = $ext->getVersion();
50
+                $prettyVersion = $this->normalizeVersion($prettyVersion);
51
+            } catch (\UnexpectedValueException $e) {
52
+                $prettyVersion = '0';
53
+                $prettyVersion = $this->normalizeVersion($prettyVersion);
54
+            }
55
+
56
+            $packages[$this->buildPackageName($name)] = $prettyVersion;
57
+        }
58
+
59
+        foreach ($loadedExtensions as $name) {
60
+            $prettyVersion = null;
61
+            switch ($name) {
62
+                case 'curl':
63
+                    $curlVersion = curl_version();
64
+                    $prettyVersion = $curlVersion['version'];
65
+                    break;
66
+
67
+                case 'iconv':
68
+                    $prettyVersion = ICONV_VERSION;
69
+                    break;
70
+
71
+                case 'intl':
72
+                    $name = 'ICU';
73
+                    if (defined('INTL_ICU_VERSION')) {
74
+                        $prettyVersion = INTL_ICU_VERSION;
75
+                    } else {
76
+                        $reflector = new \ReflectionExtension('intl');
77
+
78
+                        ob_start();
79
+                        $reflector->info();
80
+                        $output = ob_get_clean();
81
+
82
+                        preg_match('/^ICU version => (.*)$/m', $output, $matches);
83
+                        $prettyVersion = $matches[1];
84
+                    }
85
+
86
+                    break;
87
+
88
+                case 'libxml':
89
+                    $prettyVersion = LIBXML_DOTTED_VERSION;
90
+                    break;
91
+
92
+                case 'openssl':
93
+                    $prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function ($match) {
94
+                        return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96));
95
+                    }, OPENSSL_VERSION_TEXT);
96
+                    break;
97
+
98
+                case 'pcre':
99
+                    $prettyVersion = preg_replace('{^(\S+).*}', '$1', PCRE_VERSION);
100
+                    break;
101
+
102
+                case 'uuid':
103
+                    $prettyVersion = phpversion('uuid');
104
+                    break;
105
+
106
+                case 'xsl':
107
+                    $prettyVersion = LIBXSLT_DOTTED_VERSION;
108
+                    break;
109
+
110
+                default:
111
+                    // None handled extensions have no special cases, skip
112
+                    continue 2;
113
+            }
114
+
115
+            try {
116
+                $prettyVersion = $this->normalizeVersion($prettyVersion);
117
+            } catch (\UnexpectedValueException $e) {
118
+                continue;
119
+            }
120
+
121
+            $packages[$this->buildPackageName($name)] = $prettyVersion;
122
+        }
123
+
124
+        return $packages;
125
+    }
126
+
127
+    private function buildPackageName($name) {
128
+        return str_replace(' ', '-', $name);
129
+    }
130
+
131
+    /**
132
+     * @param $name
133
+     * @return string
134
+     */
135
+    public function findLibrary($name) {
136
+        $extName = $this->buildPackageName($name);
137
+        if (isset($this->packages[$extName])) {
138
+            return $this->packages[$extName];
139
+        }
140
+        return null;
141
+    }
142
+
143
+    private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
144
+
145
+    /**
146
+     * Normalizes a version string to be able to perform comparisons on it
147
+     *
148
+     * https://github.com/composer/composer/blob/master/src/Composer/Package/Version/VersionParser.php#L94
149
+     *
150
+     * @param string $version
151
+     * @param string $fullVersion optional complete version string to give more context
152
+     * @throws \UnexpectedValueException
153
+     * @return string
154
+     */
155
+    public function normalizeVersion($version, $fullVersion = null) {
156
+        $version = trim($version);
157
+        if (null === $fullVersion) {
158
+            $fullVersion = $version;
159
+        }
160
+        // ignore aliases and just assume the alias is required instead of the source
161
+        if (preg_match('{^([^,\s]+) +as +([^,\s]+)$}', $version, $match)) {
162
+            $version = $match[1];
163
+        }
164
+        // match master-like branches
165
+        if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
166
+            return '9999999-dev';
167
+        }
168
+        if ('dev-' === strtolower(substr($version, 0, 4))) {
169
+            return 'dev-' . substr($version, 4);
170
+        }
171
+        // match classical versioning
172
+        if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
173
+            $version = $matches[1]
174
+                . (!empty($matches[2]) ? $matches[2] : '.0')
175
+                . (!empty($matches[3]) ? $matches[3] : '.0')
176
+                . (!empty($matches[4]) ? $matches[4] : '.0');
177
+            $index = 5;
178
+        } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { // match date-based versioning
179
+            $version = preg_replace('{\D}', '-', $matches[1]);
180
+            $index = 2;
181
+        } elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
182
+            $version = $matches[1]
183
+                . (!empty($matches[2]) ? $matches[2] : '.0')
184
+                . (!empty($matches[3]) ? $matches[3] : '.0')
185
+                . (!empty($matches[4]) ? $matches[4] : '.0');
186
+            $index = 5;
187
+        }
188
+        // add version modifiers if a version was matched
189
+        if (isset($index)) {
190
+            if (!empty($matches[$index])) {
191
+                if ('stable' === $matches[$index]) {
192
+                    return $version;
193
+                }
194
+                $version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
195
+            }
196
+            if (!empty($matches[$index + 2])) {
197
+                $version .= '-dev';
198
+            }
199
+            return $version;
200
+        }
201
+        $extraMessage = '';
202
+        if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
203
+            $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
204
+        } elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
205
+            $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
206
+        }
207
+        throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
208
+    }
209
+
210
+    /**
211
+     * @param string $stability
212
+     */
213
+    private function expandStability($stability) {
214
+        $stability = strtolower($stability);
215
+        switch ($stability) {
216
+            case 'a':
217
+                return 'alpha';
218
+            case 'b':
219
+                return 'beta';
220
+            case 'p':
221
+            case 'pl':
222
+                return 'patch';
223
+            case 'rc':
224
+                return 'RC';
225
+            default:
226
+                return $stability;
227
+        }
228
+    }
229 229
 }
Please login to merge, or discard this patch.