Passed
Push — master ( b2ca54...1f995c )
by Jonathan
04:01
created
src/Webtrees/Module/GeoDispersion/GeoAnalysisController.php 1 patch
Indentation   +230 added lines, -230 removed lines patch added patch discarded remove patch
@@ -36,47 +36,47 @@  discard block
 block discarded – undo
36 36
  */
37 37
 class GeoAnalysisController extends MvcController
38 38
 {
39
-    /**
40
-     * GeoAnalysis Provider
41
-     * @var GeoAnalysisProvider $provider
42
-     */
43
-    protected $provider;
39
+	/**
40
+	 * GeoAnalysis Provider
41
+	 * @var GeoAnalysisProvider $provider
42
+	 */
43
+	protected $provider;
44 44
     
45
-    /**
46
-     * Constructor for GeoAnalysis controller
47
-     * @param AbstractModule $module
48
-     */
49
-    public function __construct(AbstractModule $module) {
50
-        parent::__construct($module);
45
+	/**
46
+	 * Constructor for GeoAnalysis controller
47
+	 * @param AbstractModule $module
48
+	 */
49
+	public function __construct(AbstractModule $module) {
50
+		parent::__construct($module);
51 51
         
52
-        $this->provider = $this->module->getProvider();
53
-    }    
52
+		$this->provider = $this->module->getProvider();
53
+	}    
54 54
     
55
-    /**
56
-     * Pages
57
-     */
55
+	/**
56
+	 * Pages
57
+	 */
58 58
         
59
-    /**
60
-     * GeoAnalysis@index
61
-     */
62
-    public function index() {
59
+	/**
60
+	 * GeoAnalysis@index
61
+	 */
62
+	public function index() {
63 63
         
64
-        $controller = new PageController();
65
-        $controller->setPageTitle(I18N::translate('Sosa Geographical dispersion'));
64
+		$controller = new PageController();
65
+		$controller->setPageTitle(I18N::translate('Sosa Geographical dispersion'));
66 66
         
67
-        $data = new ViewBag();
68
-        $data->set('title', $controller->getPageTitle());
69
-        $data->set('has_analysis', false);
67
+		$data = new ViewBag();
68
+		$data->set('title', $controller->getPageTitle());
69
+		$data->set('has_analysis', false);
70 70
         
71
-        $ga_id = Filter::getInteger('ga_id');        
71
+		$ga_id = Filter::getInteger('ga_id');        
72 72
         
73
-        if($ga_id && $ga = $this->provider->getGeoAnalysis($ga_id)) {
74
-            $data->set('has_analysis', true);
75
-            $data->set('geoanalysis', $ga);
73
+		if($ga_id && $ga = $this->provider->getGeoAnalysis($ga_id)) {
74
+			$data->set('has_analysis', true);
75
+			$data->set('geoanalysis', $ga);
76 76
             
77
-            $controller
78
-                ->addExternalJavascript(Constants::WT_RAPHAEL_JS_URL())
79
-                ->addInlineJavascript('
77
+			$controller
78
+				->addExternalJavascript(Constants::WT_RAPHAEL_JS_URL())
79
+				->addInlineJavascript('
80 80
                 jQuery("#geodispersion-tabs").tabs();
81 81
                 jQuery("#geodispersion-tabs").css("visibility", "visible");
82 82
                 
@@ -97,128 +97,128 @@  discard block
 block discarded – undo
97 97
 					"json"
98 98
 				);
99 99
             ');
100
-        }
100
+		}
101 101
         
102
-        ViewFactory::make('GeoAnalysis', $this, $controller, $data)->render();
103
-    }
102
+		ViewFactory::make('GeoAnalysis', $this, $controller, $data)->render();
103
+	}
104 104
     
105
-    /**
106
-     * GeoAnalysis@listAll
107
-     */
108
-    public function listAll() {
105
+	/**
106
+	 * GeoAnalysis@listAll
107
+	 */
108
+	public function listAll() {
109 109
         
110
-        $controller = new PageController();
111
-        $controller->setPageTitle(I18N::translate('Sosa Geographical dispersion'));
110
+		$controller = new PageController();
111
+		$controller->setPageTitle(I18N::translate('Sosa Geographical dispersion'));
112 112
         
113
-        $data = new ViewBag();
114
-        $data->set('title', $controller->getPageTitle());
115
-        $data->set('has_list', false);
113
+		$data = new ViewBag();
114
+		$data->set('title', $controller->getPageTitle());
115
+		$data->set('has_list', false);
116 116
         
117
-        $ga_list = $this->provider->getGeoAnalysisList();
118
-        if(count($ga_list) > 0 ) {
119
-             $data->set('has_list', true);
120
-             $data->set('geoanalysislist', $ga_list);
121
-        }
117
+		$ga_list = $this->provider->getGeoAnalysisList();
118
+		if(count($ga_list) > 0 ) {
119
+			 $data->set('has_list', true);
120
+			 $data->set('geoanalysislist', $ga_list);
121
+		}
122 122
         
123
-        ViewFactory::make('GeoAnalysisList', $this, $controller, $data)->render();        
124
-    }
123
+		ViewFactory::make('GeoAnalysisList', $this, $controller, $data)->render();        
124
+	}
125 125
     	
126 126
 	/**
127 127
 	 * GeoAnalysis@setStatus
128 128
 	 */
129
-    public function setStatus() {
130
-        $controller = new JsonController();
129
+	public function setStatus() {
130
+		$controller = new JsonController();
131 131
         
132
-        $ga_id = Filter::getInteger('ga_id');
133
-        $ga = $this->provider->getGeoAnalysis($ga_id, false);
132
+		$ga_id = Filter::getInteger('ga_id');
133
+		$ga = $this->provider->getGeoAnalysis($ga_id, false);
134 134
         
135
-        $controller->restrictAccess(
136
-            true // Filter::checkCsrf()   -- Cannot use CSRF on a GET request (modules can only work with GET requests)
137
-            &&  Auth::isManager(Globals::getTree()) 
138
-            && $ga !== null
139
-        );
135
+		$controller->restrictAccess(
136
+			true // Filter::checkCsrf()   -- Cannot use CSRF on a GET request (modules can only work with GET requests)
137
+			&&  Auth::isManager(Globals::getTree()) 
138
+			&& $ga !== null
139
+		);
140 140
         
141
-        $status = Filter::getBool('status');
142
-        $res = array('geoanalysis' => $ga->getId() , 'error' => null);
143
-        try{
144
-            $this->provider->setGeoAnalysisStatus($ga, $status);
145
-            $res['status'] = $status;
141
+		$status = Filter::getBool('status');
142
+		$res = array('geoanalysis' => $ga->getId() , 'error' => null);
143
+		try{
144
+			$this->provider->setGeoAnalysisStatus($ga, $status);
145
+			$res['status'] = $status;
146 146
 			Log::addConfigurationLog('Module '.$this->module->getName().' : Geo Analysis ID "'.$ga->getId().'" has been '. ($status ? 'enabled' : 'disabled') .'.');
147
-        }
148
-        catch (\Exception $ex) {
149
-            $res['error'] = $ex->getMessage();
147
+		}
148
+		catch (\Exception $ex) {
149
+			$res['error'] = $ex->getMessage();
150 150
 			Log::addErrorLog('Module '.$this->module->getName().' : Geo Analysis ID "'.$ga->getId().'" could not be ' . ($status ? 'enabled' : 'disabled') .'. Error: '. $ex->getMessage());
151
-        }
151
+		}
152 152
         
153
-        $controller->pageHeader();
154
-        if($res['error']) http_response_code(500);
153
+		$controller->pageHeader();
154
+		if($res['error']) http_response_code(500);
155 155
         
156
-        $controller->encode($res);
157
-    }
156
+		$controller->encode($res);
157
+	}
158 158
     
159 159
 	/**
160
-     * GeoAnalysis@delete
161
-     */
162
-    public function delete() {
163
-        $controller = new JsonController();
160
+	 * GeoAnalysis@delete
161
+	 */
162
+	public function delete() {
163
+		$controller = new JsonController();
164 164
     
165
-        $ga_id = Filter::getInteger('ga_id');
166
-        $ga = $this->provider->getGeoAnalysis($ga_id, false);
165
+		$ga_id = Filter::getInteger('ga_id');
166
+		$ga = $this->provider->getGeoAnalysis($ga_id, false);
167 167
     
168
-        $controller->restrictAccess(
169
-            true // Filter::checkCsrf()   -- Cannot use CSRF on a GET request (modules can only work with GET requests)
170
-            &&  Auth::isManager(Globals::getTree())
171
-            && $ga
172
-            );
168
+		$controller->restrictAccess(
169
+			true // Filter::checkCsrf()   -- Cannot use CSRF on a GET request (modules can only work with GET requests)
170
+			&&  Auth::isManager(Globals::getTree())
171
+			&& $ga
172
+			);
173 173
             
174
-        $res = array('geoanalysis' => $ga->getId() , 'error' => null);
175
-        try{
176
-            $this->provider->deleteGeoAnalysis($ga);
174
+		$res = array('geoanalysis' => $ga->getId() , 'error' => null);
175
+		try{
176
+			$this->provider->deleteGeoAnalysis($ga);
177 177
 			Log::addConfigurationLog('Module '.$this->module->getName().' : Geo Analysis ID "'.$ga->getId().'" has been deleted.');
178
-        }
179
-        catch (\Exception $ex) {
180
-            $res['error'] = $ex->getMessage();
178
+		}
179
+		catch (\Exception $ex) {
180
+			$res['error'] = $ex->getMessage();
181 181
 			Log::addErrorLog('Module '.$this->module->getName().' : Geo Analysis ID "'.$ga->getId().'" could not be deleted. Error: '. $ex->getMessage());
182
-        }
182
+		}
183 183
     
184
-        $controller->pageHeader();
185
-        if($res['error']) http_response_code(500);
184
+		$controller->pageHeader();
185
+		if($res['error']) http_response_code(500);
186 186
 
187
-        $controller->encode($res);
188
-    }
187
+		$controller->encode($res);
188
+	}
189 189
         	
190
-    /**
191
-     * GeoAnalysis@dataTabs
192
-     */
193
-    public function dataTabs() {
194
-        $wt_tree = Globals::getTree();
195
-        $controller = new JsonController();
190
+	/**
191
+	 * GeoAnalysis@dataTabs
192
+	 */
193
+	public function dataTabs() {
194
+		$wt_tree = Globals::getTree();
195
+		$controller = new JsonController();
196 196
         
197
-        $ga_id = Filter::getInteger('ga_id');
198
-        $ga = $this->provider->getGeoAnalysis($ga_id);
199
-        $sosa_provider = new SosaProvider($wt_tree, Auth::user());
197
+		$ga_id = Filter::getInteger('ga_id');
198
+		$ga = $this->provider->getGeoAnalysis($ga_id);
199
+		$sosa_provider = new SosaProvider($wt_tree, Auth::user());
200 200
         
201
-        $controller
202
-            ->restrictAccess($ga && $sosa_provider->isSetup())
203
-            ->pageHeader();
201
+		$controller
202
+			->restrictAccess($ga && $sosa_provider->isSetup())
203
+			->pageHeader();
204 204
         
205
-        $jsonArray = array();
205
+		$jsonArray = array();
206 206
         
207
-        list($placesDispGeneral, $placesDispGenerations) = $ga->getAnalysisResults($sosa_provider->getAllSosaWithGenerations());
207
+		list($placesDispGeneral, $placesDispGenerations) = $ga->getAnalysisResults($sosa_provider->getAllSosaWithGenerations());
208 208
         
209
-        $flags = array();
210
-        if($placesDispGeneral && $ga->getOptions() && $ga->getOptions()->isUsingFlags()) {
211
-            $mapProvider = new GoogleMapsProvider();            
212
-            foreach($placesDispGeneral['places'] as $place => $count) {
213
-                $flags[$place] = $mapProvider->getPlaceIcon(new Place($place, $wt_tree));
214
-            }
215
-        }
209
+		$flags = array();
210
+		if($placesDispGeneral && $ga->getOptions() && $ga->getOptions()->isUsingFlags()) {
211
+			$mapProvider = new GoogleMapsProvider();            
212
+			foreach($placesDispGeneral['places'] as $place => $count) {
213
+				$flags[$place] = $mapProvider->getPlaceIcon(new Place($place, $wt_tree));
214
+			}
215
+		}
216 216
         
217
-        $jsonArray['generaltab'] = $this->htmlPlacesAnalysisGeneralTab($ga, $placesDispGeneral, $flags);
218
-        $jsonArray['generationstab'] = $this->htmlPlacesAnalysisGenerationsTab($ga, $placesDispGenerations, $flags);
217
+		$jsonArray['generaltab'] = $this->htmlPlacesAnalysisGeneralTab($ga, $placesDispGeneral, $flags);
218
+		$jsonArray['generationstab'] = $this->htmlPlacesAnalysisGenerationsTab($ga, $placesDispGenerations, $flags);
219 219
 
220
-        $controller->encode($jsonArray);
221
-    }
220
+		$controller->encode($jsonArray);
221
+	}
222 222
     
223 223
 	/**
224 224
 	 * Returns HTML code for the GeoAnalysis general tab (can be either a map or a table).
@@ -228,71 +228,71 @@  discard block
 block discarded – undo
228 228
 	 * @param (null|array) $flags Array of flags
229 229
 	 * @return string HTML code for the general tab
230 230
 	 */
231
-    protected function htmlPlacesAnalysisGeneralTab(GeoAnalysis $ga, $placesGeneralResults, $flags= null) {        
232
-        if(!empty($placesGeneralResults)){
233
-            $data = new ViewBag();
231
+	protected function htmlPlacesAnalysisGeneralTab(GeoAnalysis $ga, $placesGeneralResults, $flags= null) {        
232
+		if(!empty($placesGeneralResults)){
233
+			$data = new ViewBag();
234 234
             
235
-            $nb_found = $placesGeneralResults['knownsum'];
236
-            $nb_other = 0;
237
-            if(isset($placesGeneralResults['other'])) $nb_other =$placesGeneralResults['other'];
238
-            $nb_unknown = $placesGeneralResults['unknown'];
235
+			$nb_found = $placesGeneralResults['knownsum'];
236
+			$nb_other = 0;
237
+			if(isset($placesGeneralResults['other'])) $nb_other =$placesGeneralResults['other'];
238
+			$nb_unknown = $placesGeneralResults['unknown'];
239 239
             
240
-            $data->set('stats_gen_nb_found', $nb_found);
241
-            $data->set('stats_gen_nb_other', $nb_other);
242
-            $data->set('stats_gen_nb_unknown', $nb_unknown);
240
+			$data->set('stats_gen_nb_found', $nb_found);
241
+			$data->set('stats_gen_nb_other', $nb_other);
242
+			$data->set('stats_gen_nb_unknown', $nb_unknown);
243 243
             
244
-            $data->set('use_flags', $ga->getOptions() && $ga->getOptions()->isUsingFlags());
244
+			$data->set('use_flags', $ga->getOptions() && $ga->getOptions()->isUsingFlags());
245 245
             
246
-            if($ga->hasMap()) {
247
-                $max = $placesGeneralResults['max'];
248
-                $map = $ga->getOptions()->getMap();
249
-                if($map->isLoaded()) {
250
-                    $results_by_subdivs = $map->getSubdivisions();
251
-                    $places_mappings = $map->getPlacesMappings();
252
-                    foreach ($placesGeneralResults['places'] as $location => $count) {
253
-                        $levelvalues = array_reverse(array_map('trim',explode(',', $location)));
254
-                        $level_map = $ga->getAnalysisLevel() - $ga->getOptions()->getMapLevel();
255
-                        if($level_map >= 0 && $level_map < count($levelvalues)) {
256
-                            $levelref = I18N::strtolower($levelvalues[0] . '@' . $levelvalues[$level_map]);
257
-                            if(!isset($results_by_subdivs[$levelref])) { $levelref = $levelvalues[0]; }
258
-                        }
259
-                        else {
260
-                            $levelref = $levelvalues[0];
261
-                        }
262
-                        $levelref = I18N::strtolower($levelref);
263
-                        if(isset($places_mappings[$levelref])) $levelref = $places_mappings[$levelref];
264
-                        if(isset($results_by_subdivs[$levelref])) {
265
-                            $count_subd = isset($results_by_subdivs[$levelref]['count']) ? $results_by_subdivs[$levelref]['count'] : 0;
266
-                            $count_subd  += $count;
267
-                            $results_by_subdivs[$levelref]['count'] = $count_subd;   
268
-                            $results_by_subdivs[$levelref]['transparency'] = Functions::safeDivision($count_subd, $max);
269
-                            if($ga->getOptions()->isUsingFlags() && $flags) {
270
-                                $results_by_subdivs[$levelref]['place'] = new Place($location, Globals::getTree());
271
-                                $results_by_subdivs[$levelref]['flag'] = $flags[$location];
272
-                            }
273
-                        }
274
-                    }             
246
+			if($ga->hasMap()) {
247
+				$max = $placesGeneralResults['max'];
248
+				$map = $ga->getOptions()->getMap();
249
+				if($map->isLoaded()) {
250
+					$results_by_subdivs = $map->getSubdivisions();
251
+					$places_mappings = $map->getPlacesMappings();
252
+					foreach ($placesGeneralResults['places'] as $location => $count) {
253
+						$levelvalues = array_reverse(array_map('trim',explode(',', $location)));
254
+						$level_map = $ga->getAnalysisLevel() - $ga->getOptions()->getMapLevel();
255
+						if($level_map >= 0 && $level_map < count($levelvalues)) {
256
+							$levelref = I18N::strtolower($levelvalues[0] . '@' . $levelvalues[$level_map]);
257
+							if(!isset($results_by_subdivs[$levelref])) { $levelref = $levelvalues[0]; }
258
+						}
259
+						else {
260
+							$levelref = $levelvalues[0];
261
+						}
262
+						$levelref = I18N::strtolower($levelref);
263
+						if(isset($places_mappings[$levelref])) $levelref = $places_mappings[$levelref];
264
+						if(isset($results_by_subdivs[$levelref])) {
265
+							$count_subd = isset($results_by_subdivs[$levelref]['count']) ? $results_by_subdivs[$levelref]['count'] : 0;
266
+							$count_subd  += $count;
267
+							$results_by_subdivs[$levelref]['count'] = $count_subd;   
268
+							$results_by_subdivs[$levelref]['transparency'] = Functions::safeDivision($count_subd, $max);
269
+							if($ga->getOptions()->isUsingFlags() && $flags) {
270
+								$results_by_subdivs[$levelref]['place'] = new Place($location, Globals::getTree());
271
+								$results_by_subdivs[$levelref]['flag'] = $flags[$location];
272
+							}
273
+						}
274
+					}             
275 275
                 
276
-                    $data->set('map', $map);
277
-                    $data->set('results_by_subdivisions', $results_by_subdivs);
278
-                }
276
+					$data->set('map', $map);
277
+					$data->set('results_by_subdivisions', $results_by_subdivs);
278
+				}
279 279
                 
280
-                $html = ViewFactory::make('GeoAnalysisTabGeneralMap', $this, new BaseController(), $data)->getHtmlPartial();
281
-            }
282
-            else {
283
-                $results = $placesGeneralResults['places'];
284
-                arsort($results);
285
-                $data->set('results', $results);
286
-                $data->set('analysis_level', $ga->getAnalysisLevel());
280
+				$html = ViewFactory::make('GeoAnalysisTabGeneralMap', $this, new BaseController(), $data)->getHtmlPartial();
281
+			}
282
+			else {
283
+				$results = $placesGeneralResults['places'];
284
+				arsort($results);
285
+				$data->set('results', $results);
286
+				$data->set('analysis_level', $ga->getAnalysisLevel());
287 287
                 
288
-                $html = ViewFactory::make('GeoAnalysisTabGeneralTable', $this, new BaseController(), $data)->getHtmlPartial();
289
-            }
290
-        }
291
-        else {
292
-            $html = '<p class="warning">' . I18N::translate('No data is available for the general analysis.') . '</p>';
293
-        }
294
-        return $html;
295
-    }
288
+				$html = ViewFactory::make('GeoAnalysisTabGeneralTable', $this, new BaseController(), $data)->getHtmlPartial();
289
+			}
290
+		}
291
+		else {
292
+			$html = '<p class="warning">' . I18N::translate('No data is available for the general analysis.') . '</p>';
293
+		}
294
+		return $html;
295
+	}
296 296
     
297 297
 	/**
298 298
 	 * Returns HTML code for the GeoAnalysis generations tab.
@@ -302,66 +302,66 @@  discard block
 block discarded – undo
302 302
 	 * @param (null|array) $flags Array of flags
303 303
 	 * @return string HTML code for the generations tab
304 304
 	 */
305
-    protected function htmlPlacesAnalysisGenerationsTab(GeoAnalysis $ga, $placesGenerationsResults, $flags = null) {        
306
-        if(!empty($placesGenerationsResults) && $ga->getOptions()){
307
-            $data = new ViewBag();
305
+	protected function htmlPlacesAnalysisGenerationsTab(GeoAnalysis $ga, $placesGenerationsResults, $flags = null) {        
306
+		if(!empty($placesGenerationsResults) && $ga->getOptions()){
307
+			$data = new ViewBag();
308 308
             
309
-            ksort($placesGenerationsResults);
309
+			ksort($placesGenerationsResults);
310 310
             
311
-            $detailslevel = $ga->getOptions()->getMaxDetailsInGen();
312
-            $data->set('max_details_gen', $detailslevel);    
313
-            $data->set('use_flags', $ga->getOptions()->isUsingFlags());
314
-            $data->set('analysis_level', $ga->getAnalysisLevel());
315
-            $display_all_places = !is_null($detailslevel) && $detailslevel == 0;
316
-            $data->set('display_all_places', $display_all_places);
311
+			$detailslevel = $ga->getOptions()->getMaxDetailsInGen();
312
+			$data->set('max_details_gen', $detailslevel);    
313
+			$data->set('use_flags', $ga->getOptions()->isUsingFlags());
314
+			$data->set('analysis_level', $ga->getAnalysisLevel());
315
+			$display_all_places = !is_null($detailslevel) && $detailslevel == 0;
316
+			$data->set('display_all_places', $display_all_places);
317 317
             
318
-            $results_by_gen = array();
319
-            foreach($placesGenerationsResults as $gen => $genData){
320
-                $sum = 0;
321
-                $other = 0;
322
-                $unknown = 0;
323
-                if(isset($genData['sum'])) $sum = $genData['sum'];
324
-                if(isset($genData['other'])) $other = $genData['other'];
325
-                if(isset($genData['unknown'])) $unknown = $genData['unknown'];
318
+			$results_by_gen = array();
319
+			foreach($placesGenerationsResults as $gen => $genData){
320
+				$sum = 0;
321
+				$other = 0;
322
+				$unknown = 0;
323
+				if(isset($genData['sum'])) $sum = $genData['sum'];
324
+				if(isset($genData['other'])) $other = $genData['other'];
325
+				if(isset($genData['unknown'])) $unknown = $genData['unknown'];
326 326
                 
327
-                if($sum > 0) {                
328
-                    $results_by_gen[$gen]['sum'] = $sum;
329
-                    $results_by_gen[$gen]['other'] = $other;
330
-                    $results_by_gen[$gen]['unknown'] = $unknown;
331
-                    $results_by_gen[$gen]['places'] = array();                    
332
-                    arsort($genData['places']);
327
+				if($sum > 0) {                
328
+					$results_by_gen[$gen]['sum'] = $sum;
329
+					$results_by_gen[$gen]['other'] = $other;
330
+					$results_by_gen[$gen]['unknown'] = $unknown;
331
+					$results_by_gen[$gen]['places'] = array();                    
332
+					arsort($genData['places']);
333 333
                     
334
-                    if($display_all_places){
335
-                        foreach($genData['places'] as $placename=> $count){
336
-                            $results_by_gen[$gen]['places'][$placename]['count'] = $count;
334
+					if($display_all_places){
335
+						foreach($genData['places'] as $placename=> $count){
336
+							$results_by_gen[$gen]['places'][$placename]['count'] = $count;
337 337
                             
338
-                            if($ga->getOptions() && $ga->getOptions()->isUsingFlags() && ($flag = $flags[$placename]) != ''){
339
-                                $results_by_gen[$gen]['places'][$placename]['place'] = new Place($placename, Globals::getTree());
340
-                                $results_by_gen[$gen]['places'][$placename]['flag'] = $flag;
341
-                            }
342
-                        }
343
-                    }
344
-                    else {
345
-                        $tmp = $genData['places'];
346
-                        if($other > 0) {
347
-                            $tmp = array_slice($tmp, 0, 5, true);
348
-                            $tmp['other'] = $other;
349
-                            arsort($tmp);  
350
-                        }                      
351
-                        $results_by_gen[$gen]['places'] = array_slice($tmp, 0, 5, true);                        
352
-                    }
353
-                }
354
-            }
338
+							if($ga->getOptions() && $ga->getOptions()->isUsingFlags() && ($flag = $flags[$placename]) != ''){
339
+								$results_by_gen[$gen]['places'][$placename]['place'] = new Place($placename, Globals::getTree());
340
+								$results_by_gen[$gen]['places'][$placename]['flag'] = $flag;
341
+							}
342
+						}
343
+					}
344
+					else {
345
+						$tmp = $genData['places'];
346
+						if($other > 0) {
347
+							$tmp = array_slice($tmp, 0, 5, true);
348
+							$tmp['other'] = $other;
349
+							arsort($tmp);  
350
+						}                      
351
+						$results_by_gen[$gen]['places'] = array_slice($tmp, 0, 5, true);                        
352
+					}
353
+				}
354
+			}
355 355
             
356
-            $data->set('results_by_generations', $results_by_gen);
356
+			$data->set('results_by_generations', $results_by_gen);
357 357
             
358
-            $html = ViewFactory::make('GeoAnalysisTabGenerations', $this, new BaseController(), $data)->getHtmlPartial();
358
+			$html = ViewFactory::make('GeoAnalysisTabGenerations', $this, new BaseController(), $data)->getHtmlPartial();
359 359
             
360
-        }
361
-        else {
362
-            $html = '<p class="warning">' . I18N::translate('No data is available for the generations analysis.') . '</p>';
363
-        }
364
-        return $html;
365
-    }
360
+		}
361
+		else {
362
+			$html = '<p class="warning">' . I18N::translate('No data is available for the generations analysis.') . '</p>';
363
+		}
364
+		return $html;
365
+	}
366 366
         
367 367
 }
368 368
\ No newline at end of file
Please login to merge, or discard this patch.
src/Webtrees/Module/CertificatesModule.php 1 patch
Indentation   +176 added lines, -176 removed lines patch added patch discarded remove patch
@@ -31,140 +31,140 @@  discard block
 block discarded – undo
31 31
  * Certificates Module.
32 32
  */
33 33
 class CertificatesModule 
34
-    extends AbstractModule 
35
-    implements HookSubscriberInterface, ModuleConfigInterface, ModuleMenuItemInterface, FactSourceTextExtenderInterface, CustomSimpleTagManagerInterface
34
+	extends AbstractModule 
35
+	implements HookSubscriberInterface, ModuleConfigInterface, ModuleMenuItemInterface, FactSourceTextExtenderInterface, CustomSimpleTagManagerInterface
36 36
 {
37
-    /** @var string For custom modules - link for support, upgrades, etc. */
38
-    const CUSTOM_WEBSITE = 'https://github.com/jon48/webtrees-lib';
37
+	/** @var string For custom modules - link for support, upgrades, etc. */
38
+	const CUSTOM_WEBSITE = 'https://github.com/jon48/webtrees-lib';
39 39
         
40
-    /**
41
-     * Provider for Certificates
42
-     * @var CertificateProviderInterface $provider
43
-     */
44
-    protected $provider;
40
+	/**
41
+	 * Provider for Certificates
42
+	 * @var CertificateProviderInterface $provider
43
+	 */
44
+	protected $provider;
45 45
     
46
-    /**
47
-     * {@inhericDoc}
48
-     */
49
-    public function getTitle() {
50
-        return /* I18N: Name of the “Certificates” module */ I18N::translate('Certificates');
51
-    }
46
+	/**
47
+	 * {@inhericDoc}
48
+	 */
49
+	public function getTitle() {
50
+		return /* I18N: Name of the “Certificates” module */ I18N::translate('Certificates');
51
+	}
52 52
     
53
-    /**
54
-     * {@inhericDoc}
55
-     */
56
-    public function getDescription() {
57
-        return /* I18N: Description of the “Certificates” module */ I18N::translate('Display and edition of certificates linked to sources.');
58
-    }
53
+	/**
54
+	 * {@inhericDoc}
55
+	 */
56
+	public function getDescription() {
57
+		return /* I18N: Description of the “Certificates” module */ I18N::translate('Display and edition of certificates linked to sources.');
58
+	}
59 59
     
60
-    /**
61
-     * {@inhericDoc}
62
-     */
63
-    public function modAction($mod_action) {
64
-        \MyArtJaub\Webtrees\Mvc\Dispatcher::getInstance()->handle($this, $mod_action);
65
-    }
60
+	/**
61
+	 * {@inhericDoc}
62
+	 */
63
+	public function modAction($mod_action) {
64
+		\MyArtJaub\Webtrees\Mvc\Dispatcher::getInstance()->handle($this, $mod_action);
65
+	}
66 66
     
67
-    /**
68
-     * {@inhericDoc}
69
-     * @see \Fisharebest\Webtrees\Module\ModuleConfigInterface::getConfigLink()
70
-     */
71
-    public function getConfigLink() {
72
-        return 'module.php?mod=' . $this->getName() . '&amp;mod_action=AdminConfig';
73
-    }
67
+	/**
68
+	 * {@inhericDoc}
69
+	 * @see \Fisharebest\Webtrees\Module\ModuleConfigInterface::getConfigLink()
70
+	 */
71
+	public function getConfigLink() {
72
+		return 'module.php?mod=' . $this->getName() . '&amp;mod_action=AdminConfig';
73
+	}
74 74
     
75
-    /**
76
-     * {@inhericDoc}
77
-     * @see \MyArtJaub\Webtrees\Hook\HookSubscriberInterface::getSubscribedHooks()
78
-     */
79
-    public function getSubscribedHooks() {
80
-        return array(
81
-            'hFactSourcePrepend' => 50,
82
-            'hGetExpectedTags' => 50,
83
-            'hHtmlSimpleTagDisplay#_ACT' => 50,
84
-            'hHtmlSimpleTagEditor#_ACT'	=> 50,
85
-            'hAddSimpleTag#SOUR'	=> 50,
86
-            'hHasHelpTextTag#_ACT'	=> 50,
87
-            'hGetHelpTextTag#_ACT'	=> 50
88
-        );
89
-    }
75
+	/**
76
+	 * {@inhericDoc}
77
+	 * @see \MyArtJaub\Webtrees\Hook\HookSubscriberInterface::getSubscribedHooks()
78
+	 */
79
+	public function getSubscribedHooks() {
80
+		return array(
81
+			'hFactSourcePrepend' => 50,
82
+			'hGetExpectedTags' => 50,
83
+			'hHtmlSimpleTagDisplay#_ACT' => 50,
84
+			'hHtmlSimpleTagEditor#_ACT'	=> 50,
85
+			'hAddSimpleTag#SOUR'	=> 50,
86
+			'hHasHelpTextTag#_ACT'	=> 50,
87
+			'hGetHelpTextTag#_ACT'	=> 50
88
+		);
89
+	}
90 90
     
91
-    /**
92
-     * {@inhericDoc}
93
-     * @see \MyArtJaub\Webtrees\Module\ModuleMenuItemInterface::getMenu()
94
-     */
95
-    public function getMenu(Tree $tree, $reference = null) {
96
-        $tree_url = $tree ? $tree->getNameUrl() : '';
97
-        return new Menu($this->getTitle(), 'module.php?mod=' . $this->getName() . '&mod_action=Certificate@listAll&ged=' . $tree_url, 'menu-maj-list-certificate', array('rel' => 'nofollow'));
98
-    }
91
+	/**
92
+	 * {@inhericDoc}
93
+	 * @see \MyArtJaub\Webtrees\Module\ModuleMenuItemInterface::getMenu()
94
+	 */
95
+	public function getMenu(Tree $tree, $reference = null) {
96
+		$tree_url = $tree ? $tree->getNameUrl() : '';
97
+		return new Menu($this->getTitle(), 'module.php?mod=' . $this->getName() . '&mod_action=Certificate@listAll&ged=' . $tree_url, 'menu-maj-list-certificate', array('rel' => 'nofollow'));
98
+	}
99 99
     
100
-    /**
101
-     * {@inhericDoc}
102
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\FactSourceTextExtenderInterface::hFactSourcePrepend()
103
-     */
104
-    public function hFactSourcePrepend($srec) {
105
-        $wt_tree = Globals::getTree();
106
-        $html='';
107
-        $sid=null;
100
+	/**
101
+	 * {@inhericDoc}
102
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\FactSourceTextExtenderInterface::hFactSourcePrepend()
103
+	 */
104
+	public function hFactSourcePrepend($srec) {
105
+		$wt_tree = Globals::getTree();
106
+		$html='';
107
+		$sid=null;
108 108
         
109
-        if($this->getSetting('MAJ_SHOW_CERT', Auth::PRIV_HIDE) >= Auth::accessLevel($wt_tree)){
110
-            if (!$srec || strlen($srec) == 0) return $html;
109
+		if($this->getSetting('MAJ_SHOW_CERT', Auth::PRIV_HIDE) >= Auth::accessLevel($wt_tree)){
110
+			if (!$srec || strlen($srec) == 0) return $html;
111 111
             	
112
-            $certificate = null;
113
-            $subrecords = explode("\n", $srec);
114
-            $levelSOUR = substr($subrecords[0], 0, 1);
115
-            $match = null;
116
-            if (preg_match('~^'.$levelSOUR.' SOUR @('.WT_REGEX_XREF.')@$~', $subrecords[0], $match)) {
117
-                $sid=$match[1];
118
-            };
119
-            $nb_subrecords = count($subrecords);
120
-            for ($i=0; $i < $nb_subrecords; $i++) {
121
-                $subrecords[$i] = trim($subrecords[$i]);
122
-                $tag = substr($subrecords[$i], 2, 4);
123
-                $text = substr($subrecords[$i], 7);
124
-                if($tag == '_ACT') $certificate= new Certificate($text, $wt_tree, $this->getProvider());
125
-            }
112
+			$certificate = null;
113
+			$subrecords = explode("\n", $srec);
114
+			$levelSOUR = substr($subrecords[0], 0, 1);
115
+			$match = null;
116
+			if (preg_match('~^'.$levelSOUR.' SOUR @('.WT_REGEX_XREF.')@$~', $subrecords[0], $match)) {
117
+				$sid=$match[1];
118
+			};
119
+			$nb_subrecords = count($subrecords);
120
+			for ($i=0; $i < $nb_subrecords; $i++) {
121
+				$subrecords[$i] = trim($subrecords[$i]);
122
+				$tag = substr($subrecords[$i], 2, 4);
123
+				$text = substr($subrecords[$i], 7);
124
+				if($tag == '_ACT') $certificate= new Certificate($text, $wt_tree, $this->getProvider());
125
+			}
126 126
             	
127
-            if($certificate && $certificate->canShow())
128
-                $html = $this->getDisplay_ACT($certificate, $sid);
127
+			if($certificate && $certificate->canShow())
128
+				$html = $this->getDisplay_ACT($certificate, $sid);
129 129
                 	
130
-        }
131
-        return $html;
132
-    }
130
+		}
131
+		return $html;
132
+	}
133 133
    
134
-    /**
135
-     * {@inhericDoc}
136
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\FactSourceTextExtenderInterface::hFactSourceAppend()
137
-     */
138
-    public function hFactSourceAppend($srec) { }
134
+	/**
135
+	 * {@inhericDoc}
136
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\FactSourceTextExtenderInterface::hFactSourceAppend()
137
+	 */
138
+	public function hFactSourceAppend($srec) { }
139 139
     
140
-    /**
141
-     * {@inhericDoc}
142
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hGetExpectedTags()
143
-     */
144
-    public function hGetExpectedTags() {
145
-        return array('SOUR' => '_ACT');
146
-    }
140
+	/**
141
+	 * {@inhericDoc}
142
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hGetExpectedTags()
143
+	 */
144
+	public function hGetExpectedTags() {
145
+		return array('SOUR' => '_ACT');
146
+	}
147 147
     
148
-    /**
149
-     * {@inhericDoc}
150
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hHtmlSimpleTagDisplay()
151
-     */
152
-    public function hHtmlSimpleTagDisplay($tag, $value, $context = null, $contextid = null) {
153
-        $html = '';
154
-        switch($tag){
155
-            case '_ACT':
156
-                if($context == 'SOUR') $html = $this->getDisplay_ACT($value, $contextid);
157
-                break;
158
-        }
159
-        return $html;
160
-    }
148
+	/**
149
+	 * {@inhericDoc}
150
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hHtmlSimpleTagDisplay()
151
+	 */
152
+	public function hHtmlSimpleTagDisplay($tag, $value, $context = null, $contextid = null) {
153
+		$html = '';
154
+		switch($tag){
155
+			case '_ACT':
156
+				if($context == 'SOUR') $html = $this->getDisplay_ACT($value, $contextid);
157
+				break;
158
+		}
159
+		return $html;
160
+	}
161 161
     
162
-    /**
163
-     * {@inhericDoc}
164
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hHtmlSimpleTagEditor()
165
-     */
166
-    public function hHtmlSimpleTagEditor($tag, $value = null, $element_id = '', $element_name = '', $context = null, $contextid = null) {        
167
-        $html = '';
162
+	/**
163
+	 * {@inhericDoc}
164
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hHtmlSimpleTagEditor()
165
+	 */
166
+	public function hHtmlSimpleTagEditor($tag, $value = null, $element_id = '', $element_name = '', $context = null, $contextid = null) {        
167
+		$html = '';
168 168
 		
169 169
 		switch($tag){
170 170
 			case '_ACT':
@@ -192,75 +192,75 @@  discard block
 block discarded – undo
192 192
 		}
193 193
 		
194 194
 		return $html;
195
-    }
195
+	}
196 196
     
197
-    /**
198
-     * {@inhericDoc}
199
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hAddSimpleTag()
200
-     */
201
-    public function hAddSimpleTag($context, $level) {
202
-        switch($context){
203
-            case 'SOUR':
204
-                FunctionsEdit::addSimpleTag($level.' _ACT');
205
-                break;
206
-        }
207
-    }
197
+	/**
198
+	 * {@inhericDoc}
199
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hAddSimpleTag()
200
+	 */
201
+	public function hAddSimpleTag($context, $level) {
202
+		switch($context){
203
+			case 'SOUR':
204
+				FunctionsEdit::addSimpleTag($level.' _ACT');
205
+				break;
206
+		}
207
+	}
208 208
     
209
-    /**
210
-     * {@inhericDoc}
211
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hHasHelpTextTag()
212
-     */
213
-    public function hHasHelpTextTag($tag) {
214
-        switch($tag){
209
+	/**
210
+	 * {@inhericDoc}
211
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hHasHelpTextTag()
212
+	 */
213
+	public function hHasHelpTextTag($tag) {
214
+		switch($tag){
215 215
 			case '_ACT':
216 216
 				return true;
217 217
 		}
218 218
 		return false;
219
-    }
219
+	}
220 220
     
221
-    /**
222
-     * {@inhericDoc}
223
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hGetHelpTextTag()
224
-     */
225
-    public function hGetHelpTextTag($tag) {
226
-        switch($tag){
227
-            case '_ACT':
228
-                return array(
229
-                I18N::translate('Certificate'),
230
-                '<p>'.I18N::translate('Path to a certificate linked to a source reference.').'</p>');
231
-            default:
232
-                return null;
233
-        }
234
-    }
221
+	/**
222
+	 * {@inhericDoc}
223
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\CustomSimpleTagManagerInterface::hGetHelpTextTag()
224
+	 */
225
+	public function hGetHelpTextTag($tag) {
226
+		switch($tag){
227
+			case '_ACT':
228
+				return array(
229
+				I18N::translate('Certificate'),
230
+				'<p>'.I18N::translate('Path to a certificate linked to a source reference.').'</p>');
231
+			default:
232
+				return null;
233
+		}
234
+	}
235 235
 
236
-    /**
237
-     * Returns the default Certificate File Provider, as configured in the module
238
-     *
239
-     * @return \MyArtJaub\Webtrees\Module\Certificates\Model\CertificateProviderInterface
240
-     */
241
-    public function getProvider() {
242
-        if(!$this->provider) {
243
-            $root_path = $this->getSetting('MAJ_CERT_ROOTDIR', 'certificates/');
244
-            $this->provider = new CertificateFileProvider($root_path, Globals::getTree());
245
-        }
246
-        return $this->provider;
247
-    }
236
+	/**
237
+	 * Returns the default Certificate File Provider, as configured in the module
238
+	 *
239
+	 * @return \MyArtJaub\Webtrees\Module\Certificates\Model\CertificateProviderInterface
240
+	 */
241
+	public function getProvider() {
242
+		if(!$this->provider) {
243
+			$root_path = $this->getSetting('MAJ_CERT_ROOTDIR', 'certificates/');
244
+			$this->provider = new CertificateFileProvider($root_path, Globals::getTree());
245
+		}
246
+		return $this->provider;
247
+	}
248 248
     
249 249
     
250
-    /**
251
-     * Return the HTML code for custom simple tag _ACT
252
-     *
253
-     * @param Certificate $certificatePath Certificate (as per the GEDCOM)
254
-     * @param string|null $sid Linked Source ID, if it exists
255
-     */
256
-    protected function getDisplay_ACT(Certificate $certificate, $sid = null){    
257
-        $html = '';
258
-        if($certificate){
259
-            $certificate->setSource($sid);
260
-            $html = $certificate->displayImage('icon');
261
-        }
262
-        return $html;
263
-    }
250
+	/**
251
+	 * Return the HTML code for custom simple tag _ACT
252
+	 *
253
+	 * @param Certificate $certificatePath Certificate (as per the GEDCOM)
254
+	 * @param string|null $sid Linked Source ID, if it exists
255
+	 */
256
+	protected function getDisplay_ACT(Certificate $certificate, $sid = null){    
257
+		$html = '';
258
+		if($certificate){
259
+			$certificate->setSource($sid);
260
+			$html = $certificate->displayImage('icon');
261
+		}
262
+		return $html;
263
+	}
264 264
 
265 265
 
266 266
 }
Please login to merge, or discard this patch.
src/Webtrees/Module/PatronymicLineage/LineageController.php 1 patch
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -27,162 +27,162 @@
 block discarded – undo
27 27
 class LineageController extends MvcController
28 28
 {   
29 29
     
30
-    /**
31
-     * Generate the patronymic lineage for this surname
32
-     * @var string $surname Reference surname
33
-     */
34
-    private $surname;   
30
+	/**
31
+	 * Generate the patronymic lineage for this surname
32
+	 * @var string $surname Reference surname
33
+	 */
34
+	private $surname;   
35 35
     
36
-    /**
37
-     * Initial letter
38
-     * @var string $alpha
39
-     */
40
-    private $alpha;
36
+	/**
37
+	 * Initial letter
38
+	 * @var string $alpha
39
+	 */
40
+	private $alpha;
41 41
     
42
-    /**
43
-     * Show all names (values: yes|no)
44
-     * @var bool $show
45
-     */
46
-    private $show_all;
42
+	/**
43
+	 * Show all names (values: yes|no)
44
+	 * @var bool $show
45
+	 */
46
+	private $show_all;
47 47
     
48
-    /**
49
-     * Page to display (values: surn|lineage)
50
-     * @var unknown $show
51
-     */
52
-    private $show;
48
+	/**
49
+	 * Page to display (values: surn|lineage)
50
+	 * @var unknown $show
51
+	 */
52
+	private $show;
53 53
     
54
-    /**
55
-     * Page title
56
-     * @var string $legend
57
-     */
58
-    private $legend;
54
+	/**
55
+	 * Page title
56
+	 * @var string $legend
57
+	 */
58
+	private $legend;
59 59
     
60
-    /**
61
-     * {@inheritDoc}
62
-     * @see \MyArtJaub\Webtrees\Mvc\Controller\MvcController::__construct(AbstractModule $module)
63
-     */
64
-    public function __construct(AbstractModule $module) {        
65
-        parent::__construct($module);
60
+	/**
61
+	 * {@inheritDoc}
62
+	 * @see \MyArtJaub\Webtrees\Mvc\Controller\MvcController::__construct(AbstractModule $module)
63
+	 */
64
+	public function __construct(AbstractModule $module) {        
65
+		parent::__construct($module);
66 66
         
67
-        $this->surname     = Filter::get('surname');
68
-        $this->alpha       = Filter::get('alpha'); // All surnames beginning with this letter where "@"=unknown and ","=none
69
-        $this->show_all    = Filter::get('show_all', 'no|yes', 'no'); // All indis
70
-        // Make sure selections are consistent.
71
-        // i.e. can’t specify show_all and surname at the same time.
72
-        if ($this->show_all === 'yes') {
73
-            $this->alpha   = '';
74
-            $this->surname = '';
75
-            $this->legend  = I18N::translate('All');
76
-            $this->show    = Filter::get('show', 'surn|lineage', 'surn');
77
-        } elseif ($this->surname) {
78
-            $this->alpha    = QueryName::initialLetter($this->surname); // so we can highlight the initial letter
79
-            $this->show_all = 'no';
80
-            if ($this->surname === '@N.N.') {
81
-                $this->legend = I18N::translateContext('Unknown surname', '…');
82
-            } else {
83
-                $this->legend = Filter::escapeHtml($this->surname);
84
-                // The surname parameter is a root/canonical form.
85
-                // Display it as the actual surname
86
-                foreach (QueryName::surnames(Globals::getTree(), $this->surname, $this->alpha, false, false) as $details) {
87
-                    $this->legend = implode('/', array_keys($details));
88
-                }                
89
-            }
90
-            $this->show = 'lineage'; // SURN list makes no sense here
91
-        } elseif ($this->alpha === '@') {
92
-            $this->show_all = 'no';
93
-            $this->legend   = I18N::translateContext('Unknown surname', '…');
94
-            $this->show     = 'lineage'; // SURN list makes no sense here
95
-        } elseif ($this->alpha === ',') {
96
-            $this->show_all = 'no';
97
-            $this->legend   = I18N::translate('None');
98
-            $this->show     = 'lineage'; // SURN list makes no sense here
99
-        } elseif ($this->alpha) {
100
-            $this->show_all = 'no';
101
-            $this->legend   = Filter::escapeHtml($this->alpha) . '…';
102
-            $this->show     = Filter::get('show', 'surn|lineage', 'surn');
103
-        } else {
104
-            $this->show_all = 'no';
105
-            $this->legend   = '…';
106
-            $this->show     = 'none'; // Don't show lists until something is chosen
107
-        }
108
-        $this->legend = '<span dir="auto">' . $this->legend . '</span>';
67
+		$this->surname     = Filter::get('surname');
68
+		$this->alpha       = Filter::get('alpha'); // All surnames beginning with this letter where "@"=unknown and ","=none
69
+		$this->show_all    = Filter::get('show_all', 'no|yes', 'no'); // All indis
70
+		// Make sure selections are consistent.
71
+		// i.e. can’t specify show_all and surname at the same time.
72
+		if ($this->show_all === 'yes') {
73
+			$this->alpha   = '';
74
+			$this->surname = '';
75
+			$this->legend  = I18N::translate('All');
76
+			$this->show    = Filter::get('show', 'surn|lineage', 'surn');
77
+		} elseif ($this->surname) {
78
+			$this->alpha    = QueryName::initialLetter($this->surname); // so we can highlight the initial letter
79
+			$this->show_all = 'no';
80
+			if ($this->surname === '@N.N.') {
81
+				$this->legend = I18N::translateContext('Unknown surname', '…');
82
+			} else {
83
+				$this->legend = Filter::escapeHtml($this->surname);
84
+				// The surname parameter is a root/canonical form.
85
+				// Display it as the actual surname
86
+				foreach (QueryName::surnames(Globals::getTree(), $this->surname, $this->alpha, false, false) as $details) {
87
+					$this->legend = implode('/', array_keys($details));
88
+				}                
89
+			}
90
+			$this->show = 'lineage'; // SURN list makes no sense here
91
+		} elseif ($this->alpha === '@') {
92
+			$this->show_all = 'no';
93
+			$this->legend   = I18N::translateContext('Unknown surname', '…');
94
+			$this->show     = 'lineage'; // SURN list makes no sense here
95
+		} elseif ($this->alpha === ',') {
96
+			$this->show_all = 'no';
97
+			$this->legend   = I18N::translate('None');
98
+			$this->show     = 'lineage'; // SURN list makes no sense here
99
+		} elseif ($this->alpha) {
100
+			$this->show_all = 'no';
101
+			$this->legend   = Filter::escapeHtml($this->alpha) . '…';
102
+			$this->show     = Filter::get('show', 'surn|lineage', 'surn');
103
+		} else {
104
+			$this->show_all = 'no';
105
+			$this->legend   = '…';
106
+			$this->show     = 'none'; // Don't show lists until something is chosen
107
+		}
108
+		$this->legend = '<span dir="auto">' . $this->legend . '</span>';
109 109
           
110
-    }
110
+	}
111 111
     
112
-    /**
113
-     * Indicates whether the list of surname should be displayed
114
-     * @return bool
115
-     */
116
-    protected function isShowingSurnames() {
117
-        return $this->show === 'surn';
118
-    }
112
+	/**
113
+	 * Indicates whether the list of surname should be displayed
114
+	 * @return bool
115
+	 */
116
+	protected function isShowingSurnames() {
117
+		return $this->show === 'surn';
118
+	}
119 119
     
120
-    /**
121
-     * Indicates whether the lineages should be displayed
122
-     * @return bool
123
-     */
124
-    protected function isShowingLineages() {
125
-        return $this->show === 'lineage';
126
-    } 
120
+	/**
121
+	 * Indicates whether the lineages should be displayed
122
+	 * @return bool
123
+	 */
124
+	protected function isShowingLineages() {
125
+		return $this->show === 'lineage';
126
+	} 
127 127
     
128
-    /**
129
-     * Get list of surnames, starting with the specified initial
130
-     * @return array
131
-     */
132
-    protected function getSurnamesList() {        
133
-        return QueryName::surnames(Globals::getTree(), $this->surname, $this->alpha, false, false);
134
-    }
128
+	/**
129
+	 * Get list of surnames, starting with the specified initial
130
+	 * @return array
131
+	 */
132
+	protected function getSurnamesList() {        
133
+		return QueryName::surnames(Globals::getTree(), $this->surname, $this->alpha, false, false);
134
+	}
135 135
     
136
-    /**
137
-     * Get the lineages for the controller's specified surname
138
-     */
139
-    protected function getLineages() {		
140
-        $builder = new LineageBuilder($this->surname, Globals::getTree());
136
+	/**
137
+	 * Get the lineages for the controller's specified surname
138
+	 */
139
+	protected function getLineages() {		
140
+		$builder = new LineageBuilder($this->surname, Globals::getTree());
141 141
 		$lineages = $builder->buildLineages();
142 142
 		
143
-    	return $lineages;
144
-    }    
143
+		return $lineages;
144
+	}    
145 145
     
146
-    /**
147
-     * Pages
148
-     */
146
+	/**
147
+	 * Pages
148
+	 */
149 149
     
150
-    /**
151
-     * Lineage@index
152
-     */
153
-    public function index() {
154
-        $controller = new PageController();
155
-        $controller->setPageTitle(
156
-            $this->show === 'none' ?
157
-            I18N::translate('Patronymic Lineages') :
158
-            I18N::translate('Patronymic Lineages') . ' : ' . $this->legend
159
-        );
150
+	/**
151
+	 * Lineage@index
152
+	 */
153
+	public function index() {
154
+		$controller = new PageController();
155
+		$controller->setPageTitle(
156
+			$this->show === 'none' ?
157
+			I18N::translate('Patronymic Lineages') :
158
+			I18N::translate('Patronymic Lineages') . ' : ' . $this->legend
159
+		);
160 160
         
161
-        $view_bag = new ViewBag();
162
-        $view_bag->set('title', $controller->getPageTitle());
163
-        $view_bag->set('tree', Globals::getTree());
164
-        $view_bag->set('alpha', $this->alpha);
165
-        $view_bag->set('surname', $this->surname);
166
-        $view_bag->set('legend', $this->legend);
167
-        $view_bag->set('show_all', $this->show_all);
168
-        if($this->isShowingSurnames()) {
169
-            $view_bag->set('issurnames', true);
170
-            $view_bag->set('surnameslist', $this->getSurnamesList());
171
-        }
172
-        if($this->isShowingLineages()) {
173
-            $view_bag->set('islineages', true);
174
-            $view_bag->set('lineages', $this->getLineages());
161
+		$view_bag = new ViewBag();
162
+		$view_bag->set('title', $controller->getPageTitle());
163
+		$view_bag->set('tree', Globals::getTree());
164
+		$view_bag->set('alpha', $this->alpha);
165
+		$view_bag->set('surname', $this->surname);
166
+		$view_bag->set('legend', $this->legend);
167
+		$view_bag->set('show_all', $this->show_all);
168
+		if($this->isShowingSurnames()) {
169
+			$view_bag->set('issurnames', true);
170
+			$view_bag->set('surnameslist', $this->getSurnamesList());
171
+		}
172
+		if($this->isShowingLineages()) {
173
+			$view_bag->set('islineages', true);
174
+			$view_bag->set('lineages', $this->getLineages());
175 175
 
176
-            if ($this->show_all==='no') {
177
-            	$view_bag->set('table_title', I18N::translate('Individuals in %s lineages', $this->legend));
178
-            }
179
-            else {
180
-            	$view_bag->set('table_title', I18N::translate('All lineages'));
181
-            }
182
-        }
176
+			if ($this->show_all==='no') {
177
+				$view_bag->set('table_title', I18N::translate('Individuals in %s lineages', $this->legend));
178
+			}
179
+			else {
180
+				$view_bag->set('table_title', I18N::translate('All lineages'));
181
+			}
182
+		}
183 183
         
184
-        ViewFactory::make('Lineage', $this, $controller, $view_bag)->render();   
185
-    }
184
+		ViewFactory::make('Lineage', $this, $controller, $view_bag)->render();   
185
+	}
186 186
     
187 187
     
188 188
     
Please login to merge, or discard this patch.
src/Webtrees/Module/PatronymicLineage/Views/LineageView.php 1 patch
Indentation   +159 added lines, -159 removed lines patch added patch discarded remove patch
@@ -31,161 +31,161 @@  discard block
 block discarded – undo
31 31
 	 * {@inhericDoc}
32 32
 	 * @see \MyArtJaub\Webtrees\Mvc\View\AbstractView::renderContent()
33 33
 	 */
34
-    protected function renderContent() {
34
+	protected function renderContent() {
35 35
         
36
-        /** @var \Fisharebest\Webtrees\Tree $tree */
37
-        $tree = $this->data->get('tree');
36
+		/** @var \Fisharebest\Webtrees\Tree $tree */
37
+		$tree = $this->data->get('tree');
38 38
         
39
-        echo '<h2 class="center">', $this->data->get('title') , '</h2>';
40
-        echo '<p class="center alpha_index">', implode(' | ', $this->getInitialLettersList()), '</p>';
39
+		echo '<h2 class="center">', $this->data->get('title') , '</h2>';
40
+		echo '<p class="center alpha_index">', implode(' | ', $this->getInitialLettersList()), '</p>';
41 41
          
42
-        if($this->data->get('issurnames', false)) {
43
-            $surns = $this->data->get('surnameslist', array());
44
-            $extra_params = array ('mod' => Constants::MODULE_MAJ_PATROLIN_NAME, 'mod_action' => 'Lineage');
45
-            // Show the surname list
46
-            switch ($tree->getPreference('SURNAME_LIST_STYLE')) {
47
-                case 'style1':
42
+		if($this->data->get('issurnames', false)) {
43
+			$surns = $this->data->get('surnameslist', array());
44
+			$extra_params = array ('mod' => Constants::MODULE_MAJ_PATROLIN_NAME, 'mod_action' => 'Lineage');
45
+			// Show the surname list
46
+			switch ($tree->getPreference('SURNAME_LIST_STYLE')) {
47
+				case 'style1':
48 48
 					echo FunctionsPrintLists::surnameList($surns, 3, true, WT_SCRIPT_NAME, $tree, $extra_params);
49 49
 					break;
50
-                case 'style3':
51
-                    echo FunctionsPrintLists::surnameTagCloud($surns, WT_SCRIPT_NAME, true, $tree, $extra_params);
52
-                    break;
53
-                case 'style2':
54
-                default:
55
-                    echo FunctionsPrintLists::surnameTable($surns, WT_SCRIPT_NAME, $tree, $extra_params);
56
-                    break;
57
-            }
58
-        }
59
-        else if ($this->data->get('islineages', false)) {
60
-            //Link to indilist
61
-            echo '<p class="center"><strong>'.
62
-                '<a href="indilist.php?ged=' . $tree->getNameUrl() . '&surname=' . rawurlencode($this->data->get('surname')) .'">'. 
63
-                I18N::translate('Go to the list of individuals with surname %s', $this->data->get('legend')).
64
-                '</a></strong></p>';
50
+				case 'style3':
51
+					echo FunctionsPrintLists::surnameTagCloud($surns, WT_SCRIPT_NAME, true, $tree, $extra_params);
52
+					break;
53
+				case 'style2':
54
+				default:
55
+					echo FunctionsPrintLists::surnameTable($surns, WT_SCRIPT_NAME, $tree, $extra_params);
56
+					break;
57
+			}
58
+		}
59
+		else if ($this->data->get('islineages', false)) {
60
+			//Link to indilist
61
+			echo '<p class="center"><strong>'.
62
+				'<a href="indilist.php?ged=' . $tree->getNameUrl() . '&surname=' . rawurlencode($this->data->get('surname')) .'">'. 
63
+				I18N::translate('Go to the list of individuals with surname %s', $this->data->get('legend')).
64
+				'</a></strong></p>';
65 65
             
66
-            $lineages = $this->data->get('lineages', null);
67
-            $nb_lineages = is_null($lineages) ? 0 : count($lineages);
68
-            if($nb_lineages == 0) {
69
-            	echo '<p class="center"><span class="warning">',
70
-            		I18N::translate('No individuals with surname %s has been found. Please try another name.',
71
-            			'<span dir="auto">' . $this->data->get('legend') . '</span>'),
72
-            			'</span></p>';
73
-            } else { 
66
+			$lineages = $this->data->get('lineages', null);
67
+			$nb_lineages = is_null($lineages) ? 0 : count($lineages);
68
+			if($nb_lineages == 0) {
69
+				echo '<p class="center"><span class="warning">',
70
+					I18N::translate('No individuals with surname %s has been found. Please try another name.',
71
+						'<span dir="auto">' . $this->data->get('legend') . '</span>'),
72
+						'</span></p>';
73
+			} else { 
74 74
             	
75
-            	echo '<div id="patronymiclineages">'.
76
-            		'<div class="list_label">',
77
-            		$this->data->get('table_title'),
78
-            		'</div>';
75
+				echo '<div id="patronymiclineages">'.
76
+					'<div class="list_label">',
77
+					$this->data->get('table_title'),
78
+					'</div>';
79 79
             	
80
-            	echo '<div class="list_value_wrap">';            	
80
+				echo '<div class="list_value_wrap">';            	
81 81
             	
82
-            	foreach($lineages as $i => $lineage) {
83
-            		$this->printRootLineage($lineage);
84
-            		if($i < $nb_lineages - 1) echo '<hr />';
85
-            	}
82
+				foreach($lineages as $i => $lineage) {
83
+					$this->printRootLineage($lineage);
84
+					if($i < $nb_lineages - 1) echo '<hr />';
85
+				}
86 86
             	
87
-            	echo '</div>';
87
+				echo '</div>';
88 88
             	
89
-            	echo '<div class="list_label">',
90
-            		I18N::translate('%s lineages found', $nb_lineages),
91
-            		'</div>'.
92
-            		'</div>';
89
+				echo '<div class="list_label">',
90
+					I18N::translate('%s lineages found', $nb_lineages),
91
+					'</div>'.
92
+					'</div>';
93 93
 
94
-            }
95
-        }
96
-    }
94
+			}
95
+		}
96
+	}
97 97
     
98
-    /**
99
-     * Get the list of initial letters
100
-     * 
101
-     * @return string[]
102
-     */
103
-    private function getInitialLettersList() { 
104
-        $list = array();
105
-        /** @var \Fisharebest\Webtrees\Tree $tree */
106
-        $tree = $this->data->get('tree');
98
+	/**
99
+	 * Get the list of initial letters
100
+	 * 
101
+	 * @return string[]
102
+	 */
103
+	private function getInitialLettersList() { 
104
+		$list = array();
105
+		/** @var \Fisharebest\Webtrees\Tree $tree */
106
+		$tree = $this->data->get('tree');
107 107
 		$script_base_url = WT_SCRIPT_NAME . '?mod=' . \MyArtJaub\Webtrees\Constants::MODULE_MAJ_PATROLIN_NAME . '&mod_action=Lineage';
108 108
 		
109
-        foreach (QueryName::surnameAlpha($tree, false, false) as $letter => $count) {
110
-            switch ($letter) {
111
-                case '@':
112
-                    $html = I18N::translateContext('Unknown surname', '…');
113
-                    break;
114
-                case ',':
115
-                    $html = I18N::translate('None');
116
-                    break;
117
-                default:
118
-                    $html = Filter::escapeHtml($letter);
119
-                    break;
120
-            }
121
-            if ($count) {
122
-                if ($letter == $this->data->get('alpha')) {
123
-                    $list[] = '<a href="' . $script_base_url . '&alpha=' . rawurlencode($letter) . '&amp;ged=' . $tree->getNameUrl() . '" class="warning" title="' . I18N::number($count) . '">' . $html . '</a>';
124
-                } else {
125
-                    $list[] = '<a href="' . $script_base_url . '&alpha=' . rawurlencode($letter) . '&amp;ged=' . $tree->getNameUrl() . '" title="' . I18N::number($count) . '">' . $html . '</a>';
126
-                }
127
-            } else {
128
-                $list[] = $html;
129
-            }
130
-        }
109
+		foreach (QueryName::surnameAlpha($tree, false, false) as $letter => $count) {
110
+			switch ($letter) {
111
+				case '@':
112
+					$html = I18N::translateContext('Unknown surname', '…');
113
+					break;
114
+				case ',':
115
+					$html = I18N::translate('None');
116
+					break;
117
+				default:
118
+					$html = Filter::escapeHtml($letter);
119
+					break;
120
+			}
121
+			if ($count) {
122
+				if ($letter == $this->data->get('alpha')) {
123
+					$list[] = '<a href="' . $script_base_url . '&alpha=' . rawurlencode($letter) . '&amp;ged=' . $tree->getNameUrl() . '" class="warning" title="' . I18N::number($count) . '">' . $html . '</a>';
124
+				} else {
125
+					$list[] = '<a href="' . $script_base_url . '&alpha=' . rawurlencode($letter) . '&amp;ged=' . $tree->getNameUrl() . '" title="' . I18N::number($count) . '">' . $html . '</a>';
126
+				}
127
+			} else {
128
+				$list[] = $html;
129
+			}
130
+		}
131 131
     
132
-        // Search spiders don't get the "show all" option as the other links give them everything.
133
-        if (!Auth::isSearchEngine()) {
134
-            if ($this->data->get('show_all') === 'yes') {
135
-                $list[] = '<span class="warning">' . I18N::translate('All') . '</span>';
136
-            } else {
137
-                $list[] = '<a href="' . $script_base_url . '&show_all=yes' . '&amp;ged=' . $tree->getNameUrl() . '">' . I18N::translate('All') . '</a>';
138
-            }
139
-        }
132
+		// Search spiders don't get the "show all" option as the other links give them everything.
133
+		if (!Auth::isSearchEngine()) {
134
+			if ($this->data->get('show_all') === 'yes') {
135
+				$list[] = '<span class="warning">' . I18N::translate('All') . '</span>';
136
+			} else {
137
+				$list[] = '<a href="' . $script_base_url . '&show_all=yes' . '&amp;ged=' . $tree->getNameUrl() . '">' . I18N::translate('All') . '</a>';
138
+			}
139
+		}
140 140
     
141
-        return $list;
142
-    }
141
+		return $list;
142
+	}
143 143
 
144
-    /**
145
-     * Print a root lineage node
146
-     * @param LineageRootNode $node
147
-     */
148
-    private function printRootLineage(LineageRootNode $node) {    	
149
-    	print '<div class="patrolin_tree">';
150
-    	if($node->getIndividual() === null) {
151
-    		$fam_nodes = $node->getFamiliesNodes();
152
-    		foreach($fam_nodes as $fam){
153
-    			foreach($fam_nodes[$fam] as $child_node) {
154
-    				if($child_node) {
155
-    					$this->printLineage($child_node);
156
-    				}
157
-    			}
158
-    		}
159
-    	}
160
-    	else {
161
-    		$this->printLineage($node);
162
-    	}
163
-    	echo '</div>';
144
+	/**
145
+	 * Print a root lineage node
146
+	 * @param LineageRootNode $node
147
+	 */
148
+	private function printRootLineage(LineageRootNode $node) {    	
149
+		print '<div class="patrolin_tree">';
150
+		if($node->getIndividual() === null) {
151
+			$fam_nodes = $node->getFamiliesNodes();
152
+			foreach($fam_nodes as $fam){
153
+				foreach($fam_nodes[$fam] as $child_node) {
154
+					if($child_node) {
155
+						$this->printLineage($child_node);
156
+					}
157
+				}
158
+			}
159
+		}
160
+		else {
161
+			$this->printLineage($node);
162
+		}
163
+		echo '</div>';
164 164
     	
165
-    	$places = $node->getPlaces();
166
-    	if($places && count($places)>0){
167
-    		echo '<div class="patrolin_places">';
168
-    		echo \MyArtJaub\Webtrees\Functions\FunctionsPrint::htmlPlacesCloud($places, false, $this->data->get('tree'));
169
-    		echo '</div>';
170
-    	}
171
-    }
165
+		$places = $node->getPlaces();
166
+		if($places && count($places)>0){
167
+			echo '<div class="patrolin_places">';
168
+			echo \MyArtJaub\Webtrees\Functions\FunctionsPrint::htmlPlacesCloud($places, false, $this->data->get('tree'));
169
+			echo '</div>';
170
+		}
171
+	}
172 172
     
173
-    /**
174
-     * Print a lineage node, recursively.
175
-     * @param LineageNode $node
176
-     */
177
-    private function printLineage(LineageNode $node) {
173
+	/**
174
+	 * Print a lineage node, recursively.
175
+	 * @param LineageNode $node
176
+	 */
177
+	private function printLineage(LineageNode $node) {
178 178
     	
179
-    	echo '<ul>';
180
-    	$fam_nodes = $node->getFamiliesNodes();
181
-    	if(count($fam_nodes) > 0) {
182
-    		$is_first_family = true;
183
-    		foreach($fam_nodes as $fam) {
184
-    			$node_indi = $node->getIndividual();
185
-    			echo '<li>';
186
-    			if($is_first_family){
187
-    				echo FunctionsPrint::htmlIndividualForList($node_indi);
188
-    			}
179
+		echo '<ul>';
180
+		$fam_nodes = $node->getFamiliesNodes();
181
+		if(count($fam_nodes) > 0) {
182
+			$is_first_family = true;
183
+			foreach($fam_nodes as $fam) {
184
+				$node_indi = $node->getIndividual();
185
+				echo '<li>';
186
+				if($is_first_family){
187
+					echo FunctionsPrint::htmlIndividualForList($node_indi);
188
+				}
189 189
 				else{
190 190
 					echo FunctionsPrint::htmlIndividualForList($node_indi, false);
191 191
 				}
@@ -204,32 +204,32 @@  discard block
 block discarded – undo
204 204
 					echo '<span class="details1" title="'.$marrdate.'"><i class="icon-rings"></i>'.$marryear.'</span></a>&nbsp;';
205 205
 					echo FunctionsPrint::htmlIndividualForList($spouse);
206 206
 				}
207
-    			foreach($fam_nodes[$fam] as $child_node) {
208
-    				if($child_node) {
209
-    					$this->printLineage($child_node);
210
-    				}
211
-    				else {
212
-    					echo '<ul><li><strong>&hellip;</strong></li></ul>';
213
-    				}
214
-    			}
215
-    			$is_first_family = false;
216
-    		}
217
-    	}
218
-    	else {
219
-    		echo '<li>';
220
-    		echo \MyArtJaub\Webtrees\Functions\FunctionsPrint::htmlIndividualForList($node->getIndividual());
221
-    		if($node->hasFollowUpSurname()) {
222
-    			$url_base = WT_SCRIPT_NAME . '?mod=' . \MyArtJaub\Webtrees\Constants::MODULE_MAJ_PATROLIN_NAME . '&mod_action=Lineage';
223
-    			echo '&nbsp;'.
224
-    				'<a href="' . $url_base . '&surname=' . rawurlencode($node->getFollowUpSurname()) . '&amp;ged=' . $this->data->get('tree')->getNameUrl() . '">'.
225
-    				'('.I18N::translate('Go to %s lineages', $node->getFollowUpSurname()).')'.
226
-    				'</a>';
227
-    		}
228
-    		echo '</li>';
229
-    	}
230
-    	echo '</ul>';
207
+				foreach($fam_nodes[$fam] as $child_node) {
208
+					if($child_node) {
209
+						$this->printLineage($child_node);
210
+					}
211
+					else {
212
+						echo '<ul><li><strong>&hellip;</strong></li></ul>';
213
+					}
214
+				}
215
+				$is_first_family = false;
216
+			}
217
+		}
218
+		else {
219
+			echo '<li>';
220
+			echo \MyArtJaub\Webtrees\Functions\FunctionsPrint::htmlIndividualForList($node->getIndividual());
221
+			if($node->hasFollowUpSurname()) {
222
+				$url_base = WT_SCRIPT_NAME . '?mod=' . \MyArtJaub\Webtrees\Constants::MODULE_MAJ_PATROLIN_NAME . '&mod_action=Lineage';
223
+				echo '&nbsp;'.
224
+					'<a href="' . $url_base . '&surname=' . rawurlencode($node->getFollowUpSurname()) . '&amp;ged=' . $this->data->get('tree')->getNameUrl() . '">'.
225
+					'('.I18N::translate('Go to %s lineages', $node->getFollowUpSurname()).')'.
226
+					'</a>';
227
+			}
228
+			echo '</li>';
229
+		}
230
+		echo '</ul>';
231 231
     	
232
-    }
232
+	}
233 233
 
234 234
 }
235 235
  
236 236
\ No newline at end of file
Please login to merge, or discard this patch.
src/Webtrees/ImageBuilder.php 1 patch
Indentation   +299 added lines, -299 removed lines patch added patch discarded remove patch
@@ -22,61 +22,61 @@  discard block
 block discarded – undo
22 22
  */
23 23
 class ImageBuilder {
24 24
     
25
-    /**
26
-     * Reference media
27
-     * @var Media $media
28
-     */
29
-    protected $media;
25
+	/**
26
+	 * Reference media
27
+	 * @var Media $media
28
+	 */
29
+	protected $media;
30 30
     
31
-    /**
32
-     * Use TTF font
33
-     * @var bool $use_ttf
34
-     */
35
-    protected $use_ttf;
31
+	/**
32
+	 * Use TTF font
33
+	 * @var bool $use_ttf
34
+	 */
35
+	protected $use_ttf;
36 36
     
37
-    /**
38
-     * Expiration offset. Default is one day.
39
-     * @var int $expire_offset
40
-     */
41
-    protected $expire_offset;
37
+	/**
38
+	 * Expiration offset. Default is one day.
39
+	 * @var int $expire_offset
40
+	 */
41
+	protected $expire_offset;
42 42
    
43
-    /**
44
-     * Should the certificate display a watermark
45
-     * @var bool $show_watermark
46
-     */
47
-    protected $show_watermark;
43
+	/**
44
+	 * Should the certificate display a watermark
45
+	 * @var bool $show_watermark
46
+	 */
47
+	protected $show_watermark;
48 48
         
49
-    /**
50
-     * Maximum watermark font size. Default is 18.
51
-     * @var int $font_max_size
52
-     */
53
-    protected $font_max_size;
49
+	/**
50
+	 * Maximum watermark font size. Default is 18.
51
+	 * @var int $font_max_size
52
+	 */
53
+	protected $font_max_size;
54 54
     
55
-    /**
56
-     * Watermark font color, in hexadecimal. Default is #4D6DF3.
57
-     * @var string $font_color
58
-     */
59
-    protected $font_color;
55
+	/**
56
+	 * Watermark font color, in hexadecimal. Default is #4D6DF3.
57
+	 * @var string $font_color
58
+	 */
59
+	protected $font_color;
60 60
     
61
-    /**
62
-     * Should the image be rendered as attachment (vs inline)     * 
63
-     * @var bool $as_attachment
64
-     */
65
-    protected $as_attachment;
61
+	/**
62
+	 * Should the image be rendered as attachment (vs inline)     * 
63
+	 * @var bool $as_attachment
64
+	 */
65
+	protected $as_attachment;
66 66
     
67 67
 	/**
68
-	* Contructor for ImageBuilder
69
-	*
70
-	* @param Media|null $media Reference media object
71
-	*/
68
+	 * Contructor for ImageBuilder
69
+	 *
70
+	 * @param Media|null $media Reference media object
71
+	 */
72 72
 	public function __construct(Media $media = null){
73
-	    $this->media = $media;
74
-	    $this->use_ttf = function_exists('imagettftext');
75
-	    $this->expire_offset = 3600 * 24;
76
-	    $this->show_watermark = true;
77
-	    $this->font_max_size = 18;
78
-	    $this->font_color = '#4D6DF3';
79
-	    $this->as_attachment = false;
73
+		$this->media = $media;
74
+		$this->use_ttf = function_exists('imagettftext');
75
+		$this->expire_offset = 3600 * 24;
76
+		$this->show_watermark = true;
77
+		$this->font_max_size = 18;
78
+		$this->font_color = '#4D6DF3';
79
+		$this->as_attachment = false;
80 80
 	}
81 81
 	
82 82
 	/**
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
 	 * @return int
86 86
 	 */
87 87
 	public function getExpireOffset() {
88
-	    return $this->expire_offset;
88
+		return $this->expire_offset;
89 89
 	}
90 90
 	
91 91
 	/**
@@ -95,8 +95,8 @@  discard block
 block discarded – undo
95 95
 	 * @return ImageBuilder
96 96
 	 */
97 97
 	public function setExpireOffset($expireOffset) {
98
-	    if($expireOffset) $this->expire_offset = $expireOffset;
99
-	    return $this;
98
+		if($expireOffset) $this->expire_offset = $expireOffset;
99
+		return $this;
100 100
 	}
101 101
 	
102 102
 	/**
@@ -105,7 +105,7 @@  discard block
 block discarded – undo
105 105
 	 * @return bool
106 106
 	 */
107 107
 	public function isShowWatermark() {
108
-	    return $this->show_watermark;
108
+		return $this->show_watermark;
109 109
 	}
110 110
 	
111 111
 	/**
@@ -115,8 +115,8 @@  discard block
 block discarded – undo
115 115
 	 * @return ImageBuilder
116 116
 	 */
117 117
 	public function setShowWatermark($show_watermark) {
118
-	    if(!is_null($show_watermark)) $this->show_watermark = $show_watermark;
119
-	    return $this;
118
+		if(!is_null($show_watermark)) $this->show_watermark = $show_watermark;
119
+		return $this;
120 120
 	}
121 121
 	
122 122
 	/**
@@ -126,8 +126,8 @@  discard block
 block discarded – undo
126 126
 	 * @return ImageBuilder
127 127
 	 */
128 128
 	public function setFontMaxSize($font_max_size) {
129
-	    if($font_max_size) $this->font_max_size = $font_max_size;
130
-	    return $this;
129
+		if($font_max_size) $this->font_max_size = $font_max_size;
130
+		return $this;
131 131
 	}
132 132
 	
133 133
 	/**
@@ -137,8 +137,8 @@  discard block
 block discarded – undo
137 137
 	 * @return ImageBuilder
138 138
 	 */
139 139
 	public function setFontColor($font_color) {
140
-	    if($font_color) $this->font_color = $font_color;
141
-	    return $this;
140
+		if($font_color) $this->font_color = $font_color;
141
+		return $this;
142 142
 	}
143 143
 	
144 144
 	/**
@@ -148,8 +148,8 @@  discard block
 block discarded – undo
148 148
 	 * @return ImageBuilder
149 149
 	 */
150 150
 	public function setAsAttachment($is_attachement) {
151
-	    if(is_bool($is_attachement)) $this->as_attachment = $is_attachement;
152
-	    return $this;
151
+		if(is_bool($is_attachement)) $this->as_attachment = $is_attachement;
152
+		return $this;
153 153
 	}
154 154
 	
155 155
 	/**
@@ -157,135 +157,135 @@  discard block
 block discarded – undo
157 157
 	 */
158 158
 	public function render(){
159 159
 	    
160
-	    if (!$this->media || !$this->media->canShow()) {
161
-	        Log::addMediaLog('Image Builder error: >' . I18N::translate('Missing or private media object.'));
162
-	        $this->renderError();
163
-	    }
160
+		if (!$this->media || !$this->media->canShow()) {
161
+			Log::addMediaLog('Image Builder error: >' . I18N::translate('Missing or private media object.'));
162
+			$this->renderError();
163
+		}
164 164
 	    
165
-	    $serverFilename = $this->media->getServerFilename();
165
+		$serverFilename = $this->media->getServerFilename();
166 166
 	    
167
-	    if (!file_exists($serverFilename)) {
168
-	        Log::addMediaLog('Image Builder error: >'. I18N::translate('The media object does not exist.').'< for path >'.$serverFilename.'<');
169
-	        $this->renderError();
170
-	    }
167
+		if (!file_exists($serverFilename)) {
168
+			Log::addMediaLog('Image Builder error: >'. I18N::translate('The media object does not exist.').'< for path >'.$serverFilename.'<');
169
+			$this->renderError();
170
+		}
171 171
 	    
172
-	    $mimetype = $this->media->mimeType();
173
-	    $imgsize = $this->media->getImageAttributes();
174
-	    $filetime = $this->media->getFiletime();
175
-	    $filetimeHeader = gmdate('D, d M Y H:i:s', $filetime) . ' GMT';	    
176
-	    $expireHeader = gmdate('D, d M Y H:i:s', WT_TIMESTAMP + $this->getExpireOffset()) . ' GMT';
172
+		$mimetype = $this->media->mimeType();
173
+		$imgsize = $this->media->getImageAttributes();
174
+		$filetime = $this->media->getFiletime();
175
+		$filetimeHeader = gmdate('D, d M Y H:i:s', $filetime) . ' GMT';	    
176
+		$expireHeader = gmdate('D, d M Y H:i:s', WT_TIMESTAMP + $this->getExpireOffset()) . ' GMT';
177 177
 	    
178
-	    $type = Functions::isImageTypeSupported($imgsize['ext']);
179
-	    $usewatermark = false;
180
-	    // if this image supports watermarks and the watermark module is intalled...
181
-	    if ($type) {
182
-	        $usewatermark = $this->isShowWatermark();
183
-	    }
178
+		$type = Functions::isImageTypeSupported($imgsize['ext']);
179
+		$usewatermark = false;
180
+		// if this image supports watermarks and the watermark module is intalled...
181
+		if ($type) {
182
+			$usewatermark = $this->isShowWatermark();
183
+		}
184 184
 	    
185
-	    // determine whether we have enough memory to watermark this image
186
-	    if ($usewatermark) {
187
-	        if (!FunctionsMedia::hasMemoryForImage($serverFilename)) {
188
-	            // not enough memory to watermark this file
189
-	            $usewatermark = false;
190
-	        }
191
-	    }
185
+		// determine whether we have enough memory to watermark this image
186
+		if ($usewatermark) {
187
+			if (!FunctionsMedia::hasMemoryForImage($serverFilename)) {
188
+				// not enough memory to watermark this file
189
+				$usewatermark = false;
190
+			}
191
+		}
192 192
 	    
193
-	    $etag = $this->media->getEtag();
193
+		$etag = $this->media->getEtag();
194 194
 	    
195
-	    // parse IF_MODIFIED_SINCE header from client
196
-	    $if_modified_since = 'x';
197
-	    if (!empty(Filter::server('HTTP_IF_MODIFIED_SINCE'))) {
198
-	        $if_modified_since = preg_replace('/;.*$/', '', Filter::server('HTTP_IF_MODIFIED_SINCE'));
199
-	    }
195
+		// parse IF_MODIFIED_SINCE header from client
196
+		$if_modified_since = 'x';
197
+		if (!empty(Filter::server('HTTP_IF_MODIFIED_SINCE'))) {
198
+			$if_modified_since = preg_replace('/;.*$/', '', Filter::server('HTTP_IF_MODIFIED_SINCE'));
199
+		}
200 200
 	    
201
-	    // parse IF_NONE_MATCH header from client
202
-	    $if_none_match = 'x';
203
-	    if (!empty(Filter::server('HTTP_IF_NONE_MATCH'))) {
204
-	        $if_none_match = str_replace('"', '', Filter::server('HTTP_IF_NONE_MATCH'));
205
-	    }
201
+		// parse IF_NONE_MATCH header from client
202
+		$if_none_match = 'x';
203
+		if (!empty(Filter::server('HTTP_IF_NONE_MATCH'))) {
204
+			$if_none_match = str_replace('"', '', Filter::server('HTTP_IF_NONE_MATCH'));
205
+		}
206 206
 	    
207
-	    // add caching headers.  allow browser to cache file, but not proxy
208
-	    header('Last-Modified: ' . $filetimeHeader);
209
-	    header('ETag: "' . $etag . '"');
210
-	    header('Expires: ' . $expireHeader);
211
-	    header('Cache-Control: max-age=' . $this->getExpireOffset() . ', s-maxage=0, proxy-revalidate');
207
+		// add caching headers.  allow browser to cache file, but not proxy
208
+		header('Last-Modified: ' . $filetimeHeader);
209
+		header('ETag: "' . $etag . '"');
210
+		header('Expires: ' . $expireHeader);
211
+		header('Cache-Control: max-age=' . $this->getExpireOffset() . ', s-maxage=0, proxy-revalidate');
212 212
 	    
213
-	    // if this file is already in the user’s cache, don’t resend it
214
-	    // first check if the if_modified_since param matches
215
-	    if ($if_modified_since === $filetimeHeader) {
216
-	        // then check if the etag matches
217
-	        if ($if_none_match === $etag) {
218
-	            http_response_code(304);
213
+		// if this file is already in the user’s cache, don’t resend it
214
+		// first check if the if_modified_since param matches
215
+		if ($if_modified_since === $filetimeHeader) {
216
+			// then check if the etag matches
217
+			if ($if_none_match === $etag) {
218
+				http_response_code(304);
219 219
 	    
220
-	            return;
221
-	        }
222
-	    }	    
220
+				return;
221
+			}
222
+		}	    
223 223
 
224
-	    // send headers for the image
225
-	    $disposition = $this->as_attachment ? 'attachment' : 'inline';
226
-	    header('Content-Type: ' . $mimetype);
227
-	    header('Content-Disposition: ' . $disposition . '; filename="' . addslashes(basename($this->media->getFilename())) . '"');
224
+		// send headers for the image
225
+		$disposition = $this->as_attachment ? 'attachment' : 'inline';
226
+		header('Content-Type: ' . $mimetype);
227
+		header('Content-Disposition: ' . $disposition . '; filename="' . addslashes(basename($this->media->getFilename())) . '"');
228 228
 	     
229
-	    if ($usewatermark) {
230
-	        // generate the watermarked image
231
-	        $imCreateFunc = 'imagecreatefrom' . $type;
232
-	        $imSendFunc   = 'image' . $type;
229
+		if ($usewatermark) {
230
+			// generate the watermarked image
231
+			$imCreateFunc = 'imagecreatefrom' . $type;
232
+			$imSendFunc   = 'image' . $type;
233 233
 	    
234
-	        if (function_exists($imCreateFunc) && function_exists($imSendFunc)) {
235
-	            $im = $imCreateFunc($serverFilename);
236
-	            $im = $this->applyWatermark($im);
234
+			if (function_exists($imCreateFunc) && function_exists($imSendFunc)) {
235
+				$im = $imCreateFunc($serverFilename);
236
+				$im = $this->applyWatermark($im);
237 237
 	    	    
238
-	            // send the image
239
-	            $imSendFunc($im);
240
-	            imagedestroy($im);
238
+				// send the image
239
+				$imSendFunc($im);
240
+				imagedestroy($im);
241 241
 	    
242
-	            return;
243
-	        } else {
244
-	            // this image is defective.  log it
245
-	            Log::addMediaLog('Image Builder error: >' . I18N::translate('This media file is broken and cannot be watermarked.') . '< in file >' . $serverFilename . '< memory used: ' . memory_get_usage());
246
-	        }
247
-	    }
242
+				return;
243
+			} else {
244
+				// this image is defective.  log it
245
+				Log::addMediaLog('Image Builder error: >' . I18N::translate('This media file is broken and cannot be watermarked.') . '< in file >' . $serverFilename . '< memory used: ' . memory_get_usage());
246
+			}
247
+		}
248 248
 	    
249
-	    // determine filesize of image (could be original or watermarked version)
250
-	    $filesize = filesize($serverFilename);
249
+		// determine filesize of image (could be original or watermarked version)
250
+		$filesize = filesize($serverFilename);
251 251
 	    
252
-	    // set content-length header, send file
253
-	    header('Content-Length: ' . $filesize);
252
+		// set content-length header, send file
253
+		header('Content-Length: ' . $filesize);
254 254
 	    
255
-	    // Some servers disable fpassthru() and readfile()
256
-	    if (function_exists('readfile')) {
257
-	        readfile($serverFilename);
258
-	    } else {
259
-	        $fp = fopen($serverFilename, 'rb');
260
-	        if (function_exists('fpassthru')) {
261
-	            fpassthru($fp);
262
-	        } else {
263
-	            while (!feof($fp)) {
264
-	                echo fread($fp, 65536);
265
-	            }
266
-	        }
267
-	        fclose($fp);
268
-	    }	    
255
+		// Some servers disable fpassthru() and readfile()
256
+		if (function_exists('readfile')) {
257
+			readfile($serverFilename);
258
+		} else {
259
+			$fp = fopen($serverFilename, 'rb');
260
+			if (function_exists('fpassthru')) {
261
+				fpassthru($fp);
262
+			} else {
263
+				while (!feof($fp)) {
264
+					echo fread($fp, 65536);
265
+				}
266
+			}
267
+			fclose($fp);
268
+		}	    
269 269
 	}
270 270
 	
271 271
 	/**
272 272
 	 * Render an error as an image.
273 273
 	 */
274 274
 	protected function renderError() {	
275
-	    $error = I18N::translate('The media file was not found in this family tree.');
275
+		$error = I18N::translate('The media file was not found in this family tree.');
276 276
 
277
-    	$width  = (mb_strlen($error) * 6.5 + 50) * 1.15;
278
-    	$height = 60;
279
-    	$im     = imagecreatetruecolor($width, $height); /* Create a black image */
280
-    	$bgc    = imagecolorallocate($im, 255, 255, 255); /* set background color */
281
-    	imagefilledrectangle($im, 2, 2, $width - 4, $height - 4, $bgc); /* create a rectangle, leaving 2 px border */
277
+		$width  = (mb_strlen($error) * 6.5 + 50) * 1.15;
278
+		$height = 60;
279
+		$im     = imagecreatetruecolor($width, $height); /* Create a black image */
280
+		$bgc    = imagecolorallocate($im, 255, 255, 255); /* set background color */
281
+		imagefilledrectangle($im, 2, 2, $width - 4, $height - 4, $bgc); /* create a rectangle, leaving 2 px border */
282 282
     
283
-    	$this->embedText($im, $error, 100, '255, 0, 0', WT_ROOT . Config::FONT_DEJAVU_SANS_TTF, 'top', 'left');
283
+		$this->embedText($im, $error, 100, '255, 0, 0', WT_ROOT . Config::FONT_DEJAVU_SANS_TTF, 'top', 'left');
284 284
     
285
-    	http_response_code(404);
286
-    	header('Content-Type: image/png');
287
-    	imagepng($im);
288
-    	imagedestroy($im);
285
+		http_response_code(404);
286
+		header('Content-Type: image/png');
287
+		imagepng($im);
288
+		imagedestroy($im);
289 289
 	}
290 290
 	
291 291
 	/**
@@ -297,25 +297,25 @@  discard block
 block discarded – undo
297 297
 	 */
298 298
 	protected function applyWatermark($im) {
299 299
 	    
300
-	    // text to watermark with	    
301
-	    if(method_exists($this->media, 'getWatermarkText')) {
302
-	       $word1_text = $this->media->getWatermarkText();
303
-	    }
304
-	    else {
305
-	        $word1_text = $this->media->getTitle();
306
-	    }
300
+		// text to watermark with	    
301
+		if(method_exists($this->media, 'getWatermarkText')) {
302
+		   $word1_text = $this->media->getWatermarkText();
303
+		}
304
+		else {
305
+			$word1_text = $this->media->getTitle();
306
+		}
307 307
 	
308
-	    $this->embedText(
309
-	        $im, 
310
-	        $word1_text, 
311
-	        $this->font_max_size,
312
-	        $this->font_color,
313
-	        WT_ROOT . Config::FONT_DEJAVU_SANS_TTF,
314
-	        'top', 
315
-	        'left'
316
-	     );
308
+		$this->embedText(
309
+			$im, 
310
+			$word1_text, 
311
+			$this->font_max_size,
312
+			$this->font_color,
313
+			WT_ROOT . Config::FONT_DEJAVU_SANS_TTF,
314
+			'top', 
315
+			'left'
316
+		 );
317 317
 	
318
-	    return ($im);
318
+		return ($im);
319 319
 	}
320 320
 	
321 321
 	/**
@@ -332,94 +332,94 @@  discard block
 block discarded – undo
332 332
 	 */
333 333
 	protected function embedText($im, $text, $maxsize, $color, $font, $vpos, $hpos) {
334 334
 	    
335
-	    // there are two ways to embed text with PHP
336
-	    // (preferred) using GD and FreeType you can embed text using any True Type font
337
-	    // (fall back) if that is not available, you can insert basic monospaced text
335
+		// there are two ways to embed text with PHP
336
+		// (preferred) using GD and FreeType you can embed text using any True Type font
337
+		// (fall back) if that is not available, you can insert basic monospaced text
338 338
 	    
339
-	    $col = $this->hexrgb($color);
340
-	    $textcolor = imagecolorallocate($im, $col['red'], $col['green'], $col['blue']);
339
+		$col = $this->hexrgb($color);
340
+		$textcolor = imagecolorallocate($im, $col['red'], $col['green'], $col['blue']);
341 341
 	    
342
-	    // make adjustments to settings that imagestring and imagestringup can’t handle
343
-	    if (!$this->use_ttf) {
344
-	        // imagestringup only writes up, can’t use top2bottom
345
-	        if ($hpos === 'top2bottom') {
346
-	            $hpos = 'bottom2top';
347
-	        }
348
-	    }
342
+		// make adjustments to settings that imagestring and imagestringup can’t handle
343
+		if (!$this->use_ttf) {
344
+			// imagestringup only writes up, can’t use top2bottom
345
+			if ($hpos === 'top2bottom') {
346
+				$hpos = 'bottom2top';
347
+			}
348
+		}
349 349
 	    
350
-	    $text       = I18N::reverseText($text);
351
-	    $height     = imagesy($im);
352
-	    $width      = imagesx($im);
353
-	    $calc_angle = rad2deg(atan($height / $width));
354
-	    $hypoth     = $height / sin(deg2rad($calc_angle));
350
+		$text       = I18N::reverseText($text);
351
+		$height     = imagesy($im);
352
+		$width      = imagesx($im);
353
+		$calc_angle = rad2deg(atan($height / $width));
354
+		$hypoth     = $height / sin(deg2rad($calc_angle));
355 355
 	    
356
-	    // vertical and horizontal position of the text
357
-	    switch ($vpos) {
358
-	        default:
359
-	        case 'top':
360
-	            $taille   = $this->textLength($maxsize, $width, $text);
361
-	            $pos_y    = $height * 0.15 + $taille;
362
-	            $pos_x    = $width * 0.15;
363
-	            $rotation = 0;
364
-	            break;
365
-	        case 'middle':
366
-	            $taille   = $this->textLength($maxsize, $width, $text);
367
-	            $pos_y    = ($height + $taille) / 2;
368
-	            $pos_x    = $width * 0.15;
369
-	            $rotation = 0;
370
-	            break;
371
-	        case 'bottom':
372
-	            $taille   = $this->textLength($maxsize, $width, $text);
373
-	            $pos_y    = ($height * .85 - $taille);
374
-	            $pos_x    = $width * 0.15;
375
-	            $rotation = 0;
376
-	            break;
377
-	        case 'across':
378
-	            switch ($hpos) {
379
-	                default:
380
-	                case 'left':
381
-	                    $taille   = $this->textLength($maxsize, $hypoth, $text);
382
-	                    $pos_y    = ($height * .85 - $taille);
383
-	                    $pos_x    = $width * 0.15;
384
-	                    $rotation = $calc_angle;
385
-	                    break;
386
-	                case 'right':
387
-	                    $taille   = $this->textLength($maxsize, $hypoth, $text);
388
-	                    $pos_y    = ($height * .15 - $taille);
389
-	                    $pos_x    = $width * 0.85;
390
-	                    $rotation = $calc_angle + 180;
391
-	                    break;
392
-	                case 'top2bottom':
393
-	                    $taille   = $this->textLength($maxsize, $height, $text);
394
-	                    $pos_y    = ($height * .15 - $taille);
395
-	                    $pos_x    = ($width * .90 - $taille);
396
-	                    $rotation = -90;
397
-	                    break;
398
-	                case 'bottom2top':
399
-	                    $taille   = $this->textLength($maxsize, $height, $text);
400
-	                    $pos_y    = $height * 0.85;
401
-	                    $pos_x    = $width * 0.15;
402
-	                    $rotation = 90;
403
-	                    break;
404
-	            }
405
-	            break;
406
-	    }
356
+		// vertical and horizontal position of the text
357
+		switch ($vpos) {
358
+			default:
359
+			case 'top':
360
+				$taille   = $this->textLength($maxsize, $width, $text);
361
+				$pos_y    = $height * 0.15 + $taille;
362
+				$pos_x    = $width * 0.15;
363
+				$rotation = 0;
364
+				break;
365
+			case 'middle':
366
+				$taille   = $this->textLength($maxsize, $width, $text);
367
+				$pos_y    = ($height + $taille) / 2;
368
+				$pos_x    = $width * 0.15;
369
+				$rotation = 0;
370
+				break;
371
+			case 'bottom':
372
+				$taille   = $this->textLength($maxsize, $width, $text);
373
+				$pos_y    = ($height * .85 - $taille);
374
+				$pos_x    = $width * 0.15;
375
+				$rotation = 0;
376
+				break;
377
+			case 'across':
378
+				switch ($hpos) {
379
+					default:
380
+					case 'left':
381
+						$taille   = $this->textLength($maxsize, $hypoth, $text);
382
+						$pos_y    = ($height * .85 - $taille);
383
+						$pos_x    = $width * 0.15;
384
+						$rotation = $calc_angle;
385
+						break;
386
+					case 'right':
387
+						$taille   = $this->textLength($maxsize, $hypoth, $text);
388
+						$pos_y    = ($height * .15 - $taille);
389
+						$pos_x    = $width * 0.85;
390
+						$rotation = $calc_angle + 180;
391
+						break;
392
+					case 'top2bottom':
393
+						$taille   = $this->textLength($maxsize, $height, $text);
394
+						$pos_y    = ($height * .15 - $taille);
395
+						$pos_x    = ($width * .90 - $taille);
396
+						$rotation = -90;
397
+						break;
398
+					case 'bottom2top':
399
+						$taille   = $this->textLength($maxsize, $height, $text);
400
+						$pos_y    = $height * 0.85;
401
+						$pos_x    = $width * 0.15;
402
+						$rotation = 90;
403
+						break;
404
+				}
405
+				break;
406
+		}
407 407
 	    
408
-	    // apply the text
409
-	    if ($this->use_ttf) {
410
-	        // if imagettftext throws errors, catch them with a custom error handler
411
-	        set_error_handler(array($this, 'imageTtfTextErrorHandler'));
412
-	        imagettftext($im, $taille, $rotation, $pos_x, $pos_y, $textcolor, $font, $text);
413
-	        restore_error_handler();
414
-	    }
415
-	    // Don’t use an ‘else’ here since imagettftextErrorHandler may have changed the value of $useTTF from true to false
416
-	    if (!$this->use_ttf) {
417
-	        if ($rotation !== 90) {
418
-	            imagestring($im, 5, $pos_x, $pos_y, $text, $textcolor);
419
-	        } else {
420
-	            imagestringup($im, 5, $pos_x, $pos_y, $text, $textcolor);
421
-	        }
422
-	    }
408
+		// apply the text
409
+		if ($this->use_ttf) {
410
+			// if imagettftext throws errors, catch them with a custom error handler
411
+			set_error_handler(array($this, 'imageTtfTextErrorHandler'));
412
+			imagettftext($im, $taille, $rotation, $pos_x, $pos_y, $textcolor, $font, $text);
413
+			restore_error_handler();
414
+		}
415
+		// Don’t use an ‘else’ here since imagettftextErrorHandler may have changed the value of $useTTF from true to false
416
+		if (!$this->use_ttf) {
417
+			if ($rotation !== 90) {
418
+				imagestring($im, 5, $pos_x, $pos_y, $text, $textcolor);
419
+			} else {
420
+				imagestringup($im, 5, $pos_x, $pos_y, $text, $textcolor);
421
+			}
422
+		}
423 423
 	
424 424
 	}
425 425
 	
@@ -431,53 +431,53 @@  discard block
 block discarded – undo
431 431
 	 */
432 432
 	protected function hexrgb ($hexstr)
433 433
 	{
434
-	    $int = hexdec($hexstr);
434
+		$int = hexdec($hexstr);
435 435
 	
436
-	    return array('red' => 0xFF & ($int >> 0x10),
437
-	        'green' => 0xFF & ($int >> 0x8),
438
-	        'blue' => 0xFF & $int);
436
+		return array('red' => 0xFF & ($int >> 0x10),
437
+			'green' => 0xFF & ($int >> 0x8),
438
+			'blue' => 0xFF & $int);
439 439
 	}
440 440
 	
441
-    /**
442
-     * Generate an approximate length of text, in pixels.
443
-     *
444
-     * @param int    $t
445
-     * @param int    $mxl
446
-     * @param string $text
447
-     *
448
-     * @return int
449
-     */
450
-    function textLength($t, $mxl, $text) {
451
-    	$taille_c = $t;
452
-    	$len      = mb_strlen($text);
453
-    	while (($taille_c - 2) * $len > $mxl) {
454
-    		$taille_c--;
455
-    		if ($taille_c == 2) {
456
-    			break;
457
-    		}
458
-    	}
441
+	/**
442
+	 * Generate an approximate length of text, in pixels.
443
+	 *
444
+	 * @param int    $t
445
+	 * @param int    $mxl
446
+	 * @param string $text
447
+	 *
448
+	 * @return int
449
+	 */
450
+	function textLength($t, $mxl, $text) {
451
+		$taille_c = $t;
452
+		$len      = mb_strlen($text);
453
+		while (($taille_c - 2) * $len > $mxl) {
454
+			$taille_c--;
455
+			if ($taille_c == 2) {
456
+				break;
457
+			}
458
+		}
459 459
     
460
-    	return $taille_c;
461
-    }
460
+		return $taille_c;
461
+	}
462 462
     
463
-    /**
464
-     * imagettftext is the function that is most likely to throw an error
465
-     * use this custom error handler to catch and log it
466
-     *
467
-     * @param int    $errno
468
-     * @param string $errstr
469
-     *
470
-     * @return bool
471
-     */
472
-    function imageTtfTextErrorHandler($errno, $errstr) {
473
-        // log the error
474
-        Log::addErrorLog('Image Builder error: >' . $errno . '/' . $errstr . '< while processing file >' . $this->media->getServerFilename() . '<');
463
+	/**
464
+	 * imagettftext is the function that is most likely to throw an error
465
+	 * use this custom error handler to catch and log it
466
+	 *
467
+	 * @param int    $errno
468
+	 * @param string $errstr
469
+	 *
470
+	 * @return bool
471
+	 */
472
+	function imageTtfTextErrorHandler($errno, $errstr) {
473
+		// log the error
474
+		Log::addErrorLog('Image Builder error: >' . $errno . '/' . $errstr . '< while processing file >' . $this->media->getServerFilename() . '<');
475 475
     
476
-        // change value of useTTF to false so the fallback watermarking can be used.
477
-        $this->use_ttf = false;
476
+		// change value of useTTF to false so the fallback watermarking can be used.
477
+		$this->use_ttf = false;
478 478
     
479
-        return true;
480
-    }
479
+		return true;
480
+	}
481 481
 		
482 482
 }
483 483
 
Please login to merge, or discard this patch.
src/Webtrees/Module/SosaModule.php 1 patch
Indentation   +164 added lines, -164 removed lines patch added patch discarded remove patch
@@ -32,116 +32,116 @@  discard block
 block discarded – undo
32 32
  * Sosa Module.
33 33
  */
34 34
 class SosaModule 
35
-    extends AbstractModule 
36
-    implements  ModuleMenuInterface, 
37
-                ModuleConfigInterface,
38
-                HookSubscriberInterface,
39
-                IndividualHeaderExtenderInterface,
40
-                RecordNameTextExtenderInterface
35
+	extends AbstractModule 
36
+	implements  ModuleMenuInterface, 
37
+				ModuleConfigInterface,
38
+				HookSubscriberInterface,
39
+				IndividualHeaderExtenderInterface,
40
+				RecordNameTextExtenderInterface
41 41
 {
42
-    // How to update the database schema for this module
43
-    const SCHEMA_TARGET_VERSION   = 2;
44
-    const SCHEMA_SETTING_NAME     = 'MAJ_SOSA_SCHEMA_VERSION';
45
-    const SCHEMA_MIGRATION_PREFIX = '\MyArtJaub\Webtrees\Module\Sosa\Schema';
42
+	// How to update the database schema for this module
43
+	const SCHEMA_TARGET_VERSION   = 2;
44
+	const SCHEMA_SETTING_NAME     = 'MAJ_SOSA_SCHEMA_VERSION';
45
+	const SCHEMA_MIGRATION_PREFIX = '\MyArtJaub\Webtrees\Module\Sosa\Schema';
46 46
 
47
-    /** @var string For custom modules - link for support, upgrades, etc. */
48
-    const CUSTOM_WEBSITE = 'https://github.com/jon48/webtrees-lib';
49
-    
50
-    /**
51
-     * {@inhericDoc}
52
-     */
53
-    public function getTitle() {
54
-        return /* I18N: Name of the “Sosa” module */ I18N::translate('Sosa');
55
-    }
56
-    
57
-    /**
58
-     * {@inhericDoc}
59
-     */
60
-    public function getDescription() {
61
-        return /* I18N: Description of the “Sosa” module */ I18N::translate('Calculate and display Sosa ancestors of the root person.');
62
-    }
63
-    
64
-    /**
65
-     * {@inhericDoc}
66
-     */
67
-    public function modAction($mod_action) {
68
-        Database::updateSchema(self::SCHEMA_MIGRATION_PREFIX, self::SCHEMA_SETTING_NAME, self::SCHEMA_TARGET_VERSION);
47
+	/** @var string For custom modules - link for support, upgrades, etc. */
48
+	const CUSTOM_WEBSITE = 'https://github.com/jon48/webtrees-lib';
49
+    
50
+	/**
51
+	 * {@inhericDoc}
52
+	 */
53
+	public function getTitle() {
54
+		return /* I18N: Name of the “Sosa” module */ I18N::translate('Sosa');
55
+	}
56
+    
57
+	/**
58
+	 * {@inhericDoc}
59
+	 */
60
+	public function getDescription() {
61
+		return /* I18N: Description of the “Sosa” module */ I18N::translate('Calculate and display Sosa ancestors of the root person.');
62
+	}
63
+    
64
+	/**
65
+	 * {@inhericDoc}
66
+	 */
67
+	public function modAction($mod_action) {
68
+		Database::updateSchema(self::SCHEMA_MIGRATION_PREFIX, self::SCHEMA_SETTING_NAME, self::SCHEMA_TARGET_VERSION);
69 69
         
70
-        \MyArtJaub\Webtrees\Mvc\Dispatcher::getInstance()->handle($this, $mod_action);
71
-    }
70
+		\MyArtJaub\Webtrees\Mvc\Dispatcher::getInstance()->handle($this, $mod_action);
71
+	}
72 72
     
73
-    /**********
73
+	/**********
74 74
      * ModuleConfigInterface
75 75
      **********/
76 76
     
77
-    /**
78
-     * {@inhericDoc}
79
-     * @see \Fisharebest\Webtrees\Module\ModuleConfigInterface::getConfigLink()
80
-     */
81
-    public function getConfigLink() {
82
-        Database::updateSchema(self::SCHEMA_MIGRATION_PREFIX, self::SCHEMA_SETTING_NAME, self::SCHEMA_TARGET_VERSION);
77
+	/**
78
+	 * {@inhericDoc}
79
+	 * @see \Fisharebest\Webtrees\Module\ModuleConfigInterface::getConfigLink()
80
+	 */
81
+	public function getConfigLink() {
82
+		Database::updateSchema(self::SCHEMA_MIGRATION_PREFIX, self::SCHEMA_SETTING_NAME, self::SCHEMA_TARGET_VERSION);
83 83
         
84
-        return 'module.php?mod=' . $this->getName() . '&amp;mod_action=SosaConfig';
85
-    }
84
+		return 'module.php?mod=' . $this->getName() . '&amp;mod_action=SosaConfig';
85
+	}
86 86
     
87
-    /**********
87
+	/**********
88 88
      * ModuleMenuInterface
89 89
      **********/
90 90
     
91
-    /**
92
-     * {@inhericDoc}
93
-     * @see \Fisharebest\Webtrees\Module\ModuleMenuInterface::defaultMenuOrder()
94
-     */
95
-    public function defaultMenuOrder() {
96
-        return 5;
97
-    }
98
-    
99
-    /**
100
-     * {@inhericDoc}
101
-     * @see \Fisharebest\Webtrees\Module\ModuleMenuInterface::getMenu()
102
-     */
103
-    public function getMenu() { 
104
-        $wt_tree = Globals::getTree();
105
-        $menu = null;
106
-        if(ModuleManager::getInstance()->isOperational($this->getName())) {
91
+	/**
92
+	 * {@inhericDoc}
93
+	 * @see \Fisharebest\Webtrees\Module\ModuleMenuInterface::defaultMenuOrder()
94
+	 */
95
+	public function defaultMenuOrder() {
96
+		return 5;
97
+	}
98
+    
99
+	/**
100
+	 * {@inhericDoc}
101
+	 * @see \Fisharebest\Webtrees\Module\ModuleMenuInterface::getMenu()
102
+	 */
103
+	public function getMenu() { 
104
+		$wt_tree = Globals::getTree();
105
+		$menu = null;
106
+		if(ModuleManager::getInstance()->isOperational($this->getName())) {
107 107
             
108
-            $root_url = 'module.php?mod=' . $this->getName() . '&ged=' . $wt_tree->getNameUrl() . '&';
109
-            $sosa_stat_menu = new Menu(I18N::translate('Sosa Statistics'), $root_url . 'mod_action=SosaStats', 'menu-maj-sosa-stats');
108
+			$root_url = 'module.php?mod=' . $this->getName() . '&ged=' . $wt_tree->getNameUrl() . '&';
109
+			$sosa_stat_menu = new Menu(I18N::translate('Sosa Statistics'), $root_url . 'mod_action=SosaStats', 'menu-maj-sosa-stats');
110 110
             
111
-            $menu = clone $sosa_stat_menu;
112
-            $menu->setClass('menu-maj-sosa');
111
+			$menu = clone $sosa_stat_menu;
112
+			$menu->setClass('menu-maj-sosa');
113 113
             
114
-            $submenus = array_filter(array(
115
-                new Menu(I18N::translate('Sosa Ancestors'), $root_url . 'mod_action=SosaList', 'menu-maj-sosa-list', array('rel' => 'nofollow')),
116
-                new Menu(I18N::translate('Missing Ancestors'), $root_url . 'mod_action=SosaList@missing', 'menu-maj-sosa-missing', array('rel' => 'nofollow')),
117
-                $sosa_stat_menu                
118
-            ));
114
+			$submenus = array_filter(array(
115
+				new Menu(I18N::translate('Sosa Ancestors'), $root_url . 'mod_action=SosaList', 'menu-maj-sosa-list', array('rel' => 'nofollow')),
116
+				new Menu(I18N::translate('Missing Ancestors'), $root_url . 'mod_action=SosaList@missing', 'menu-maj-sosa-missing', array('rel' => 'nofollow')),
117
+				$sosa_stat_menu                
118
+			));
119 119
             
120 120
 
121
-            if (ModuleManager::getInstance()->isOperational(Constants::MODULE_MAJ_GEODISP_NAME)
122
-                && $ga_list = Module::getModuleByName(Constants::MODULE_MAJ_GEODISP_NAME)->getProvider()->getGeoAnalysisList()
123
-                )
124
-            {
125
-                if(count($ga_list) > 0) {
126
-                    $submenus[] = new Menu(I18N::translate('Geographical Dispersion'), 'module.php?mod=' . Constants::MODULE_MAJ_GEODISP_NAME . '&ged=' . $wt_tree->getNameUrl() . '&mod_action=GeoAnalysis@listAll', 'menu-maj-sosa-geodispersion');
127
-                }
128
-            }
121
+			if (ModuleManager::getInstance()->isOperational(Constants::MODULE_MAJ_GEODISP_NAME)
122
+				&& $ga_list = Module::getModuleByName(Constants::MODULE_MAJ_GEODISP_NAME)->getProvider()->getGeoAnalysisList()
123
+				)
124
+			{
125
+				if(count($ga_list) > 0) {
126
+					$submenus[] = new Menu(I18N::translate('Geographical Dispersion'), 'module.php?mod=' . Constants::MODULE_MAJ_GEODISP_NAME . '&ged=' . $wt_tree->getNameUrl() . '&mod_action=GeoAnalysis@listAll', 'menu-maj-sosa-geodispersion');
127
+				}
128
+			}
129 129
             
130
-            if(Auth::check()) {
131
-                $submenus[] = new Menu(
132
-                    I18N::translate('Sosa Configuration'),
133
-                    $this->getConfigLink(),
134
-                    'menu-maj-sosa-configuration',
135
-                    array('rel' => 'nofollow'));
136
-            }
130
+			if(Auth::check()) {
131
+				$submenus[] = new Menu(
132
+					I18N::translate('Sosa Configuration'),
133
+					$this->getConfigLink(),
134
+					'menu-maj-sosa-configuration',
135
+					array('rel' => 'nofollow'));
136
+			}
137 137
                         
138
-            //-- recompute Sosa submenu
139
-            $controller = Globals::getController();
140
-            if (!empty($controller) && $controller instanceof IndividualController 
141
-                && Auth::check() && $wt_tree->getUserPreference(Auth::user(), 'MAJ_SOSA_ROOT_ID')
142
-                ) {
143
-                $controller
144
-                    ->addInlineJavascript('
138
+			//-- recompute Sosa submenu
139
+			$controller = Globals::getController();
140
+			if (!empty($controller) && $controller instanceof IndividualController 
141
+				&& Auth::check() && $wt_tree->getUserPreference(Auth::user(), 'MAJ_SOSA_ROOT_ID')
142
+				) {
143
+				$controller
144
+					->addInlineJavascript('
145 145
                         function majComputeSosaFromIndi(){
146 146
                             if($("#computesosadlg").length == 0) {
147 147
                                 $("body").append("<div id=\"computesosadlg\" title=\"'. I18N::translate('Sosas computation') .'\"><div id=\"sosaloadingarea\"></div></div>");
@@ -164,87 +164,87 @@  discard block
 block discarded – undo
164 164
 	                         });	
165 165
                         }');
166 166
                 	
167
-                $submenus[] = new Menu(
168
-                    I18N::translate('Complete Sosas'), 
169
-                    '#', 
170
-                    'menu-maj-sosa-recompute', 
171
-                    array(
172
-                        'rel' => 'nofollow',
173
-                        'onclick' => 'return majComputeSosaFromIndi();'
174
-                    ));
175
-            }
167
+				$submenus[] = new Menu(
168
+					I18N::translate('Complete Sosas'), 
169
+					'#', 
170
+					'menu-maj-sosa-recompute', 
171
+					array(
172
+						'rel' => 'nofollow',
173
+						'onclick' => 'return majComputeSosaFromIndi();'
174
+					));
175
+			}
176 176
             
177
-        }
177
+		}
178 178
         
179
-        $menu->setSubmenus($submenus);
179
+		$menu->setSubmenus($submenus);
180 180
         
181
-        return $menu;
181
+		return $menu;
182 182
         
183
-    }
183
+	}
184 184
     
185
-    /**********
185
+	/**********
186 186
      * Hooks
187 187
      **********/
188 188
     
189
-    /**
190
-     * {@inhericDoc}
191
-     * @see \MyArtJaub\Webtrees\Hook\HookSubscriberInterface::getSubscribedHooks()
192
-     */    
193
-    public function getSubscribedHooks() {
194
-        return array(
195
-            'hExtendIndiHeaderIcons' => 20,
196
-            'hExtendIndiHeaderRight' => 20,
197
-            'hRecordNameAppend' => 20
198
-        );
199
-    }
200
-    
201
-    /**
202
-     * {@inhericDoc}
203
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\IndividualHeaderExtenderInterface::hExtendIndiHeaderIcons()
204
-     */
205
-    public function hExtendIndiHeaderIcons(IndividualController $ctrlIndi) {
206
-        if($ctrlIndi){
207
-            $dindi = new Individual($ctrlIndi->getSignificantIndividual());
208
-            return FunctionsPrint::formatSosaNumbers($dindi->getSosaNumbers(), 1, 'large');
209
-        }
210
-        return '';
211
-    }
212
-    
213
-    /**
214
-     * {@inhericDoc}
215
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\IndividualHeaderExtenderInterface::hExtendIndiHeaderLeft()
216
-     */
217
-    public function hExtendIndiHeaderLeft(IndividualController $ctrlIndi) { }
218
-    
219
-    /**
220
-     * {@inhericDoc}
221
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\IndividualHeaderExtenderInterface::hExtendIndiHeaderRight()
222
-     */
223
-    public function hExtendIndiHeaderRight(IndividualController $ctrlIndi) {
224
-        if($ctrlIndi){
225
-            $dindi = new Individual($ctrlIndi->getSignificantIndividual());
226
-            return array('indi-header-sosa',  FunctionsPrint::formatSosaNumbers($dindi->getSosaNumbers(), 2, 'normal'));
227
-        }
228
-        return '';
229
-    }
230
-    
231
-    /**
232
-     * {@inhericDoc}
233
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\RecordNameTextExtenderInterface::hRecordNameAppend()
234
-     */
235
-    public function hRecordNameAppend(GedcomRecord $grec, $size = 'small') {
236
-        if($grec instanceof \Fisharebest\Webtrees\Individual){ // Only apply to individuals
237
-            $dindi = new Individual($grec);
238
-            return FunctionsPrint::formatSosaNumbers($dindi->getSosaNumbers(), 1, $size);
239
-        }
240
-        return '';
241
-    }
242
-    
243
-    /**
244
-     * {@inhericDoc}
245
-     * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\RecordNameTextExtenderInterface::hRecordNamePrepend()
246
-     */
247
-    public function hRecordNamePrepend(GedcomRecord $grec, $size) {}
189
+	/**
190
+	 * {@inhericDoc}
191
+	 * @see \MyArtJaub\Webtrees\Hook\HookSubscriberInterface::getSubscribedHooks()
192
+	 */    
193
+	public function getSubscribedHooks() {
194
+		return array(
195
+			'hExtendIndiHeaderIcons' => 20,
196
+			'hExtendIndiHeaderRight' => 20,
197
+			'hRecordNameAppend' => 20
198
+		);
199
+	}
200
+    
201
+	/**
202
+	 * {@inhericDoc}
203
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\IndividualHeaderExtenderInterface::hExtendIndiHeaderIcons()
204
+	 */
205
+	public function hExtendIndiHeaderIcons(IndividualController $ctrlIndi) {
206
+		if($ctrlIndi){
207
+			$dindi = new Individual($ctrlIndi->getSignificantIndividual());
208
+			return FunctionsPrint::formatSosaNumbers($dindi->getSosaNumbers(), 1, 'large');
209
+		}
210
+		return '';
211
+	}
212
+    
213
+	/**
214
+	 * {@inhericDoc}
215
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\IndividualHeaderExtenderInterface::hExtendIndiHeaderLeft()
216
+	 */
217
+	public function hExtendIndiHeaderLeft(IndividualController $ctrlIndi) { }
218
+    
219
+	/**
220
+	 * {@inhericDoc}
221
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\IndividualHeaderExtenderInterface::hExtendIndiHeaderRight()
222
+	 */
223
+	public function hExtendIndiHeaderRight(IndividualController $ctrlIndi) {
224
+		if($ctrlIndi){
225
+			$dindi = new Individual($ctrlIndi->getSignificantIndividual());
226
+			return array('indi-header-sosa',  FunctionsPrint::formatSosaNumbers($dindi->getSosaNumbers(), 2, 'normal'));
227
+		}
228
+		return '';
229
+	}
230
+    
231
+	/**
232
+	 * {@inhericDoc}
233
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\RecordNameTextExtenderInterface::hRecordNameAppend()
234
+	 */
235
+	public function hRecordNameAppend(GedcomRecord $grec, $size = 'small') {
236
+		if($grec instanceof \Fisharebest\Webtrees\Individual){ // Only apply to individuals
237
+			$dindi = new Individual($grec);
238
+			return FunctionsPrint::formatSosaNumbers($dindi->getSosaNumbers(), 1, $size);
239
+		}
240
+		return '';
241
+	}
242
+    
243
+	/**
244
+	 * {@inhericDoc}
245
+	 * @see \MyArtJaub\Webtrees\Hook\HookInterfaces\RecordNameTextExtenderInterface::hRecordNamePrepend()
246
+	 */
247
+	public function hRecordNamePrepend(GedcomRecord $grec, $size) {}
248 248
     
249 249
     
250 250
     
Please login to merge, or discard this patch.
src/Webtrees/Module/Sosa/Model/SosaCalculator.php 1 patch
Indentation   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -19,121 +19,121 @@
 block discarded – undo
19 19
  */
20 20
 class SosaCalculator {
21 21
     
22
-    /**
23
-     * Maximium size for the temporary Sosa table
24
-     * @var int TMP_SOSA_TABLE_LIMIT
25
-     */
26
-    const TMP_SOSA_TABLE_LIMIT = 1000;
22
+	/**
23
+	 * Maximium size for the temporary Sosa table
24
+	 * @var int TMP_SOSA_TABLE_LIMIT
25
+	 */
26
+	const TMP_SOSA_TABLE_LIMIT = 1000;
27 27
     
28
-    /**
29
-     * Reference user
30
-     * @var Fisharebest\Webtrees\User $user
31
-     */
32
-    protected $user;
28
+	/**
29
+	 * Reference user
30
+	 * @var Fisharebest\Webtrees\User $user
31
+	 */
32
+	protected $user;
33 33
     
34
-    /**
35
-     * Reference tree
36
-     * @var Fisharebest\Webtrees\Tree $tree
37
-     */
38
-    protected $tree;
34
+	/**
35
+	 * Reference tree
36
+	 * @var Fisharebest\Webtrees\Tree $tree
37
+	 */
38
+	protected $tree;
39 39
     
40
-    /**
41
-     * Sosa Provider for the calculator
42
-     * @var \MyArtJaub\Webtrees\Module\Sosa\Model\SosaCalculator $sosa_provider
43
-     */
44
-    protected $sosa_provider;
40
+	/**
41
+	 * Sosa Provider for the calculator
42
+	 * @var \MyArtJaub\Webtrees\Module\Sosa\Model\SosaCalculator $sosa_provider
43
+	 */
44
+	protected $sosa_provider;
45 45
     
46
-    /**
47
-     * Temporary Sosa table, used during construction
48
-     * @var array $tmp_sosa_table
49
-     */
50
-    protected $tmp_sosa_table;
46
+	/**
47
+	 * Temporary Sosa table, used during construction
48
+	 * @var array $tmp_sosa_table
49
+	 */
50
+	protected $tmp_sosa_table;
51 51
     
52
-    /**
53
-     * Constructor for the Sosa Calculator
54
-     * @param Tree $tree
55
-     * @param User $user
56
-     */
57
-    public function __construct(Tree $tree, User $user) {        
58
-        $this->tree = $tree;
59
-        $this->user = $user;
52
+	/**
53
+	 * Constructor for the Sosa Calculator
54
+	 * @param Tree $tree
55
+	 * @param User $user
56
+	 */
57
+	public function __construct(Tree $tree, User $user) {        
58
+		$this->tree = $tree;
59
+		$this->user = $user;
60 60
         
61
-        $this->sosa_provider = new SosaProvider($this->tree, $this->user);;
62
-    }
61
+		$this->sosa_provider = new SosaProvider($this->tree, $this->user);;
62
+	}
63 63
     
64
-    /**
65
-     * Compute all Sosa ancestors from the user's root individual.
66
-     * @return bool Result of the computation
67
-     */
68
-    public function computeAll() {
69
-        $root_id = $this->tree->getUserPreference($this->user, 'MAJ_SOSA_ROOT_ID');        
70
-        $indi = Individual::getInstance($root_id, $this->tree);
71
-        if($indi){
72
-            $this->sosa_provider->deleteAll();
73
-            $this->addNode($indi, 1);
74
-            $this->flushTmpSosaTable(true);
75
-            return true;
76
-        }
77
-        return false;
78
-    }
64
+	/**
65
+	 * Compute all Sosa ancestors from the user's root individual.
66
+	 * @return bool Result of the computation
67
+	 */
68
+	public function computeAll() {
69
+		$root_id = $this->tree->getUserPreference($this->user, 'MAJ_SOSA_ROOT_ID');        
70
+		$indi = Individual::getInstance($root_id, $this->tree);
71
+		if($indi){
72
+			$this->sosa_provider->deleteAll();
73
+			$this->addNode($indi, 1);
74
+			$this->flushTmpSosaTable(true);
75
+			return true;
76
+		}
77
+		return false;
78
+	}
79 79
     
80
-    /**
81
-     * Compute all Sosa Ancestors from a specified Individual
82
-     * @param Individual $indi
83
-     * @return bool Result of the computation
84
-     */
85
-    public function computeFromIndividual(Individual $indi) {
86
-        $dindi = new \MyArtJaub\Webtrees\Individual($indi);
87
-        $current_sosas = $dindi->getSosaNumbers();
88
-        foreach($current_sosas as $current_sosa => $gen) {
89
-            $this->sosa_provider->deleteAncestors($current_sosa);
90
-            $this->addNode($indi, $current_sosa);
91
-        }
92
-        $this->flushTmpSosaTable(true);
93
-        return true;
94
-    }
80
+	/**
81
+	 * Compute all Sosa Ancestors from a specified Individual
82
+	 * @param Individual $indi
83
+	 * @return bool Result of the computation
84
+	 */
85
+	public function computeFromIndividual(Individual $indi) {
86
+		$dindi = new \MyArtJaub\Webtrees\Individual($indi);
87
+		$current_sosas = $dindi->getSosaNumbers();
88
+		foreach($current_sosas as $current_sosa => $gen) {
89
+			$this->sosa_provider->deleteAncestors($current_sosa);
90
+			$this->addNode($indi, $current_sosa);
91
+		}
92
+		$this->flushTmpSosaTable(true);
93
+		return true;
94
+	}
95 95
     
96
-    /**
97
-     * Recursive method to add individual to the Sosa table, and flush it regularly
98
-     * @param Individual $indi Individual to add
99
-     * @param int $sosa Individual's sosa
100
-     */
101
-    protected function addNode(Individual $indi, $sosa) {                
102
-        $birth_year = $indi->getBirthDate()->gregorianYear();
103
-        $birth_year_est = $birth_year === 0 ? $indi->getEstimatedBirthDate()->gregorianYear() : $birth_year;
96
+	/**
97
+	 * Recursive method to add individual to the Sosa table, and flush it regularly
98
+	 * @param Individual $indi Individual to add
99
+	 * @param int $sosa Individual's sosa
100
+	 */
101
+	protected function addNode(Individual $indi, $sosa) {                
102
+		$birth_year = $indi->getBirthDate()->gregorianYear();
103
+		$birth_year_est = $birth_year === 0 ? $indi->getEstimatedBirthDate()->gregorianYear() : $birth_year;
104 104
         
105
-        $death_year = $indi->getDeathDate()->gregorianYear();
106
-        $death_year_est = $death_year === 0 ? $indi->getEstimatedDeathDate()->gregorianYear() : $death_year;
105
+		$death_year = $indi->getDeathDate()->gregorianYear();
106
+		$death_year_est = $death_year === 0 ? $indi->getEstimatedDeathDate()->gregorianYear() : $death_year;
107 107
         
108
-        $this->tmp_sosa_table[] = array(
109
-            'indi' => $indi->getXref(),
110
-            'sosa' => $sosa,
111
-            'birth_year' => $birth_year === 0 ? null : $birth_year,
112
-            'birth_year_est' => $birth_year_est === 0 ? null : $birth_year_est,
113
-            'death_year' => $death_year === 0 ? null : $death_year,
114
-            'death_year_est' => $death_year_est === 0 ? null : $death_year_est
115
-        );
108
+		$this->tmp_sosa_table[] = array(
109
+			'indi' => $indi->getXref(),
110
+			'sosa' => $sosa,
111
+			'birth_year' => $birth_year === 0 ? null : $birth_year,
112
+			'birth_year_est' => $birth_year_est === 0 ? null : $birth_year_est,
113
+			'death_year' => $death_year === 0 ? null : $death_year,
114
+			'death_year_est' => $death_year_est === 0 ? null : $death_year_est
115
+		);
116 116
         
117
-        $this->flushTmpSosaTable();
117
+		$this->flushTmpSosaTable();
118 118
         
119
-        if($fam = $indi->getPrimaryChildFamily()) {
120
-            if($husb = $fam->getHusband()) $this->addNode($husb, 2 * $sosa);
121
-            if($wife = $fam->getWife()) $this->addNode($wife, 2 * $sosa + 1);
122
-        }
123
-    }
119
+		if($fam = $indi->getPrimaryChildFamily()) {
120
+			if($husb = $fam->getHusband()) $this->addNode($husb, 2 * $sosa);
121
+			if($wife = $fam->getWife()) $this->addNode($wife, 2 * $sosa + 1);
122
+		}
123
+	}
124 124
     
125
-    /**
126
-     * Write sosas in the table, if the number of items is superior to the limit, or if forced.
127
-     *
128
-     * @param bool $force Should the flush be forced
129
-     */
130
-    protected function flushTmpSosaTable($force = false) {
131
-        if( count($this->tmp_sosa_table)> 0 && 
132
-            ($force ||  count($this->tmp_sosa_table) >= self::TMP_SOSA_TABLE_LIMIT)){            
133
-                $this->sosa_provider->insertOrUpdate($this->tmp_sosa_table);
134
-                $this->tmp_sosa_table = array();
135
-        }
136
-    }
125
+	/**
126
+	 * Write sosas in the table, if the number of items is superior to the limit, or if forced.
127
+	 *
128
+	 * @param bool $force Should the flush be forced
129
+	 */
130
+	protected function flushTmpSosaTable($force = false) {
131
+		if( count($this->tmp_sosa_table)> 0 && 
132
+			($force ||  count($this->tmp_sosa_table) >= self::TMP_SOSA_TABLE_LIMIT)){            
133
+				$this->sosa_provider->insertOrUpdate($this->tmp_sosa_table);
134
+				$this->tmp_sosa_table = array();
135
+		}
136
+	}
137 137
                
138 138
 }
139 139
  
140 140
\ No newline at end of file
Please login to merge, or discard this patch.
src/Webtrees/Module/Sosa/Views/SosaStatsView.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -23,8 +23,8 @@  discard block
 block discarded – undo
23 23
 	 * {@inhericDoc}
24 24
 	 * @see \MyArtJaub\Webtrees\Mvc\View\AbstractView::renderContent()
25 25
 	 */
26
-    protected function renderContent() {      
27
-        ?>                
26
+	protected function renderContent() {      
27
+		?>                
28 28
         <div id="maj-sosa-stats-page">
29 29
 			<h2><?php echo $this->data->get('title'); ?></h2>
30 30
 			
@@ -36,7 +36,7 @@  discard block
 block discarded – undo
36 36
 			<?php } ?>
37 37
 			
38 38
 			<?php  if($this->data->get('is_setup')) {  
39
-			    $general_stats = $this->data->get('general_stats'); ?>
39
+				$general_stats = $this->data->get('general_stats'); ?>
40 40
 			<h3><?php echo I18N::translate('General statistics'); ?></h3>
41 41
 			<div class="maj-table">
42 42
 				<div class="maj-row">
@@ -126,23 +126,23 @@  discard block
 block discarded – undo
126 126
 						<td class="label" colspan="13">
127 127
 							<?php 
128 128
 							echo I18N::translate(
129
-							         'Mean generation depth: %s',
130
-							         I18N::plural(
131
-							             I18N::translate('%s generation'),
132
-							             I18N::translate('%s generations'),
133
-							             $this->data->get('mean_gen_depth'),
134
-							             I18N::number($this->data->get('mean_gen_depth'),2)
135
-							         )
136
-							    ).
129
+									 'Mean generation depth: %s',
130
+									 I18N::plural(
131
+										 I18N::translate('%s generation'),
132
+										 I18N::translate('%s generations'),
133
+										 $this->data->get('mean_gen_depth'),
134
+										 I18N::number($this->data->get('mean_gen_depth'),2)
135
+									 )
136
+								).
137 137
 								' &mdash; ' . 
138 138
 								I18N::translate(
139
-								    'Standard deviation: %s',
140
-								    I18N::plural(
141
-								        I18N::translate('%s generation'), 
142
-								        I18N::translate('%s generations'), 
143
-								        $this->data->get('stddev_gen_depth'), 
144
-								        I18N::number($this->data->get('stddev_gen_depth'),2)
145
-								    )
139
+									'Standard deviation: %s',
140
+									I18N::plural(
141
+										I18N::translate('%s generation'), 
142
+										I18N::translate('%s generations'), 
143
+										$this->data->get('stddev_gen_depth'), 
144
+										I18N::number($this->data->get('stddev_gen_depth'),2)
145
+									)
146 146
 								);
147 147
 							?>
148 148
 						</td>
@@ -160,13 +160,13 @@  discard block
 block discarded – undo
160 160
 			    <div class="maj-row">
161 161
 			    	<div class="label"><?= I18N::translate('%s times', I18N::number($count)); ?></div>
162 162
 			    	<div class="value"><?php 
163
-			    	echo implode(
164
-			    	    I18N::$list_separator, 
165
-			    	    array_map(function(Individual $indi) {
166
-			    	        return '<a href="'. $indi->getHtmlUrl(). '">'. $indi->getFullName() . '&nbsp;' . $indi->getSexImage() . '</a>';
167
-			    	    }, $indis)
168
-			    	);
169
-			    	?></div>
163
+					echo implode(
164
+						I18N::$list_separator, 
165
+						array_map(function(Individual $indi) {
166
+							return '<a href="'. $indi->getHtmlUrl(). '">'. $indi->getFullName() . '&nbsp;' . $indi->getSexImage() . '</a>';
167
+						}, $indis)
168
+					);
169
+					?></div>
170 170
 				</div>
171 171
 			<?php } ?>
172 172
 			</div>
@@ -187,6 +187,6 @@  discard block
 block discarded – undo
187 187
 			<?php   } else { ?>
188 188
 			<div class="center warning"><?php echo I18N::translate('No Sosa root individual has been defined.'); ?></div>
189 189
 			<?php }     
190
-    }
190
+	}
191 191
     
192 192
 }
193 193
\ No newline at end of file
Please login to merge, or discard this patch.
src/Webtrees/Module/Sosa/Schema/Migration1.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -22,13 +22,13 @@
 block discarded – undo
22 22
 	public function upgrade() {
23 23
 
24 24
 		Database::exec(
25
-		    'ALTER TABLE `##maj_sosa`' . 
26
-		    ' ADD COLUMN majs_birth_year_est SMALLINT NULL AFTER majs_birth_year,' .
27
-		    ' ADD COLUMN majs_death_year_est SMALLINT NULL AFTER majs_death_year'
25
+			'ALTER TABLE `##maj_sosa`' . 
26
+			' ADD COLUMN majs_birth_year_est SMALLINT NULL AFTER majs_birth_year,' .
27
+			' ADD COLUMN majs_death_year_est SMALLINT NULL AFTER majs_death_year'
28 28
 		);
29 29
 		
30 30
 		Database::exec(
31
-		    'DELETE FROM `##maj_sosa`'
31
+			'DELETE FROM `##maj_sosa`'
32 32
 		);
33 33
 	}
34 34
 }
Please login to merge, or discard this patch.