setDBO(VoxelCareDB::getDatabase()); $this->_id = LegacyHelper::getUserId(); } function GetId() { return $this->_id; } function SetId($cid) { $this->_id = $cid; $this->_item = null; $this->_settings = null; } function getSettings() { if (!$this->_settings) { $settings = new stdClass(); if ($this->_id) { $sql = "SELECT u.settings FROM #__vxc_user u WHERE u.id = ". $this->_id; $this->_db->setQuery($sql); $str = $this->_db->loadResult(); if ($str) { $json = new Services_JSON(); $settings = $json->decode($str); if (!$settings) $settings = new stdClass(); } } $this->_settings = $settings; } return $this->_settings; } function changePassword($newpass) { if (!(int)$this->_id) return; $salt = JUserHelper::genRandomPassword(32); $crypt = JUserHelper::getCryptedPassword($newpass, $salt); $password = $crypt.':'.$salt; $sql = "UPDATE #__vxc_user SET `passwd` = " . $this->_db->Quote($password) . " WHERE id = ". $this->_id; $this->_db->Execute($sql); // Obsoleto /* if (!LegacyHelper::getNewMode()) { $user =& JUser::getInstance($this->_id); $data = array(); $data['password'] = $newpass; $data['password2'] = $newpass; $user->bind($data); $user->save(); }*/ } function checkUserData($data,&$res) { $res = array(); $res['username'] = true; $res['email'] = true; $username = trim($data['username']); $email = trim($data['email']); if (!$username || !$email) return; $jdb =& $this->_db; $sql = "SELECT u.id id,u.username,u.email FROM #__vxc_user u WHERE (trim(u.username) = ".$jdb->Quote($username). " OR trim(u.email) = ".$jdb->Quote($email) .") "; if ((int)$this->_id) $sql .= " AND u.id <> ". $this->_id; $jdb->setQuery($sql); $results =& $jdb->loadObjectList(); foreach($results as $result) { if (trim($result->username) == $username) $res['username'] = false; if (trim($result->email) == $email) $res['email'] = false; } } function store(&$data) { $id = (int)$data['id']; $myUserId = LegacyHelper::getUserId(); $newuser = !$id; /* if (false) // Deprecated { $user =& JUser::getInstance($id); if (!$id) { $user->username= $data['username']; $user->email = $data['email']; $user->usertype = 'Registered'; $user->gid = 18; $user->block = 0; $user->name = $data['name']; $user->sendEmail = 0; } $user->bind($data); if (!$user->save(false)) { echo "Error saving general table of users
"; return false; } if ($newuser) { $data['user_id'] = null; $id = $data['id'] = $user->id; $db =& JFactory::getDBO(); $sql = "INSERT INTO #__comprofiler (id,user_id, avatarapproved,approved,confirmed) VALUES($id,$id,1,1,1)"; $db->Execute($sql); } else $data['user_id'] = $data['id']; $userId = $data['id']; } else*/ { if ($newuser) $userId = LegacyHelper::getNewUserId(); else $userId = $data['id']; $data['user_id'] = $data['id'] = $userId; } if ($newuser) $this->_db->Execute("INSERT INTO #__vxc_user(id) VALUES(".$userId.")"); $tableProfiler =& $this->getTable('vxcuser'); $tableProfiler->reset(); if (!$tableProfiler->bind($data)) return false; if (!$tableProfiler->check()) return false; if (!$tableProfiler->store(false)) return false; if (trim($data['cashondelivery_charge'])==="") { $this->_db->Execute("UPDATE #__vxc_user SET cashondelivery_charge = NULL WHERE id = ".$userId); } if ($newuser) { $franchiseId = $data['franchise']; if (!(int)$franchiseId) { $sql = "SELECT fa.franchise FROM #__vxc_userfranchise fa WHERE fa.userid = ". $myUserId; $this->_db->setQuery($sql); $franchiseId = $this->_db->loadResult(); } if ((int)$franchiseId) { $sql = "INSERT INTO #__vxc_userfranchise(userid,franchise) VALUES (".$userId.",".$franchiseId.")"; $this->_db->Execute($sql); } $groupId = $data['group']; if ((int)$groupId) { $sql = "INSERT INTO #__vxc_usergroup(`user`,`group`) values(".$userId.",".$groupId.")"; $this->_db->Execute($sql); } $franchiseName = SiteOptionsHelper::getFranchiseName(); if ($franchiseName == 'tecnoinsole') { $this->SetId($userId); $this->setPrivilege('Force external loader'); } } if (isset($data['groups'])) { $sql = "DELETE FROM #__vxc_usergroup WHERE `user` = ".$userId; $this->_db->Execute($sql); foreach($data['groups'] as $grId) { $sql = "INSERT INTO #__vxc_usergroup(`user`,`group`) values(".$userId.",".$grId.")"; $this->_db->Execute($sql); } } $this->SetId($userId); $data['id'] = $this->_id; return true; } function getData() { if (!(int)$this->_id) return null; if (empty($this->_item)) { $db =& $this->_db; $sql = "SELECT u.id id, u.name name, u.username username, u.email email, u.invoice_email invoice_email, u.acctnumber acctnumber, u.address address, u.phone phone, u.city city, u.pcode zipcode, u.country country, u.no_vat no_vat, u.review_predesign predesignreview, u.amount_paid amountpaid, u.amount_ordered amountordered, ( u.amount_paid - u.amount_ordered ) credit, u.cif vatnumber, u.location location, u.customid customid, u.cashondelivery_charge cashondelivery_charge, uf.franchise franchise, f.id franchiseid, f.name franchisename, f.email franchiseemail, u.credit_limit creditlimit, u.equivalence_charge equivalence_charge, u.eula_accepted eula_accepted FROM #__vxc_user u LEFT JOIN #__vxc_userfranchise uf ON uf.userid = u.id LEFT JOIN #__vxc_franchise f ON f.id = uf.franchise WHERE u.id = ".$this->_id; $db->setQuery($sql); $row = $db->loadObject(); if (!$row) { $row = new stdClass(); $row->id = 0; } $this->_item = $row; } return $this->_item; } function getLanguage() { $lang = ''; if (!$this->_id) return ''; if (LegacyHelper::getNewMode()) { $sql = "SELECT language FROM #__vxc_user WHERE id = ".$this->_id; $this->_db->setQuery($sql); $lang = $this->_db->loadResult(); } else { $langObj =& JFactory::getLanguage(); if ($langObj->_lang) $lang = $langObj->_lang; else $lang = $langObj->_default; } return $lang; } function setPrivileges(&$privs) { $privsS = implode('|*|',$privs); $sql = "UPDATE #__vxc_user SET privileges = ".$this->_db->Quote($privsS) . " WHERE id = ".$this->_id; $this->_db->Execute($sql); } function clearPrivilege($privName) { $oldPrivs =& $this->getPrivileges(); $privs = array(); $found = false; foreach($oldPrivs as $priv) if (trim($priv)!=trim($privName)) $privs[] = $priv; else $found = true; if ($found) $this->setPrivileges($privs); } function setPrivilege($privName) { $oldPrivs =& $this->getPrivileges(); $privs = array(); $found = false; foreach($oldPrivs as $priv) if (trim($priv)!=trim($privName)) $privs[] = $priv; else $found = true; if (!$found) { $privs[] = trim($privName); $this->setPrivileges($privs); } } function getPrivileges() { if (!(int)$this->_id) return array(); $sql = "SELECT privileges FROM #__vxc_user WHERE id =" .$this->_id; $this->_db->setQuery($sql); $privsS = $this->_db->loadResult(); $privs = explode('|*|',$privsS); return $privs; } function checkPrivilege($privName) { $privs =& $this->getPrivileges(); if (is_array($privs)) foreach($privs as $priv) if (strtolower(trim($priv)) == strtolower(trim($privName))) return true; return false; } function validip($ip) { if (!empty($ip) && ip2long($ip)!=-1) { $reserved_ips = array ( array('0.0.0.0','2.255.255.255'), array('10.0.0.0','10.255.255.255'), array('127.0.0.0','127.255.255.255'), array('169.254.0.0','169.254.255.255'), array('172.16.0.0','172.31.255.255'), array('192.0.2.0','192.0.2.255'), array('192.168.0.0','192.168.255.255'), array('255.255.255.0','255.255.255.255')); foreach ($reserved_ips as $r) { $min = ip2long($r[0]); $max = ip2long($r[1]); if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false; } return true; } else { return false; } } function getip() { if ($this->validip($_SERVER["HTTP_CLIENT_IP"])) { return $_SERVER["HTTP_CLIENT_IP"]; } foreach (explode(",",$_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) if ($this->validip(trim($ip))) return $ip; if ($this->validip($_SERVER["HTTP_X_FORWARDED"])) return $_SERVER["HTTP_X_FORWARDED"]; elseif ($this->validip($_SERVER["HTTP_FORWARDED_FOR"])) return $_SERVER["HTTP_FORWARDED_FOR"]; elseif ($this->validip($_SERVER["HTTP_FORWARDED"])) return $_SERVER["HTTP_FORWARDED"]; elseif ($this->validip($_SERVER["HTTP_X_FORWARDED"])) return $_SERVER["HTTP_X_FORWARDED"]; else return $_SERVER["REMOTE_ADDR"]; } function makePayment($amount,$remarks='') { $prev_amount = $this->getCredit(); $this->setPaidAmount($this->getPaidAmount() + $amount); $ipAddress = $this->getip(); $userId = LegacyHelper::getUserId(); $payerUser = "NULL"; if ($userId) $payerUser = $userId; $receiverUser = $this->_id; $nowDate = new JDate(); $paymentDate = $nowDate->toMySQL(); $amountS = sprintf("%0.02f",$amount); $prev_amountS = sprintf("%0.02f",$prev_amount); $sql = "INSERT INTO #__vxc_paidmoneylog(payeruser, receiveruser, ipaddress, paymentdate, amount,prev_amount,remarks) VALUES($payerUser,$receiverUser, ".$this->_db->Quote($ipAddress).",".$this->_db->Quote($paymentDate).",". $this->_db->Quote($amountS).",".$this->_db->Quote($prev_amountS).",".$this->_db->Quote($remarks)." )"; $this->_db->Execute($sql); } function makeOrder($amount) { $prev_amount = $this->getCredit(); $this->setOrderedAmount($this->getOrderedAmount() + $amount); // Guardamos el log del pago $ipAddress = $this->getip(); $payerUser = $this->_id; $nowDate = new JDate(); $paymentDate = $nowDate->toMySQL(); $amountS = sprintf("%0.02f",-$amount); $prev_amountS = sprintf("%0.02f",$prev_amount); $sql = "INSERT INTO #__vxc_paidmoneylog(payeruser, receiveruser, ipaddress, paymentdate, amount,prev_amount) VALUES($payerUser,NULL, ".$this->_db->Quote($ipAddress).",".$this->_db->Quote($paymentDate).",".$this->_db->Quote($amountS).",".$this->_db->Quote($prev_amountS)." )"; $this->_db->Execute($sql); } function setPaidAmount($amount) { $amountS = sprintf("%0.02f",$amount); $sql = "UPDATE #__vxc_user SET amount_paid = ". $this->_db->Quote($amountS). " WHERE id = ". $this->_id; $this->_db->Execute($sql); } function getPaidAmount() { $sql = "SELECT amount_paid FROM #__vxc_user WHERE id = ". $this->_id; $this->_db->setQuery($sql); $amount = $this->_db->loadResult(); if (!$amount) return 0; else return (float)$amount; } function setOrderedAmount($amount) { $amountS = sprintf("%0.02f",$amount); $sql = "UPDATE #__vxc_user SET amount_ordered = ". $this->_db->Quote($amountS). " WHERE id = ". $this->_id; $this->_db->Execute($sql); } function getOrderedAmount() { $sql = "SELECT amount_ordered FROM #__vxc_user WHERE id = ".$this->_id; $this->_db->setQuery($sql); $amount = $this->_db->loadResult(); if (!$amount) return 0; else return (float)$amount; } function getUsersByFranchise($franchiseId) { if (!(int)$franchiseId) return; $sql = "SELECT u.id, u.name FROM #__vxc_user u LEFT JOIN #__vxc_userfranchise uf ON uf.userid = u.id WHERE uf.deleted IS NOT TRUE AND uf.franchise = " . $franchiseId; $this->_db->setQuery($sql); return $this->_db->loadObjectList(); } function getCreditLimit() { $sql = "SELECT credit_limit FROM #__vxc_user WHERE id = ".$this->_id; $this->_db->setQuery($sql); $amount = $this->_db->loadResult(); if (!$amount) return 0; else return (float)$amount; } function getCredit() { return $this->getPaidAmount()-$this->getOrderedAmount(); } function delete() { if (!(int)$this->_id) return false; $sql = "UPDATE #__vxc_userfranchise SET deleted = TRUE WHERE userid = ". $this->_id; $this->_db->Execute($sql); return true; } function getShippingVAT() { if (!$this->_id) return 0.0; $sql = "SELECT u.no_vat no_vat FROM #__vxc_user u WHERE u.id = ". $this->_id; $this->_db->setQuery($sql); $ret = $this->_db->loadObject(); // Si el usuario tiene deshabilitado el iva se devuelve 0 if (isset($ret->no_vat) && $ret->no_vat==1) return 0.0; else return null; } function getVAT() { if (!$this->_id) return 0.0; $sql = "SELECT f.vat_percent vat_percent, u.no_vat no_vat FROM #__vxc_franchise f LEFT JOIN #__vxc_userfranchise uf ON uf.franchise = f.id LEFT JOIN #__vxc_user u ON u.id = uf.userid WHERE uf.userid = ". $this->_id; $this->_db->setQuery($sql); $ret = $this->_db->loadObject(); // Si el usuario tiene deshabilitado el iva se devuelve 0 if (isset($ret->no_vat) && $ret->no_vat==1) return 0.0; else return $ret->vat_percent; } function getEquivalenceCharge() { if (!$this->_id) return 0.0; $sql = "SELECT equivalence_charge FROM #__vxc_user u WHERE u.id = ". $this->_id; $this->_db->setQuery($sql); return $this->_db->loadResult(); } function getCreditLog() { if (!(int)$this->_id) return array(); $sql = "SELECT u.NAME payerusername, pl.ipaddress ipaddress, pl.paymentdate paymentdate, pl.amount amount, pl.prev_amount prev_amount,pl.remarks remarks FROM #__vxc_paidmoneylog pl LEFT JOIN #__vxc_user u ON u.id = pl.payeruser WHERE (pl.receiveruser =" .$this->_id. ") OR (pl.payeruser = " .$this->_id. " AND pl.receiveruser IS NULL ) ORDER BY pl.paymentdate DESC"; $this->_db->setQuery($sql); return $this->_db->loadObjectList(); } function getPaymentCharge($paymentMethod) { $charge = 0; switch($paymentMethod) { case 'CASHONDELIVERY': $userData =& $this->getData(); if ($userData->cashondelivery_charge!==NULL && $userData->cashondelivery_charge!=="") $charge = $userData->cashondelivery_charge; else $charge = 4; break; } return $charge; } function getPendingDeliveryNotes() { if (!(int)$this->_id) return array(); $sql = "SELECT dn.id id, dn.concept concept, dn.price price, dn.vat vat, dn.amount amount, dn.total total FROM #__vxc_deliverynote dn WHERE dn.paid IS NOT TRUE AND dn.deleted IS NOT TRUE AND dn.userid = " . $this->_id; $this->_db->setQuery($sql); $ret =&$this->_db->loadObjectList(); return $ret; } function getPendingDeliveryNotesCost() { $deliveryNotes =& $this->getPendingDeliveryNotes(); $cost = 0; foreach($deliveryNotes as $dn) $cost += $dn->total; return $cost; } function getUserIdByUsername($name) { $sql = "SELECT u.id id FROM #__vxc_user u WHERE u.username = ". $this->_db->Quote($name); $this->_db->setQuery($sql); return $this->_db->loadResult(); } function getAddresses($limit = -1) { $userId = $this->_id; if (!$userId) return array(); $db =& $this->_db; $sql = "SELECT ua.id id, ua.userid userid, ua.company company, ua.address address, ua.city city, ua.province province, ua.pcode pcode, ua.country country, ua.phone phone, ua.delivery_schedule delivery_schedule FROM #__vxc_useraddress ua WHERE ua.userid = ". $userId . " AND ua.deleted IS NOT TRUE"; if ($limit!=-1) { $sql .= " LIMIT ".$limit; } $db->setQuery($sql); return $db->loadObjectList(); } function getGroups() { $userId = $this->_id; if (!$userId) return array(); $db =& $this->_db; $sql = "SELECT g.id id, g.name name, g.manager manager, g.share_orders share_orders, g.share_customers share_customers FROM #__vxc_group g LEFT JOIN #__vxc_usergroup ug ON ug.group = g.id WHERE ug.user = ". $userId; $db->setQuery($sql); return $db->loadObjectList(); } // Obtiene la lista de grupos que pertenece a un usuario function getGroupsAsManager() { $userId = $this->_id; if (!$userId) return array(); // Inicializamos la lista de managers al de mi ID $managerList = array((int)$this->_id); do { // Realizamos el bucle hasta que no añadamos ningun manager nuevo a la lista $added = false; // Convertimos la lista PHP a lista SQL $managerListStr = implode(',',$managerList); // Obtenemos aquellos managers que no pertenezca a la lista, pero que pertenezcan a grupos de la // lista de managers $sql = "SELECT DISTINCT g.manager id FROM jos_vxc_group g WHERE g.manager NOT IN ($managerListStr) AND g.manager IN ( SELECT ug.user id FROM jos_vxc_group g2 LEFT JOIN jos_vxc_usergroup ug ON ug.group = g2.id WHERE g2.manager IN ($managerListStr) )"; $this->_db->setQuery($sql); $rows = $this->_db->loadObjectList(); if (!$rows) // Si no obtenemos nigun registro hemos acabado break; // Añadimos los nuevos managers a la lista (comprobamos por seguridad de nuevo si no estaban ya incluidos) foreach($rows as $row) { $managerId = (int) $row->id; if ($managerId && !in_array($managerId,$managerList)) { $managerList[] = $managerId; $added = true; } } } while ($added); $managerListStr = implode(',',$managerList); // Devuelvo la lista de grupos que tienen como manager a alguno de los de la lista de managers $sql = "SELECT g.id id, g.name name, g.manager manager, g.share_orders share_orders, g.share_customers share_customers FROM #__vxc_group g WHERE g.manager IN ($managerListStr)"; $this->_db->setQuery($sql); return $this->_db->loadObjectList(); } // Obtiene los grupos del usuario de forma recursiva (tambien soy manager de los manager's que hay en los grupos // donde soy manager function getOrderGroups() { $userId = $this->_id; if (!$userId) return false; $ids = array(); $names = array(); // Vemos los grupos si soy el manager de algun grupo // o bien soy miembro de algun grupo con pedidos compartidos $groupsAsManager =& $this->getGroupsAsManager(); if ($groupsAsManager && count($groupsAsManager)>0) foreach($groupsAsManager as $gr) if (!in_array($gr->id,$ids)) { $ids[] = $gr->id; $names[] = $gr->name; } // Obtenemos los grupos a los que pertenece este usuario $groups =& $this->getGroups(); // Si hay algun grupo que comparte los pedidos, lo añadimos a la lista de grupos disponibles if ($groups && count($groups)>0) { foreach($groups as $gr) if ($gr->share_orders && !in_array($gr->id,$ids)) { $ids[] = $gr->id; $names[] = $gr->name; } } $orderGroups = array(); foreach($ids as $key=>$id) { $orderGroup = new stdClass(); $orderGroup->id = $id; $orderGroup->name = $names[$key]; $orderGroups[] = $orderGroup; } return $orderGroups ; } function canViewGroupOrders() { $userId = $this->_id; if (!$userId) return false; // Vemos los grupos si soy el manager de algun grupo // o bien soy miembro de algun grupo con pedidos compartidos $groupsAsManager =& $this->getGroupsAsManager(); if ($groupsAsManager && count($groupsAsManager)>0) return true; $groups =& $this->getGroups(); if ($groups) { foreach($groups as $gr) if ($gr->share_orders) return true; } return false; } function getPluginVersions() { $sql = "SELECT p.name pluginname, p.defaultversion defaultversion, (SELECT CONCAT(up.id,'#',up.version,'#',up.remarks) FROM #__vxc_userplugin up WHERE up.plugin = p.id AND up.user = ".$this->_id.") userpluginversion FROM #__vxc_plugin p ORDER BY p.name"; $this->_db->setQuery($sql); $res =& $this->_db->loadObjectList(); $pluginVersions = array(); if (count($res)>0) foreach($res as $row) { $pluginVersion = new stdClass(); $pluginVersion->name = $row->pluginname; $pluginVersion->specific = ($row->userpluginversion!==null); $pluginVersion->defaultversion = $row->defaultversion; if ($pluginVersion->specific) { $userPluginVersionArray = explode('#',$row->userpluginversion); $pluginVersion->userpluginversionid = $userPluginVersionArray[0]; $pluginVersion->version = $userPluginVersionArray[1]; $pluginVersion->remarks = $userPluginVersionArray[2]; } else { $pluginVersion->version = ''; $pluginVersion->remarks = ''; } $pluginVersions[] = $pluginVersion; } return $pluginVersions; } function addPluginVersion($pluginId,$version,$comments='') { $pluginId = (int)$pluginId; if (!$pluginId) return; $sql = "DELETE FROM #__vxc_userplugin WHERE plugin=$pluginId AND user = ".$this->_id; $this->_db->Execute($sql); $sql = "INSERT INTO #__vxc_userplugin(user,plugin,version,remarks) VALUES (".$this->_id . ",$pluginId,".$this->_db->Quote($version). ",". $this->_db->Quote($comments).")"; $this->_db->Execute($sql); } function deletePluginVersion($pluginVersionId) { $pluginVersionId = (int)$pluginVersionId; if (!$pluginVersionId) return; $sql = "DELETE FROM #__vxc_userplugin WHERE id=$pluginVersionId"; $this->_db->Execute($sql); } } ?>