GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — develop ( e54387...b62a26 )
by Lonnie
10s
created
myth/CIModules/auth/helpers/password_helper.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -32,28 +32,28 @@
 block discarded – undo
32 32
 
33 33
 if (! function_exists('isStrongPassword'))
34 34
 {
35
-    /**
36
-     * Works with Myth\Auth\Password to enforce a strong password.
37
-     * Uses settings from the auth config file.
38
-     *
39
-     * @param $password
40
-     */
41
-    function isStrongPassword($password)
42
-    {
43
-        $min_strength = config_item('auth.min_password_strength');
44
-        $use_dict = config_item('auth.use_dictionary');
35
+	/**
36
+	 * Works with Myth\Auth\Password to enforce a strong password.
37
+	 * Uses settings from the auth config file.
38
+	 *
39
+	 * @param $password
40
+	 */
41
+	function isStrongPassword($password)
42
+	{
43
+		$min_strength = config_item('auth.min_password_strength');
44
+		$use_dict = config_item('auth.use_dictionary');
45 45
 
46
-        $strong = \Myth\Auth\Password::isStrongPassword($password, $min_strength, $use_dict);
46
+		$strong = \Myth\Auth\Password::isStrongPassword($password, $min_strength, $use_dict);
47 47
 
48
-        if (! $strong)
49
-        {
50
-            if (isset(get_instance()->form_validation))
51
-            {
52
-                get_instance()->form_validation->set_message('isStrongPassword', lang('auth.pass_not_strong'));
53
-            }
54
-            return false;
55
-        }
48
+		if (! $strong)
49
+		{
50
+			if (isset(get_instance()->form_validation))
51
+			{
52
+				get_instance()->form_validation->set_message('isStrongPassword', lang('auth.pass_not_strong'));
53
+			}
54
+			return false;
55
+		}
56 56
 
57
-        return true;
58
-    }
57
+		return true;
58
+	}
59 59
 }
Please login to merge, or discard this patch.
myth/CIModules/cron/controllers/Cron.php 1 patch
Indentation   +304 added lines, -304 removed lines patch added patch discarded remove patch
@@ -37,325 +37,325 @@
 block discarded – undo
37 37
 // todo Add ability to log actual cron jobs to database to verify when they ran for sure.
38 38
 class Cron extends \Myth\Controllers\CLIController {
39 39
 
40
-    protected $descriptions = [
41
-        'show'  => ['show [all/<task>]', 'Lists the names one or more tasks, with run times.'],
42
-        'run'   => ['run [<task>]', 'Runs all scheduled tasks. If <task> is present only runs that task.'],
43
-        'disable'   => ['disable', 'Disables the cron system and will not run any tasks.'],
44
-        'enable'    => ['enable', 'Enables the cron system and will run tasks again.'],
45
-        'suspend'   => ['suspend <task>', 'Stops a single task from running until resumed.'],
46
-        'resume'    => ['resume <task>', 'Resumes execution of a single suspended task.']
47
-    ];
48
-
49
-    protected $long_descriptions = [
50
-        'show'  => '',
51
-        'run'   => '',
52
-        'disable'   => '',
53
-        'enable'    => '',
54
-        'suspend'   => '',
55
-        'resume'    => ''
56
-    ];
57
-
58
-    //--------------------------------------------------------------------
59
-
60
-    public function __construct()
61
-    {
62
-        parent::__construct();
63
-
64
-        // Load our tasks into the sytem.
65
-        require APPPATH .'config/cron.php';
66
-    }
67
-
68
-    //--------------------------------------------------------------------
69
-
70
-    /**
71
-     * Runs all of the tasks (after checking their time, of course...)
72
-     *
73
-     * @param string $alias
74
-     * @return mixed
75
-     */
76
-    public function run($alias=null)
77
-    {
78
-        // Has the system been disabled?
79
-        if (Settings::get('is_disabled', 'cron') == 'y')
80
-        {
81
-            return CLI::error('The cron system has been disabled. No tasks were run.');
82
-        }
83
-
84
-        $force_run = false;
85
-
86
-        // Run one task or all?
87
-        if (! empty($alias))
88
-        {
89
-            $tasks = \Myth\Cron\CronManager::task($alias);
90
-
91
-            if (is_null($tasks))
92
-            {
93
-                return CLI::error("Unable to find the task: '{$alias}'.");
94
-            }
95
-
96
-            $tasks = [ $alias => $tasks];
97
-            $force_run = true;
98
-        }
99
-        else
100
-        {
101
-            $tasks = \Myth\Cron\CronManager::tasks();
102
-        }
103
-
104
-        if (empty($tasks))
105
-        {
106
-            return CLI::write("There are no tasks to run at this time.");
107
-        }
108
-
109
-        // We need to be able to check against suspended tasks.
110
-        $suspended = Settings::get('suspended_tasks', 'cron');
111
-
112
-        if (! is_array($suspended))
113
-        {
114
-            $suspended = array($suspended);
115
-        }
116
-
117
-        // Loop over all of our tasks, checking them against the
118
-        // suspended tasks to see if they're okay to run.
119
-
120
-        // Collect the output of the actions so that we can make
121
-        // it available to the event (for sending emails and the like)
122
-        $output = '';
123
-
124
-        echo CLI::write('Starting Tasks...');
125
-
126
-        foreach ($tasks as $alias => $task)
127
-        {
128
-            if (in_array($alias, $suspended))
129
-            {
130
-                echo CLI::write("\t[Suspended] {$alias} will not run until resumed.", 'yellow');
131
-                $output .= "[Suspended] {$alias} will not run until resumed.";
132
-                continue;
133
-            }
134
-
135
-            echo CLI::write("\tRunning task: {$alias}...");
136
-            $output .= \Myth\Cron\CronManager::run($alias, $force_run);
137
-        }
138
-
139
-        // Give other people a chance to respond.
140
-        echo CLI::write('Done. Firing the event so others can play too...');
141
-
142
-        Events::trigger('afterCron', [$output]);
143
-
144
-        // And we're out of here boys and girls!
145
-        echo CLI::write('Done');
146
-    }
147
-
148
-    //--------------------------------------------------------------------
149
-
150
-
151
-    /**
152
-     * Lists one or more tasks with their scheduled run times.
153
-     *
154
-     * @param null $task
155
-     * @return mixed
156
-     */
157
-    public function show($task=null)
158
-    {
159
-        if (empty($task))
160
-        {
161
-            return $this->listTaskNames();
162
-        }
163
-
164
-        if (trim(strtolower($task)) == 'all')
165
-        {
166
-            $tasks = \Myth\Cron\CronManager::listAll();
167
-        }
168
-        else
169
-        {
170
-            $tasks = \Myth\Cron\CronManager::task($task);
171
-        }
172
-
173
-        if (! is_array($tasks))
174
-        {
175
-            $tasks = [ $task => [
176
-                'next_run'  => $tasks->nextRunDate(),
177
-                'prev_run'  => $tasks->previousRunDate()
178
-            ]];
179
-        }
180
-
181
-        if (! count($tasks))
182
-        {
183
-            return CLI::found('No tasks found.', 'red');
184
-        }
185
-
186
-        $suspended = Settings::get('suspended_tasks', 'cron');
187
-
188
-        if (empty($suspended))
189
-        {
190
-            $suspended = [];
191
-        }
192
-        /*
40
+	protected $descriptions = [
41
+		'show'  => ['show [all/<task>]', 'Lists the names one or more tasks, with run times.'],
42
+		'run'   => ['run [<task>]', 'Runs all scheduled tasks. If <task> is present only runs that task.'],
43
+		'disable'   => ['disable', 'Disables the cron system and will not run any tasks.'],
44
+		'enable'    => ['enable', 'Enables the cron system and will run tasks again.'],
45
+		'suspend'   => ['suspend <task>', 'Stops a single task from running until resumed.'],
46
+		'resume'    => ['resume <task>', 'Resumes execution of a single suspended task.']
47
+	];
48
+
49
+	protected $long_descriptions = [
50
+		'show'  => '',
51
+		'run'   => '',
52
+		'disable'   => '',
53
+		'enable'    => '',
54
+		'suspend'   => '',
55
+		'resume'    => ''
56
+	];
57
+
58
+	//--------------------------------------------------------------------
59
+
60
+	public function __construct()
61
+	{
62
+		parent::__construct();
63
+
64
+		// Load our tasks into the sytem.
65
+		require APPPATH .'config/cron.php';
66
+	}
67
+
68
+	//--------------------------------------------------------------------
69
+
70
+	/**
71
+	 * Runs all of the tasks (after checking their time, of course...)
72
+	 *
73
+	 * @param string $alias
74
+	 * @return mixed
75
+	 */
76
+	public function run($alias=null)
77
+	{
78
+		// Has the system been disabled?
79
+		if (Settings::get('is_disabled', 'cron') == 'y')
80
+		{
81
+			return CLI::error('The cron system has been disabled. No tasks were run.');
82
+		}
83
+
84
+		$force_run = false;
85
+
86
+		// Run one task or all?
87
+		if (! empty($alias))
88
+		{
89
+			$tasks = \Myth\Cron\CronManager::task($alias);
90
+
91
+			if (is_null($tasks))
92
+			{
93
+				return CLI::error("Unable to find the task: '{$alias}'.");
94
+			}
95
+
96
+			$tasks = [ $alias => $tasks];
97
+			$force_run = true;
98
+		}
99
+		else
100
+		{
101
+			$tasks = \Myth\Cron\CronManager::tasks();
102
+		}
103
+
104
+		if (empty($tasks))
105
+		{
106
+			return CLI::write("There are no tasks to run at this time.");
107
+		}
108
+
109
+		// We need to be able to check against suspended tasks.
110
+		$suspended = Settings::get('suspended_tasks', 'cron');
111
+
112
+		if (! is_array($suspended))
113
+		{
114
+			$suspended = array($suspended);
115
+		}
116
+
117
+		// Loop over all of our tasks, checking them against the
118
+		// suspended tasks to see if they're okay to run.
119
+
120
+		// Collect the output of the actions so that we can make
121
+		// it available to the event (for sending emails and the like)
122
+		$output = '';
123
+
124
+		echo CLI::write('Starting Tasks...');
125
+
126
+		foreach ($tasks as $alias => $task)
127
+		{
128
+			if (in_array($alias, $suspended))
129
+			{
130
+				echo CLI::write("\t[Suspended] {$alias} will not run until resumed.", 'yellow');
131
+				$output .= "[Suspended] {$alias} will not run until resumed.";
132
+				continue;
133
+			}
134
+
135
+			echo CLI::write("\tRunning task: {$alias}...");
136
+			$output .= \Myth\Cron\CronManager::run($alias, $force_run);
137
+		}
138
+
139
+		// Give other people a chance to respond.
140
+		echo CLI::write('Done. Firing the event so others can play too...');
141
+
142
+		Events::trigger('afterCron', [$output]);
143
+
144
+		// And we're out of here boys and girls!
145
+		echo CLI::write('Done');
146
+	}
147
+
148
+	//--------------------------------------------------------------------
149
+
150
+
151
+	/**
152
+	 * Lists one or more tasks with their scheduled run times.
153
+	 *
154
+	 * @param null $task
155
+	 * @return mixed
156
+	 */
157
+	public function show($task=null)
158
+	{
159
+		if (empty($task))
160
+		{
161
+			return $this->listTaskNames();
162
+		}
163
+
164
+		if (trim(strtolower($task)) == 'all')
165
+		{
166
+			$tasks = \Myth\Cron\CronManager::listAll();
167
+		}
168
+		else
169
+		{
170
+			$tasks = \Myth\Cron\CronManager::task($task);
171
+		}
172
+
173
+		if (! is_array($tasks))
174
+		{
175
+			$tasks = [ $task => [
176
+				'next_run'  => $tasks->nextRunDate(),
177
+				'prev_run'  => $tasks->previousRunDate()
178
+			]];
179
+		}
180
+
181
+		if (! count($tasks))
182
+		{
183
+			return CLI::found('No tasks found.', 'red');
184
+		}
185
+
186
+		$suspended = Settings::get('suspended_tasks', 'cron');
187
+
188
+		if (empty($suspended))
189
+		{
190
+			$suspended = [];
191
+		}
192
+		/*
193 193
          * Headers
194 194
          */
195
-        echo CLI::write("Task\t\t\t\tNext Run\t\tPrevious Run");
196
-        echo CLI::write( str_repeat('-', 80) );
197
-
198
-        foreach ($tasks as $alias => $task)
199
-        {
200
-            // Suspended?
201
-            $color = 'yellow';
202
-            $extra = '';
203
-
204
-            if (in_array($alias, $suspended) )
205
-            {
206
-                $color = 'blue';
207
-                $extra = "\t[Suspended]";
208
-            }
209
-
210
-            // Alias can only be 24 chars long.
211
-            $alias = strlen($alias) >= 32 ? substr($alias, 0, 28) .'... ' : $alias . str_repeat(" ", 32 - strlen($alias));
212
-
213
-            $next = date('D Y-m-d H:i', $task['next_run']);
214
-            $prev = date('D Y-m-d H:i', $task['prev_run']);
215
-
216
-            echo CLI::write("{$alias}{$next}\t{$prev}{$extra}", $color);
217
-        }
218
-    }
219
-
220
-    //--------------------------------------------------------------------
221
-
222
-    /**
223
-     * Stops a task from being executed during the normal cron runs.
224
-     *
225
-     * @param $alias
226
-     */
227
-    public function suspend($alias)
228
-    {
229
-        // Verify the task actually exists.
230
-        $task = \Myth\Cron\CronManager::task($alias);
231
-
232
-        if (is_null($task))
233
-        {
234
-            return CLI::error("Unable to find the task: {$alias}.");
235
-        }
236
-
237
-        // Update the existing setting.
238
-        $suspended = Settings::get('suspended_tasks', 'cron');
239
-
240
-        if (empty($suspended))
241
-        {
242
-            $suspended = [];
243
-        }
244
-
245
-        $suspended[] = $alias;
246
-
247
-        if (Settings::save('suspended_tasks', $suspended, 'cron') )
248
-        {
249
-            return CLI::write('Done');
250
-        }
251
-
252
-        echo CLI::error('Unkown problem saving the settings.');
253
-    }
254
-
255
-    //--------------------------------------------------------------------
256
-
257
-    /**
258
-     * Allows the execution of a suspended task to continue again
259
-     * during normal cron execution.
260
-     *
261
-     * @param $alias
262
-     */
263
-    public function resume($alias)
264
-    {
265
-        // Verify the task actually exists.
266
-        $task = \Myth\Cron\CronManager::task($alias);
267
-
268
-        if (is_null($task))
269
-        {
270
-            return CLI::error("Unable to find the task: {$alias}.");
271
-        }
272
-
273
-        // Update the existing setting.
274
-        $suspended = Settings::get('suspended_tasks', 'cron');
275
-
276
-        if (! empty($suspended))
277
-        {
278
-            unset($suspended[ array_search($alias, $suspended) ]);
279
-
280
-            if (! Settings::save('suspended_tasks', $suspended, 'cron') )
281
-            {
282
-                return CLI::error('Unkown problem saving the settings.');
283
-            }
284
-        }
285
-
286
-        return CLI::write('Done');
287
-    }
288
-
289
-    //--------------------------------------------------------------------
290
-
291
-    /**
292
-     * Disables the cron tasks and stops the system from running any tasks.
293
-     * To start the system allowing it to run again, use the `enable` command.
294
-     */
295
-    public function disable()
296
-    {
297
-        if (! Settings::save('is_disabled', 'y', 'cron'))
298
-        {
299
-            return CLI::error('Unknown problem saving the setting. '. CLI::color('Cron jobs will still run!', 'yellow'));
300
-        }
301
-
302
-        CLI::write('Done');
303
-    }
195
+		echo CLI::write("Task\t\t\t\tNext Run\t\tPrevious Run");
196
+		echo CLI::write( str_repeat('-', 80) );
197
+
198
+		foreach ($tasks as $alias => $task)
199
+		{
200
+			// Suspended?
201
+			$color = 'yellow';
202
+			$extra = '';
203
+
204
+			if (in_array($alias, $suspended) )
205
+			{
206
+				$color = 'blue';
207
+				$extra = "\t[Suspended]";
208
+			}
209
+
210
+			// Alias can only be 24 chars long.
211
+			$alias = strlen($alias) >= 32 ? substr($alias, 0, 28) .'... ' : $alias . str_repeat(" ", 32 - strlen($alias));
212
+
213
+			$next = date('D Y-m-d H:i', $task['next_run']);
214
+			$prev = date('D Y-m-d H:i', $task['prev_run']);
215
+
216
+			echo CLI::write("{$alias}{$next}\t{$prev}{$extra}", $color);
217
+		}
218
+	}
219
+
220
+	//--------------------------------------------------------------------
221
+
222
+	/**
223
+	 * Stops a task from being executed during the normal cron runs.
224
+	 *
225
+	 * @param $alias
226
+	 */
227
+	public function suspend($alias)
228
+	{
229
+		// Verify the task actually exists.
230
+		$task = \Myth\Cron\CronManager::task($alias);
231
+
232
+		if (is_null($task))
233
+		{
234
+			return CLI::error("Unable to find the task: {$alias}.");
235
+		}
236
+
237
+		// Update the existing setting.
238
+		$suspended = Settings::get('suspended_tasks', 'cron');
239
+
240
+		if (empty($suspended))
241
+		{
242
+			$suspended = [];
243
+		}
244
+
245
+		$suspended[] = $alias;
246
+
247
+		if (Settings::save('suspended_tasks', $suspended, 'cron') )
248
+		{
249
+			return CLI::write('Done');
250
+		}
251
+
252
+		echo CLI::error('Unkown problem saving the settings.');
253
+	}
254
+
255
+	//--------------------------------------------------------------------
256
+
257
+	/**
258
+	 * Allows the execution of a suspended task to continue again
259
+	 * during normal cron execution.
260
+	 *
261
+	 * @param $alias
262
+	 */
263
+	public function resume($alias)
264
+	{
265
+		// Verify the task actually exists.
266
+		$task = \Myth\Cron\CronManager::task($alias);
267
+
268
+		if (is_null($task))
269
+		{
270
+			return CLI::error("Unable to find the task: {$alias}.");
271
+		}
272
+
273
+		// Update the existing setting.
274
+		$suspended = Settings::get('suspended_tasks', 'cron');
275
+
276
+		if (! empty($suspended))
277
+		{
278
+			unset($suspended[ array_search($alias, $suspended) ]);
279
+
280
+			if (! Settings::save('suspended_tasks', $suspended, 'cron') )
281
+			{
282
+				return CLI::error('Unkown problem saving the settings.');
283
+			}
284
+		}
285
+
286
+		return CLI::write('Done');
287
+	}
288
+
289
+	//--------------------------------------------------------------------
290
+
291
+	/**
292
+	 * Disables the cron tasks and stops the system from running any tasks.
293
+	 * To start the system allowing it to run again, use the `enable` command.
294
+	 */
295
+	public function disable()
296
+	{
297
+		if (! Settings::save('is_disabled', 'y', 'cron'))
298
+		{
299
+			return CLI::error('Unknown problem saving the setting. '. CLI::color('Cron jobs will still run!', 'yellow'));
300
+		}
301
+
302
+		CLI::write('Done');
303
+	}
304 304
     
305
-    //--------------------------------------------------------------------
305
+	//--------------------------------------------------------------------
306 306
 
307
-    /**
308
-     * Resumes the running of tasks after the system has been disabled
309
-     * with the `disable` command.
310
-     */
311
-    public function enable()
312
-    {
313
-        if (! Settings::save('is_disabled', 'n', 'cron'))
314
-        {
315
-            return CLI::error('Unknown problem saving the setting. '. CLI::color('Cron jobs will NOT run!', 'yellow'));
316
-        }
307
+	/**
308
+	 * Resumes the running of tasks after the system has been disabled
309
+	 * with the `disable` command.
310
+	 */
311
+	public function enable()
312
+	{
313
+		if (! Settings::save('is_disabled', 'n', 'cron'))
314
+		{
315
+			return CLI::error('Unknown problem saving the setting. '. CLI::color('Cron jobs will NOT run!', 'yellow'));
316
+		}
317 317
 
318
-        CLI::write('Done');
319
-    }
318
+		CLI::write('Done');
319
+	}
320 320
 
321
-    //--------------------------------------------------------------------
321
+	//--------------------------------------------------------------------
322 322
 
323 323
 
324
-    //--------------------------------------------------------------------
325
-    // Private Methods
326
-    //--------------------------------------------------------------------
324
+	//--------------------------------------------------------------------
325
+	// Private Methods
326
+	//--------------------------------------------------------------------
327 327
 
328
-    /**
329
-     * Lists out all available tasks, names only.
330
-     */
331
-    private function listTaskNames()
332
-    {
333
-        $suspended = Settings::get('suspended_tasks', 'cron');
328
+	/**
329
+	 * Lists out all available tasks, names only.
330
+	 */
331
+	private function listTaskNames()
332
+	{
333
+		$suspended = Settings::get('suspended_tasks', 'cron');
334 334
 
335
-        if (empty($suspended))
336
-        {
337
-            $suspended = [];
338
-        }
335
+		if (empty($suspended))
336
+		{
337
+			$suspended = [];
338
+		}
339 339
 
340
-        $tasks = \Myth\Cron\CronManager::listAll();
340
+		$tasks = \Myth\Cron\CronManager::listAll();
341 341
 
342
-        echo CLI::write("\nAvailable Tasks:");
342
+		echo CLI::write("\nAvailable Tasks:");
343 343
 
344
-        foreach ($tasks as $alias => $task)
345
-        {
346
-            $color = 'yellow';
347
-            $extra = '';
344
+		foreach ($tasks as $alias => $task)
345
+		{
346
+			$color = 'yellow';
347
+			$extra = '';
348 348
 
349
-            if (in_array($alias, $suspended) )
350
-            {
351
-                $color = 'blue';
352
-                $extra = "[Suspended]";
353
-            }
349
+			if (in_array($alias, $suspended) )
350
+			{
351
+				$color = 'blue';
352
+				$extra = "[Suspended]";
353
+			}
354 354
 
355
-            echo CLI::write("\t{$extra} {$alias}", $color);
356
-        }
357
-    }
355
+			echo CLI::write("\t{$extra} {$alias}", $color);
356
+		}
357
+	}
358 358
 
359
-    //--------------------------------------------------------------------
359
+	//--------------------------------------------------------------------
360 360
 
361 361
 }
Please login to merge, or discard this patch.
myth/CIModules/database/controllers/Database.php 1 patch
Indentation   +224 added lines, -224 removed lines patch added patch discarded remove patch
@@ -35,207 +35,207 @@  discard block
 block discarded – undo
35 35
 class Database extends \Myth\Controllers\CLIController
36 36
 {
37 37
 
38
-    protected $descriptions = [
39
-        'migrate'       => ['migrate [$to]',        'Runs the migrations up or down until schema at version \$to'],
40
-        'quietMigrate'  => ['quiteMigrate [$to]',   'Same as migrate but without any feedback.'],
41
-        'refresh'       => ['refresh',              'Runs migrations back to version 0 (uninstall) and then back to the most recent migration.'],
42
-        'newMigration'  => ['newMigration [$name]', 'Creates a new migration file.'],
43
-        'seed'          => ['seed [$name]',         'Runs the named database seeder.']
44
-    ];
45
-
46
-    protected $long_descriptions = [
47
-        'migrate'       => '',
48
-        'quietMigrate'  => '',
49
-        'refresh'       => '',
50
-        'newMigration'  => '',
51
-        'seed'          => ''
52
-    ];
53
-
54
-    //-------------------------------------------------------------------
55
-
56
-    //--------------------------------------------------------------------
57
-    // Migration Methods
58
-    //--------------------------------------------------------------------
59
-
60
-    /**
61
-     * Provides a command-line interface to the migration scripts.
62
-     * If no $to is provided, will migrate to the latest version.
63
-     *
64
-     * Example:
65
-     *      > php index.php database migrate
66
-     *
67
-     * @param string $type 'app', 'myth', 'all' or {module_name}
68
-     * @param null $to
69
-     * @param bool $silent If TRUE, will NOT display any prompts for verification.
70
-     * @return bool|void
71
-     */
72
-    public function migrate($type=null, $to = null, $silent = false)
73
-    {
74
-        $this->load->library('migration');
75
-
76
-        if (empty($type))
77
-        {
78
-            $type = CLI::prompt("Migration group to refresh?", $this->migration->default_migration_path());
79
-
80
-            if (empty($type))
81
-            {
82
-                return $silent ? false : CLI::error("\tYou must supply a group to refresh.");
83
-            }
84
-        }
85
-
86
-        // We need to append 'mod:' to properly handle modules, if
87
-        // the $type is not one of the recognized migration groups.
88
-        $this->config->load('migration');
89
-        $groups = config_item('migration_paths');
90
-        $groups = array_keys($groups);
91
-
92
-        // If it's not in the groups list, then assume it's a module.
93
-        if (! in_array($type, $groups))
94
-        {
95
-            if (strpos($type, 'mod:') !== 0)
96
-            {
97
-                $type = 'mod:'. $type;
98
-            }
99
-        }
100
-
101
-        unset($groups);
102
-
103
-        // Get our stats on the migrations
104
-        $latest = $this->migration->get_latest($type);
105
-        $latest = empty($latest) ? 0 : substr($latest, 0, strpos($latest, '_'));
106
-
107
-        if (empty($latest)) {
108
-            return CLI::write("\tNo migrations found.", 'yellow');
109
-        }
110
-
111
-        $current = $this->migration->get_version($type);
112
-
113
-        // Already at the desired version?
114
-        if ((! is_null($to) && $current == $to) OR (is_null($to) && $current == $latest))
115
-        {
116
-            return $silent ? true : CLI::write("\tDatabase is already at the desired version ({$current})", 'yellow');
117
-        }
118
-
119
-        $target = is_null($to) ? $latest : $to;
120
-
121
-        // Just to be safe, verify with the user they want to migrate
122
-        // to the latest version.
123
-        if (is_null($to)) {
124
-            // If we're in silent mode, don't prompt, just go to the latest...
125
-            if (! $silent) {
126
-                $go_ahead = CLI::prompt('Migrate to the latest available version?', array('y', 'n'));
127
-
128
-                if ($go_ahead == 'n') {
129
-                    return CLI::write('Bailing...', 'yellow');
130
-                }
131
-            }
132
-
133
-            if (! $this->migration->latest($type)) {
134
-                return CLI::error("\n\tERROR: " . $this->migration->error_string() . "\n");
135
-            }
136
-        } else {
137
-            if ($this->migration->version($type, $to) === false) {
138
-                return CLI::error("\n\tERROR: " . $this->migration->error_string() . "\n");
139
-            }
140
-        }
141
-
142
-        return $silent ? true :
143
-            CLI::write("\n\tSuccessfully migrated database from version {$current} to {$target}.\n", 'green');
144
-    }
145
-
146
-    //--------------------------------------------------------------------
147
-
148
-    /**
149
-     * Performs a migration that does not prompt for any information.
150
-     * Suitable for use within automated scripts that can't be
151
-     * bothered with answering questions.
152
-     *
153
-     * @param string $type 'app', 'myth', 'all' or {module_name}
154
-     * @param null $to
155
-     * @return bool|void
156
-     */
157
-    public function quietMigrate($type='app', $to = null)
158
-    {
159
-        return $this->migrate($type, $to, true);
160
-    }
161
-
162
-    //--------------------------------------------------------------------
163
-
164
-
165
-    /**
166
-     * Migrates the database back to 0, then back up to the latest version.
167
-     *
168
-     * @param string $type  The group or module to refresh.
169
-     * @return mixed
170
-     */
171
-    public function refresh($type=null)
172
-    {
173
-        $this->load->library('migration');
174
-
175
-        if (empty($type))
176
-        {
177
-            $type = CLI::prompt("Migration group to refresh?", $this->migration->default_migration_path());
178
-
179
-            if (empty($type))
180
-            {
181
-                return CLI::error("\tYou must supply a group to refresh.");
182
-            }
183
-        }
184
-
185
-        if ($this->migration->version($type, 0) === false) {
186
-            return CLI::error("\tERROR: " . $this->migration->error_string());
187
-        }
188
-
189
-        CLI::write(CLI::color("\tCleared the database.", 'green'));
190
-
191
-        if ($this->migration->latest($type) === false) {
192
-            return CLI::error("\tERROR: " . $this->migration->error_string());
193
-        }
194
-
195
-        CLI::write("\tRe-installed the database to the latest migration.", 'green');
196
-    }
197
-
198
-    //--------------------------------------------------------------------
199
-
200
-    /**
201
-     * Creates a new migration file ready to be used.
202
-     *
203
-     * @param $name
204
-     */
205
-    public function newMigration($name = null, $type = 'app')
206
-    {
207
-        if (empty($name)) {
208
-            $name = CLI::prompt('Migration name? ');
209
-
210
-            if (empty($name)) {
211
-                return CLI::error("\tYou must provide a migration name.", 'red');
212
-            }
213
-        }
214
-
215
-        $this->load->library('migration');
216
-
217
-        $path = $this->migration->determine_migration_path($type);
218
-
219
-        // Does the alias path exist in our config?
220
-        if (! $path) {
221
-            return CLI::error("\tThe migration path for '{$type}' does not exist.'");
222
-        }
223
-
224
-        // Does the path really exist?
225
-        if (! is_dir($path)) {
226
-            return CLI::error("\tThe path for '{$type}' is not a directory.");
227
-        }
228
-
229
-        // Is the folder writeable?
230
-        if (! is_writeable($path)) {
231
-            return CLI::error("\tThe folder for '{$type}' migrations is not writeable.");
232
-        }
233
-
234
-        $file = $this->migration->make_name($name);
235
-
236
-        $path = rtrim($path, '/') .'/'. $file;
237
-
238
-        $contents = <<<EOT
38
+	protected $descriptions = [
39
+		'migrate'       => ['migrate [$to]',        'Runs the migrations up or down until schema at version \$to'],
40
+		'quietMigrate'  => ['quiteMigrate [$to]',   'Same as migrate but without any feedback.'],
41
+		'refresh'       => ['refresh',              'Runs migrations back to version 0 (uninstall) and then back to the most recent migration.'],
42
+		'newMigration'  => ['newMigration [$name]', 'Creates a new migration file.'],
43
+		'seed'          => ['seed [$name]',         'Runs the named database seeder.']
44
+	];
45
+
46
+	protected $long_descriptions = [
47
+		'migrate'       => '',
48
+		'quietMigrate'  => '',
49
+		'refresh'       => '',
50
+		'newMigration'  => '',
51
+		'seed'          => ''
52
+	];
53
+
54
+	//-------------------------------------------------------------------
55
+
56
+	//--------------------------------------------------------------------
57
+	// Migration Methods
58
+	//--------------------------------------------------------------------
59
+
60
+	/**
61
+	 * Provides a command-line interface to the migration scripts.
62
+	 * If no $to is provided, will migrate to the latest version.
63
+	 *
64
+	 * Example:
65
+	 *      > php index.php database migrate
66
+	 *
67
+	 * @param string $type 'app', 'myth', 'all' or {module_name}
68
+	 * @param null $to
69
+	 * @param bool $silent If TRUE, will NOT display any prompts for verification.
70
+	 * @return bool|void
71
+	 */
72
+	public function migrate($type=null, $to = null, $silent = false)
73
+	{
74
+		$this->load->library('migration');
75
+
76
+		if (empty($type))
77
+		{
78
+			$type = CLI::prompt("Migration group to refresh?", $this->migration->default_migration_path());
79
+
80
+			if (empty($type))
81
+			{
82
+				return $silent ? false : CLI::error("\tYou must supply a group to refresh.");
83
+			}
84
+		}
85
+
86
+		// We need to append 'mod:' to properly handle modules, if
87
+		// the $type is not one of the recognized migration groups.
88
+		$this->config->load('migration');
89
+		$groups = config_item('migration_paths');
90
+		$groups = array_keys($groups);
91
+
92
+		// If it's not in the groups list, then assume it's a module.
93
+		if (! in_array($type, $groups))
94
+		{
95
+			if (strpos($type, 'mod:') !== 0)
96
+			{
97
+				$type = 'mod:'. $type;
98
+			}
99
+		}
100
+
101
+		unset($groups);
102
+
103
+		// Get our stats on the migrations
104
+		$latest = $this->migration->get_latest($type);
105
+		$latest = empty($latest) ? 0 : substr($latest, 0, strpos($latest, '_'));
106
+
107
+		if (empty($latest)) {
108
+			return CLI::write("\tNo migrations found.", 'yellow');
109
+		}
110
+
111
+		$current = $this->migration->get_version($type);
112
+
113
+		// Already at the desired version?
114
+		if ((! is_null($to) && $current == $to) OR (is_null($to) && $current == $latest))
115
+		{
116
+			return $silent ? true : CLI::write("\tDatabase is already at the desired version ({$current})", 'yellow');
117
+		}
118
+
119
+		$target = is_null($to) ? $latest : $to;
120
+
121
+		// Just to be safe, verify with the user they want to migrate
122
+		// to the latest version.
123
+		if (is_null($to)) {
124
+			// If we're in silent mode, don't prompt, just go to the latest...
125
+			if (! $silent) {
126
+				$go_ahead = CLI::prompt('Migrate to the latest available version?', array('y', 'n'));
127
+
128
+				if ($go_ahead == 'n') {
129
+					return CLI::write('Bailing...', 'yellow');
130
+				}
131
+			}
132
+
133
+			if (! $this->migration->latest($type)) {
134
+				return CLI::error("\n\tERROR: " . $this->migration->error_string() . "\n");
135
+			}
136
+		} else {
137
+			if ($this->migration->version($type, $to) === false) {
138
+				return CLI::error("\n\tERROR: " . $this->migration->error_string() . "\n");
139
+			}
140
+		}
141
+
142
+		return $silent ? true :
143
+			CLI::write("\n\tSuccessfully migrated database from version {$current} to {$target}.\n", 'green');
144
+	}
145
+
146
+	//--------------------------------------------------------------------
147
+
148
+	/**
149
+	 * Performs a migration that does not prompt for any information.
150
+	 * Suitable for use within automated scripts that can't be
151
+	 * bothered with answering questions.
152
+	 *
153
+	 * @param string $type 'app', 'myth', 'all' or {module_name}
154
+	 * @param null $to
155
+	 * @return bool|void
156
+	 */
157
+	public function quietMigrate($type='app', $to = null)
158
+	{
159
+		return $this->migrate($type, $to, true);
160
+	}
161
+
162
+	//--------------------------------------------------------------------
163
+
164
+
165
+	/**
166
+	 * Migrates the database back to 0, then back up to the latest version.
167
+	 *
168
+	 * @param string $type  The group or module to refresh.
169
+	 * @return mixed
170
+	 */
171
+	public function refresh($type=null)
172
+	{
173
+		$this->load->library('migration');
174
+
175
+		if (empty($type))
176
+		{
177
+			$type = CLI::prompt("Migration group to refresh?", $this->migration->default_migration_path());
178
+
179
+			if (empty($type))
180
+			{
181
+				return CLI::error("\tYou must supply a group to refresh.");
182
+			}
183
+		}
184
+
185
+		if ($this->migration->version($type, 0) === false) {
186
+			return CLI::error("\tERROR: " . $this->migration->error_string());
187
+		}
188
+
189
+		CLI::write(CLI::color("\tCleared the database.", 'green'));
190
+
191
+		if ($this->migration->latest($type) === false) {
192
+			return CLI::error("\tERROR: " . $this->migration->error_string());
193
+		}
194
+
195
+		CLI::write("\tRe-installed the database to the latest migration.", 'green');
196
+	}
197
+
198
+	//--------------------------------------------------------------------
199
+
200
+	/**
201
+	 * Creates a new migration file ready to be used.
202
+	 *
203
+	 * @param $name
204
+	 */
205
+	public function newMigration($name = null, $type = 'app')
206
+	{
207
+		if (empty($name)) {
208
+			$name = CLI::prompt('Migration name? ');
209
+
210
+			if (empty($name)) {
211
+				return CLI::error("\tYou must provide a migration name.", 'red');
212
+			}
213
+		}
214
+
215
+		$this->load->library('migration');
216
+
217
+		$path = $this->migration->determine_migration_path($type);
218
+
219
+		// Does the alias path exist in our config?
220
+		if (! $path) {
221
+			return CLI::error("\tThe migration path for '{$type}' does not exist.'");
222
+		}
223
+
224
+		// Does the path really exist?
225
+		if (! is_dir($path)) {
226
+			return CLI::error("\tThe path for '{$type}' is not a directory.");
227
+		}
228
+
229
+		// Is the folder writeable?
230
+		if (! is_writeable($path)) {
231
+			return CLI::error("\tThe folder for '{$type}' migrations is not writeable.");
232
+		}
233
+
234
+		$file = $this->migration->make_name($name);
235
+
236
+		$path = rtrim($path, '/') .'/'. $file;
237
+
238
+		$contents = <<<EOT
239 239
 <?php
240 240
 
241 241
 /**
@@ -262,36 +262,36 @@  discard block
 block discarded – undo
262 262
 
263 263
 }
264 264
 EOT;
265
-        $contents = str_replace('{name}', $name, $contents);
266
-        $contents = str_replace('{date}', date('Y-m-d H:i:s a'), $contents);
267
-        $contents = str_replace('{clean_name}', ucwords(str_replace('_', ' ', $name)), $contents);
265
+		$contents = str_replace('{name}', $name, $contents);
266
+		$contents = str_replace('{date}', date('Y-m-d H:i:s a'), $contents);
267
+		$contents = str_replace('{clean_name}', ucwords(str_replace('_', ' ', $name)), $contents);
268 268
 
269
-        $this->load->helper('file');
269
+		$this->load->helper('file');
270 270
 
271
-        if (write_file($path, $contents)) {
272
-            return CLI::write("\tNew migration created: " . CLI::color($file, 'yellow'), 'green');
273
-        }
271
+		if (write_file($path, $contents)) {
272
+			return CLI::write("\tNew migration created: " . CLI::color($file, 'yellow'), 'green');
273
+		}
274 274
 
275
-        return CLI::error("\tUnkown error trying to create migration: {$file}", 'red');
276
-    }
275
+		return CLI::error("\tUnkown error trying to create migration: {$file}", 'red');
276
+	}
277 277
 
278
-    //--------------------------------------------------------------------
278
+	//--------------------------------------------------------------------
279 279
 
280
-    //--------------------------------------------------------------------
281
-    // Seeding Methods
282
-    //--------------------------------------------------------------------
280
+	//--------------------------------------------------------------------
281
+	// Seeding Methods
282
+	//--------------------------------------------------------------------
283 283
 
284
-    /**
285
-     * Installs any database seeds stored in database/seeds. Seeds just need to
286
-     * extend the Seeder class and have a method named run.
287
-     */
288
-    public function seed($name = null)
289
-    {
290
-        $this->load->library('seeder');
284
+	/**
285
+	 * Installs any database seeds stored in database/seeds. Seeds just need to
286
+	 * extend the Seeder class and have a method named run.
287
+	 */
288
+	public function seed($name = null)
289
+	{
290
+		$this->load->library('seeder');
291 291
 
292
-        $this->seeder->call($name);
293
-    }
292
+		$this->seeder->call($name);
293
+	}
294 294
 
295
-    //--------------------------------------------------------------------
295
+	//--------------------------------------------------------------------
296 296
 
297 297
 }
Please login to merge, or discard this patch.
myth/CIModules/database/libraries/Seeder.php 1 patch
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -39,92 +39,92 @@
 block discarded – undo
39 39
  */
40 40
 class Seeder {
41 41
 
42
-    public $error_string    = '';
42
+	public $error_string    = '';
43 43
 
44
-    protected $ci;
44
+	protected $ci;
45 45
 
46
-    protected $is_cli = false;
46
+	protected $is_cli = false;
47 47
 
48
-    protected $db;
49
-    protected $dbforge;
48
+	protected $db;
49
+	protected $dbforge;
50 50
 
51
-    //--------------------------------------------------------------------
51
+	//--------------------------------------------------------------------
52 52
 
53
-    public function __construct ()
54
-    {
55
-        $this->ci =& get_instance();
53
+	public function __construct ()
54
+	{
55
+		$this->ci =& get_instance();
56 56
 
57
-        $this->is_cli = $this->ci->input->is_cli_request();
57
+		$this->is_cli = $this->ci->input->is_cli_request();
58 58
 
59
-        if ($this->is_cli)
60
-        {
61
-            $cli = new CLI();
62
-            $cli::_init();
63
-        }
59
+		if ($this->is_cli)
60
+		{
61
+			$cli = new CLI();
62
+			$cli::_init();
63
+		}
64 64
 
65
-        $this->ci->load->dbforge();
65
+		$this->ci->load->dbforge();
66 66
 
67
-        // Setup some convenience vars.
68
-        $this->db       =& $this->ci->db;
69
-        $this->dbforge  =& $this->ci->dbforge;
70
-    }
67
+		// Setup some convenience vars.
68
+		$this->db       =& $this->ci->db;
69
+		$this->dbforge  =& $this->ci->dbforge;
70
+	}
71 71
 
72
-    //--------------------------------------------------------------------
72
+	//--------------------------------------------------------------------
73 73
 
74 74
 
75
-    /**
76
-     * Run the database seeds. It's where the magic happens.
77
-     * This method MUST be overridden by child classes.
78
-     */
79
-    public function run ()
80
-    {
75
+	/**
76
+	 * Run the database seeds. It's where the magic happens.
77
+	 * This method MUST be overridden by child classes.
78
+	 */
79
+	public function run ()
80
+	{
81 81
 
82
-    }
82
+	}
83 83
 
84
-    //--------------------------------------------------------------------
84
+	//--------------------------------------------------------------------
85 85
 
86
-    /**
87
-     * Loads the class file and calls the run() method
88
-     * on the class.
89
-     *
90
-     * @param $class
91
-     */
92
-    public function call ($class)
93
-    {
94
-        if (empty($class))
95
-        {
96
-            // Ask the user...
97
-            $class = trim( CLI::prompt("Seeder name") );
86
+	/**
87
+	 * Loads the class file and calls the run() method
88
+	 * on the class.
89
+	 *
90
+	 * @param $class
91
+	 */
92
+	public function call ($class)
93
+	{
94
+		if (empty($class))
95
+		{
96
+			// Ask the user...
97
+			$class = trim( CLI::prompt("Seeder name") );
98 98
 
99
-            if (empty($class)) {
100
-                return CLI::error("\tNo Seeder was specified.");
101
-            }
102
-        }
99
+			if (empty($class)) {
100
+				return CLI::error("\tNo Seeder was specified.");
101
+			}
102
+		}
103 103
 
104
-        $path = APPPATH .'database/seeds/'. str_replace('.php', '', $class) .'.php';
104
+		$path = APPPATH .'database/seeds/'. str_replace('.php', '', $class) .'.php';
105 105
 
106
-        if ( ! is_file($path))
107
-        {
108
-            return CLI::error("\tUnable to find seed class: ". $class);
109
-        }
106
+		if ( ! is_file($path))
107
+		{
108
+			return CLI::error("\tUnable to find seed class: ". $class);
109
+		}
110 110
 
111
-        try {
112
-            require $path;
111
+		try {
112
+			require $path;
113 113
 
114
-            $seeder = new $class();
114
+			$seeder = new $class();
115 115
 
116
-            $seeder->run();
116
+			$seeder->run();
117 117
 
118
-            unset($seeder);
119
-        }
120
-        catch (\Exception $e)
121
-        {
122
-            show_error($e->getMessage(), $e->getCode());
123
-        }
118
+			unset($seeder);
119
+		}
120
+		catch (\Exception $e)
121
+		{
122
+			show_error($e->getMessage(), $e->getCode());
123
+		}
124 124
 
125
-        return Cli::write("\tSeeded: $class", 'green');
126
-    }
125
+		return Cli::write("\tSeeded: $class", 'green');
126
+	}
127 127
 
128
-    //--------------------------------------------------------------------
128
+	//--------------------------------------------------------------------
129 129
 
130 130
 }
Please login to merge, or discard this patch.
myth/CIModules/docs/config/docs.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -57,8 +57,8 @@
 block discarded – undo
57 57
 | if realpath cannot find/read the folder.
58 58
 */
59 59
 $config['docs.folders'] = [
60
-    'application'   => APPPATH .'docs',
61
-    'developer'     => APPPATH .'../myth/_docs_src'
60
+	'application'   => APPPATH .'docs',
61
+	'developer'     => APPPATH .'../myth/_docs_src'
62 62
 ];
63 63
 
64 64
 /*
Please login to merge, or discard this patch.
myth/CIModules/forge/controllers/Forge.php 1 patch
Indentation   +168 added lines, -168 removed lines patch added patch discarded remove patch
@@ -34,133 +34,133 @@  discard block
 block discarded – undo
34 34
 
35 35
 class Forge extends \Myth\Controllers\CLIController {
36 36
 
37
-    public function __construct()
38
-    {
39
-        parent::__construct();
37
+	public function __construct()
38
+	{
39
+		parent::__construct();
40 40
 
41
-        $this->load->config('forge');
42
-    }
41
+		$this->load->config('forge');
42
+	}
43 43
 
44
-    //--------------------------------------------------------------------
44
+	//--------------------------------------------------------------------
45 45
 
46 46
 
47
-    public function _remap($method, $params)
48
-    {
49
-        if (method_exists($this, $method))
50
-        {
51
-            call_user_func_array( [$this, $method], $params);
52
-        }
53
-        else
54
-        {
55
-	        $params = array_merge([CLI::cli_string()], $params);
47
+	public function _remap($method, $params)
48
+	{
49
+		if (method_exists($this, $method))
50
+		{
51
+			call_user_func_array( [$this, $method], $params);
52
+		}
53
+		else
54
+		{
55
+			$params = array_merge([CLI::cli_string()], $params);
56 56
 
57
-            call_user_func_array( [$this, 'run'], $params);
58
-        }
59
-    }
57
+			call_user_func_array( [$this, 'run'], $params);
58
+		}
59
+	}
60 60
     
61
-    //--------------------------------------------------------------------
62
-
63
-    /**
64
-     * Overrides to implement dynamic description building based on
65
-     * scanning the collections and grabbing the information from
66
-     * 'forge.php' files.
67
-     */
68
-    public function index()
69
-    {
70
-        $collections = config_item('forge.collections');
71
-
72
-        if (! is_array($collections) || ! count($collections) )
73
-        {
74
-            return CLI::error('No generator collections found.');
75
-        }
76
-
77
-        // We loop through each collection scanning
78
-        // for any generator folders that have a
79
-        // 'forge.php' file. For each one found
80
-        // we build out another section in our help commands
81
-        foreach ($collections as $alias => $path)
82
-        {
83
-            $path = rtrim($path, '/ ') .'/';
84
-            $folders = scandir($path);
85
-
86
-            $_descriptions = [];
87
-
88
-            foreach ($folders as $dir)
89
-            {
90
-                if ($dir == '.' || $dir == '..' || ! is_file($path . $dir .'/forge.php'))
91
-                {
92
-                    continue;
93
-                }
94
-
95
-                include $path . $dir .'/forge.php';
96
-
97
-                // Don't have valid arrays to work with? Move along...
98
-                if (! isset($descriptions))
99
-                {
100
-                    log_message('debug', '[Forge] Invalid forge.php file at: '. $path . $dir .'/forge.php');
101
-                    continue;
102
-                }
103
-
104
-                $_descriptions = array_merge($descriptions, $_descriptions);
105
-            }
106
-
107
-	        ksort($_descriptions);
108
-
109
-            CLI::new_line();
110
-            CLI::write(ucwords( str_replace('_', ' ', $alias)) .' Collection');
111
-            $this->sayDescriptions($_descriptions);
112
-        }
113
-    }
114
-
115
-    //--------------------------------------------------------------------
116
-
117
-    /**
118
-     * The primary method that calls the correct generator and
119
-     * makes it run.
120
-     */
121
-    public function run($command)
122
-    {
123
-	    $quiet = false;
124
-
125
-	    $segments = explode(" ", $command);
126
-
127
-	    // Get rid of the 'forge' command
128
-	    if ($segments[0] == 'forge') {
129
-		    array_shift( $segments );
130
-	    }
131
-
132
-	    $command = trim(str_ireplace("forge", '', array_shift($segments)));
61
+	//--------------------------------------------------------------------
62
+
63
+	/**
64
+	 * Overrides to implement dynamic description building based on
65
+	 * scanning the collections and grabbing the information from
66
+	 * 'forge.php' files.
67
+	 */
68
+	public function index()
69
+	{
70
+		$collections = config_item('forge.collections');
71
+
72
+		if (! is_array($collections) || ! count($collections) )
73
+		{
74
+			return CLI::error('No generator collections found.');
75
+		}
76
+
77
+		// We loop through each collection scanning
78
+		// for any generator folders that have a
79
+		// 'forge.php' file. For each one found
80
+		// we build out another section in our help commands
81
+		foreach ($collections as $alias => $path)
82
+		{
83
+			$path = rtrim($path, '/ ') .'/';
84
+			$folders = scandir($path);
85
+
86
+			$_descriptions = [];
87
+
88
+			foreach ($folders as $dir)
89
+			{
90
+				if ($dir == '.' || $dir == '..' || ! is_file($path . $dir .'/forge.php'))
91
+				{
92
+					continue;
93
+				}
94
+
95
+				include $path . $dir .'/forge.php';
96
+
97
+				// Don't have valid arrays to work with? Move along...
98
+				if (! isset($descriptions))
99
+				{
100
+					log_message('debug', '[Forge] Invalid forge.php file at: '. $path . $dir .'/forge.php');
101
+					continue;
102
+				}
103
+
104
+				$_descriptions = array_merge($descriptions, $_descriptions);
105
+			}
106
+
107
+			ksort($_descriptions);
108
+
109
+			CLI::new_line();
110
+			CLI::write(ucwords( str_replace('_', ' ', $alias)) .' Collection');
111
+			$this->sayDescriptions($_descriptions);
112
+		}
113
+	}
114
+
115
+	//--------------------------------------------------------------------
116
+
117
+	/**
118
+	 * The primary method that calls the correct generator and
119
+	 * makes it run.
120
+	 */
121
+	public function run($command)
122
+	{
123
+		$quiet = false;
124
+
125
+		$segments = explode(" ", $command);
126
+
127
+		// Get rid of the 'forge' command
128
+		if ($segments[0] == 'forge') {
129
+			array_shift( $segments );
130
+		}
131
+
132
+		$command = trim(str_ireplace("forge", '', array_shift($segments)));
133 133
 
134 134
 		$dir = $this->locateGenerator($command);
135 135
 
136 136
 		$class_name = ucfirst($command) .'Generator';
137 137
 
138
-	    if (! file_exists($dir . $class_name .'.php'))
139
-	    {
140
-		    return CLI::error("Generator file not found for: {$class_name}");
141
-	    }
138
+		if (! file_exists($dir . $class_name .'.php'))
139
+		{
140
+			return CLI::error("Generator file not found for: {$class_name}");
141
+		}
142 142
 
143 143
 		require_once $dir . $class_name .'.php';
144 144
 
145
-	    if (! class_exists($class_name, false))
146
-	    {
147
-		    return CLI::error("No class `{$class_name}` found in generator file.");
148
-	    }
145
+		if (! class_exists($class_name, false))
146
+		{
147
+			return CLI::error("No class `{$class_name}` found in generator file.");
148
+		}
149 149
 
150
-	    // Should we run the process quietly?
151
-	    if ( (CLI::option('q') || CLI::option('quiet')))
152
-	    {
153
-		    $quiet = true;
154
-	    }
150
+		// Should we run the process quietly?
151
+		if ( (CLI::option('q') || CLI::option('quiet')))
152
+		{
153
+			$quiet = true;
154
+		}
155 155
 
156
-	    CLI::write('Invoked '. CLI::color($class_name, 'yellow'));
156
+		CLI::write('Invoked '. CLI::color($class_name, 'yellow'));
157 157
 
158 158
 		$class = new $class_name();
159 159
 
160
-	    $class->run( $segments, $quiet );
161
-    }
160
+		$class->run( $segments, $quiet );
161
+	}
162 162
 
163
-    //--------------------------------------------------------------------
163
+	//--------------------------------------------------------------------
164 164
 
165 165
 	/**
166 166
 	 * Displays the readme file for a generator if it exists.
@@ -205,67 +205,67 @@  discard block
 block discarded – undo
205 205
 	//--------------------------------------------------------------------
206 206
 
207 207
 
208
-    /**
209
-     * Overrides CLIController's version to support searching our
210
-     * collections for the help description.
211
-     *
212
-     * @param null $method
213
-     */
214
-    public function longDescribeMethod($method=null)
215
-    {
216
-	    $collections = config_item('forge.collections');
217
-
218
-	    if (! is_array($collections) || ! count($collections) )
219
-	    {
220
-		    return CLI::error('No generator collections found.');
221
-	    }
222
-
223
-	    // We loop through each collection scanning
224
-	    // for any generator folders that have a
225
-	    // 'forge.php' file. For each one found
226
-	    // we build out another section in our help commands
227
-	    foreach ($collections as $alias => $path)
228
-	    {
229
-
230
-		    $path = rtrim($path, '/ ') .'/';
231
-		    $folders = scandir($path);
232
-
233
-		    if (! $i = array_search(ucfirst($method), $folders))
234
-		    {
235
-			    continue;
236
-		    }
237
-
238
-		    $dir = $path . $folders[$i] .'/';
239
-
240
-		    if (! is_file($dir .'/forge.php'))
241
-		    {
242
-			    CLI::error("The {$method} command does not have any cli help available.");
243
-		    }
244
-
245
-		    include $dir .'/forge.php';
246
-
247
-		    // Don't have valid arrays to work with? Move along...
248
-		    if (! isset($long_description))
249
-		    {
250
-			    log_message('debug', '[Forge] Invalid forge.php file at: '. $dir .'/forge.php');
251
-			    continue;
252
-		    }
253
-
254
-		    if (empty($long_description))
255
-		    {
256
-			    return CLI::error("The {$method} command does not have an cli help available.");
257
-		    }
258
-
259
-		    CLI::new_line();
260
-		    CLI::write( CLI::color(ucfirst($method) .' Help', 'yellow') );
261
-		    return CLI::write( CLI::wrap($long_description, CLI::getWidth()) );
262
-	    }
263
-
264
-	    // Still here?
265
-	    CLI::error("No help found for command: {$method}");
266
-    }
267
-
268
-    //--------------------------------------------------------------------
208
+	/**
209
+	 * Overrides CLIController's version to support searching our
210
+	 * collections for the help description.
211
+	 *
212
+	 * @param null $method
213
+	 */
214
+	public function longDescribeMethod($method=null)
215
+	{
216
+		$collections = config_item('forge.collections');
217
+
218
+		if (! is_array($collections) || ! count($collections) )
219
+		{
220
+			return CLI::error('No generator collections found.');
221
+		}
222
+
223
+		// We loop through each collection scanning
224
+		// for any generator folders that have a
225
+		// 'forge.php' file. For each one found
226
+		// we build out another section in our help commands
227
+		foreach ($collections as $alias => $path)
228
+		{
229
+
230
+			$path = rtrim($path, '/ ') .'/';
231
+			$folders = scandir($path);
232
+
233
+			if (! $i = array_search(ucfirst($method), $folders))
234
+			{
235
+				continue;
236
+			}
237
+
238
+			$dir = $path . $folders[$i] .'/';
239
+
240
+			if (! is_file($dir .'/forge.php'))
241
+			{
242
+				CLI::error("The {$method} command does not have any cli help available.");
243
+			}
244
+
245
+			include $dir .'/forge.php';
246
+
247
+			// Don't have valid arrays to work with? Move along...
248
+			if (! isset($long_description))
249
+			{
250
+				log_message('debug', '[Forge] Invalid forge.php file at: '. $dir .'/forge.php');
251
+				continue;
252
+			}
253
+
254
+			if (empty($long_description))
255
+			{
256
+				return CLI::error("The {$method} command does not have an cli help available.");
257
+			}
258
+
259
+			CLI::new_line();
260
+			CLI::write( CLI::color(ucfirst($method) .' Help', 'yellow') );
261
+			return CLI::write( CLI::wrap($long_description, CLI::getWidth()) );
262
+		}
263
+
264
+		// Still here?
265
+		CLI::error("No help found for command: {$method}");
266
+	}
267
+
268
+	//--------------------------------------------------------------------
269 269
 
270 270
 	/**
271 271
 	 * Scans through the collections for the folder for this generator.
Please login to merge, or discard this patch.
myth/Controllers/BaseController.php 1 patch
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 	{
101 101
 		parent::__construct();
102 102
 
103
-        $this->load->library('session');
103
+		$this->load->library('session');
104 104
 
105 105
 		$this->setupCache();
106 106
 
@@ -236,8 +236,8 @@  discard block
 block discarded – undo
236 236
 		}
237 237
 
238 238
 		$this->output->enable_profiler( FALSE )
239
-		             ->set_content_type( 'text/plain' )
240
-		             ->set_output( $text );
239
+					 ->set_content_type( 'text/plain' )
240
+					 ->set_output( $text );
241 241
 	}
242 242
 
243 243
 	//--------------------------------------------------------------------
@@ -267,8 +267,8 @@  discard block
 block discarded – undo
267 267
 		}
268 268
 
269 269
 		$this->output->enable_profiler( FALSE )
270
-		             ->set_content_type( 'application/json' )
271
-		             ->set_output( json_encode( $json ) );
270
+					 ->set_content_type( 'application/json' )
271
+					 ->set_output( json_encode( $json ) );
272 272
 	}
273 273
 
274 274
 	//--------------------------------------------------------------------
@@ -292,8 +292,8 @@  discard block
 block discarded – undo
292 292
 		}
293 293
 
294 294
 		$this->output->enable_profiler( FALSE )
295
-		             ->set_content_type( 'application/x-javascript' )
296
-		             ->set_output( $js );
295
+					 ->set_content_type( 'application/x-javascript' )
296
+					 ->set_output( $js );
297 297
 	}
298 298
 
299 299
 	//--------------------------------------------------------------------
Please login to merge, or discard this patch.
myth/Controllers/CLIController.php 1 patch
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -41,144 +41,144 @@
 block discarded – undo
41 41
  */
42 42
 class CLIController extends \CI_Controller {
43 43
 
44
-    /**
45
-     * Holds short descriptions for the public functions in this class.
46
-     * Each 'key' in the array should match the function name.
47
-     *
48
-     * @var array
49
-     */
50
-    protected $descriptions = [];
51
-
52
-    /**
53
-     * Holds long descriptions for the public functions in this class.
54
-     * Each 'key' in the array should match the function name.
55
-     * @var array
56
-     */
57
-    protected $long_descriptions = [];
58
-
59
-    //--------------------------------------------------------------------
60
-
61
-    /**
62
-     * Ensures that we are running on the CLI, and collects basic settings
63
-     * like collecting our command line arguments into a pretty array.
64
-     */
65
-    public function __construct()
66
-    {
67
-        parent::__construct();
68
-
69
-        // Restrict usage to the command line.
70
-        if (! is_cli() )
71
-        {
72
-            show_error( lang('cli_required') );
73
-        }
74
-
75
-        // Make sure the CLI library is loaded and ready.
44
+	/**
45
+	 * Holds short descriptions for the public functions in this class.
46
+	 * Each 'key' in the array should match the function name.
47
+	 *
48
+	 * @var array
49
+	 */
50
+	protected $descriptions = [];
51
+
52
+	/**
53
+	 * Holds long descriptions for the public functions in this class.
54
+	 * Each 'key' in the array should match the function name.
55
+	 * @var array
56
+	 */
57
+	protected $long_descriptions = [];
58
+
59
+	//--------------------------------------------------------------------
60
+
61
+	/**
62
+	 * Ensures that we are running on the CLI, and collects basic settings
63
+	 * like collecting our command line arguments into a pretty array.
64
+	 */
65
+	public function __construct()
66
+	{
67
+		parent::__construct();
68
+
69
+		// Restrict usage to the command line.
70
+		if (! is_cli() )
71
+		{
72
+			show_error( lang('cli_required') );
73
+		}
74
+
75
+		// Make sure the CLI library is loaded and ready.
76 76
 //        CLI::_init();
77
-    }
78
-
79
-    //--------------------------------------------------------------------
80
-
81
-    /**
82
-     * A default index method that all CLI Controllers can share. Will
83
-     * list all of the methods and their short descriptions, if available.
84
-     */
85
-    public function index()
86
-    {
87
-        CLI::new_line();
88
-        CLI::write( lang('cli.available_commands') );
89
-
90
-        $this->sayDescriptions($this->descriptions);
91
-
92
-        CLI::new_line();
93
-    }
94
-
95
-    //--------------------------------------------------------------------
96
-
97
-
98
-    /**
99
-     * Grabs the short description of a command, if it exists.
100
-     *
101
-     * @param null $method
102
-     */
103
-    public function describeMethod($method=null)
104
-    {
105
-        if (empty($this->descriptions[$method]))
106
-        {
107
-            return CLI::error( lang('cli.bad_description') );
108
-        }
109
-
110
-        CLI::write("\t{$this->descriptions[$method]}", 'yellow');
111
-    }
112
-
113
-    //--------------------------------------------------------------------
114
-
115
-    public function longDescribeMethod($method=null)
116
-    {
117
-        if (empty($this->long_descriptions[$method]))
118
-        {
119
-            return CLI::error( lang('cli.no_help') );
120
-        }
121
-
122
-        CLI::write("\t{$this->long_descriptions[$method]}", 'yellow');
123
-    }
124
-
125
-    //--------------------------------------------------------------------
126
-
127
-    //--------------------------------------------------------------------
128
-    // Private Methods
129
-    //--------------------------------------------------------------------
130
-
131
-    protected function sayDescriptions($descriptions)
132
-    {
133
-        $names      = array_keys($descriptions);
134
-        $syntaxes   = array_column($descriptions, 0);
135
-        $descs      = array_column($descriptions, 1);
136
-
137
-        // Pad each item to the same length
138
-        $names      = $this->padArray($names);
139
-        $syntaxes   = $this->padArray($syntaxes);
140
-
141
-        for ($i=0; $i < count($names); $i++)
142
-        {
143
-            $out = CLI::color($names[$i], 'yellow');
144
-
145
-            // The rest of the items stay default color.
146
-            if (isset($syntaxes[$i]))
147
-            {
148
-                $out .= $syntaxes[$i];
149
-            }
150
-
151
-            if (isset($descs[$i]))
152
-            {
153
-                $out .= CLI::wrap($descs[$i], 125, strlen($names[$i]) + strlen($syntaxes[$i]));
154
-            }
155
-
156
-            CLI::write($out);
157
-        }
158
-    }
159
-
160
-    //--------------------------------------------------------------------
161
-
162
-    /**
163
-     * Returns a new array where all of the string elements have
164
-     * been padding with trailling spaces to be the same length.
165
-     *
166
-     * @param array $array
167
-     * @param int $extra // How many extra spaces to add at the end
168
-     * @return array
169
-     */
170
-    protected function padArray($array, $extra=2)
171
-    {
172
-        $max = max(array_map('strlen', $array)) + $extra;
173
-
174
-        foreach ($array as &$item)
175
-        {
176
-            $item = str_pad($item, $max);
177
-        }
178
-
179
-        return $array;
180
-    }
181
-
182
-    //--------------------------------------------------------------------
77
+	}
78
+
79
+	//--------------------------------------------------------------------
80
+
81
+	/**
82
+	 * A default index method that all CLI Controllers can share. Will
83
+	 * list all of the methods and their short descriptions, if available.
84
+	 */
85
+	public function index()
86
+	{
87
+		CLI::new_line();
88
+		CLI::write( lang('cli.available_commands') );
89
+
90
+		$this->sayDescriptions($this->descriptions);
91
+
92
+		CLI::new_line();
93
+	}
94
+
95
+	//--------------------------------------------------------------------
96
+
97
+
98
+	/**
99
+	 * Grabs the short description of a command, if it exists.
100
+	 *
101
+	 * @param null $method
102
+	 */
103
+	public function describeMethod($method=null)
104
+	{
105
+		if (empty($this->descriptions[$method]))
106
+		{
107
+			return CLI::error( lang('cli.bad_description') );
108
+		}
109
+
110
+		CLI::write("\t{$this->descriptions[$method]}", 'yellow');
111
+	}
112
+
113
+	//--------------------------------------------------------------------
114
+
115
+	public function longDescribeMethod($method=null)
116
+	{
117
+		if (empty($this->long_descriptions[$method]))
118
+		{
119
+			return CLI::error( lang('cli.no_help') );
120
+		}
121
+
122
+		CLI::write("\t{$this->long_descriptions[$method]}", 'yellow');
123
+	}
124
+
125
+	//--------------------------------------------------------------------
126
+
127
+	//--------------------------------------------------------------------
128
+	// Private Methods
129
+	//--------------------------------------------------------------------
130
+
131
+	protected function sayDescriptions($descriptions)
132
+	{
133
+		$names      = array_keys($descriptions);
134
+		$syntaxes   = array_column($descriptions, 0);
135
+		$descs      = array_column($descriptions, 1);
136
+
137
+		// Pad each item to the same length
138
+		$names      = $this->padArray($names);
139
+		$syntaxes   = $this->padArray($syntaxes);
140
+
141
+		for ($i=0; $i < count($names); $i++)
142
+		{
143
+			$out = CLI::color($names[$i], 'yellow');
144
+
145
+			// The rest of the items stay default color.
146
+			if (isset($syntaxes[$i]))
147
+			{
148
+				$out .= $syntaxes[$i];
149
+			}
150
+
151
+			if (isset($descs[$i]))
152
+			{
153
+				$out .= CLI::wrap($descs[$i], 125, strlen($names[$i]) + strlen($syntaxes[$i]));
154
+			}
155
+
156
+			CLI::write($out);
157
+		}
158
+	}
159
+
160
+	//--------------------------------------------------------------------
161
+
162
+	/**
163
+	 * Returns a new array where all of the string elements have
164
+	 * been padding with trailling spaces to be the same length.
165
+	 *
166
+	 * @param array $array
167
+	 * @param int $extra // How many extra spaces to add at the end
168
+	 * @return array
169
+	 */
170
+	protected function padArray($array, $extra=2)
171
+	{
172
+		$max = max(array_map('strlen', $array)) + $extra;
173
+
174
+		foreach ($array as &$item)
175
+		{
176
+			$item = str_pad($item, $max);
177
+		}
178
+
179
+		return $array;
180
+	}
181
+
182
+	//--------------------------------------------------------------------
183 183
 
184 184
 }
Please login to merge, or discard this patch.
myth/Controllers/ThemedController.php 1 patch
Indentation   +353 added lines, -353 removed lines patch added patch discarded remove patch
@@ -41,358 +41,358 @@
 block discarded – undo
41 41
  */
42 42
 class ThemedController extends BaseController
43 43
 {
44
-    /**
45
-     * Stores data variables to be sent to the view.
46
-     * @var array
47
-     */
48
-    protected $vars = array();
49
-
50
-    /**
51
-     * Stores current status message.
52
-     * @var
53
-     */
54
-    protected $message;
55
-
56
-    /**
57
-     * The UIKit to make available to the template views.
58
-     * @var string
59
-     */
60
-    protected $uikit = '';
61
-
62
-    /**
63
-     * An instance of an active Themer to use.
64
-     * @var null
65
-     */
66
-    protected $themer = null;
67
-
68
-    /**
69
-     * Allows per-controller override of theme.
70
-     * @var null
71
-     */
72
-    protected $theme = null;
73
-
74
-    /**
75
-     * Per-controller override of the current layout file.
76
-     * @var null
77
-     */
78
-    protected $layout = null;
79
-
80
-    /**
81
-     * Stores an array of javascript files.
82
-     * @var array
83
-     */
84
-    protected $external_scripts = array();
85
-
86
-    /**
87
-     * Stores an array of CSS stylesheets.
88
-     * @var array
89
-     */
90
-    protected $stylesheets = array();
91
-
92
-    /**
93
-     * A MenuCollection instance
94
-     * @var
95
-     */
96
-    protected $meta;
97
-
98
-    /**
99
-     * Whether set() should escape the output...
100
-     * @var bool
101
-     */
102
-    protected $auto_escape = null;
103
-
104
-    /**
105
-     * An instance of ZendFrameworks Escaper
106
-     * @var null
107
-     */
108
-    protected $escaper = null;
109
-
110
-    //--------------------------------------------------------------------
111
-
112
-    /**
113
-     * Constructor takes care of getting the template engine up and running
114
-     * and bound to our DI object, as well as any other preliminary needs,
115
-     * like detecting the variant to use, etc.
116
-     */
117
-    public function __construct()
118
-    {
119
-        parent::__construct();
120
-
121
-        // Setup our Template Engine
122
-        $themer = config_item('active_themer');
123
-
124
-        if (empty($themer)) {
125
-            throw new \RuntimeException( lang('no_themer') );
126
-        }
127
-
128
-        $this->themer = new $themer( get_instance() );
129
-
130
-        // Register our paths with the themer
131
-        $paths = config_item('theme.paths');
132
-
133
-        foreach ($paths as $key => $path) {
134
-            $this->themer->addThemePath($key, $path);
135
-        }
136
-
137
-        // Set our default theme.
138
-        $this->themer->setDefaultTheme( config_item('theme.default_theme') );
139
-
140
-        // Register our variants with the engine.
141
-        $variants = config_item('theme.variants');
142
-
143
-        foreach ($variants as $key => $value) {
144
-            $this->themer->addVariant($key, $value);
145
-        }
146
-
147
-        $this->detectVariant();
148
-
149
-        // Ensure that our UIKit is loaded up if we're using one.
150
-        $uikit = config_item('theme.uikit');
151
-
152
-        if ($uikit)
153
-        {
154
-            $this->uikit = new $uikit();
155
-        }
156
-
157
-        // Load up our meta collection
158
-        $this->meta = new MetaCollection( get_instance() );
159
-
160
-        // Should we autoescape vars?
161
-        if (is_null($this->auto_escape))
162
-        {
163
-            $this->auto_escape = config_item( 'theme.auto_escape' );
164
-        }
165
-    }
166
-
167
-    //--------------------------------------------------------------------
168
-
169
-    /**
170
-     * Provides a common interface with the other rendering methods to
171
-     * set the output of the method. Uses the current instance of $this->template.
172
-     * Ensures that any data we've stored through $this->setVar() are present
173
-     * and includes the status messages into the data.
174
-     *
175
-     * @param array $data
176
-     * @param int   $cache_time
177
-     */
178
-    public function render($data = array(), $cache_time=0)
179
-    {
180
-	    if ($cache_time > 0)
181
-	    {
182
-		    $this->output->cache( (int)$cache_time );
183
-	    }
184
-
185
-        // Determine the correct theme to use
186
-        $theme = ! empty($this->theme) ? $this->theme : config_item('theme.default_theme');
187
-        $this->themer->setTheme($theme);
188
-
189
-        // Determine the correct layout to use
190
-        $layout = !empty($this->layout) ? $this->layout : null;
191
-        $this->themer->setLayout($layout);
192
-
193
-        // Merge any saved vars into the data
194
-        // But first, escape the data if needed
195
-        if ($this->auto_escape)
196
-        {
197
-            $data = esc($data, 'html');
198
-        }
199
-        $data = array_merge($data, $this->vars);
200
-
201
-        // Make sure the MetaCollection is available in the view.
202
-        $data['html_meta'] = $this->meta;
203
-
204
-        // Include our UIKit so views can use it
205
-        if (! empty($this->uikit)) {
206
-            $data['uikit'] = $this->uikit;
207
-        }
208
-
209
-        // Build our notices from the theme's view file.
210
-        $data['notice'] = $this->themer->display($this->themer->theme() . ':notice', ["notice" => $this->message()]);
211
-
212
-        // Make sure any scripts/stylesheets are available to the view
213
-        $data['external_scripts'] = $this->external_scripts;
214
-        $data['stylesheets'] = $this->stylesheets;
215
-
216
-        $this->themer->set($data);
217
-
218
-        $this->output->set_content_type('html')
219
-                     ->set_output($this->themer->render());
220
-    }
221
-
222
-    //--------------------------------------------------------------------
223
-
224
-    /**
225
-     * Sets a data variable to be sent to the view during the render() method.
226
-     * Will auto-escape data on the way in, unless specifically told not to.
227
-     *
228
-     * Uses ZendFramework's Escaper to handle the data escaping,
229
-     * based on context. Valid contexts are:
230
-     *      - html
231
-     *      - htmlAttr
232
-     *      - js
233
-     *      - css
234
-     *      - url
235
-     *
236
-     * @param string $name
237
-     * @param mixed $value
238
-     * @param string $context
239
-     * @param bool $do_escape
240
-     */
241
-    public function setVar($name, $value = null, $context='html', $do_escape=null)
242
-    {
243
-        $escape = $do_escape == true ? true : $this->auto_escape;
244
-
245
-        if (is_null($this->escaper))
246
-        {
247
-            $this->escaper = new Escaper(config_item('charset'));
248
-        }
249
-
250
-        if (is_array($name))
251
-        {
252
-            foreach ($name as $k => $v)
253
-            {
254
-                $this->vars[$k] = $escape ? esc($v, $context, $this->escaper) : $v;
255
-            }
256
-        }
257
-        else
258
-        {
259
-            $this->vars[$name] = $escape ? esc($value, $context, $this->escaper) : $value;
260
-        }
261
-    }
262
-
263
-    //--------------------------------------------------------------------
264
-
265
-    //--------------------------------------------------------------------
266
-    // Status Messages
267
-    //--------------------------------------------------------------------
268
-
269
-    /**
270
-     * Sets a status message (for displaying small success/error messages).
271
-     * This is used in place of the session->flashdata functions since you
272
-     * don't always want to have to refresh the page to show the message.
273
-     *
274
-     * @param string $message The message to save.
275
-     * @param string $type The string to be included as the CSS class of the containing div.
276
-     */
277
-    public function setMessage($message = '', $type = 'info')
278
-    {
279
-        if (! empty($message)) {
280
-            if (isset($this->session)) {
281
-                $this->session->set_flashdata('message', $type . '::' . $message);
282
-            }
283
-
284
-            $this->message = array(
285
-                'type' => $type,
286
-                'message' => $message
287
-            );
288
-        }
289
-    }
290
-
291
-    //--------------------------------------------------------------------
292
-
293
-    /**
294
-     * Retrieves the status message to display (if any).
295
-     *
296
-     * @param  string $message [description]
297
-     * @param  string $type [description]
298
-     * @return array
299
-     */
300
-    public function message($message = '', $type = 'info')
301
-    {
302
-        $return = array(
303
-            'message' => $message,
304
-            'type' => $type
305
-        );
306
-
307
-        // Does session data exist?
308
-        if (empty($message) && class_exists('CI_Session')) {
309
-            $message = $this->session->flashdata('message');
310
-
311
-            if (! empty($message)) {
312
-                // Split out our message parts
313
-                $temp_message = explode('::', $message);
314
-                $return['type'] = $temp_message[0];
315
-                $return['message'] = $temp_message[1];
316
-
317
-                unset($temp_message);
318
-            }
319
-        }
320
-
321
-        // If message is empty, we need to check our own storage.
322
-        if (empty($message)) {
323
-            if (empty($this->message['message'])) {
324
-                return '';
325
-            }
326
-
327
-            $return = $this->message;
328
-        }
329
-
330
-        // Clear our session data so we don't get extra messages on rare occasions.
331
-        if (class_exists('CI_Session')) {
332
-            $this->session->set_flashdata('message', '');
333
-        }
334
-
335
-        return $return;
336
-    }
337
-
338
-    //--------------------------------------------------------------------
339
-
340
-    //--------------------------------------------------------------------
341
-    // Utility Methods
342
-    //--------------------------------------------------------------------
343
-
344
-    /**
345
-     * Detects whether the item is being displayed on a desktop, phone,
346
-     * or tablet device.
347
-     */
348
-    protected function detectVariant()
349
-    {
350
-        // Variant Detection and setup
351
-        if (config_item('autodetect_variant') === true) {
352
-            $detect = new \Mobile_Detect();
353
-
354
-            if ($detect->isMobile()) {
355
-                $this->template->setVariant('phone');
356
-            } else if ($detect->isTablet()) {
357
-                $this->template->setVariant('tablet');
358
-            }
359
-        }
360
-    }
361
-
362
-    //--------------------------------------------------------------------
363
-
364
-    //--------------------------------------------------------------------
365
-    // 'Asset' functions
366
-    //--------------------------------------------------------------------
367
-
368
-    /**
369
-     * Adds an external javascript file to the 'external_scripts' array.
370
-     *
371
-     * @param [type] $filename [description]
372
-     */
373
-    public function addScript($filename)
374
-    {
375
-        if (strpos($filename, 'http') === FALSE) {
376
-            $filename = base_url() . 'assets/js/' . $filename;
377
-        }
378
-
379
-        $this->external_scripts[] = $filename;
380
-    }
381
-
382
-    //--------------------------------------------------------------------
383
-
384
-    /**
385
-     * Adds an external stylesheet file to the 'stylesheets' array.
386
-     */
387
-    public function addStyle($filename)
388
-    {
389
-        if (strpos($filename, 'http') === FALSE) {
390
-            $filename = base_url() . 'assets/css/' . $filename;
391
-        }
392
-
393
-        $this->stylesheets[] = $filename;
394
-    }
395
-
396
-    //--------------------------------------------------------------------
44
+	/**
45
+	 * Stores data variables to be sent to the view.
46
+	 * @var array
47
+	 */
48
+	protected $vars = array();
49
+
50
+	/**
51
+	 * Stores current status message.
52
+	 * @var
53
+	 */
54
+	protected $message;
55
+
56
+	/**
57
+	 * The UIKit to make available to the template views.
58
+	 * @var string
59
+	 */
60
+	protected $uikit = '';
61
+
62
+	/**
63
+	 * An instance of an active Themer to use.
64
+	 * @var null
65
+	 */
66
+	protected $themer = null;
67
+
68
+	/**
69
+	 * Allows per-controller override of theme.
70
+	 * @var null
71
+	 */
72
+	protected $theme = null;
73
+
74
+	/**
75
+	 * Per-controller override of the current layout file.
76
+	 * @var null
77
+	 */
78
+	protected $layout = null;
79
+
80
+	/**
81
+	 * Stores an array of javascript files.
82
+	 * @var array
83
+	 */
84
+	protected $external_scripts = array();
85
+
86
+	/**
87
+	 * Stores an array of CSS stylesheets.
88
+	 * @var array
89
+	 */
90
+	protected $stylesheets = array();
91
+
92
+	/**
93
+	 * A MenuCollection instance
94
+	 * @var
95
+	 */
96
+	protected $meta;
97
+
98
+	/**
99
+	 * Whether set() should escape the output...
100
+	 * @var bool
101
+	 */
102
+	protected $auto_escape = null;
103
+
104
+	/**
105
+	 * An instance of ZendFrameworks Escaper
106
+	 * @var null
107
+	 */
108
+	protected $escaper = null;
109
+
110
+	//--------------------------------------------------------------------
111
+
112
+	/**
113
+	 * Constructor takes care of getting the template engine up and running
114
+	 * and bound to our DI object, as well as any other preliminary needs,
115
+	 * like detecting the variant to use, etc.
116
+	 */
117
+	public function __construct()
118
+	{
119
+		parent::__construct();
120
+
121
+		// Setup our Template Engine
122
+		$themer = config_item('active_themer');
123
+
124
+		if (empty($themer)) {
125
+			throw new \RuntimeException( lang('no_themer') );
126
+		}
127
+
128
+		$this->themer = new $themer( get_instance() );
129
+
130
+		// Register our paths with the themer
131
+		$paths = config_item('theme.paths');
132
+
133
+		foreach ($paths as $key => $path) {
134
+			$this->themer->addThemePath($key, $path);
135
+		}
136
+
137
+		// Set our default theme.
138
+		$this->themer->setDefaultTheme( config_item('theme.default_theme') );
139
+
140
+		// Register our variants with the engine.
141
+		$variants = config_item('theme.variants');
142
+
143
+		foreach ($variants as $key => $value) {
144
+			$this->themer->addVariant($key, $value);
145
+		}
146
+
147
+		$this->detectVariant();
148
+
149
+		// Ensure that our UIKit is loaded up if we're using one.
150
+		$uikit = config_item('theme.uikit');
151
+
152
+		if ($uikit)
153
+		{
154
+			$this->uikit = new $uikit();
155
+		}
156
+
157
+		// Load up our meta collection
158
+		$this->meta = new MetaCollection( get_instance() );
159
+
160
+		// Should we autoescape vars?
161
+		if (is_null($this->auto_escape))
162
+		{
163
+			$this->auto_escape = config_item( 'theme.auto_escape' );
164
+		}
165
+	}
166
+
167
+	//--------------------------------------------------------------------
168
+
169
+	/**
170
+	 * Provides a common interface with the other rendering methods to
171
+	 * set the output of the method. Uses the current instance of $this->template.
172
+	 * Ensures that any data we've stored through $this->setVar() are present
173
+	 * and includes the status messages into the data.
174
+	 *
175
+	 * @param array $data
176
+	 * @param int   $cache_time
177
+	 */
178
+	public function render($data = array(), $cache_time=0)
179
+	{
180
+		if ($cache_time > 0)
181
+		{
182
+			$this->output->cache( (int)$cache_time );
183
+		}
184
+
185
+		// Determine the correct theme to use
186
+		$theme = ! empty($this->theme) ? $this->theme : config_item('theme.default_theme');
187
+		$this->themer->setTheme($theme);
188
+
189
+		// Determine the correct layout to use
190
+		$layout = !empty($this->layout) ? $this->layout : null;
191
+		$this->themer->setLayout($layout);
192
+
193
+		// Merge any saved vars into the data
194
+		// But first, escape the data if needed
195
+		if ($this->auto_escape)
196
+		{
197
+			$data = esc($data, 'html');
198
+		}
199
+		$data = array_merge($data, $this->vars);
200
+
201
+		// Make sure the MetaCollection is available in the view.
202
+		$data['html_meta'] = $this->meta;
203
+
204
+		// Include our UIKit so views can use it
205
+		if (! empty($this->uikit)) {
206
+			$data['uikit'] = $this->uikit;
207
+		}
208
+
209
+		// Build our notices from the theme's view file.
210
+		$data['notice'] = $this->themer->display($this->themer->theme() . ':notice', ["notice" => $this->message()]);
211
+
212
+		// Make sure any scripts/stylesheets are available to the view
213
+		$data['external_scripts'] = $this->external_scripts;
214
+		$data['stylesheets'] = $this->stylesheets;
215
+
216
+		$this->themer->set($data);
217
+
218
+		$this->output->set_content_type('html')
219
+					 ->set_output($this->themer->render());
220
+	}
221
+
222
+	//--------------------------------------------------------------------
223
+
224
+	/**
225
+	 * Sets a data variable to be sent to the view during the render() method.
226
+	 * Will auto-escape data on the way in, unless specifically told not to.
227
+	 *
228
+	 * Uses ZendFramework's Escaper to handle the data escaping,
229
+	 * based on context. Valid contexts are:
230
+	 *      - html
231
+	 *      - htmlAttr
232
+	 *      - js
233
+	 *      - css
234
+	 *      - url
235
+	 *
236
+	 * @param string $name
237
+	 * @param mixed $value
238
+	 * @param string $context
239
+	 * @param bool $do_escape
240
+	 */
241
+	public function setVar($name, $value = null, $context='html', $do_escape=null)
242
+	{
243
+		$escape = $do_escape == true ? true : $this->auto_escape;
244
+
245
+		if (is_null($this->escaper))
246
+		{
247
+			$this->escaper = new Escaper(config_item('charset'));
248
+		}
249
+
250
+		if (is_array($name))
251
+		{
252
+			foreach ($name as $k => $v)
253
+			{
254
+				$this->vars[$k] = $escape ? esc($v, $context, $this->escaper) : $v;
255
+			}
256
+		}
257
+		else
258
+		{
259
+			$this->vars[$name] = $escape ? esc($value, $context, $this->escaper) : $value;
260
+		}
261
+	}
262
+
263
+	//--------------------------------------------------------------------
264
+
265
+	//--------------------------------------------------------------------
266
+	// Status Messages
267
+	//--------------------------------------------------------------------
268
+
269
+	/**
270
+	 * Sets a status message (for displaying small success/error messages).
271
+	 * This is used in place of the session->flashdata functions since you
272
+	 * don't always want to have to refresh the page to show the message.
273
+	 *
274
+	 * @param string $message The message to save.
275
+	 * @param string $type The string to be included as the CSS class of the containing div.
276
+	 */
277
+	public function setMessage($message = '', $type = 'info')
278
+	{
279
+		if (! empty($message)) {
280
+			if (isset($this->session)) {
281
+				$this->session->set_flashdata('message', $type . '::' . $message);
282
+			}
283
+
284
+			$this->message = array(
285
+				'type' => $type,
286
+				'message' => $message
287
+			);
288
+		}
289
+	}
290
+
291
+	//--------------------------------------------------------------------
292
+
293
+	/**
294
+	 * Retrieves the status message to display (if any).
295
+	 *
296
+	 * @param  string $message [description]
297
+	 * @param  string $type [description]
298
+	 * @return array
299
+	 */
300
+	public function message($message = '', $type = 'info')
301
+	{
302
+		$return = array(
303
+			'message' => $message,
304
+			'type' => $type
305
+		);
306
+
307
+		// Does session data exist?
308
+		if (empty($message) && class_exists('CI_Session')) {
309
+			$message = $this->session->flashdata('message');
310
+
311
+			if (! empty($message)) {
312
+				// Split out our message parts
313
+				$temp_message = explode('::', $message);
314
+				$return['type'] = $temp_message[0];
315
+				$return['message'] = $temp_message[1];
316
+
317
+				unset($temp_message);
318
+			}
319
+		}
320
+
321
+		// If message is empty, we need to check our own storage.
322
+		if (empty($message)) {
323
+			if (empty($this->message['message'])) {
324
+				return '';
325
+			}
326
+
327
+			$return = $this->message;
328
+		}
329
+
330
+		// Clear our session data so we don't get extra messages on rare occasions.
331
+		if (class_exists('CI_Session')) {
332
+			$this->session->set_flashdata('message', '');
333
+		}
334
+
335
+		return $return;
336
+	}
337
+
338
+	//--------------------------------------------------------------------
339
+
340
+	//--------------------------------------------------------------------
341
+	// Utility Methods
342
+	//--------------------------------------------------------------------
343
+
344
+	/**
345
+	 * Detects whether the item is being displayed on a desktop, phone,
346
+	 * or tablet device.
347
+	 */
348
+	protected function detectVariant()
349
+	{
350
+		// Variant Detection and setup
351
+		if (config_item('autodetect_variant') === true) {
352
+			$detect = new \Mobile_Detect();
353
+
354
+			if ($detect->isMobile()) {
355
+				$this->template->setVariant('phone');
356
+			} else if ($detect->isTablet()) {
357
+				$this->template->setVariant('tablet');
358
+			}
359
+		}
360
+	}
361
+
362
+	//--------------------------------------------------------------------
363
+
364
+	//--------------------------------------------------------------------
365
+	// 'Asset' functions
366
+	//--------------------------------------------------------------------
367
+
368
+	/**
369
+	 * Adds an external javascript file to the 'external_scripts' array.
370
+	 *
371
+	 * @param [type] $filename [description]
372
+	 */
373
+	public function addScript($filename)
374
+	{
375
+		if (strpos($filename, 'http') === FALSE) {
376
+			$filename = base_url() . 'assets/js/' . $filename;
377
+		}
378
+
379
+		$this->external_scripts[] = $filename;
380
+	}
381
+
382
+	//--------------------------------------------------------------------
383
+
384
+	/**
385
+	 * Adds an external stylesheet file to the 'stylesheets' array.
386
+	 */
387
+	public function addStyle($filename)
388
+	{
389
+		if (strpos($filename, 'http') === FALSE) {
390
+			$filename = base_url() . 'assets/css/' . $filename;
391
+		}
392
+
393
+		$this->stylesheets[] = $filename;
394
+	}
395
+
396
+	//--------------------------------------------------------------------
397 397
 }
398 398
 
Please login to merge, or discard this patch.