This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
technical_discussions:click_to_connect_extra [2021/10/24 18:31] – [CakePHP3 App Side] admin | technical_discussions:click_to_connect_extra [2021/10/24 19:28] (current) – [Modify the Login Pages for the Extra Options] admin | ||
---|---|---|---|
Line 184: | Line 184: | ||
}, | }, | ||
</ | </ | ||
- | * Next we will see what we need to modify on the CakePHP3 App Side | + | |
+ | * There is a dedicated Wiki Page in this site for it. | ||
+ | | ||
==== CakePHP3 App Side ==== | ==== CakePHP3 App Side ==== | ||
Line 224: | Line 226: | ||
</ | </ | ||
* After taking care of the database lets see what needs to be modified to the CakePHP 3 controllers | * After taking care of the database lets see what needs to be modified to the CakePHP 3 controllers | ||
- | * | + | * Locate the file DynamicDetailsController.php. |
+ | * It is typically under /// | ||
+ | * There is not much that needs modification since CakePHP takes care of most things behind the scenes. | ||
+ | * Just locate the **editClickToConnect** method and modify **$check_items** | ||
+ | <code php> | ||
+ | $check_items = [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ]; | ||
+ | </ | ||
+ | * Locate the file DataCollectorsController.php. | ||
+ | * It is typically under /// | ||
+ | * We will modify the login page eventually to have various options displayed in the Pop-Up for Click-To-Connect so we need to modify the DataCollectorsController to only check the email field **IF PRESENT** | ||
+ | * See the following snippets | ||
+ | <code php> | ||
+ | public function addMac(){ | ||
+ | if ($this-> | ||
+ | if($this-> | ||
+ | if(!$this-> | ||
+ | return; | ||
+ | } | ||
+ | } | ||
+ | $dd = $this-> | ||
+ | </ | ||
+ | * And this one | ||
+ | <code php> | ||
+ | private function _addOrEdit($user, | ||
+ | |||
+ | //__ Authentication + Authorization __ | ||
+ | |||
+ | $user_id | ||
+ | |||
+ | if($this-> | ||
+ | if(!$this-> | ||
+ | return; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $this-> | ||
+ | </ | ||
+ | * Also the **macCheck** method need to give feedback on those new methods in order so we can determine which fields must be shown in the Pop-Up | ||
+ | <code php> | ||
+ | public function macCheck(){ | ||
+ | |||
+ | $data = $this-> | ||
+ | $q_r = $this-> | ||
+ | |||
+ | $data[' | ||
+ | |||
+ | if($q_r){ | ||
+ | |||
+ | //Once we found the Dynamic Login Page; We need to figure out if we need to ask for an email for this person | ||
+ | //For that we need to look for a combo **dynamic_detail_id** and **mac** | ||
+ | //IF found look at the modify timestamp and if it ' | ||
+ | //If not found ask for it (ctc_require_email == true) | ||
+ | //Else we set ctc_require_email == false since we found the combo and it has not expired yet | ||
+ | $dd_id | ||
+ | $dd_resuply_int = $q_r-> | ||
+ | $dd_resuply_intP = $q_r-> | ||
+ | $data[' | ||
+ | |||
+ | if($q_r-> | ||
+ | $q_dd = $this-> | ||
+ | -> | ||
+ | -> | ||
+ | if($q_dd){ | ||
+ | if($dd_resuply_int > 0){ //This has an expiry date lets compare | ||
+ | |||
+ | $expiry_time | ||
+ | $now = new FrozenTime(); | ||
+ | if($expiry_time < $now-> | ||
+ | //It already expired ask for a new one | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | }else{ | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if($q_r-> | ||
+ | $q_dd = $this-> | ||
+ | -> | ||
+ | -> | ||
+ | if($q_dd){ | ||
+ | if($dd_resuply_intP > 0){ //This has an expiry date lets compare | ||
+ | $expiry_time | ||
+ | $now = new FrozenTime(); | ||
+ | if($expiry_time < $now-> | ||
+ | //It already expired ask for a new one | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | }else{ | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if($q_r-> | ||
+ | $q_dd = $this-> | ||
+ | -> | ||
+ | -> | ||
+ | if($q_dd){ | ||
+ | if($dd_resuply_intP > 0){ //This has an expiry date lets compare | ||
+ | $expiry_time | ||
+ | $now = new FrozenTime(); | ||
+ | if($expiry_time < $now-> | ||
+ | //It already expired ask for a new one | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | }else{ | ||
+ | $data[' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | $this-> | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | )); | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | * This brings us to the end of the CakePHP 3 modifications. | ||
+ | * The only remaining part is the login page themselves. | ||
+ | |||
+ | ==== Modify the Login Pages for the Extra Options ==== | ||
+ | * Locate the file rdConnect.js. | ||
+ | * It is typically under /// | ||
+ | * We need to add a flag to set if we created the pop-up window (**ctcFormDone**) | ||
+ | <code javascript> | ||
+ | cMinWidth | ||
+ | scrollHeight | ||
+ | |||
+ | var ctcFormDone | ||
+ | |||
+ | fDebug | ||
+ | if(cDebug){ | ||
+ | console.log(message) | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | </ | ||
+ | * Next we have to add some **OR** coonditions when the user click on the **Click To Connect** button | ||
+ | <code javascript> | ||
+ | var email_check = location.protocol+'//' | ||
+ | |||
+ | webix.ajax().timeout(3000).post( | ||
+ | email_check, | ||
+ | error : function(text, | ||
+ | console.log(" | ||
+ | }, | ||
+ | success : function(text, | ||
+ | if(data.json().success == true){ | ||
+ | if((data.json().data.ctc_require_email == true)||(data.json().data.ctc_require_phone == true)||(data.json().data.ctc_require_dn == true)){ | ||
+ | if(ctcFormDone == false){ //If not already done | ||
+ | buildClickToConnectForm(data.json().data); | ||
+ | } | ||
+ | showForm(" | ||
+ | }else{ | ||
+ | onBtnClickToConnectClick(); | ||
+ | } | ||
+ | }else{ | ||
+ | console.log(" | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | * Lets then see the function that is called **buildClickToConnectForm**. | ||
+ | * This is called only once. | ||
+ | * We also include validation rules for those fields. | ||
+ | <code javascript> | ||
+ | var buildClickToConnectForm = function(data){ | ||
+ | |||
+ | console.log(" | ||
+ | console.log(data); | ||
+ | var e1 = { | ||
+ | view : " | ||
+ | template | ||
+ | }; | ||
+ | var e2 = { view:" | ||
+ | var e3 = { view:" | ||
+ | var e4 = { view:" | ||
+ | var b1 = { view:" | ||
+ | if (this.getParentView().validate()){ //validate form | ||
+ | var button | ||
+ | var formData | ||
+ | var mac_address = getParameterByName(' | ||
+ | formData.append(" | ||
+ | |||
+ | var values | ||
+ | console.log(values); | ||
+ | if(values.email){ | ||
+ | formData.append(" | ||
+ | } | ||
+ | if(values.phone){ | ||
+ | formData.append(" | ||
+ | } | ||
+ | if(values.dn){ | ||
+ | formData.append(" | ||
+ | } | ||
+ | |||
+ | |||
+ | //We also add the following | ||
+ | var called | ||
+ | formData.append(" | ||
+ | |||
+ | var nasid = getParameterByName(' | ||
+ | formData.append(" | ||
+ | |||
+ | //This might not always be included | ||
+ | var ssid = getParameterByName(' | ||
+ | if(ssid !== '' | ||
+ | formData.append(" | ||
+ | } | ||
+ | |||
+ | var add_mac | ||
+ | webix.ajax().timeout(3000).post( | ||
+ | add_mac, | ||
+ | formData, | ||
+ | { | ||
+ | error : function(text, | ||
+ | console.log(" | ||
+ | }, | ||
+ | success : function(text, | ||
+ | if(data.json().success == true){ | ||
+ | // | ||
+ | webix.message(" | ||
+ | button.getTopParentView().hide(); | ||
+ | onBtnClickToConnectClick(); | ||
+ | |||
+ | }else{ | ||
+ | // | ||
+ | webix.message({ type:" | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | } | ||
+ | else | ||
+ | webix.message({ type:" | ||
+ | }}; | ||
+ | |||
+ | var elements = [e1]; | ||
+ | var height | ||
+ | var rules = {}; | ||
+ | |||
+ | if(data.ctc_require_email == true){ | ||
+ | elements.push(e2); | ||
+ | height = height+60; | ||
+ | rules.email = webix.rules.isEmail; | ||
+ | } | ||
+ | if(data.ctc_require_phone == true){ | ||
+ | elements.push(e3); | ||
+ | height | ||
+ | rules.phone = function(value){ | ||
+ | if (! / | ||
+ | webix.message(" | ||
+ | return false; | ||
+ | } | ||
+ | return true; | ||
+ | }; | ||
+ | } | ||
+ | if(data.ctc_require_dn == true){ | ||
+ | elements.push(e4); | ||
+ | height = height+60; | ||
+ | rules.dn = function(value){ | ||
+ | if (! / | ||
+ | webix.message(" | ||
+ | return false; | ||
+ | } | ||
+ | return true; | ||
+ | }; | ||
+ | } | ||
+ | elements.push(b1); | ||
+ | |||
+ | frmEmail = { | ||
+ | view :" | ||
+ | borderless | ||
+ | elements | ||
+ | rules : | ||
+ | elementsConfig: | ||
+ | labelPosition:" | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | | ||
+ | view : " | ||
+ | id : " | ||
+ | head : false, | ||
+ | height | ||
+ | body : | ||
+ | }); | ||
+ | |||
+ | ctcFormDone = true; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | * That brings us to the totality of the changes required. | ||
+ | * These login pages does not need any further optimization. (They are done using Webix) | ||
+ | |||
+ | |||