Completed
Push — master ( c8ea4b...c4213a )
by Sherif
02:51
created
Modules/Reporting/Database/Migrations/2016_01_19_112603_sampel_report.php 2 patches
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -22,15 +22,15 @@
 block discarded – undo
22 22
 			");
23 23
 		
24 24
 		DB::table('reports')->insert(
25
-        	[
26
-	        	[
25
+			[
26
+				[
27 27
 				'report_name' => 'admin_count',
28 28
 				'view_name'   => 'admin_count',
29 29
 				'created_at'  => \DB::raw('NOW()'),
30 30
 				'updated_at'  => \DB::raw('NOW()')
31
-	        	]
32
-        	]
33
-        );
31
+				]
32
+			]
33
+		);
34 34
 	}
35 35
 
36 36
 	/**
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -12,8 +12,8 @@
 block discarded – undo
12 12
 	 */
13 13
 	public function up()
14 14
 	{
15
-		DB::statement( "DROP VIEW IF EXISTS admin_count");
16
-		DB::statement( "CREATE VIEW admin_count AS  
15
+		DB::statement("DROP VIEW IF EXISTS admin_count");
16
+		DB::statement("CREATE VIEW admin_count AS  
17 17
 			select count(u.id)
18 18
 			from users u, groups g ,users_groups ug
19 19
 			where
Please login to merge, or discard this patch.
src/Modules/Reporting/Database/Migrations/2016_01_19_112350_reports.php 2 patches
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@
 block discarded – undo
18 18
 			$table->string('view_name',100);
19 19
 			$table->softDeletes();
20 20
 			$table->timestamps();
21
-        });
21
+		});
22 22
 	}
23 23
 
24 24
 	/**
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -12,10 +12,10 @@
 block discarded – undo
12 12
 	 */
13 13
 	public function up()
14 14
 	{
15
-		Schema::create('reports', function (Blueprint $table) {
15
+		Schema::create('reports', function(Blueprint $table) {
16 16
 			$table->increments('id');
17
-			$table->string('report_name',100);
18
-			$table->string('view_name',100);
17
+			$table->string('report_name', 100);
18
+			$table->string('view_name', 100);
19 19
 			$table->softDeletes();
20 20
 			$table->timestamps();
21 21
         });
Please login to merge, or discard this patch.
src/Modules/Reporting/Report.php 2 patches
Indentation   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
 
6 6
 class Report extends Model{
7 7
 
8
-    use SoftDeletes;
8
+	use SoftDeletes;
9 9
 	protected $table    = 'reports';
10 10
 	protected $dates    = ['created_at', 'updated_at', 'deleted_at'];
11 11
 	protected $hidden   = ['deleted_at'];
@@ -13,22 +13,22 @@  discard block
 block discarded – undo
13 13
 	protected $fillable = ['report_name', 'view_name'];
14 14
 
15 15
 	public function getCreatedAtAttribute($value)
16
-    {
17
-        return \Carbon\Carbon::parse($value)->addHours(\Session::get('timeZoneDiff'))->toDateTimeString();
18
-    }
16
+	{
17
+		return \Carbon\Carbon::parse($value)->addHours(\Session::get('timeZoneDiff'))->toDateTimeString();
18
+	}
19 19
 
20
-    public function getUpdatedAtAttribute($value)
21
-    {
22
-        return \Carbon\Carbon::parse($value)->addHours(\Session::get('timeZoneDiff'))->toDateTimeString();
23
-    }
20
+	public function getUpdatedAtAttribute($value)
21
+	{
22
+		return \Carbon\Carbon::parse($value)->addHours(\Session::get('timeZoneDiff'))->toDateTimeString();
23
+	}
24 24
 
25
-    public function getDeletedAtAttribute($value)
26
-    {
27
-        return \Carbon\Carbon::parse($value)->addHours(\Session::get('timeZoneDiff'))->toDateTimeString();
28
-    }
25
+	public function getDeletedAtAttribute($value)
26
+	{
27
+		return \Carbon\Carbon::parse($value)->addHours(\Session::get('timeZoneDiff'))->toDateTimeString();
28
+	}
29 29
     
30
-    public static function boot()
31
-    {
32
-        parent::boot();
33
-    }
30
+	public static function boot()
31
+	{
32
+		parent::boot();
33
+	}
34 34
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@
 block discarded – undo
3 3
 use Illuminate\Database\Eloquent\Model;
4 4
 use Illuminate\Database\Eloquent\SoftDeletes;
5 5
 
6
-class Report extends Model{
6
+class Report extends Model {
7 7
 
8 8
     use SoftDeletes;
9 9
 	protected $table    = 'reports';
Please login to merge, or discard this patch.
Database/Migrations/2016_01_24_123631_initialize_notifications.php 1 patch
Indentation   +67 added lines, -67 removed lines patch added patch discarded remove patch
@@ -12,77 +12,77 @@
 block discarded – undo
12 12
 	 */
13 13
 	public function up()
14 14
 	{
15
-        /**
16
-         * Delete previous permissions.
17
-         */
15
+		/**
16
+		 * Delete previous permissions.
17
+		 */
18 18
 		DB::table('permissions')->whereIn('model', ['notifications'])->delete();
19 19
 
20 20
 		/**
21
-         * Insert the permissions related to this module.
22
-         */
23
-        DB::table('permissions')->insert(
24
-        	[
25
-        		/**
26
-        		 * Logs model permissions.
27
-        		 */
28
-	        	[
29
-	        	'name'       => 'find',
30
-	        	'model'      => 'notifications',
31
-	        	'created_at' => \DB::raw('NOW()'),
32
-	        	'updated_at' => \DB::raw('NOW()')
33
-	        	],
34
-	        	[
35
-	        	'name'       => 'search',
36
-	        	'model'      => 'notifications',
37
-	        	'created_at' => \DB::raw('NOW()'),
38
-	        	'updated_at' => \DB::raw('NOW()')
39
-	        	],
40
-	        	[
41
-	        	'name'       => 'list',
42
-	        	'model'      => 'notifications',
43
-	        	'created_at' => \DB::raw('NOW()'),
44
-	        	'updated_at' => \DB::raw('NOW()')
45
-	        	],
46
-	        	[
47
-	        	'name'       => 'findby',
48
-	        	'model'      => 'notifications',
49
-	        	'created_at' => \DB::raw('NOW()'),
50
-	        	'updated_at' => \DB::raw('NOW()')
51
-	        	],
52
-	        	[
53
-	        	'name'       => 'first',
54
-	        	'model'      => 'notifications',
55
-	        	'created_at' => \DB::raw('NOW()'),
56
-	        	'updated_at' => \DB::raw('NOW()')
57
-	        	],
58
-	        	[
59
-	        	'name'       => 'paginate',
60
-	        	'model'      => 'notifications',
61
-	        	'created_at' => \DB::raw('NOW()'),
62
-	        	'updated_at' => \DB::raw('NOW()')
63
-	        	],
64
-	        	[
65
-	        	'name'       => 'paginateby',
66
-	        	'model'      => 'notifications',
67
-	        	'created_at' => \DB::raw('NOW()'),
68
-	        	'updated_at' => \DB::raw('NOW()')
69
-	        	],
70
-	        	[
71
-	        	'name'       => 'notified',
72
-	        	'model'      => 'notifications',
73
-	        	'created_at' => \DB::raw('NOW()'),
74
-	        	'updated_at' => \DB::raw('NOW()')
75
-	        	],
76
-	        	[
77
-	        	'name'       => 'notifyall',
78
-	        	'model'      => 'notifications',
79
-	        	'created_at' => \DB::raw('NOW()'),
80
-	        	'updated_at' => \DB::raw('NOW()')
81
-	        	],
82
-        	]
83
-        );
21
+		 * Insert the permissions related to this module.
22
+		 */
23
+		DB::table('permissions')->insert(
24
+			[
25
+				/**
26
+				 * Logs model permissions.
27
+				 */
28
+				[
29
+				'name'       => 'find',
30
+				'model'      => 'notifications',
31
+				'created_at' => \DB::raw('NOW()'),
32
+				'updated_at' => \DB::raw('NOW()')
33
+				],
34
+				[
35
+				'name'       => 'search',
36
+				'model'      => 'notifications',
37
+				'created_at' => \DB::raw('NOW()'),
38
+				'updated_at' => \DB::raw('NOW()')
39
+				],
40
+				[
41
+				'name'       => 'list',
42
+				'model'      => 'notifications',
43
+				'created_at' => \DB::raw('NOW()'),
44
+				'updated_at' => \DB::raw('NOW()')
45
+				],
46
+				[
47
+				'name'       => 'findby',
48
+				'model'      => 'notifications',
49
+				'created_at' => \DB::raw('NOW()'),
50
+				'updated_at' => \DB::raw('NOW()')
51
+				],
52
+				[
53
+				'name'       => 'first',
54
+				'model'      => 'notifications',
55
+				'created_at' => \DB::raw('NOW()'),
56
+				'updated_at' => \DB::raw('NOW()')
57
+				],
58
+				[
59
+				'name'       => 'paginate',
60
+				'model'      => 'notifications',
61
+				'created_at' => \DB::raw('NOW()'),
62
+				'updated_at' => \DB::raw('NOW()')
63
+				],
64
+				[
65
+				'name'       => 'paginateby',
66
+				'model'      => 'notifications',
67
+				'created_at' => \DB::raw('NOW()'),
68
+				'updated_at' => \DB::raw('NOW()')
69
+				],
70
+				[
71
+				'name'       => 'notified',
72
+				'model'      => 'notifications',
73
+				'created_at' => \DB::raw('NOW()'),
74
+				'updated_at' => \DB::raw('NOW()')
75
+				],
76
+				[
77
+				'name'       => 'notifyall',
78
+				'model'      => 'notifications',
79
+				'created_at' => \DB::raw('NOW()'),
80
+				'updated_at' => \DB::raw('NOW()')
81
+				],
82
+			]
83
+		);
84 84
 
85
-        /**
85
+		/**
86 86
 		 * Assign the permissions to the admin group.
87 87
 		 */
88 88
 		$permissionIds = DB::table('permissions')->whereIn('model', ['notifications'])->select('id')->lists('id');
Please login to merge, or discard this patch.
src/Kernel.php 1 patch
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -7,44 +7,44 @@
 block discarded – undo
7 7
 class Kernel extends HttpKernel
8 8
 {
9 9
 
10
-    /**
11
-     * The application's global HTTP middleware stack.
12
-     *
13
-     * These middleware are run during every request to your application.
14
-     *
15
-     * @var array
16
-     */
17
-    protected $middleware = [
18
-        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
19
-    ];
10
+	/**
11
+	 * The application's global HTTP middleware stack.
12
+	 *
13
+	 * These middleware are run during every request to your application.
14
+	 *
15
+	 * @var array
16
+	 */
17
+	protected $middleware = [
18
+		\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
19
+	];
20 20
 
21
-    /**
22
-     * The application's global HTTP middleware stack.
23
-     *
24
-     * @var array
25
-     */
26
-    protected $middlewareGroups = [
27
-        'web' => [
28
-            \App\Http\Middleware\EncryptCookies::class,
29
-            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
30
-            \Illuminate\Session\Middleware\StartSession::class,
31
-            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
32
-            //\App\Http\Middleware\VerifyCsrfToken::class,
33
-        ],
34
-        'api' => [
35
-            'throttle:60,1',
36
-        ],
37
-    ];
21
+	/**
22
+	 * The application's global HTTP middleware stack.
23
+	 *
24
+	 * @var array
25
+	 */
26
+	protected $middlewareGroups = [
27
+		'web' => [
28
+			\App\Http\Middleware\EncryptCookies::class,
29
+			\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
30
+			\Illuminate\Session\Middleware\StartSession::class,
31
+			\Illuminate\View\Middleware\ShareErrorsFromSession::class,
32
+			//\App\Http\Middleware\VerifyCsrfToken::class,
33
+		],
34
+		'api' => [
35
+			'throttle:60,1',
36
+		],
37
+	];
38 38
 
39
-    /**
40
-     * The application's route middleware.
41
-     *
42
-     * @var array
43
-     */
44
-    protected $routeMiddleware = [
45
-        'auth' => \App\Http\Middleware\Authenticate::class,
46
-        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
47
-        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
48
-        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
49
-    ];
39
+	/**
40
+	 * The application's route middleware.
41
+	 *
42
+	 * @var array
43
+	 */
44
+	protected $routeMiddleware = [
45
+		'auth' => \App\Http\Middleware\Authenticate::class,
46
+		'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
47
+		'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
48
+		'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
49
+	];
50 50
 }
Please login to merge, or discard this patch.
src/Modules/Reporting/Repositories/ReportRepository.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -46,7 +46,7 @@
 block discarded – undo
46 46
      *
47 47
      * @param  array   $conditions array of conditions
48 48
      * @param  array   $relations
49
-     * @param  array   $colunmns
49
+     * @param  array   $columns
50 50
      * @return object
51 51
      */
52 52
     public function first($conditions, $relations = [], $columns = array('*'))
Please login to merge, or discard this patch.
Indentation   +45 added lines, -45 removed lines patch added patch discarded remove patch
@@ -11,63 +11,63 @@
 block discarded – undo
11 11
 	 */
12 12
 	protected function getModel()
13 13
 	{
14
-        $apiVersion = \Request::header('api-version') ?: 1;
14
+		$apiVersion = \Request::header('api-version') ?: 1;
15 15
 		return 'App\Modules\Reporting\Report';
16 16
 	}
17 17
 
18 18
 	/**
19
-     * Render the given report db view.
20
-     * 
21
-     * @param  integer $id
22
-     * @param  array   $relations
23
-     * @param  array   $columns
24
-     * @return object
25
-     */
26
-    public function find($id, $relations = [], $columns = array('*'))
27
-    {
19
+	 * Render the given report db view.
20
+	 * 
21
+	 * @param  integer $id
22
+	 * @param  array   $relations
23
+	 * @param  array   $columns
24
+	 * @return object
25
+	 */
26
+	public function find($id, $relations = [], $columns = array('*'))
27
+	{
28 28
 		$report = call_user_func_array("{$this->getModel()}::with", array($relations))->find($id, $columns);
29 29
 
30
-        if ( ! $report) 
31
-        {
32
-            $error = $this->errorHandler->notFound('report');
33
-            abort($error['status'], $error['message']);
34
-        }
30
+		if ( ! $report) 
31
+		{
32
+			$error = $this->errorHandler->notFound('report');
33
+			abort($error['status'], $error['message']);
34
+		}
35 35
 
36
-        if ( ! \Core::users()->can($report->view_name, 'reports'))
37
-        {
38
-            $error = $this->errorHandler->noPermissions();
39
-            abort($error['status'], $error['message']);
40
-        }
36
+		if ( ! \Core::users()->can($report->view_name, 'reports'))
37
+		{
38
+			$error = $this->errorHandler->noPermissions();
39
+			abort($error['status'], $error['message']);
40
+		}
41 41
 
42
-        return \DB::table($report->view_name)->get();
43
-    }
42
+		return \DB::table($report->view_name)->get();
43
+	}
44 44
 
45
-    /**
46
-     * Render the given report db view based on the given
47
-     * condition.
48
-     *
49
-     * @param  array   $conditions array of conditions
50
-     * @param  array   $relations
51
-     * @param  array   $colunmns
52
-     * @return object
53
-     */
54
-    public function first($conditions, $relations = [], $columns = array('*'))
55
-    {
45
+	/**
46
+	 * Render the given report db view based on the given
47
+	 * condition.
48
+	 *
49
+	 * @param  array   $conditions array of conditions
50
+	 * @param  array   $relations
51
+	 * @param  array   $colunmns
52
+	 * @return object
53
+	 */
54
+	public function first($conditions, $relations = [], $columns = array('*'))
55
+	{
56 56
 		$conditions = $this->constructConditions($conditions);
57 57
 		$report     = call_user_func_array("{$this->getModel()}::with", array($relations))->whereRaw($conditions['conditionString'], $conditions['conditionValues'])->first($columns);
58 58
         
59
-        if ( ! $report) 
60
-        {
61
-            $error = $this->errorHandler->notFound('report');
62
-            abort($error['status'], $error['message']);
63
-        }
59
+		if ( ! $report) 
60
+		{
61
+			$error = $this->errorHandler->notFound('report');
62
+			abort($error['status'], $error['message']);
63
+		}
64 64
         
65
-        if ( ! \Core::users()->can($report->view_name, 'reports'))
66
-        {
67
-            $error = $this->errorHandler->noPermissions();
68
-            abort($error['status'], $error['message']);
69
-        }
65
+		if ( ! \Core::users()->can($report->view_name, 'reports'))
66
+		{
67
+			$error = $this->errorHandler->noPermissions();
68
+			abort($error['status'], $error['message']);
69
+		}
70 70
 		
71
-        return \DB::table($report->view_name)->get();  
72
-    }
71
+		return \DB::table($report->view_name)->get();  
72
+	}
73 73
 }
Please login to merge, or discard this patch.
src/Modules/Core/AbstractRepositories/AbstractRepositoryContainer.php 2 patches
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -4,34 +4,34 @@
 block discarded – undo
4 4
 
5 5
 abstract class AbstractRepositoryContainer implements RepositoryContainerInterface
6 6
 {
7
-    /**
8
-     * Construct the repository class name based on
9
-     * the method name called, search in the 
10
-     * given namespaces for the class and 
11
-     * return an instance.
12
-     * 
13
-     * @param  string $name the called method name
14
-     * @param  array  $arguments the method arguments
15
-     * @return object
16
-     */
7
+	/**
8
+	 * Construct the repository class name based on
9
+	 * the method name called, search in the 
10
+	 * given namespaces for the class and 
11
+	 * return an instance.
12
+	 * 
13
+	 * @param  string $name the called method name
14
+	 * @param  array  $arguments the method arguments
15
+	 * @return object
16
+	 */
17 17
 	public function __call($name, $arguments)
18
-    {
19
-    	foreach ($this->getRepoNameSpace() as $repoNameSpace) 
20
-    	{
21
-            $class      = rtrim($repoNameSpace, '\\') . '\\' . ucfirst(str_singular($name)) . 'Repository';
22
-    		if (class_exists($class)) 
23
-    		{
24
-        		return \App::make($class);
25
-    		}
26
-    	}
27
-    }
18
+	{
19
+		foreach ($this->getRepoNameSpace() as $repoNameSpace) 
20
+		{
21
+			$class      = rtrim($repoNameSpace, '\\') . '\\' . ucfirst(str_singular($name)) . 'Repository';
22
+			if (class_exists($class)) 
23
+			{
24
+				return \App::make($class);
25
+			}
26
+		}
27
+	}
28 28
 
29
-     /**
30
-     * Abstract methods that return the necessary 
31
-     * information (repositories namespaces)
32
-     * needed to preform the previous actions.
33
-     * 
34
-     * @return array
35
-     */
36
-    abstract protected function getRepoNameSpace();
29
+	 /**
30
+	  * Abstract methods that return the necessary 
31
+	  * information (repositories namespaces)
32
+	  * needed to preform the previous actions.
33
+	  * 
34
+	  * @return array
35
+	  */
36
+	abstract protected function getRepoNameSpace();
37 37
 }
38 38
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@
 block discarded – undo
18 18
     {
19 19
     	foreach ($this->getRepoNameSpace() as $repoNameSpace) 
20 20
     	{
21
-            $class      = rtrim($repoNameSpace, '\\') . '\\' . ucfirst(str_singular($name)) . 'Repository';
21
+            $class = rtrim($repoNameSpace, '\\').'\\'.ucfirst(str_singular($name)).'Repository';
22 22
     		if (class_exists($class)) 
23 23
     		{
24 24
         		return \App::make($class);
Please login to merge, or discard this patch.
src/Modules/Notifications/Repositories/NotificationRepository.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -11,28 +11,28 @@
 block discarded – undo
11 11
 	 */
12 12
 	protected function getModel()
13 13
 	{
14
-        $apiVersion = \Request::header('api-version') ?: 1;
14
+		$apiVersion = \Request::header('api-version') ?: 1;
15 15
 		return 'App\Modules\Notifications\Notification';
16 16
 	}
17 17
 
18 18
 	/**
19
-     * Set the notification notified to true.
20
-     * 
21
-     * @param  integer  $id
22
-     * @return object
23
-     */
24
-    public function notified($id)
25
-    {
26
-        return $this->save(['id' => $id, 'notified' => 1]);
27
-    }
19
+	 * Set the notification notified to true.
20
+	 * 
21
+	 * @param  integer  $id
22
+	 * @return object
23
+	 */
24
+	public function notified($id)
25
+	{
26
+		return $this->save(['id' => $id, 'notified' => 1]);
27
+	}
28 28
 
29
-    /**
30
-     * Set the notification notified to all.
31
-     * 
32
-     * @return void
33
-     */
34
-    public function notifyAll()
35
-    {
36
-        \Core::notifications()->update(false, ['notified' => 1], 'notified');
37
-    }
29
+	/**
30
+	 * Set the notification notified to all.
31
+	 * 
32
+	 * @return void
33
+	 */
34
+	public function notifyAll()
35
+	{
36
+		\Core::notifications()->update(false, ['notified' => 1], 'notified');
37
+	}
38 38
 }
Please login to merge, or discard this patch.
src/Modules/Reporting/Http/Controllers/ReportsController.php 2 patches
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -8,16 +8,16 @@
 block discarded – undo
8 8
 class ReportsController extends BaseApiController
9 9
 {
10 10
 	/**
11
-     * The name of the model that is used by the base api controller 
12
-     * to preform actions like (add, edit ... etc).
13
-     * @var string
14
-     */
15
-    protected $model            = 'reports';
11
+	 * The name of the model that is used by the base api controller 
12
+	 * to preform actions like (add, edit ... etc).
13
+	 * @var string
14
+	 */
15
+	protected $model            = 'reports';
16 16
 
17
-    /**
18
-     * List of all route actions that the base api controller
19
-     * will skip permissions check for them.
20
-     * @var array
21
-     */
22
-    protected $skipPermissionCheck = ['find', 'first'];
17
+	/**
18
+	 * List of all route actions that the base api controller
19
+	 * will skip permissions check for them.
20
+	 * @var array
21
+	 */
22
+	protected $skipPermissionCheck = ['find', 'first'];
23 23
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@
 block discarded – undo
12 12
      * to preform actions like (add, edit ... etc).
13 13
      * @var string
14 14
      */
15
-    protected $model            = 'reports';
15
+    protected $model = 'reports';
16 16
 
17 17
     /**
18 18
      * List of all route actions that the base api controller
Please login to merge, or discard this patch.