Avatar of Eddie Shipman
Eddie Shipman
Flag 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.
PHP

Avatar of undefined
Last Comment
hielo

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
hielo

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes