Test Failed
Push — CI ( 0f01dd...c95a04 )
by Adam
55:13
created

AOW_WorkFlowController   F

Complexity

Total Complexity 153

Size/Duplication

Total Lines 534
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2
Metric Value
wmc 153
lcom 0
cbo 2
dl 0
loc 534
rs 1.5789

14 Methods

Rating   Name   Duplication   Size   Complexity  
B action_getModuleFields() 0 13 5
B action_getRelatedModule() 0 13 5
B action_getModuleRelationships() 0 13 5
D action_getModuleOperatorField() 0 72 24
F action_getFieldTypeOptions() 0 74 27
D action_getActionFieldTypeOptions() 0 66 23
C action_getModuleFieldType() 0 46 14
C action_getModuleFieldTypeSet() 0 39 14
A action_getModuleField() 0 11 3
C action_getRelFieldTypeSet() 0 29 8
B action_getRelActionFieldTypeOptions() 0 43 6
C action_getAction() 0 46 7
D action_getEmailField() 0 41 10
A action_testFlow() 0 9 2

How to fix   Complexity   

Complex Class

Complex classes like AOW_WorkFlowController often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use AOW_WorkFlowController, and based on these observations, apply Extract Interface, too.

1
<?php
2
/**
3
 * Advanced OpenWorkflow, Automating SugarCRM.
4
 * @package Advanced OpenWorkflow for SugarCRM
5
 * @copyright SalesAgility Ltd http://www.salesagility.com
6
 *
7
 * This program is free software; you can redistribute it and/or modify
8
 * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
9
 * the Free Software Foundation; either version 3 of the License, or
10
 * (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
18
 * along with this program; if not, see http://www.gnu.org/licenses
19
 * or write to the Free Software Foundation,Inc., 51 Franklin Street,
20
 * Fifth Floor, Boston, MA 02110-1301  USA
21
 *
22
 * @author SalesAgility <[email protected]>
23
 */
24
25
26
require_once("modules/AOW_WorkFlow/aow_utils.php");
27
28
class AOW_WorkFlowController extends SugarController {
29
30
    protected function action_getModuleFields()
31
    {
32
        if (!empty($_REQUEST['aow_module']) && $_REQUEST['aow_module'] != '') {
33
            if(isset($_REQUEST['rel_field']) &&  $_REQUEST['rel_field'] != ''){
34
                $module = getRelatedModule($_REQUEST['aow_module'],$_REQUEST['rel_field']);
35
            } else {
36
                $module = $_REQUEST['aow_module'];
37
            }
38
            echo getModuleFields($module,$_REQUEST['view'],$_REQUEST['aow_value']);
39
        }
40
        die;
41
42
    }
43
44
    protected function action_getRelatedModule()
45
    {
46
        if (!empty($_REQUEST['aow_module']) && $_REQUEST['aow_module'] != '') {
47
            if(isset($_REQUEST['rel_field']) &&  $_REQUEST['rel_field'] != ''){
48
                $module = getRelatedModule($_REQUEST['aow_module'],$_REQUEST['rel_field']);
49
            } else {
50
                $module = $_REQUEST['aow_module'];
51
            }
52
            echo htmlspecialchars($module);
53
        }
54
        die;
55
56
    }
57
58
    protected function action_getModuleRelationships()
59
    {
60
        if (!empty($_REQUEST['aow_module']) && $_REQUEST['aow_module'] != '') {
61
            if(isset($_REQUEST['rel_field']) &&  $_REQUEST['rel_field'] != ''){
62
                $module = getRelatedModule($_REQUEST['aow_module'],$_REQUEST['rel_field']);
63
            } else {
64
                $module = $_REQUEST['aow_module'];
65
            }
66
            echo getModuleRelationships($module);
67
        }
68
        die;
69
70
    }
71
72
73
    protected function action_getModuleOperatorField(){
74
75
        global $app_list_strings, $beanFiles, $beanList;
76
77
        if(isset($_REQUEST['rel_field']) &&  $_REQUEST['rel_field'] != ''){
78
            $module = getRelatedModule($_REQUEST['aow_module'],$_REQUEST['rel_field']);
79
        } else {
80
            $module = $_REQUEST['aow_module'];
81
        }
82
        $fieldname = $_REQUEST['aow_fieldname'];
83
        $aow_field = $_REQUEST['aow_newfieldname'];
84
85
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
86
        else $view= 'EditView';
87
88
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
89
        else $value = '';
90
91
92
        require_once($beanFiles[$beanList[$module]]);
93
        $focus = new $beanList[$module];
94
        $vardef = $focus->getFieldDefinition($fieldname);
95
96
        if($vardef){
97
98
            switch($vardef['type']) {
99
                case 'double':
100
                case 'decimal':
101
                case 'float':
102
                case 'currency':
103
                $valid_opp = array('Equal_To','Not_Equal_To','Greater_Than','Less_Than','Greater_Than_or_Equal_To','Less_Than_or_Equal_To','is_null');
104
                    break;
105
                case 'uint':
106
                case 'ulong':
107
                case 'long':
108
                case 'short':
109
                case 'tinyint':
110
                case 'int':
111
                $valid_opp = array('Equal_To','Not_Equal_To','Greater_Than','Less_Than','Greater_Than_or_Equal_To','Less_Than_or_Equal_To','is_null');
112
                    break;
113
                case 'date':
114
                case 'datetime':
115
                case 'datetimecombo':
116
                $valid_opp = array('Equal_To','Not_Equal_To','Greater_Than','Less_Than','Greater_Than_or_Equal_To','Less_Than_or_Equal_To','is_null');
117
                    break;
118
                case 'enum':
119
                case 'multienum':
120
                $valid_opp = array('Equal_To','Not_Equal_To','is_null');
121
                    break;
122
                default:
123
                $valid_opp = array('Equal_To','Not_Equal_To','Contains', 'Starts_With', 'Ends_With','is_null');
124
                    break;
125
            }
126
127
            foreach($app_list_strings['aow_operator_list'] as $key => $keyValue){
128
                if(!in_array($key, $valid_opp)){
129
                    unset($app_list_strings['aow_operator_list'][$key]);
130
                }
131
            }
132
133
134
135
            $app_list_strings['aow_operator_list'];
136
            if($view == 'EditView'){
137
                echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field ' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_operator_list'], $value) ."</select>";
138
            }else{
139
                echo $app_list_strings['aow_operator_list'][$value];
140
            }
141
        }
142
        die;
143
144
    }
145
146
    protected function action_getFieldTypeOptions(){
147
148
        global $app_list_strings, $beanFiles, $beanList;
149
150
        if(isset($_REQUEST['rel_field']) &&  $_REQUEST['rel_field'] != ''){
151
            $module = getRelatedModule($_REQUEST['aow_module'],$_REQUEST['rel_field']);
152
        } else {
153
            $module = $_REQUEST['aow_module'];
154
        }
155
        $fieldname = $_REQUEST['aow_fieldname'];
156
        $aow_field = $_REQUEST['aow_newfieldname'];
157
158
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
159
        else $view= 'EditView';
160
161
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
162
        else $value = '';
163
164
165
        require_once($beanFiles[$beanList[$module]]);
166
        $focus = new $beanList[$module];
167
        $vardef = $focus->getFieldDefinition($fieldname);
168
169
        switch($vardef['type']) {
170
            case 'double':
171
            case 'decimal':
172
            case 'float':
173
            case 'currency':
174
                $valid_opp = array('Value','Field','Any_Change');
175
                break;
176
            case 'uint':
177
            case 'ulong':
178
            case 'long':
179
            case 'short':
180
            case 'tinyint':
181
            case 'int':
182
                $valid_opp = array('Value','Field','Any_Change');
183
                break;
184
            case 'date':
185
            case 'datetime':
186
            case 'datetimecombo':
187
                $valid_opp = array('Value','Field','Any_Change','Date');
188
                break;
189
            case 'enum':
190
            case 'dynamicenum':    
191
            case 'multienum':
192
                $valid_opp = array('Value','Field','Any_Change', 'Multi');
193
                break;
194
            case 'relate':
195
            case 'id':
196
                $valid_opp = array('Value','Field','Any_Change', 'SecurityGroup');
197
                break;
198
            default:
199
                $valid_opp = array('Value','Field','Any_Change');
200
                break;
201
        }
202
203
        if(!file_exists('modules/SecurityGroups/SecurityGroup.php')){
204
            unset($app_list_strings['aow_condition_type_list']['SecurityGroup']);
205
        }
206
        foreach($app_list_strings['aow_condition_type_list'] as $key => $keyValue){
207
            if(!in_array($key, $valid_opp)){
208
                unset($app_list_strings['aow_condition_type_list'][$key]);
209
            }
210
        }
211
212
        if($view == 'EditView'){
213
            echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_condition_type_list'], $value) ."</select>";
214
        }else{
215
            echo $app_list_strings['aow_condition_type_list'][$value];
216
        }
217
        die;
218
219
    }
220
221
    protected function action_getActionFieldTypeOptions(){
222
223
        global $app_list_strings, $beanFiles, $beanList;
224
225
        $module = $_REQUEST['aow_module'];
226
        $fieldname = $_REQUEST['aow_fieldname'];
227
        $aow_field = $_REQUEST['aow_newfieldname'];
228
229
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
230
        else $view= 'EditView';
231
232
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
233
        else $value = '';
234
235
236
        require_once($beanFiles[$beanList[$module]]);
237
        $focus = new $beanList[$module];
238
        $vardef = $focus->getFieldDefinition($fieldname);
239
240
        switch($vardef['type']) {
241
            case 'double':
242
            case 'decimal':
243
            case 'float':
244
            case 'currency':
245
                $valid_opp = array('Value','Field');
246
                break;
247
            case 'uint':
248
            case 'ulong':
249
            case 'long':
250
            case 'short':
251
            case 'tinyint':
252
            case 'int':
253
                $valid_opp = array('Value','Field');
254
                break;
255
            case 'date':
256
            case 'datetime':
257
            case 'datetimecombo':
258
                $valid_opp = array('Value','Field', 'Date');
259
                break;
260
            case 'enum':
261
            case 'multienum':
262
                $valid_opp = array('Value','Field');
263
                break;
264
            case 'relate':
265
                $valid_opp = array('Value','Field');
266
                if($vardef['module'] == 'Users') $valid_opp = array('Value','Field','Round_Robin','Least_Busy','Random');
267
                break;
268
            default:
269
                $valid_opp = array('Value','Field');
270
                break;
271
        }
272
273
        foreach($app_list_strings['aow_action_type_list'] as $key => $keyValue){
274
            if(!in_array($key, $valid_opp)){
275
                unset($app_list_strings['aow_action_type_list'][$key]);
276
            }
277
        }
278
279
        if($view == 'EditView'){
280
            echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_action_type_list'], $value) ."</select>";
281
        }else{
282
            echo $app_list_strings['aow_action_type_list'][$value];
283
        }
284
        die;
285
286
    }
287
288
    protected function action_getModuleFieldType()
289
    {
290
        if(isset($_REQUEST['rel_field']) &&  $_REQUEST['rel_field'] != ''){
291
            $rel_module = getRelatedModule($_REQUEST['aow_module'],$_REQUEST['rel_field']);
292
        } else {
293
            $rel_module = $_REQUEST['aow_module'];
294
        }
295
        $module = $_REQUEST['aow_module'];
296
        $fieldname = $_REQUEST['aow_fieldname'];
297
        $aow_field = $_REQUEST['aow_newfieldname'];
298
299
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
300
        else $view= 'EditView';
301
302
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
303
        else $value = '';
304
305
        switch($_REQUEST['aow_type']) {
306
            case 'Field':
307
                if(isset($_REQUEST['alt_module']) && $_REQUEST['alt_module'] != '') $module = $_REQUEST['alt_module'];
308
                if($view == 'EditView'){
309
                    echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field ' title='' tabindex='116'>". getModuleFields($module, $view, $value, getValidFieldsTypes($module, $fieldname)) ."</select>";
310
                }else{
311
                    echo getModuleFields($module, $view, $value);
312
                }
313
                break;
314
            case 'Any_Change';
315
                echo '';
316
                break;
317
            case 'Date':
318
                echo getDateField($module, $aow_field, $view, $value, false);
319
                break;
320
            case 'Multi':
321
                echo getModuleField($rel_module,$fieldname, $aow_field, $view, $value,'multienum');
322
                break;
323
            case 'SecurityGroup':
0 ignored issues
show
Coding Style introduced by
There must be a comment when fall-through is intentional in a non-empty case body
Loading history...
324
                $module = 'Accounts';
325
                $fieldname = 'SecurityGroups';
326
            case 'Value':
327
            default:
328
                echo getModuleField($rel_module,$fieldname, $aow_field, $view, $value );
329
                break;
330
        }
331
        die;
332
333
    }
334
335
    protected function action_getModuleFieldTypeSet()
336
    {
337
        $module = $_REQUEST['aow_module'];
338
        $fieldname = $_REQUEST['aow_fieldname'];
339
        $aow_field = $_REQUEST['aow_newfieldname'];
340
341
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
342
        else $view= 'EditView';
343
344
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
345
        else $value = '';
346
347
        switch($_REQUEST['aow_type']) {
348
            case 'Field':
349
                $valid_fields = getValidFieldsTypes($module, $fieldname);
350
                if(isset($_REQUEST['alt_module']) && $_REQUEST['alt_module'] != '') $module = $_REQUEST['alt_module'];
351
                if($view == 'EditView'){
352
                    echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field ' title='' tabindex='116'>". getModuleFields($module, $view, $value, $valid_fields) ."</select>";
353
                }else{
354
                    echo getModuleFields($module, $view, $value);
355
                }
356
                break;
357
            case 'Date':
358
                if(isset($_REQUEST['alt_module']) && $_REQUEST['alt_module'] != '') $module = $_REQUEST['alt_module'];
359
                echo getDateField($module, $aow_field, $view, $value);
360
                break;
361
            Case 'Round_Robin';
0 ignored issues
show
Coding Style introduced by
CASE keyword must be lowercase; expected "case" but found "Case"

As per the PSR-2 coding standard,the case keyword must be written in lower case.

switch ($selector) {
    case "A": //right
        doSomething();
        break;
    CASE "B": //wrong
        doSomethingElse();
        break;
}

To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.

Loading history...
362
            Case 'Least_Busy';
0 ignored issues
show
Coding Style introduced by
CASE keyword must be lowercase; expected "case" but found "Case"

As per the PSR-2 coding standard,the case keyword must be written in lower case.

switch ($selector) {
    case "A": //right
        doSomething();
        break;
    CASE "B": //wrong
        doSomethingElse();
        break;
}

To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.

Loading history...
363
            Case 'Random';
0 ignored issues
show
Coding Style introduced by
CASE keyword must be lowercase; expected "case" but found "Case"

As per the PSR-2 coding standard,the case keyword must be written in lower case.

switch ($selector) {
    case "A": //right
        doSomething();
        break;
    CASE "B": //wrong
        doSomethingElse();
        break;
}

To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.

Loading history...
364
                echo getAssignField($aow_field, $view, $value);
365
                break;
366
            case 'Value':
367
            default:
368
                echo getModuleField($module,$fieldname, $aow_field, $view, $value );
369
                break;
370
        }
371
        die;
372
373
    }
374
375
    protected function action_getModuleField()
376
    {
377
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
378
        else $view= 'EditView';
379
380
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
381
        else $value = '';
382
383
        echo getModuleField($_REQUEST['aow_module'],$_REQUEST['aow_fieldname'], $_REQUEST['aow_newfieldname'], $view, $value );
384
        die;
385
    }
386
387
    protected function action_getRelFieldTypeSet()
388
    {
389
        $module = $_REQUEST['aow_module'];
390
        $fieldname = $_REQUEST['aow_fieldname'];
391
        $aow_field = $_REQUEST['aow_newfieldname'];
392
393
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
394
        else $view= 'EditView';
395
396
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
397
        else $value = '';
398
399
        switch($_REQUEST['aow_type']) {
400
            case 'Field':
401
                if(isset($_REQUEST['alt_module']) && $_REQUEST['alt_module'] != '') $module = $_REQUEST['alt_module'];
402
                if($view == 'EditView'){
403
                    echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field ' title='' tabindex='116'>". getModuleFields($module, $view, $value) ."</select>";
404
                }else{
405
                    echo getModuleFields($module, $view, $value);
406
                }
407
                break;
408
            case 'Value':
409
            default:
410
                echo getModuleField($module,$fieldname, $aow_field, $view, $value );
411
                break;
412
        }
413
        die;
414
415
    }
416
417
    protected function action_getRelActionFieldTypeOptions(){
418
419
        global $app_list_strings, $beanFiles, $beanList;
420
421
        $module = $_REQUEST['aow_module'];
422
        $alt_module = $_REQUEST['alt_module'];
423
        $fieldname = $_REQUEST['aow_fieldname'];
424
        $aow_field = $_REQUEST['aow_newfieldname'];
425
426
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
427
        else $view= 'EditView';
428
429
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
430
        else $value = '';
431
432
433
        require_once($beanFiles[$beanList[$module]]);
434
        $focus = new $beanList[$module];
435
        $vardef = $focus->getFieldDefinition($fieldname);
436
437
438
        /*if($vardef['module'] == $alt_module){
439
            $valid_opp = array('Value','Field');
440
        }
441
        else{
442
            $valid_opp = array('Value');
443
        }*/
444
        $valid_opp = array('Value','Field');
445
446
        foreach($app_list_strings['aow_rel_action_type_list'] as $key => $keyValue){
447
            if(!in_array($key, $valid_opp)){
448
                unset($app_list_strings['aow_rel_action_type_list'][$key]);
449
            }
450
        }
451
452
        if($view == 'EditView'){
453
            echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field' title='' tabindex='116'>". get_select_options_with_id($app_list_strings['aow_rel_action_type_list'], $value) ."</select>";
454
        }else{
455
            echo $app_list_strings['aow_rel_action_type_list'][$value];
456
        }
457
        die;
458
459
    }
460
461
    protected function action_getAction(){
462
        global $beanList, $beanFiles;
463
464
        $action_name = 'action'.$_REQUEST['aow_action'];
465
        $line = $_REQUEST['line'];
466
467
        if($_REQUEST['aow_module'] == '' || !isset($beanList[$_REQUEST['aow_module']])){
468
            echo '';
469
            die;
470
        }
471
472
        if(file_exists('custom/modules/AOW_Actions/actions/'.$action_name.'.php')){
473
474
            require_once('custom/modules/AOW_Actions/actions/'.$action_name.'.php');
475
476
        } else if(file_exists('modules/AOW_Actions/actions/'.$action_name.'.php')){
477
478
            require_once('modules/AOW_Actions/actions/'.$action_name.'.php');
479
480
        } else {
481
            echo '';
482
            die;
483
        }
484
485
        $custom_action_name = "custom" . $action_name;
486
        if(class_exists($custom_action_name)){
487
            $action_name = $custom_action_name;
488
        }
489
490
        $id = '';
491
        $params = array();
492
        if(isset($_REQUEST['id'])){
493
            require_once('modules/AOW_Actions/AOW_Action.php');
494
            $aow_action = new AOW_Action();
495
            $aow_action->retrieve($_REQUEST['id']);
496
            $id = $aow_action->id;
497
            $params = unserialize(base64_decode($aow_action->parameters));
498
        }
499
500
        $action = new $action_name($id);
501
502
        require_once($beanFiles[$beanList[$_REQUEST['aow_module']]]);
503
        $bean = new $beanList[$_REQUEST['aow_module']];
504
        echo $action->edit_display($line,$bean,$params);
505
        die;
506
    }
507
508
    protected function action_getEmailField()
509
    {
510
        $module = $_REQUEST['aow_module'];
511
        $aow_field = $_REQUEST['aow_newfieldname'];
512
513
        if(isset($_REQUEST['view'])) $view = $_REQUEST['view'];
514
        else $view= 'EditView';
515
516
        if(isset($_REQUEST['aow_value'])) $value = $_REQUEST['aow_value'];
517
        else $value = '';
518
519
        switch($_REQUEST['aow_type']) {
520
            case 'Record Email';
521
                echo '';
522
                break;
523
            case 'Related Field':
524
                $rel_field_list = getRelatedEmailableFields($module);
525
                if($view == 'EditView'){
526
                    echo "<select type='text' style='width:178px;' name='$aow_field' id='$aow_field' title='' tabindex='116'>". get_select_options_with_id($rel_field_list, $value) ."</select>";
527
                }else{
528
                    echo $rel_field_list[$value];
529
                }
530
                break;
531
            case 'Specify User':
532
                echo getModuleField('Accounts','assigned_user_name', $aow_field, $view, $value);
533
                break;
534
            case 'Users':
535
                echo getAssignField($aow_field, $view, $value);
536
                break;
537
            case 'Email Address':
538
            default:
539
                if($view == 'EditView'){
540
                    echo "<input type='text' name='$aow_field' id='$aow_field' size='25' title='' tabindex='116' value='$value'>";
541
                }else{
542
                    echo $value;
543
                }
544
                break;
545
        }
546
        die;
547
548
    }
549
550
551
    protected function action_testFlow(){
552
553
        echo 'Started<br />';
554
        require_once('modules/AOW_WorkFlow/AOW_WorkFlow.php');
555
        $workflow = new AOW_WorkFlow();
556
557
        if($workflow->run_flows())echo 'PASSED';
558
559
    }
560
561
}
562