wefra-odoo11/modules/ClassApp.php
2019-10-02 23:28:58 +02:00

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;
}
}