Link to home
Start Free TrialLog in
Avatar of Eddie Shipman
Eddie ShipmanFlag for United States of America

asked on

Help refactoring PHP function

I have the following PHP function from an ExpressionEngine plugin and having a little difficulty figuring out how to refactor this to be more efficient, and shorter.

    public function checkuser() {
        $first_name = $this->EE->input->post("FirstName");
        $last_name  = $this->EE->input->post("LastName");
        $DOB        = $this->EE->input->post("DOB");
        $email      = $this->EE->input->post("Email");
        $this->return_data['error'] = '';
        
        $senddata = array("SearchBy"       =>  "FIND",
                          "UserID"         =>  null,
                          "Username"       =>  null,
                          "Sha1Password"   =>  null,
                          "FirstName"      =>  $first_name,
                          "LastName"       =>  $last_name,
                          "DOB"            =>  $DOB,
                          "Address"        =>  null,
                          "Zip"            =>  null,
                          "Phone"          =>  null,
                          "Email"          =>  $email 
        );

        $url = $this->scic_db_url.'SC2/FindUser';
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
        curl_setopt($ch, CURLOPT_USERAGENT, 'HAC');
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_TIMEOUT, 120);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($senddata));
        $re = curl_exec($ch);
        $curl_err = curl_error($ch);
        curl_close($ch);
        $part = json_decode($re, true);

        if($curl_err) return $curl_err;
        if(!array_key_exists("Exception", $part)) {
            // User exists. check email for the $part to see if it matches one passed?
            if($part["Primary_Email_Address"] !== $email) {
                $this->return_data['error'] = "* Your account information is in our database, however, it contains a different email address.";
            } else {
                $this->return_data['error'] = "* An Account with this email has already been created";
            }
        } elseif(strpos($part["Message"],"No records found") > -1) {
            // Person with that information doesn't exist but let's check for the email addy once again, for safeties sake
            $senddata = array("SearchBy"       =>  "EMAIL",
                              "UserID"         =>  null,
                              "Username"       =>  null,
                              "Sha1Password"   =>  null,
                              "FirstName"      =>  null,
                              "LastName"       =>  null,
                              "DOB"            =>  null,
                              "Address"        =>  null,
                              "Zip"            =>  null,
                              "Phone"          =>  null,
                              "Email"          =>  $email // ONLY REQUIRED parameter for EMAIL searches
            );

            $url = $this->scic_db_url.'SC2/FindUser';
            $ch = curl_init();

            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
            curl_setopt($ch, CURLOPT_USERAGENT, 'HAC');
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            curl_setopt($ch, CURLOPT_TIMEOUT, 120);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($senddata));
            $re = curl_exec($ch);
            $curl_err = curl_error($ch);
            curl_close($ch);
            $part = json_decode($re, true);
            if($part["Primary_Email_Address"] === $email) {
                $this->return_data['error'] = "* An Account with this email has already been created";
            }
        } else {
            $this->return_data['success'] = true;
        }
        return json_encode($this->return_data);
    }

Open in new window


I'd preferably like to have a function that I could pass the method, "FIND" or "EMAIL" and the arguments and have it return either the error message or success.
ASKER CERTIFIED SOLUTION
Avatar of hielo
hielo
Flag of Wallis and Futuna image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial