285 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			285 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
class ClassApp extends ClassUser {
 | 
						|
  public function __construct(){}
 | 
						|
  public function __destruct(){}
 | 
						|
  
 | 
						|
	private function _checkIfVipOfferActive(){
 | 
						|
		$config = ClassConfig::getConfig();
 | 
						|
    	//$oPDOLink = ClassConfig::databaseConnect();
 | 
						|
		if($config['is_vip_offer_active']==='true'){
 | 
						|
			return true;
 | 
						|
		} else {
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	private function _checkIfEverythingForFreeActive(){
 | 
						|
		$config = ClassConfig::getConfig();
 | 
						|
    	//$oPDOLink = ClassConfig::databaseConnect(); //FIX is this code still needed?
 | 
						|
		if($config['is_everything_for_free_offer_active']=='true'){
 | 
						|
			return true;
 | 
						|
		} else {
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	public function listActiveApps(){
 | 
						|
		$oPDOLink = ClassConfig::databaseConnect();
 | 
						|
		$sql = "
 | 
						|
		SELECT *
 | 
						|
		FROM app_app
 | 
						|
		WHERE is_active=TRUE;
 | 
						|
		";
 | 
						|
		$execSQL = $oPDOLink->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;
 | 
						|
	}
 | 
						|
 | 
						|
}
 |