-
Posts
483 -
Joined
-
Last visited
-
Days Won
1
Everything posted by sagnik
-
Hi again, I'm getting the following error after uploading my site: Fatal Error: Cannot use Careers4You\Helpers\Object as Object because 'Object' is a special class name in /home/sgn/public_html/careers4you/config/classes/Careers4You/User/Users.php on line 5But my website is working fine with the above class name 'Object' in my local server. I'm running Apache HTTPD 2.4 with PHP7.1.1, MySQL8 on Windows 10.- Thanks in advance.
-
[Answered] Spaceship (<=>) operator not working on PHP7.2 (ea-php72)
sagnik replied to sagnik's topic in Customer Service
Yeah, it worked. But not sure about what happened with the .htaccess file. As I'm using my mobile right now. Thank you very much for helping me. -
[Answered] Spaceship (<=>) operator not working on PHP7.2 (ea-php72)
sagnik replied to sagnik's topic in Customer Service
http://imgur.com/a/8flhLCe -
[Answered] Spaceship (<=>) operator not working on PHP7.2 (ea-php72)
sagnik replied to sagnik's topic in Customer Service
Yes, you're right. But, how it can be? I've manually set the PHP version of all domains to PHP 7.2 (ea-php72). Let me confirm that again. -
Hi, I've some classes which use the spaceship (<=>) operator as a callback for usort() to sort an associative array by the value of a key. Everything is working fine in my localhost with Apache HTTPD 2.4.23, PHP 7.1.1 running on Windows 10. But after I've uploaded the website to HelioHost, I've got the following error: Parse error: syntax error, unexpected '<' in /home/sgn/public_html/careers4you/config/classes/Careers4You/User/Users.php on line 120 Here is the class: <?php namespace Careers4You\User; session_start(); use \SGNetworks as sgn; use \SGNetworks\SGNErrors as sgne; class Users extends sgn\SGNDatabase{ private $db; private $sgne; const table = "users"; private $tbl; private $sgn; private $sgna; private $uid; function __construct(){ $this->db=parent::getDatabase("accounts"); $this->sgne=new sgn\SGNError; $this->tbl=self::table; $this->sgn=new sgn\SGNetworks; $this->sgna=new sgn\SGNAccounts; $this->uid=$_SESSION['sgn-login_uid']; } private function sort_array($array,$k,$order="ASC"){ $order=strtolower($order); if($order=="asc"){ // Ascending Order usort($array, function($item1, $item2){ return $item1[$k] <=> $item2[$k]; }); } elseif($order=="desc"){ // Descending Order usort($array, function($item1, $item2){ return $item2[$k] <=> $item1[$k]; }); } else { // Ascending Order usort($array, function($item1, $item2){ return $item1[$k] <=> $item2[$k]; }); } return $array; } function isJson($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); } function getUsersCount($type='all'){ $type=filter_data($type,$this->db); if($type=='normal') $cond=" WHERE status='1'"; elseif($type=='banned') $cond=" WHERE status='0'"; $s="SELECT count(id) FROM {$this->tbl}{$cond}"; if($q=db_query($s,$this->db)){ if(db_num_rows($q)>0) return db_fetch_row($q)[0]; } else { $this->sgne->triggerError($this->sgne->processError(sgne::COMMON_ERRORS['SQL_ERROR'])); } } function getUsers($type='all',$sort="timestamp",$order='ASC',$offset=0,$limit=20){ $type=filter_data($type,$this->db); $sort=filter_data($sort,$this->db); $order=filter_data($order,$this->db); $offset=(!is_numeric($offset))?0:$offset; $limit=(!is_numeric($limit))?"":" LIMIT {$offset}, {$limit}"; if($type=='normal') $cond=" WHERE status='1'"; elseif($type=='banned') $cond=" WHERE status='0'"; else $cond=" WHERE status='1'"; $s="SELECT * FROM {$this->tbl}{$cond} ORDER BY {$sort} {$order}{$limit}"; if($q=db_query($s,$this->db)){ if(db_num_rows($q)>0){ $result=array(); while($r=db_fetch_assoc($q)){ $r['fname']=$this->sgna->getUserPersonalProfile('fname',$r['uid']); $r['mname']=$this->sgna->getUserPersonalProfile('mname',$r['uid']); $r['lname']=$this->sgna->getUserPersonalProfile('lname',$r['uid']); $r['dp']=$this->sgna->getUserPersonalProfile('dp',$r['uid']); $r['dp_mime']=$this->sgna->getUserPersonalProfile('dp_mime',$r['uid']); if($r['mname']) $r['name']=$r['fname']." ".$r['mname']." ".$r['lname']; else $r['name']=$r['fname']." ".$r['lname']; $r['dp_image']=(!$r['dp'])?"":bin2file($r['dp'],$r['dp_mime']); array_push($result,$r); } return $result; } } else { $this->sgne->triggerError($this->sgne->processError(sgne::COMMON_ERRORS['SQL_ERROR'])); } } function getUser($id,$f="*"){ $id=filter_data($id,$this->db); $f=filter_data($f,$this->db); $get=$f; if($f=='full_name' || $f=='dp') $f='uid'; if(is_numeric($id)){ $s="SELECT {$f} FROM {$this->tbl} WHERE id='{$id}' OR uid='{$id}'"; if($q=db_query($s,$this->db)){ if(db_num_rows($q)>0){ $r=db_fetch_assoc($q); $r['fname']=$this->sgna->getUserPersonalProfile('fname',$r['uid']); $r['mname']=$this->sgna->getUserPersonalProfile('mname',$r['uid']); $r['lname']=$this->sgna->getUserPersonalProfile('lname',$r['uid']); $r['full_name']=(!$r['mname'])?"{$r['fname']} {$r['lname']}":"{$r['fname']} {$r['mname']} {$r['lname']}"; $r['dp']=$this->sgna->getUserPersonalProfile('dp',$r['uid']); $r['dp_mime']=$this->sgna->getUserPersonalProfile('dp_mime',$r['uid']); if($r['mname']) $r['name']=$r['fname']." ".$r['mname']." ".$r['lname']; else $r['name']=$r['fname']." ".$r['lname']; $r['dp_image']=(!$r['dp'])?"":bin2file($r['dp'],$r['dp_mime']); if($r['experience']){ $r['experience']=json_decode(defilter_data($r['experience'],$this->db),true); usort($r['experience'], function($item1, $item2){ return $item2['date'] <=> $item1['date']; }); $r['experience']=json_encode($r['experience'],JSON_NUMERIC_CHECK); } if($r['education']){ $r['education']=json_decode(defilter_data($r['education'],$this->db),true); usort($r['education'], function($item1, $item2){ return $item2['date'] <=> $item1['date']; }); $r['education']=json_encode($r['education'],JSON_NUMERIC_CHECK); } if($r['skills']){ $r['skills']=json_decode(defilter_data($r['skills'],$this->db),true); usort($r['skills'], function($item1, $item2){ return $item2['date'] <=> $item1['date']; }); $r['skills']=json_encode($r['skills'],JSON_NUMERIC_CHECK); } return ($get!="*")?$r[$get]:$r; } } else { $this->sgne->triggerError($this->sgne->processError(sgne::COMMON_ERRORS['SQL_QUERY_ERROR'])); } } else { $this->sgne->triggerError(sgne::COMMON_ERRORS['INVALID_PARAM_VALUE']['msg'], sgne::COMMON_ERRORS['INVALID_PARAM_VALUE']['code'],"Author ID OR AID"); } } function updateProfile($about,$addr1,$addr2,$street,$locality,$district,$zip,$city,$state,$country,$phone,$email,$website,$dob,$sex,$relationship,$hobbies,$experience,$qualifications,$skills){ $about=filter_data($about,$this->db); $addr1=filter_data($addr1,$this->db); $addr2=filter_data($addr2,$this->db); $street=filter_data($street,$this->db); $locality=filter_data($locality,$this->db); $district=filter_data($district,$this->db); $zip=filter_data($zip,$this->db); $city=filter_data($city,$this->db); $state=filter_data($state,$this->db); $country=filter_data($country,$this->db); $phone=filter_data($phone,$this->db); $email=filter_data($email,$this->db); $website=filter_data($website,$this->db); $dob=filter_data($dob,$this->db); $sex=filter_data($sex,$this->db); $relationship=filter_data($relationship,$this->db); $hobbies=filter_data($hobbies,$this->db); $experience=filter_data($experience,$this->db); $qualifications=filter_data($qualifications,$this->db); $skills=filter_data($skills,$this->db); $s="UPDATE {$this->tbl} SET aboutme='{$about}', address1='{$addr1}', address2='{$addr2}', street='{$street}', locality='{$locality}', district='{$district}', zip='{$zip}', city='{$city}', state='{$state}', country='{$country}', phone='{$phone}', email='{$email}', website='{$website}', dob='{$dob}', sex='{$sex}', relationship='{$relationship}', hobbies='{$hobbies}', experience='{$experience}', education='{$qualifications}', skills='{$skills}' WHERE uid='{$this->uid}'"; if(db_query($s,$this->db)) return true; else return false; } function getProfileHeading($id){ $id=filter_data($id,$this->db); if(is_numeric($id)){ $s="SELECT experience,education FROM {$this->tbl} WHERE uid='{$id}' OR id='{$id}'"; if($q=db_query($s,$this->db)){ if(db_num_rows($q)==1){ $r=db_fetch_assoc($q); $heading=""; if(!empty($r['experience'])){ $experience=json_decode(defilter_data($r['experience'],$this->db),true); usort($experience, function($item1, $item2){ return $item2['date'] <=> $item1['date']; }); $mostRecent=0; $mostRecentArray=""; foreach($experience as $exp){ $curDate = strtotime($exp['date']); if($curDate > $mostRecent) { $mostRecent = $curDate; $mostRecentArray=$exp; } } if(!empty($mostRecentArray['name']) && !empty($mostRecentArray['company'])) $heading="{$mostRecentArray['name']}, {$mostRecentArray['company']}"; elseif(!empty($mostRecentArray['name'])) $heading=$mostRecentArray['name']; } elseif(!empty($r['education'])){ $education=json_decode(defilter_data($r['education'],$this->db),true); usort($education, function($item1, $item2){ return $item2['date'] <=> $item1['date']; }); $mostRecent=0; $mostRecentArray=""; foreach($education as $edu){ $curDate = strtotime($edu['date']); if($curDate > $mostRecent) { $mostRecent = $curDate; $mostRecentArray=$edu; } } if(!empty($mostRecentArray['name']) && !empty($mostRecentArray['institution'])) $heading="{$mostRecentArray['name']}, {$mostRecentArray['institution']}"; elseif(!empty($mostRecentArray['name'])) $heading=$mostRecentArray['name']; elseif(!empty($mostRecentArray['institution'])) $heading="Student of {$mostRecentArray['institution']}"; } elseif(!empty($r['skills'])){ $skills=json_decode(defilter_data($r['skills'],$this->db),true); usort($skills, function($item1, $item2){ return $item2['date'] <=> $item1['date']; }); $mostRecent=0; $mostRecentArray=""; foreach($skills as $s){ $curDate = strtotime($s['date']); if($curDate > $mostRecent) { $mostRecent = $curDate; $mostRecentArray=$s; } } if(!empty($mostRecentArray['name'])) $heading=$mostRecentArray['name']; } return $heading; } } else { $this->sgne->triggerError($this->sgne->processError(sgne::COMMON_ERRORS['SQL_QUERY_ERROR'])); } } else { $this->sgne->triggerError(sgne::COMMON_ERRORS['INVALID_PARAM_VALUE']['msg'], sgne::COMMON_ERRORS['INVALID_PARAM_VALUE']['code'],"User ID OR UID"); } } } ?>
-
Glad to help you. Feel free to ask, if you have any problems.
-
Okay, I've tried but it's not working that way I've wanted. Sorry but I don't have access to the Internet for the past 4 days, so I was not able to post the result here. Here is the code of my plugin: /**************************************************************************************************************************** ******************************************************SGNUPLOAD v1.0.1******************************************************* ***************************************************************************************************************************** * DATE: October 15, 2018 * * AUTHOR: Sagnik Ganguly * * E-MAIL: sagnikganguly2012@rediffmail.com * * WEBSITE: https://plugins.sgnetworks.cf/jquery/sgnupload * * DOCUMENTATION: https://docs.plugins.sgnetworks.cf/jquery/sgnupload * ****************************************************************************************************************************/ if (!window.BlobBuilder) { window.BlobBuilder = window.WebKitBlobBuilder || window.MozBlobBuilder; } if (!window.URL) { window.URL = window.webkitURL || window.mozURL; } $.worker = function(args) { var def = $.Deferred(function(dfd) { var worker; if (window.Worker) { var url = args.file; // If we have found a DOM object related, // we need constructo a `BlobBuilder` to // inline the web worker. if(args.id){ var dom = document.querySelector('#' + args.id), blob = new BlobBuilder(); blob.append(dom.textContent); url = window.URL.createObjectURL(blob.getBlob()); } // Construct the Web Worker var worker = new Worker(url); // If the Worker reports success, resolve the Deferred worker.onmessage = function(event) { dfd.resolve(event); }; // If the Worker reports an error, reject the Deferred worker.onerror = function(event) { dfd.reject(event); }; // Create a pointer to 'postMessage' on the Deferred this.postMessage = function(msg){ worker.postMessage(msg); }; this.terminate = function(){ worker.terminate(); }; // If args were passed, start the worker with supplied args if(args.args){ worker.postMessage(args.args); } } else { $.error("Worker is not supported in this browser!"); } }); return def; }; (function ($) { var SGNUpload = function (element, options) { var _pluginName = "SGNUpload", _version = "1.0.1"; var SPACE_KB = 1024, SPACE_MB = 1024 * SPACE_KB; SPACE_GB = 1024 * SPACE_MB; SPACE_TB = 1024 * SPACE_GB; var _defaults = { onProgressUpdate: function (progress, loaded, lengthOfFile) {}, onTaskCompleted: function (e, response) {}, onTaskCancelled: function () {}, onTaskFailed: function (e, error) {} } var _options = { url: '', formData: '', onProgressUpdate: '', onTaskCompleted: '', onTaskCancelled: '', onTaskFailed: '' } var plugin = this, $element = $(element); plugin.settings = {} function readBlob(opt_startByte, opt_stopByte) { var files = document.getElementById('files').files; if (!files.length) { alert('Please select a file!'); return; } var file = files[0]; var start = parseInt(opt_startByte) || 0; var stop = parseInt(opt_stopByte) || file.size - 1; var reader = new FileReader(); // If we use onloadend, we need to check the readyState. reader.onloadend = function (evt) { if (evt.target.readyState == FileReader.DONE) { // DONE == 2 /* document.getElementById('byte_content').textContent = evt.target.result; document.getElementById('byte_range').textContent = ['Read bytes: ', start + 1, ' - ', stop + 1, ' of ', file.size, ' byte file'].join(''); */ } }; var blob = file.slice(start, stop + 1); reader.readAsBinaryString(blob); } function Bytes2String(sizeInBytes) { if (sizeInBytes < SPACE_KB) { return sizeInBytes.toString() + " Byte(s)"; } else if (sizeInBytes < SPACE_MB) { return (sizeInBytes / SPACE_KB).toString() + " KB"; } else if (sizeInBytes < SPACE_GB) { return (sizeInBytes / SPACE_MB).toString() + " MB"; } else if (sizeInBytes < SPACE_TB) { return (sizeInBytes / SPACE_GB).toString() + " GB"; } else { return (sizeInBytes / SPACE_TB).toString() + " TB"; } } function Bytes2ProgressString(progressInBytes, totalInBytes) { if (totalInBytes < SPACE_KB) { return progressInBytes.toString() + "/" + totalInBytes.toString() + " Byte(s)"; } else if (totalInBytes < SPACE_MB) { return (progressInBytes / SPACE_KB).toString() + "/" + (totalInBytes / SPACE_KB).toString() + " KB"; } else if (totalInBytes < SPACE_GB) { return (progressInBytes / SPACE_MB).toString() + "/" + (totalInBytes / SPACE_MB).toString() + " MB"; } else if (totalInBytes < SPACE_TB) { return (progressInBytes / SPACE_GB).toString() + "/" + (totalInBytes / SPACE_GB).toString() + " GB"; } else { return (progressInBytes / SPACE_TB).toString() + "/" + (totalInBytes / SPACE_TB).toString() + " TB"; } } function percentage(progress, total) { return Math.round(total ? progress * 100 / total : 100); } function publishProgress(e,loaded,total) { var t = $.type(e), percent = t == "object" && e.lengthComputable ? percentage(e.loaded, e.total) + "%" : t == "number" ? e + "%" : t == "string" ? e : "0%"; if(t=="object" && e.lengthComputable && loaded===undefine && total===undefined) plugin.settings.onProgressUpdate(percent, e.loaded, e.total); else if(t=="number" && $.isNumeric(loaded) && $.isNumeric(total)) plugin.settings.onProgressUpdate(percent, loaded, total); } function werror(e) { console.log(e, 'ERROR: Line ', e.lineno, ' in ', e.filename, ': ', e.message); } function _create() { /* $.ajax({ url: plugin.settings.url, type: 'POST', data: plugin.settings.formData, cache: false, contentType: false, processData: false, xhr: function(){ var myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ myXhr.upload.addEventListener('progress', function(e){ if(e.lengthComputable){ publishProgress(e); } }, false); myXhr.upload.addEventListener('loadend', function(e){ publishProgress(e); }, false); } return myXhr; }, success: function(d){ plugin.settings.onTaskCompleted(d); }, error: function(xhr){ plugin.settings.onTaskFailed(xhr); } }); */ /******* HERE IS THE PROBLEM ******* *AS MY PLUGIN IS ASSOCIATED ON $ INSTEAD OF $.fn, I DON'T HAVE ACCESS TO DOM ("#fileupload") AS USERS CAN HAVE AN ID OTHER THAN THAT********* * SO I NEED A WAY TO SUPPORT CHUNKED FILE UPLOADS WITH $.fn, I NEED A $. OBJECT */ $("#fileupload").fileupload({ url: plugin.settings.url, //dataType: 'json', done: function (e, data) { /* $.each(data.result.files, function (index, file) { $('<p/>').text(file.name).appendTo('#files'); }); */ plugin.settings.onTaskCompleted(e,data); }, progress: function (e, data) { var progress = parseInt(data.loaded / data.total * 100, 10); /* $('#progress .progress-bar').css( 'width', progress + '%' ); */ publishProgress(progress, data.loaded, data.total); }, fail: function(e, data){ plugin.settings.onTaskFailed(e,data); } }) } plugin.init = function (args) { plugin.settings = $.extend(_defaults, args); $.each(plugin.settings, function (k, v) { if (typeof v === 'function') { if (_options.hasOwnProperty(k)) { _checked = true; } else { _checked = false; $.error('Invalid callback for: ' + k + ' in jQuery.' + _pluginName); } } else if (typeof v === 'string') { if ($.inArray(v, _options[k]) !== -1 || _options.hasOwnProperty(k)) { _checked = true; } else { _checked = false; $.error('Invalid value: ' + v + ' for option: ' + k + ' in jQuery.' + _pluginName); } } }); if (_checked) { $element.data('options', plugin.settings); _create(); } else { $.error('Something went wrong in jQuery.' + _pluginName); } } } $.SGNUpload = function (options) { var _this = this; var _plugin = new SGNUpload(this, options); _this.initialize = function (options) { _plugin.init(options); return this; } if (typeof options !== 'undefined') return this.initialize(options); return this; } return this; })(jQuery); And here is the inilization code of the plugin: submitBtn.click(function(e){ e.preventDefault(); var $this=$(this); $(this).SGNSpinner({ showContents: false, halign: 'center', valign: 'middle' }); if(validationPassed){ if(tos.prop("checked") && privacy.prop("checked")){ var data=new FormData($('#sge-upload_gamePlayForm')[0]); $.each(files, function(key, value){ data.append(key, value); }); $.SGNUpload({ url: '<?=$public_root;?>upload/ajax/gameplay', formData: data, onProgressUpdate: function(progress, loaded, lengthOfFile){ console.log(progress, loaded, lengthOfFile); }, onTaskCompleted: function(response){ console.log(response); }, onTaskCancelled: function(){ }, onTaskFailed: function(error){ console.log(error); } }); } else { $(this).SGNSpinner().hide(); $this.SGNIMsg("You must be agree to our Terms Of Service & Privacy Policy in order to submit the form. Please read the agreements first then on the I agree buttons then submit the form again."); } } else { $(this).SGNSpinner().hide(); alert("Please check the details and try again"); } }) });
-
Hi, I'm developing a plugin which will allow users to upload files to the server as well as send form data to the server. But I need to chunk/slice large files using Web/Service Worker so that it doesn't break PHP's upload_max_filesize & post_max_size and don't halt the UI as well. But the problem is, if the form contains input fields, I need to send them as well. I want know how can I do that?
-
Okay. I got it. So did you find out where the attack came from?
-
I think no. It's probably the cause of incorrect .htaccess settings. You can check if I'm right by removing .htaccess. I think the error is caused by an incorrect URL Rewriting or you have turned off DirectoryIndex.
-
I've two domains, for example, accounts.com & domain2.com. I've set some sessions in domain2.com. And I need to remove those sessions from accounts.com using ajax. How can I achieve this? THE PROBLEM: <?php session_start(); require_once dirname(dirname(__FILE__))."/config/config.php"; header("Access-Control-Allow-Origin: accounts.com"); header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Methods: POST"); header("Access-Control-Allow-Headers: Content-Type, *"); if(!empty($_POST['sgnsid'])){ /* print_r($_COOKIE); print_r($_SESSION); */ session_unset($_SESSION['sgn-login_sessid']); session_unset($_SESSION['sgn-login_uid']); session_unset($_SESSION['sgn-login_uid_md5']); session_unset($_SESSION['sgn-login_expires']); session_unset(); session_destroy(); session_write_close(); echo "done"; } else { echo "Empty SGNSID"; } ?>Now, when a user clicks on the "Logout" button, an ajax call is made to the "signoff.php" on "domain2.com": $.ajax({ url: "https://domain2.com/signoff.php", type: "POST", crossDomain:true, xhrFields: { withCredentials: true }, success: function(d){ console.log(post); if(post=="done") done=true; } }); But when I look into the Console the script is returning (if the print_r($_SESSION) & print_r($_COOKIE) ar not commented):Array ( ) Array ( ) done Otherwise: done And also the session variables were not removed. And what I'm building is a SingleSignOn system. And what I'm trying to do is, when a user logs in in accounts.com, some cookies & sessions are set two all the domains. Same way, when a user clicks on "Logout" button all the cookies & sessions must be removed from all the domains using ajax.
-
Hi, I'm developing a jQuery chart plugin which will allow to create any type of charts but currently donut charts are allowed. It has 2 options, one of those is "maxProgress" and another is "completed". These options can be modified using "max-progress" & "completed" attributes of a "div" element. And in the CSS part has a fixed property of "600" for "stroke-dasharray". And when a donut chart has been created "style=stroke-dashoffset" is added to the "circle" tag inside an svg element using jquery. So what I need to do is, somehow calculate the "stroke-dashoffset" value which cannot be greater than "600". For example, if an user creates the following element: <div class="sgn-charts" max-progress="100" completed="50"></div>Then the circle of the chart should be half-filled. It should work like a clock.Another example is, <div class="sgn-charts" max-progress="100" completed="70"></div>In this case, the circle should look as it looks in an analogue clock when the time is "12:40".Can anyone help me to do this? Thanks in advance.
-
I think the problem is occurring from CloudFlare. Turn off CloudFlare and then see if it works, if it does, then check your CloudFlare configuration. I'm not sure but I can see that the domain is not pointing to Heliohost Nameservers. It may be a cause for the problem.
-
Sir, I'm a student of BCA and I develop websites for others. But many of them demands free hosting as the high cost of web hosting. So to host a website I need a hosting provider. So I request you kindly allow me to host their websites on Heliohost's Tommy Server. I'll donate some amount of money from the payment they'll provide me.
-
Okay, thanks for your help.
-
Okay, got it. Can you help me with another question in here: https://www.helionet.org/index/topic/32881-cross-domain-cookieslocalstorage-in-jquery/?do=findComment&comment=147955
-
How can I park a domain on an addon domain?
-
I'm developing a Third Party Login System (Oauth) like facebook developers and I need to set cookies multiple domains (depends on how many domains user specifies). So I need to set cookies to all the domains a user specifies using jquery, I've tried everything but none has worked. All I found is "create an iframe","use ajax to set a cookie across multiple domains" but they will not work in my case because, it will need the user to create a html for the iframe or a php file for ajax request that I don't want to do. What I want to do is let the user include the Jquery SDK and allow the user to make requests and to make requests SDK will set cookies so I need to use a cookie for all the specified domains. Here is the flow of how it works: It've two initialization methods "NM.init()" & "NM.login.init()" First of all, user calls NM.init() to set his/her App ID & App Secret. (Here the SDK uses cookies to set the App ID and Secret for every domain configured in the app) Then, user calls NM.login.init() to set the fields he/she wants to retrieve. (Here the SDK uses cookies to set the Fields for every domain configured in the app) After that, user calls NM.login.request() to retrieve the fields he/he set in NM.login.init(). (He can call NM.login.request() either from the same page/domain where he/she called NM.init() and NM.login.init() or from any other page/domain). In case if user calls NM.login.request from another domain, it needed to get the cookies set on other domain.
-
Is there any way to re-lock bootloader with a custom rom? How can I run Google's Tez on a Custom Rom (I'm using crDroid)? I don't know if "Google's Tez" is available outside of India or not. I've used MagiskSU to hide Tez from SU but it failed to hide Tez. That's why I'm asking this question.
-
Can I create my own PDF Writer in PHP if yes then how?
sagnik replied to sagnik's topic in Website Management and Coding
Okay, I will try some scripts from the website you specified if no-one has fullfilled my expectations then I will let you know. -
Can I create my own PDF Writer in PHP if yes then how?
sagnik replied to sagnik's topic in Website Management and Coding
Yeah, it's good but it requires "WKHTMLtoPDF" installed to execute the commands from PHP. If I want to use PHPWKHTMLtoPDF, I must have to install WKHTMLtoPDF on the system. In my local server it's possible but in HelioHost, it's not possible as Root Admins definitely will not allow me to install the framework on the system. That's why I want to create my own PDF Writer in PHP without any dependencies.