Complex classes like WindowsCommon often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use WindowsCommon, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
27 | class WindowsCommon extends \core\DeviceConfig { |
||
28 | |||
29 | public function copyBasicFiles() { |
||
30 | if (!($this->copyFile('wlan_test.exe') && |
||
31 | $this->copyFile('check_wired.cmd') && |
||
32 | $this->copyFile('install_wired.cmd') && |
||
33 | $this->copyFile('cat_bg.bmp') && |
||
34 | $this->copyFile('base64.nsh'))) { |
||
35 | throw new Exception("Copying needed files (part 1) failed for at least one file!"); |
||
36 | } |
||
37 | |||
38 | if (!($this->copyFile('cat32.ico') && |
||
39 | $this->copyFile('cat_150.bmp') && |
||
40 | $this->copyFile('WLANSetEAPUserData/WLANSetEAPUserData32.exe', 'WLANSetEAPUserData32.exe') && |
||
41 | $this->copyFile('WLANSetEAPUserData/WLANSetEAPUserData64.exe', 'WLANSetEAPUserData64.exe'))) { |
||
42 | throw new Exception("Copying needed files (part 2) failed for at least one file!"); |
||
43 | } |
||
44 | if (!$this->translateFile('common.inc', 'common.nsh', $this->codePage)) { |
||
45 | throw new Exception("Translating needed file common.inc failed!"); |
||
46 | } |
||
47 | return; |
||
48 | } |
||
49 | |||
50 | public function copyPwdFiles() { |
||
51 | if (!($this->copyFile('Aruba_Networks_EAP-pwd_x32.msi') && |
||
52 | $this->copyFile('Aruba_Networks_EAP-pwd_x64.msi'))) { |
||
53 | throw new Exception("Copying needed files (EAP-pwd) failed for at least one file!"); |
||
54 | } |
||
55 | if (!$this->translateFile('pwd.inc', 'cat.NSI', $this->codePage)) { |
||
56 | throw new Exception("Translating needed file pwd.inc failed!"); |
||
57 | } |
||
58 | } |
||
59 | |||
60 | public function copyGeantLinkFiles() { |
||
61 | if (!($this->copyFile('GEANTLink/GEANTLink32.msi', 'GEANTLink32.msi') && |
||
62 | $this->copyFile('GEANTLink/GEANTLink64.msi', 'GEANTLink64.msi') && |
||
63 | $this->copyFile('GEANTLink/CredWrite.exe', 'CredWrite.exe') && |
||
64 | $this->copyFile('GEANTLink/MsiUseFeature.exe', 'MsiUseFeature.exe'))) { |
||
65 | throw new Exception("Copying needed files (GEANTLink) failed for at least one file!"); |
||
66 | } |
||
67 | if (!$this->translateFile('geant_link.inc', 'cat.NSI', $this->codePage)) { |
||
68 | throw new Exception("Translating needed file geant_link.inc failed!"); |
||
69 | } |
||
70 | } |
||
71 | |||
72 | |||
73 | /** |
||
74 | * function to escape double quotes in a special NSI-compatible way |
||
75 | * |
||
76 | * @param string $in input string |
||
77 | * @return string |
||
78 | */ |
||
79 | public static function echo_nsi($in) { |
||
80 | echo preg_replace('/"/', '$\"', $in); |
||
81 | } |
||
82 | |||
83 | /** |
||
84 | * @param string $input input string |
||
85 | * @return string |
||
86 | */ |
||
87 | public static function sprint_nsi($input) { |
||
88 | return preg_replace('/"/', '$\"', $input); |
||
89 | } |
||
90 | |||
91 | public function __construct() { |
||
92 | parent::__construct(); |
||
93 | $this->useGeantLink = (isset($this->options['args']) && $this->options['args'] == 'gl' ) ? 1 : 0; |
||
94 | } |
||
95 | |||
96 | protected function prepareInstallerLang() { |
||
106 | |||
107 | public function writeDeviceInfo() { |
||
108 | $ssidCount = count($this->attributes['internal:SSID']); |
||
109 | $out = "<p>"; |
||
110 | $out .= sprintf(_("%s installer will be in the form of an EXE file. It will configure %s on your device, by creating wireless network profiles.<p>When you click the download button, the installer will be saved by your browser. Copy it to the machine you want to configure and execute."), CONFIG_CONFASSISTANT['CONSORTIUM']['display_name'], CONFIG_CONFASSISTANT['CONSORTIUM']['display_name']); |
||
111 | $out .= "<p>"; |
||
112 | if ($ssidCount > 1) { |
||
113 | if ($ssidCount > 2) { |
||
114 | $out .= sprintf(_("In addition to <strong>%s</strong> the installer will also configure access to the following networks:"), implode(', ', CONFIG_CONFASSISTANT['CONSORTIUM']['ssid'])) . " "; |
||
115 | } else { |
||
116 | $out .= sprintf(_("In addition to <strong>%s</strong> the installer will also configure access to:"), implode(', ', CONFIG_CONFASSISTANT['CONSORTIUM']['ssid'])) . " "; |
||
117 | } |
||
118 | $out .= '<strong>' . join('</strong>, <strong>', array_diff(array_keys($this->attributes['internal:SSID']), CONFIG_CONFASSISTANT['CONSORTIUM']['ssid'])) . '</strong>'; |
||
119 | $out .= "<p>"; |
||
120 | } |
||
121 | // TODO - change this below |
||
122 | if ($this->selectedEapObject->isClientCertRequired()) { |
||
|
|||
123 | $out .= sprintf(_("In order to connect to the network you will need an a personal certificate in the form of a p12 file. You should obtain this certificate from your %s. Consult the support page to find out how this certificate can be obtained. Such certificate files are password protected. You should have both the file and the password available during the installation process."), $this->nomenclature_inst); |
||
124 | return($out); |
||
125 | } |
||
126 | // not EAP-TLS |
||
127 | $out .= sprintf(_("In order to connect to the network you will need an account from your %s. You should consult the support page to find out how this account can be obtained. It is very likely that your account is already activated."), $this->nomenclature_inst); |
||
128 | |||
129 | if (! $this->useGeantLink && $this->selectedEap['OUTER'] == \core\common\EAP::TTLS) { |
||
130 | $out .= "<p>"; |
||
131 | $out .= _("When you are connecting to the network for the first time, Windows will pop up a login box, where you should enter your user name and password. This information will be saved so that you will reconnect to the network automatically each time you are in the range."); |
||
132 | if ($ssidCount > 1) { |
||
133 | $out .= "<p>"; |
||
134 | $out .= _("You will be required to enter the same credentials for each of the configured notworks:") . " "; |
||
135 | $out .= '<strong>' . join('</strong>, <strong>', array_keys($this->attributes['internal:SSID'])) . '</strong>'; |
||
136 | } |
||
137 | } |
||
138 | return($out); |
||
139 | } |
||
140 | |||
141 | private function scaleLogo($imagePath, $maxSize) { |
||
160 | |||
161 | protected function combineLogo($logos = NULL, $fedLogo = NULL) { |
||
203 | |||
204 | protected function signInstaller() { |
||
217 | |||
218 | protected function compileNSIS() { |
||
228 | |||
229 | protected function msInfoFile($attr) { |
||
256 | |||
257 | protected function writeAdditionalDeletes($profiles) { |
||
268 | |||
269 | protected function writeClientP12File() { |
||
277 | |||
278 | protected function writeTlsUserProfile() { |
||
281 | |||
282 | public $LANGS = [ |
||
283 | 'fr' => ['nsis' => "French", 'cp' => '1252'], |
||
284 | 'de' => ['nsis' => "German", 'cp' => '1252'], |
||
285 | 'es' => ['nsis' => "SpanishInternational", 'cp' => '1252'], |
||
286 | 'it' => ['nsis' => "Italian", 'cp' => '1252'], |
||
287 | 'nl' => ['nsis' => "Dutch", 'cp' => '1252'], |
||
288 | 'sv' => ['nsis' => "Swedish", 'cp' => '1252'], |
||
289 | 'fi' => ['nsis' => "Finnish", 'cp' => '1252'], |
||
290 | 'pl' => ['nsis' => "Polish", 'cp' => '1250'], |
||
291 | 'ca' => ['nsis' => "Catalan", 'cp' => '1252'], |
||
292 | 'sr' => ['nsis' => "SerbianLatin", 'cp' => '1250'], |
||
293 | 'hr' => ['nsis' => "Croatian", 'cp' => '1250'], |
||
294 | 'sl' => ['nsis' => "Slovenian", 'cp' => '1250'], |
||
295 | 'da' => ['nsis' => "Danish", 'cp' => '1252'], |
||
296 | 'nb' => ['nsis' => "Norwegian", 'cp' => '1252'], |
||
297 | 'nn' => ['nsis' => "NorwegianNynorsk", 'cp' => '1252'], |
||
298 | 'el' => ['nsis' => "Greek", 'cp' => '1253'], |
||
299 | 'ru' => ['nsis' => "Russian", 'cp' => '1251'], |
||
300 | 'pt' => ['nsis' => "Portuguese", 'cp' => '1252'], |
||
301 | 'uk' => ['nsis' => "Ukrainian", 'cp' => '1251'], |
||
302 | 'cs' => ['nsis' => "Czech", 'cp' => '1250'], |
||
303 | 'sk' => ['nsis' => "Slovak", 'cp' => '1250'], |
||
304 | 'bg' => ['nsis' => "Bulgarian", 'cp' => '1251'], |
||
305 | 'hu' => ['nsis' => "Hungarian", 'cp' => '1250'], |
||
306 | 'ro' => ['nsis' => "Romanian", 'cp' => '1250'], |
||
307 | 'lv' => ['nsis' => "Latvian", 'cp' => '1257'], |
||
308 | 'mk' => ['nsis' => "Macedonian", 'cp' => '1251'], |
||
309 | 'et' => ['nsis' => "Estonian", 'cp' => '1257'], |
||
310 | 'tr' => ['nsis' => "Turkish", 'cp' => '1254'], |
||
311 | 'lt' => ['nsis' => "Lithuanian", 'cp' => '1257'], |
||
312 | 'ar' => ['nsis' => "Arabic", 'cp' => '1256'], |
||
313 | 'he' => ['nsis' => "Hebrew", 'cp' => '1255'], |
||
314 | 'id' => ['nsis' => "Indonesian", 'cp' => '1252'], |
||
315 | 'mn' => ['nsis' => "Mongolian", 'cp' => '1251'], |
||
316 | 'sq' => ['nsis' => "Albanian", 'cp' => '1252'], |
||
317 | 'br' => ['nsis' => "Breton", 'cp' => '1252'], |
||
318 | 'be' => ['nsis' => "Belarusian", 'cp' => '1251'], |
||
319 | 'is' => ['nsis' => "Icelandic", 'cp' => '1252'], |
||
320 | 'ms' => ['nsis' => "Malay", 'cp' => '1252'], |
||
321 | 'bs' => ['nsis' => "Bosnian", 'cp' => '1250'], |
||
322 | 'ga' => ['nsis' => "Irish", 'cp' => '1250'], |
||
323 | 'uz' => ['nsis' => "Uzbek", 'cp' => '1251'], |
||
324 | 'gl' => ['nsis' => "Galician", 'cp' => '1252'], |
||
325 | 'af' => ['nsis' => "Afrikaans", 'cp' => '1252'], |
||
326 | 'ast' => ['nsis' => "Asturian", 'cp' => '1252'], |
||
327 | ]; |
||
328 | public $codePage; |
||
329 | public $lang; |
||
330 | public $useGeantLink; |
||
331 | private $background; |
||
332 | |||
333 | } |
||
334 |
An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.
If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.