prepare($sql); $execSQL->execute(array()); $rows = $execSQL->fetchAll(PDO::FETCH_ASSOC); return $rows; } private function _checkIfUserReferralExists($email_referral){ $oPDOLink = ClassConfig::databaseConnect(); $sql = "SELECT id FROM user_user WHERE email=:email LIMIT 1;"; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array(':email'=>$email_referral)); $row = $execSQL->fetch(PDO::FETCH_ASSOC); return $row['id']; } private function _createDefaultPublicProfileForNewUser($user_id, $email, $country_id, $lang_id, $description, $files){ $oPDOLink = ClassConfig::databaseConnect(); $sql = " INSERT INTO public_profile(user_id, email, country_id, lang_id, description, photo_name, photo_type, photo_size, photo) VALUES(:user_id, :email, :country_id, :lang_id, :description, :photo_name, :photo_type, :photo_size, :photo); "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array( ':user_id'=>$user_id, ':email'=>$email, ':country_id'=>$country_id, ':lang_id'=>$lang_id, ':description'=>$description, ':photo_name'=>$files['form_addPublicProfile_photo']['name'], ':photo_type'=>$files['form_addPublicProfile_photo']['type'], ':photo_size'=>$files['form_addPublicProfile_photo']['size'], ':photo'=>base64_encode(file_get_contents($files['form_addPublicProfile_photo']['tmp_name'])) )); } public function createUser($data, $files){ $this->_data = $data; $config = ClassConfig::getConfig(); $oPDOLink = ClassConfig::databaseConnect(); if($this->_data['register_form_emailReferral'] != ''){ $user_referral_id = $this->_checkIfUserReferralExists($this->_data['register_form_emailReferral']); if($user_referral_id == false){ $message['state']='failed'; $message['css_class']='failed'; $message['translation_code'] = 'checkEmailReferralDoesNotExists'; return $message; } } else { $user_referral_id = 1; } if($this->_data['register_form_password'] != $this->_data['register_form_passwordConfirm']){ $message['state']='failed'; $message['css_class']='failed'; $message['translation_code'] = 'checkRegisterForm_notSamePassword'; return $message; } else { //get currency $sql=" SELECT core_currency_id AS id FROM core_country WHERE id=:country_id LIMIT 1 "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array(':country_id'=>$this->_data['country'])); $currency_row = $execSQL->fetch(PDO::FETCH_ASSOC); //get theme design $sql=" SELECT id FROM core_theme WHERE code=:code_theme LIMIT 1 "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array(':code_theme'=>'default')); //TODO theme may be a variable $theme_row = $execSQL->fetch(PDO::FETCH_ASSOC); $rand = (string) rand(); $microtime = (integer) time(); $activation_code = $rand . $microtime; $sql=" INSERT INTO user_user(firstname, lastname, email, password, core_country_id, core_currency_id, core_lang_id, core_theme_id, activation_code) VALUES(:firstname, :lastname, :email, :password, :core_country_id, :core_currency_id, :core_lang_id,:core_theme_id, :activation_code) "; $execSQL = $oPDOLink->prepare($sql); if($execSQL->execute(array( ':firstname'=>$this->_data['register_form_firstname'], ':lastname'=>$this->_data['register_form_lastname'], ':email'=>$this->_data['register_form_email'], ':password'=>sha1($this->_data['register_form_password'].'-k3P[8x&'), ':core_country_id'=>$this->_data['country'], ':core_currency_id'=>$currency_row['id'], ':core_lang_id'=>$this->_data['lang'], ':core_theme_id'=>1, //$theme_row['id'], ':activation_code'=> (string) $activation_code ))){ $newUserId = $oPDOLink->lastInsertId('user_user_id_seq'); //$isVipOfferActive = $this->_checkIfVipOfferActive(); //$isEverythingForFreeActive = $this->_checkIfEverythingForFreeActive(); // core user detail $sql=" INSERT INTO user_detail(user_id, user_referral_id) VALUES (:user_id, :user_referral_id) "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array( ':user_id'=>$newUserId, ':user_referral_id'=>$user_referral_id, //':is_premium'=>($isVipOfferActive==true)?true:0, //FIX get the lifespan of VIP offer from SQL table core_config //':is_premium_end_date'=>($isVipOfferActive==true && $isPromotionalCode==true)?date('Y-m-d', strtotime('+6 months')):null, //':is_premium_end_date'=>($isVipOfferActive==true)?'2017-08-31':null, )); // create a default public profile $this->_createDefaultPublicProfileForNewUser($newUserId, $this->_data['register_form_email'], $this->_data['country'], $this->_data['lang'], $this->_data['register_form_description'], $files); // defining database name of user for Premium abonement $db_name = "user_".$activation_code; $sql_createdb = "CREATE DATABASE ".$db_name; $execSQL = $oPDOLink->prepare($sql_createdb); $execSQL->execute(array()); //TODO import data $oPDOPrivate = new PDO("pgsql:host=localhost;dbname=".$db_name.";user=".InterfacePostgreSQL::PG_USER.";password=".InterfacePostgreSQL::PG_PASSWORD); // $sql = file_get_contents(ClassConfig::getURLRoot('apps/install/install-v1.0.0.sql')); //DEV $sql = file_get_contents("/var/www/html/buo/apps/install/install-v1.0.0.sql"); //PROD $patterns = array(); $patterns[0] = '/installuserbuoid/'; $patterns[1] = '/installuserfirstname/'; $patterns[2] = '/installuserlastname/'; $patterns[3] = '/installuseremail/'; $replacements = array(); $replacements[0] = $newUserId; $replacements[1] = $this->_data['register_form_firstname']; $replacements[2] = $this->_data['register_form_lastname']; $replacements[3] = $this->_data['register_form_email']; ksort($patterns); ksort($replacements); $sql2 = preg_replace($patterns, $replacements, $sql); $oPDOPrivate->exec($sql2); // insert into user_detail SQL table $sql=" UPDATE user_detail SET db_name=:db_name, db_host='localhost', db_user=:db_user, db_password=:db_password WHERE user_id=:user_id "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array( ':db_name'=>$db_name, ':db_user'=>InterfacePostgreSQL::PG_USER, ':db_password'=>InterfacePostgreSQL::PG_PASSWORD, ':user_id'=>$newUserId, )); // features for user /* TODO: Get the list of feature to create for user from the SQL table core_feature ie by a value which could be is_a_feature_for_registration=TRUE */ $sql=" INSERT INTO useruser_corefeature_rel(user_id, core_feature_id) VALUES ( (SELECT id FROM user_user WHERE email=:email LIMIT 1), (SELECT id FROM core_feature WHERE code=:core_feature_code LIMIT 1) ); "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'home')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'apps')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'my-profile')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'contact')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'logout')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'social-network')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'my-public-profile')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'people-i-may-know')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'connection-requests')); $execSQL->execute(array(':email'=>$this->_data['register_form_email'], ':core_feature_code'=>'my-network')); $message['user_id'] = $newUserId; $message['activation_code'] = $activation_code; $message['state'] = "success"; $message['css_class'] = 'success-message'; $message['translation_code'] = 'register_form_success'; return $message; } else { $message['state']='failed'; $message['css_class'] = 'failed-message'; $message['translation_code'] = 'register_form_failed'; return $message; } } } public function activateUser($activation_code){ $this->_activationCode = (string) $activation_code; $oPDOLink = ClassConfig::databaseConnect(); $sql=" UPDATE user_user SET is_active=TRUE WHERE activation_code=:activation_code "; $execSQL = $oPDOLink->prepare($sql); if($execSQL->execute(array(':activation_code'=>$this->_activationCode))){ $sql=" SELECT firstname, email FROM user_user WHERE activation_code=:activation_code "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array(':activation_code'=>$this->_activationCode)); $row = $execSQL->fetch(PDO::FETCH_ASSOC); $message['firstname'] = $row['firstname']; $message['email'] = $row['email']; $message['state'] = 'success'; $message['css_class'] = 'success-message'; $message['translation_code'] = 'message_activateUserSuccess'; } else { $message['state'] = 'failed'; $message['css_class'] = 'failed-message'; $message['translation_code'] = 'message_activateUserFailed'; } return $message; } public function listUsersWithActivationCodeAndActivated(){ $oPDOLink = ClassConfig::databaseConnect(); $sql = " SELECT activation_code FROM user_user WHERE activation_code!='no activation code needed' AND is_active=TRUE; "; $execSQL = $oPDOLink->prepare($sql); $execSQL->execute(array()); $users = $execSQL->fetchAll(PDO::FETCH_ASSOC); return $users; } }