Completed
Push — test ( e4e76c...b91463 )
by Temitope
02:36
created
src/Helper/InflectorClass.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -10,5 +10,5 @@
 block discarded – undo
10 10
 
11 11
 class Inflector {
12 12
 	
13
-    use Inflector;
13
+	use Inflector;
14 14
 }
Please login to merge, or discard this patch.
src/Exceptions/WrongArgumentException.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -10,8 +10,8 @@
 block discarded – undo
10 10
 
11 11
 class WrongArgumentException extends Exception
12 12
 {
13
-    public function create($message)
14
-    {
15
-        return new static ($message);
16
-    }
13
+	public function create($message)
14
+	{
15
+		return new static ($message);
16
+	}
17 17
 }
Please login to merge, or discard this patch.
src/Exceptions/TableFieldUndefinedException.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -10,10 +10,10 @@
 block discarded – undo
10 10
 
11 11
 class TableFieldUndefinedException extends Exception
12 12
 {
13
-    public static function create($unExpectedFields, $message)
14
-    {
15
-        $fields = implode(', ', $unExpectedFields);
13
+	public static function create($unExpectedFields, $message)
14
+	{
15
+		$fields = implode(', ', $unExpectedFields);
16 16
 
17
-        return new static($fields.' '.$message);
18
-    }
17
+		return new static($fields.' '.$message);
18
+	}
19 19
 }
Please login to merge, or discard this patch.
src/Exceptions/NullArgumentPassedToFunctionException.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -10,8 +10,8 @@
 block discarded – undo
10 10
 
11 11
 class NullArgumentPassedToFunctionException extends Exception
12 12
 {
13
-    public static function create($message)
14
-    {
15
-        return new static ($message);
16
-    }
13
+	public static function create($message)
14
+	{
15
+		return new static ($message);
16
+	}
17 17
 }
Please login to merge, or discard this patch.
src/Exceptions/NoRecordDeletionException.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -10,8 +10,8 @@
 block discarded – undo
10 10
 
11 11
 class NoRecordDeletionException extends Exception
12 12
 {
13
-    public static function create($message)
14
-    {
15
-        return new static($message);
16
-    }
13
+	public static function create($message)
14
+	{
15
+		return new static($message);
16
+	}
17 17
 }
Please login to merge, or discard this patch.
src/Exceptions/NoRecordInsertionException.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -10,8 +10,8 @@
 block discarded – undo
10 10
 
11 11
 class NoRecordInsertionException extends Exception
12 12
 {
13
-    public static function create($mesaage)
14
-    {
15
-        return new static($mesaage);
16
-    }
13
+	public static function create($mesaage)
14
+	{
15
+		return new static($mesaage);
16
+	}
17 17
 }
Please login to merge, or discard this patch.
src/Database/DatabaseHandler.php 1 patch
Indentation   +177 added lines, -177 removed lines patch added patch discarded remove patch
@@ -9,129 +9,129 @@  discard block
 block discarded – undo
9 9
 use PDO;
10 10
 class DatabaseHandler
11 11
 {
12
-    private $tableFields;
13
-    private $dbHelperInstance;
14
-    private $dbConnection;
15
-    private $model;
16
-
17
-    /**
18
-     * This is a constructor; a default method  that will be called automatically during class instantiation.
19
-     */
20
-    public function __construct($modelClassName, $dbConn = null)
21
-    {
22
-        if (is_null($dbConn)) {
23
-            $this->dbConnection = new DatabaseConnection();
24
-        } else {
25
-            $this->dbConnection = $dbConn;
26
-        }
27
-
28
-        $this->model = $modelClassName;
29
-    }
30
-
31
-    /**
32
-     * This method create a record and store it in a table row.
33
-     *
34
-     * @params associative array, string tablename
35
-     *
36
-     * @return bool true or false
37
-     */
38
-    public function create($associative1DArray, $tableName, $dbConn = null)
39
-    {
40
-        $tableFields = $this->getColumnNames($this->model, $this->dbConnection);
41
-
42
-        $unexpectedFields = self::filterClassAttributes($tableFields, $associative1DArray);
43
-
44
-        if (count($unexpectedFields) > 0) {
45
-            throw TableFieldUndefinedException::create($unexpectedFields, 'needs to be created as a table field');
46
-        }
47
-
48
-        unset($associative1DArray[0]);
49
-
50
-        if (is_null($dbConn)) {
51
-            $dbConn = $this->dbConnection;
52
-        }
53
-
54
-        return $this->insertRecord($dbConn, $tableName, $associative1DArray);
55
-    }
56
-
57
-    /**
58
-     * This method runs the insertion query.
59
-     *
60
-     * @param  $dbConn
61
-     * @param  $tableName
62
-     * @param  $associative1DArray
63
-     *
64
-     * @return bool true
65
-     */
66
-    private function insertRecord($dbConn, $tableName, $associative1DArray)
67
-    {
68
-        $insertQuery = 'INSERT INTO '.$tableName;
69
-
70
-        $TableValues = implode(',', array_keys($associative1DArray));
71
-
72
-        foreach ($associative1DArray as $field => $value) {
73
-            $FormValues[] = "'".trim(addslashes($value))."'";
74
-        }
75
-
76
-        $splittedTableValues = implode(',', $FormValues);
77
-
78
-        $insertQuery .= ' ('.$TableValues.')';
79
-        $insertQuery .= ' VALUES ('.$splittedTableValues.')';
80
-
81
-        $executeQuery = $dbConn->exec($insertQuery);
82
-
83
-        if ($executeQuery) {
84
-            return true;
85
-        }
86
-
87
-        return false;
88
-    }
89
-
90
-    /**
91
-     * This method updates any table by supplying 3 parameter.
92
-     *
93
-     * @params: $updateParams, $tableName, $associative1DArray
94
-     *
95
-     * @return bool true or false
96
-     */
97
-    public function update(array $updateParams, $tableName, $associative1DArray, $dbConn = null)
98
-    {
99
-        $sql = '';
100
-
101
-        if (is_null($dbConn)) {
102
-            $dbConn = $this->dbConnection;
103
-        }
104
-
105
-        $updateSql = "UPDATE `$tableName` SET ";
106
-
107
-        unset($associative1DArray['id']);
108
-
109
-        $unexpectedFields = self::filterClassAttributes($this->getColumnNames($this->model, $this->dbConnection), $associative1DArray);
110
-
111
-        if (count($unexpectedFields) > 0) {
112
-            throw TableFieldUndefinedException::create($unexpectedFields, 'needs to be created as a table field');
113
-        }
12
+	private $tableFields;
13
+	private $dbHelperInstance;
14
+	private $dbConnection;
15
+	private $model;
16
+
17
+	/**
18
+	 * This is a constructor; a default method  that will be called automatically during class instantiation.
19
+	 */
20
+	public function __construct($modelClassName, $dbConn = null)
21
+	{
22
+		if (is_null($dbConn)) {
23
+			$this->dbConnection = new DatabaseConnection();
24
+		} else {
25
+			$this->dbConnection = $dbConn;
26
+		}
27
+
28
+		$this->model = $modelClassName;
29
+	}
30
+
31
+	/**
32
+	 * This method create a record and store it in a table row.
33
+	 *
34
+	 * @params associative array, string tablename
35
+	 *
36
+	 * @return bool true or false
37
+	 */
38
+	public function create($associative1DArray, $tableName, $dbConn = null)
39
+	{
40
+		$tableFields = $this->getColumnNames($this->model, $this->dbConnection);
41
+
42
+		$unexpectedFields = self::filterClassAttributes($tableFields, $associative1DArray);
43
+
44
+		if (count($unexpectedFields) > 0) {
45
+			throw TableFieldUndefinedException::create($unexpectedFields, 'needs to be created as a table field');
46
+		}
47
+
48
+		unset($associative1DArray[0]);
49
+
50
+		if (is_null($dbConn)) {
51
+			$dbConn = $this->dbConnection;
52
+		}
53
+
54
+		return $this->insertRecord($dbConn, $tableName, $associative1DArray);
55
+	}
56
+
57
+	/**
58
+	 * This method runs the insertion query.
59
+	 *
60
+	 * @param  $dbConn
61
+	 * @param  $tableName
62
+	 * @param  $associative1DArray
63
+	 *
64
+	 * @return bool true
65
+	 */
66
+	private function insertRecord($dbConn, $tableName, $associative1DArray)
67
+	{
68
+		$insertQuery = 'INSERT INTO '.$tableName;
69
+
70
+		$TableValues = implode(',', array_keys($associative1DArray));
71
+
72
+		foreach ($associative1DArray as $field => $value) {
73
+			$FormValues[] = "'".trim(addslashes($value))."'";
74
+		}
75
+
76
+		$splittedTableValues = implode(',', $FormValues);
77
+
78
+		$insertQuery .= ' ('.$TableValues.')';
79
+		$insertQuery .= ' VALUES ('.$splittedTableValues.')';
80
+
81
+		$executeQuery = $dbConn->exec($insertQuery);
82
+
83
+		if ($executeQuery) {
84
+			return true;
85
+		}
86
+
87
+		return false;
88
+	}
89
+
90
+	/**
91
+	 * This method updates any table by supplying 3 parameter.
92
+	 *
93
+	 * @params: $updateParams, $tableName, $associative1DArray
94
+	 *
95
+	 * @return bool true or false
96
+	 */
97
+	public function update(array $updateParams, $tableName, $associative1DArray, $dbConn = null)
98
+	{
99
+		$sql = '';
100
+
101
+		if (is_null($dbConn)) {
102
+			$dbConn = $this->dbConnection;
103
+		}
104
+
105
+		$updateSql = "UPDATE `$tableName` SET ";
106
+
107
+		unset($associative1DArray['id']);
108
+
109
+		$unexpectedFields = self::filterClassAttributes($this->getColumnNames($this->model, $this->dbConnection), $associative1DArray);
110
+
111
+		if (count($unexpectedFields) > 0) {
112
+			throw TableFieldUndefinedException::create($unexpectedFields, 'needs to be created as a table field');
113
+		}
114 114
 
115
-        foreach ($associative1DArray as $field => $value) {
116
-            $sql .= "`$field` = '$value'".',';
117
-        }
115
+		foreach ($associative1DArray as $field => $value) {
116
+			$sql .= "`$field` = '$value'".',';
117
+		}
118 118
 
119
-        $updateSql .= $this->prepareUpdateQuery($sql);
119
+		$updateSql .= $this->prepareUpdateQuery($sql);
120 120
 
121
-        foreach ($updateParams as $key => $val) {
122
-            $updateSql .= " WHERE $key = $val";
123
-        }
121
+		foreach ($updateParams as $key => $val) {
122
+			$updateSql .= " WHERE $key = $val";
123
+		}
124 124
 
125
-        $stmt = $dbConn->prepare($updateSql);
125
+		$stmt = $dbConn->prepare($updateSql);
126 126
 
127
-        $boolResponse = $stmt->execute();
127
+		$boolResponse = $stmt->execute();
128 128
 
129
-        if ($boolResponse) {
130
-            return true;
131
-        }
129
+		if ($boolResponse) {
130
+			return true;
131
+		}
132 132
 
133
-        return false;
134
-    }
133
+		return false;
134
+	}
135 135
 
136 136
    /**
137 137
     * This method retrieves record from a table.
@@ -142,26 +142,26 @@  discard block
 block discarded – undo
142 142
     */
143 143
    public static function read($id, $tableName, $dbConn = null)
144 144
    {
145
-       $tableData = [];
145
+	   $tableData = [];
146 146
 
147
-       if (is_null($dbConn)) {
148
-           $dbConn = new DatabaseConnection();
149
-       }
147
+	   if (is_null($dbConn)) {
148
+		   $dbConn = new DatabaseConnection();
149
+	   }
150 150
 
151
-       $sql = $id ? 'SELECT * FROM '.$tableName.' WHERE id = '.$id : 'SELECT * FROM '.$tableName;
151
+	   $sql = $id ? 'SELECT * FROM '.$tableName.' WHERE id = '.$id : 'SELECT * FROM '.$tableName;
152 152
 
153
-       $stmt = $dbConn->prepare($sql);
154
-       $stmt->bindValue(':table', $tableName);
155
-       $stmt->bindValue(':id', $id);
156
-       $stmt->execute();
153
+	   $stmt = $dbConn->prepare($sql);
154
+	   $stmt->bindValue(':table', $tableName);
155
+	   $stmt->bindValue(':id', $id);
156
+	   $stmt->execute();
157 157
 
158
-       $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
158
+	   $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
159 159
 
160
-       foreach ($results as $result) {
161
-           array_push($tableData, $result);
162
-       }
160
+	   foreach ($results as $result) {
161
+		   array_push($tableData, $result);
162
+	   }
163 163
 
164
-       return $tableData;
164
+	   return $tableData;
165 165
    }
166 166
 
167 167
   /**
@@ -173,19 +173,19 @@  discard block
 block discarded – undo
173 173
    */
174 174
   public static function delete($id, $tableName, $dbConn = null)
175 175
   {
176
-      if (is_null($dbConn)) {
177
-          $dbConn = new DatabaseConnection();
178
-      }
176
+	  if (is_null($dbConn)) {
177
+		  $dbConn = new DatabaseConnection();
178
+	  }
179 179
 
180
-      $sql = 'DELETE FROM '.$tableName.' WHERE id = '.$id;
180
+	  $sql = 'DELETE FROM '.$tableName.' WHERE id = '.$id;
181 181
 
182
-      $boolResponse = $dbConn->exec($sql);
182
+	  $boolResponse = $dbConn->exec($sql);
183 183
 
184
-      if ($boolResponse) {
185
-          return true;
186
-      }
184
+	  if ($boolResponse) {
185
+		  return true;
186
+	  }
187 187
 
188
-      throw NoRecordDeletionException::create('Record deletion unsuccessful because id does not match any record');
188
+	  throw NoRecordDeletionException::create('Record deletion unsuccessful because id does not match any record');
189 189
   }
190 190
 
191 191
   /**
@@ -198,15 +198,15 @@  discard block
 block discarded – undo
198 198
    */
199 199
   public static function filterClassAttributes(array $tableColumn, array $userSetterArray)
200 200
   {
201
-      $unexpectedFields = [];
201
+	  $unexpectedFields = [];
202 202
 
203
-      foreach ($userSetterArray as $key => $val) {
204
-          if (!in_array($key, $tableColumn)) {
205
-              $unexpectedFields[] = $key;
206
-          }
207
-      }
203
+	  foreach ($userSetterArray as $key => $val) {
204
+		  if (!in_array($key, $tableColumn)) {
205
+			  $unexpectedFields[] = $key;
206
+		  }
207
+	  }
208 208
 
209
-      return $unexpectedFields;
209
+	  return $unexpectedFields;
210 210
   }
211 211
 
212 212
   /**
@@ -218,13 +218,13 @@  discard block
 block discarded – undo
218 218
    */
219 219
   public function prepareUpdateQuery($sql)
220 220
   {
221
-      $splittedQuery = explode(',', $sql);
221
+	  $splittedQuery = explode(',', $sql);
222 222
 
223
-      array_pop($splittedQuery);
223
+	  array_pop($splittedQuery);
224 224
 
225
-      $mergeData = implode(',', $splittedQuery);
225
+	  $mergeData = implode(',', $splittedQuery);
226 226
 
227
-      return $mergeData;
227
+	  return $mergeData;
228 228
   }
229 229
 
230 230
   /**
@@ -238,26 +238,26 @@  discard block
 block discarded – undo
238 238
    */
239 239
   public function findAndWhere($params, $tableName, $dbConn = null)
240 240
   {
241
-      if (is_null($dbConn)) {
242
-          $dbConn = $this->dbConnection;
243
-      }
241
+	  if (is_null($dbConn)) {
242
+		  $dbConn = $this->dbConnection;
243
+	  }
244 244
 
245
-      if (is_array($params) && !empty($params)) {
246
-          $sql = 'SELECT * FROM '.$tableName;
245
+	  if (is_array($params) && !empty($params)) {
246
+		  $sql = 'SELECT * FROM '.$tableName;
247 247
 
248
-          foreach ($params as $key => $val) {
249
-              $sql .= " WHERE `$key` = '$val'";
250
-          }
248
+		  foreach ($params as $key => $val) {
249
+			  $sql .= " WHERE `$key` = '$val'";
250
+		  }
251 251
 
252
-          $statement = $dbConn->prepare($sql);
253
-          $statement->execute();
252
+		  $statement = $dbConn->prepare($sql);
253
+		  $statement->execute();
254 254
 
255
-          $returnedRowNumbers = $statement->rowCount();
255
+		  $returnedRowNumbers = $statement->rowCount();
256 256
 
257
-          return $returnedRowNumbers ? true : false;
258
-      }
257
+		  return $returnedRowNumbers ? true : false;
258
+	  }
259 259
 
260
-      throw EmptyArrayException::create('Array Expected: parameter passed to this function is not an array');
260
+	  throw EmptyArrayException::create('Array Expected: parameter passed to this function is not an array');
261 261
   }
262 262
 
263 263
   /**
@@ -270,24 +270,24 @@  discard block
 block discarded – undo
270 270
    */
271 271
   public function getColumnNames($table, $dbConn = null)
272 272
   {
273
-      $tableFields = [];
273
+	  $tableFields = [];
274 274
 
275
-      if (is_null($dbConn)) {
276
-          $dbConn = $this->dbConnection;
277
-      }
275
+	  if (is_null($dbConn)) {
276
+		  $dbConn = $this->dbConnection;
277
+	  }
278 278
 
279
-      $sql = 'SHOW COLUMNS FROM '.$table;
279
+	  $sql = 'SHOW COLUMNS FROM '.$table;
280 280
 
281
-      $stmt = $dbConn->prepare($sql);
282
-      $stmt->bindValue(':table', $table, PDO::PARAM_STR);
283
-      $stmt->execute();
281
+	  $stmt = $dbConn->prepare($sql);
282
+	  $stmt->bindValue(':table', $table, PDO::PARAM_STR);
283
+	  $stmt->execute();
284 284
 
285
-      $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
285
+	  $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
286 286
 
287
-      foreach ($results as $result) {
288
-          array_push($tableFields, $result['Field']);
289
-      }
287
+	  foreach ($results as $result) {
288
+		  array_push($tableFields, $result['Field']);
289
+	  }
290 290
 
291
-      return $tableFields;
291
+	  return $tableFields;
292 292
   }
293 293
 }
Please login to merge, or discard this patch.
src/Database/DatabaseHelper.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -8,33 +8,33 @@
 block discarded – undo
8 8
 
9 9
 class DatabaseHelper
10 10
 {
11
-    public $dbConn;
11
+	public $dbConn;
12 12
 
13
-    /**
14
-     * This is a constructor; a default method  that will be called automatically during class instantiation.
15
-     */
16
-    public function __construct($dbConnect)
17
-    {
18
-        $this->dbConn = $dbConnect;
19
-    }
13
+	/**
14
+	 * This is a constructor; a default method  that will be called automatically during class instantiation.
15
+	 */
16
+	public function __construct($dbConnect)
17
+	{
18
+		$this->dbConn = $dbConnect;
19
+	}
20 20
 
21
-    /**
22
-     * This method creates a particular table.
23
-     *
24
-     * @param tableName
25
-     * $return boolean true or false
26
-     */
27
-    public function createTable($tableName, $conn = null)
28
-    {
29
-        if (is_null($conn)) {
30
-            $conn = $this->dbConn;
31
-        }
21
+	/**
22
+	 * This method creates a particular table.
23
+	 *
24
+	 * @param tableName
25
+	 * $return boolean true or false
26
+	 */
27
+	public function createTable($tableName, $conn = null)
28
+	{
29
+		if (is_null($conn)) {
30
+			$conn = $this->dbConn;
31
+		}
32 32
 
33
-        $sql = 'CREATE TABLE IF NOT EXISTS '.$tableName.'(';
34
-        $sql .= ' id INT( 11 ) AUTO_INCREMENT PRIMARY KEY, name VARCHAR( 100 ), gender VARCHAR( 10 ), alias VARCHAR( 150 ) NOT NULL, class VARCHAR( 150 ), stack VARCHAR( 50 ) )';
33
+		$sql = 'CREATE TABLE IF NOT EXISTS '.$tableName.'(';
34
+		$sql .= ' id INT( 11 ) AUTO_INCREMENT PRIMARY KEY, name VARCHAR( 100 ), gender VARCHAR( 10 ), alias VARCHAR( 150 ) NOT NULL, class VARCHAR( 150 ), stack VARCHAR( 50 ) )';
35 35
 
36
-        return $conn->exec($sql);
36
+		return $conn->exec($sql);
37 37
 
38
-        throw TableNotCreatedException::create('Check your database connection');
39
-    }
38
+		throw TableNotCreatedException::create('Check your database connection');
39
+	}
40 40
 }
Please login to merge, or discard this patch.
src/Helper/Inflector.php 1 patch
Indentation   +57 added lines, -57 removed lines patch added patch discarded remove patch
@@ -37,62 +37,62 @@
 block discarded – undo
37 37
 
38 38
 trait Inflector
39 39
 {
40
-    /**
41
-     * Pluralizes English nouns.
42
-     *
43
-     * @static
44
-     *
45
-     * @param string $word English noun to pluralize
46
-     *
47
-     * @return string Plural noun
48
-     */
49
-    public static function pluralize($word)
50
-    {
51
-        $plural = [
52
-            '/(quiz)$/i'                     => '$1zes',
53
-            '/^(ox)$/i'                      => '$1en',
54
-            '/([m|l])ouse$/i'                => '$1ice',
55
-            '/(matr|vert|ind)ix|ex$/i'       => '$1ices',
56
-            '/(x|ch|ss|sh)$/i'               => '$1es',
57
-            '/([^aeiouy]|qu)y$/i'            => '$1ies',
58
-            '/(hive)$/i'                     => '$1s',
59
-            '/(?:([^f])fe|([lr])f)$/i'       => '$1$2ves',
60
-            '/(shea|lea|loa|thie)f$/i'       => '$1ves',
61
-            '/sis$/i'                        => 'ses',
62
-            '/([ti])um$/i'                   => '$1a',
63
-            '/(tomat|potat|ech|her|vet)o$/i' => '$1oes',
64
-            '/(bu)s$/i'                      => '$1ses',
65
-            '/(alias)$/i'                    => '$1es',
66
-            '/(octop)us$/i'                  => '$1i',
67
-            '/(ax|test)is$/i'                => '$1es',
68
-            '/(us)$/i'                       => '$1es',
69
-            '/s$/i'                          => 's',
70
-            '/$/'                            => 's',
71
-        ];
72
-        $uncountable = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep'];
73
-        $irregular = [
74
-            'person' => 'people',
75
-            'man'    => 'men',
76
-            'child'  => 'children',
77
-            'sex'    => 'sexes',
78
-            'move'   => 'moves', ];
79
-        $lowercased_word = strtolower($word);
80
-        foreach ($uncountable as $_uncountable) {
81
-            if (substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable) {
82
-                return $word;
83
-            }
84
-        }
85
-        foreach ($irregular as $_plural => $_singular) {
86
-            if (preg_match('/('.$_plural.')$/i', $word, $arr)) {
87
-                return preg_replace('/('.$_plural.')$/i', substr($arr[0], 0, 1).substr($_singular, 1), $word);
88
-            }
89
-        }
90
-        foreach ($plural as $rule => $replacement) {
91
-            if (preg_match($rule, $word)) {
92
-                return preg_replace($rule, $replacement, $word);
93
-            }
94
-        }
40
+	/**
41
+	 * Pluralizes English nouns.
42
+	 *
43
+	 * @static
44
+	 *
45
+	 * @param string $word English noun to pluralize
46
+	 *
47
+	 * @return string Plural noun
48
+	 */
49
+	public static function pluralize($word)
50
+	{
51
+		$plural = [
52
+			'/(quiz)$/i'                     => '$1zes',
53
+			'/^(ox)$/i'                      => '$1en',
54
+			'/([m|l])ouse$/i'                => '$1ice',
55
+			'/(matr|vert|ind)ix|ex$/i'       => '$1ices',
56
+			'/(x|ch|ss|sh)$/i'               => '$1es',
57
+			'/([^aeiouy]|qu)y$/i'            => '$1ies',
58
+			'/(hive)$/i'                     => '$1s',
59
+			'/(?:([^f])fe|([lr])f)$/i'       => '$1$2ves',
60
+			'/(shea|lea|loa|thie)f$/i'       => '$1ves',
61
+			'/sis$/i'                        => 'ses',
62
+			'/([ti])um$/i'                   => '$1a',
63
+			'/(tomat|potat|ech|her|vet)o$/i' => '$1oes',
64
+			'/(bu)s$/i'                      => '$1ses',
65
+			'/(alias)$/i'                    => '$1es',
66
+			'/(octop)us$/i'                  => '$1i',
67
+			'/(ax|test)is$/i'                => '$1es',
68
+			'/(us)$/i'                       => '$1es',
69
+			'/s$/i'                          => 's',
70
+			'/$/'                            => 's',
71
+		];
72
+		$uncountable = ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep'];
73
+		$irregular = [
74
+			'person' => 'people',
75
+			'man'    => 'men',
76
+			'child'  => 'children',
77
+			'sex'    => 'sexes',
78
+			'move'   => 'moves', ];
79
+		$lowercased_word = strtolower($word);
80
+		foreach ($uncountable as $_uncountable) {
81
+			if (substr($lowercased_word, (-1 * strlen($_uncountable))) == $_uncountable) {
82
+				return $word;
83
+			}
84
+		}
85
+		foreach ($irregular as $_plural => $_singular) {
86
+			if (preg_match('/('.$_plural.')$/i', $word, $arr)) {
87
+				return preg_replace('/('.$_plural.')$/i', substr($arr[0], 0, 1).substr($_singular, 1), $word);
88
+			}
89
+		}
90
+		foreach ($plural as $rule => $replacement) {
91
+			if (preg_match($rule, $word)) {
92
+				return preg_replace($rule, $replacement, $word);
93
+			}
94
+		}
95 95
 
96
-        return false;
97
-    }
96
+		return false;
97
+	}
98 98
 }
Please login to merge, or discard this patch.