Completed
Push — feature/code-analysis ( 05bab0...e964aa )
by Jonathan
02:58
created

CertificateController   B

Complexity

Total Complexity 19

Size/Duplication

Total Lines 197
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 16

Importance

Changes 0
Metric Value
wmc 19
lcom 1
cbo 16
dl 0
loc 197
rs 8.4614
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
B index() 0 58 7
A image() 0 21 3
B listAll() 0 65 5
A autocomplete() 0 14 3
1
<?php
2
/**
3
 * webtrees-lib: MyArtJaub library for webtrees
4
 *
5
 * @package MyArtJaub\Webtrees
6
 * @subpackage Certificates
7
 * @author Jonathan Jaubart <[email protected]>
8
 * @copyright Copyright (c) 2009-2016, Jonathan Jaubart
9
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3
10
 */
11
namespace MyArtJaub\Webtrees\Module\Certificates;
12
13
use Fisharebest\Webtrees\Auth;
14
use Fisharebest\Webtrees\Controller\PageController;
15
use Fisharebest\Webtrees\Filter;
16
use Fisharebest\Webtrees\I18N;
17
use Fisharebest\Webtrees\Module;
18
use Fisharebest\Webtrees\Module\AbstractModule;
19
use MyArtJaub\Webtrees\Constants;
20
use MyArtJaub\Webtrees\Controller\JsonController;
21
use MyArtJaub\Webtrees\Functions\Functions;
22
use MyArtJaub\Webtrees\Globals;
23
use MyArtJaub\Webtrees\ImageBuilder;
24
use MyArtJaub\Webtrees\Module\Certificates\Model\Certificate;
25
use MyArtJaub\Webtrees\Module\Certificates\Model\CertificateProviderInterface;
26
use MyArtJaub\Webtrees\Mvc\Controller\MvcController;
27
use MyArtJaub\Webtrees\Mvc\View\ViewBag;
28
use MyArtJaub\Webtrees\Mvc\View\ViewFactory;
29
use Rhumsaa\Uuid\Uuid;
30
31
/**
32
 * Controller for Certificate
33
 */
34
class CertificateController extends MvcController
35
{
36
    /**
37
     * Certificate Provider
38
     * @var CertificateProviderInterface $provider
39
     */
40
    protected $provider;
41
    
42
    /**
43
     * Constructor for Certificate controller
44
     * @param AbstractModule $module
45
     */
46
    public function __construct(AbstractModule $module) {
47
        parent::__construct($module);
48
        
49
        $this->provider = $this->module->getProvider();
50
    }
51
    
52
    
53
    /**
54
     * Pages
55
     */
56
        
57
    /**
58
     * Certificate@index
59
     */
60
    public function index() {        
61
        $tree = Globals::getTree();
62
        $controller = new PageController();
63
        $controller
64
        ->setPageTitle(I18N::translate('Certificate'))
65
        ->restrictAccess(
66
            $this->module->getSetting('MAJ_SHOW_CERT', Auth::PRIV_HIDE) >= Auth::accessLevel($tree)
67
        );
68
        
69
        $cid = Filter::get('cid');
70
        
71
        $certificate = null;
72
        if(!empty($cid) && strlen($cid) > 22){
73
            $certificate = Certificate::getInstance($cid, $tree, null, $this->provider);
74
        }
75
        
76
        $data = new ViewBag();
77
        $data->set('title', $controller->getPageTitle());
78
        
79
        $data->set('has_certif', false);
80
        if($certificate) {
81
            $controller->restrictAccess($certificate->canShow());
82
            $data->set('title', $certificate->getTitle());
83
            $data->set('has_certif', true);
84
            $data->set('certificate', $certificate);
85
            
86
            $data->set(
87
                'url_certif_city', 
88
                'module.php?mod=' . Constants::MODULE_MAJ_CERTIF_NAME . 
89
                    '&mod_action=Certificate@listAll' .
90
                    '&ged=' . $tree->getNameUrl() .
91
                    '&city=' . Functions::encryptToSafeBase64($certificate->getCity())
92
            );
93
            
94
            $controller->addInlineJavascript('
95
                jQuery("#certificate-tabs").tabs();
96
			    jQuery("#certificate-tabs").css("visibility", "visible");    
97
            ');
98
            
99
            $data->set('has_linked_indis', false);
100
            $data->set('has_linked_fams', false);
101
            
102
            $linked_indis = $certificate->linkedIndividuals();
103
            $linked_fams = $certificate->linkedFamilies();
104
                        
105
            if($linked_indis && count($linked_indis) > 0) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $linked_indis of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
106
                $data->set('has_linked_indis', true);
107
                $data->set('linked_indis', $linked_indis);
108
            }
109
            
110
            if(!empty($linked_fams)) {
111
                $data->set('has_linked_fams', true);
112
                $data->set('linked_fams', $linked_fams);
113
            }
114
        }
115
        
116
        ViewFactory::make('Certificate', $this, $controller, $data)->render();
117
    }
118
    
119
    /**
120
     * Certificate@image
121
     */
122
    public function image() {
123
        $tree = Globals::getTree();
124
        $cid   = Filter::get('cid');
125
        $certificate = null;
126
        if(!empty($cid)) $certificate =  Certificate::getInstance($cid, $tree, null, $this->provider);
127
        
128
        $imageBuilder = new ImageBuilder($certificate);
129
        
130
        if (!empty(Filter::get('cb'))) {
131
            $imageBuilder->setExpireOffset($imageBuilder->getExpireOffset() * 7);
132
        }
133
        
134
        $imageBuilder
135
            ->setShowWatermark(Auth::accessLevel($tree) >= $this->module->getSetting('MAJ_SHOW_NO_WATERMARK', Auth::PRIV_HIDE))
136
            ->setFontMaxSize($this->module->getSetting('MAJ_WM_FONT_MAXSIZE', 18))
137
            ->setFontColor($this->module->getSetting('MAJ_WM_FONT_COLOR', '#4D6DF3'))
138
        ;
139
        
140
        $imageBuilder->render();
141
        
142
    }
143
    
144
    /**
145
     * Certificate@listAll
146
     */
147
    public function listAll() {
148
        $tree = Globals::getTree();
149
        $controller = new PageController();
150
        $controller
151
            ->setPageTitle(I18N::translate('Certificates'))
152
            ->restrictAccess(
153
                $this->module->getSetting('MAJ_SHOW_CERT', Auth::PRIV_HIDE) >= Auth::accessLevel($tree)
154
            );
155
        
156
        $city = Filter::get('city');
157
        
158
        if(!empty($city) && strlen($city) > 22){
159
            $city = Functions::decryptFromSafeBase64($city);
160
            $controller->setPageTitle(I18N::translate('Certificates for %s', $city));
161
        }
162
        
163
        $data = new ViewBag();
164
        $data->set('title', $controller->getPageTitle());
165
        $data->set('url_module', $this->module->getName());
166
        $data->set('url_action', 'Certificate@listAll');
167
        $data->set('url_ged', $tree->getNameUrl());
168
        
169
        $data->set('cities', $this->provider->getCitiesList());
170
        $data->set('selected_city', $city);
171
        
172
        $data->set('has_list', false);        
173
        if(!empty($city)) {            
174
            $table_id = 'table-certiflist-' . Uuid::uuid4();
175
            
176
            $certif_list = $this->provider->getCertificatesList($city);            
177
            if(!empty($certif_list)) {                
178
                $data->set('has_list', true);
179
                $data->set('table_id', $table_id);
180
                $data->set('certificate_list', $certif_list);
181
                
182
                $controller
183
                    ->addExternalJavascript(WT_JQUERY_DATATABLES_JS_URL)
184
                    ->addInlineJavascript('
185
				        jQuery.fn.dataTableExt.oSort["text-asc"] = textCompareAsc;
186
				        jQuery.fn.dataTableExt.oSort["text-desc"] = textCompareDesc;
187
                        
188
                        jQuery("#'.$table_id.'").dataTable( {
189
        					dom: \'<"H"<"filtersH_' . $table_id . '">T<"dt-clear">pf<"dt-clear">irl>t<"F"pl<"dt-clear"><"filtersF_' . $table_id . '">>\',
190
    					    '.I18N::datatablesI18N().',
191
    					    jQueryUI: true,
192
        					autoWidth: false,
193
        					processing: true,
194
        					columns: [
195
        		                    /* 0-Date */  			{ type: "num", width: "15%", class: "center" },
196
        		                    /* 1-Type */ 			{ type: "text", width: "5%", searchable: false, class: "center"},
197
        		                    /* 2-Certificate */     { type: "text", class: "left" }
198
        		                ],
199
        		            sorting: [[0,"asc"], [1,"asc"]],
200
        					displayLength: 20,
201
        					pagingType: "full_numbers"
202
        			   });
203
        				jQuery(".certificate-list").css("visibility", "visible");
204
        				jQuery(".loading-image").css("display", "none");
205
                    ');
206
            }
207
        }
208
        
209
        ViewFactory::make('CertificatesList', $this, $controller, $data)->render();
210
        
211
    }
212
    
213
    /**
214
     * Certificate@autocomplete
215
     */
216
    public function autocomplete() {
217
        $tree = Globals::getTree();
218
        $controller = new JsonController();
219
        
220
        $city = Filter::get('city');
221
        $contains = Filter::get('term');        
222
223
        $controller
224
            ->restrictAccess(Auth::isEditor($tree) && !empty($city) && !empty($contains))
225
            ->pageHeader();
226
        
227
        $listCert = $this->provider->getCertificatesListBeginWith($city, $contains); 
0 ignored issues
show
Bug introduced by
The call to getCertificatesListBeginWith() misses a required argument $limit.

This check looks for function calls that miss required arguments.

Loading history...
228
        $controller->encode($listCert);
229
    }
230
}