summaryrefslogtreecommitdiffstats
path: root/frontend/payments
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2022-01-11 12:35:47 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2022-01-11 12:35:47 +0100
commit19985dbb8c0aa66dc4bf7905abc1148de909097d (patch)
tree2cd5a5d20d7e80fc2a51adf60d838d8a2c40999e /frontend/payments
download1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.gz
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.bz2
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.lz
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.xz
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.zst
1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.zip
Diffstat (limited to 'frontend/payments')
-rw-r--r--frontend/payments/api.php7
-rw-r--r--frontend/payments/classes/class.ApiNarocilaController.php367
-rw-r--r--frontend/payments/classes/class.UserAccess.php475
-rw-r--r--frontend/payments/classes/class.UserMailCron.php44
-rw-r--r--frontend/payments/classes/class.UserNarocila.php1632
-rw-r--r--frontend/payments/classes/class.UserNarocilaCebelica.php235
-rw-r--r--frontend/payments/classes/class.UserNarocilaCron.php198
-rw-r--r--frontend/payments/classes/class.UserNarocilaPaypal.php308
-rw-r--r--frontend/payments/classes/class.UserNarocilaStripe.php266
-rw-r--r--frontend/payments/classes/class.UserPlacila.php547
-rw-r--r--frontend/payments/getPdf.php35
11 files changed, 4114 insertions, 0 deletions
diff --git a/frontend/payments/api.php b/frontend/payments/api.php
new file mode 100644
index 0000000..a7cf212
--- /dev/null
+++ b/frontend/payments/api.php
@@ -0,0 +1,7 @@
+<?php
+
+include_once '../../function.php';
+include_once '../../vendor/autoload.php';
+
+$api = new ApiNarocilaController();
+ \ No newline at end of file
diff --git a/frontend/payments/classes/class.ApiNarocilaController.php b/frontend/payments/classes/class.ApiNarocilaController.php
new file mode 100644
index 0000000..6c9daed
--- /dev/null
+++ b/frontend/payments/classes/class.ApiNarocilaController.php
@@ -0,0 +1,367 @@
+<?php
+
+
+/**
+ *
+ * Class ki vsebuje funkcije APIJA za narocila (oddaj narocilo, izvedi placilo...)
+ *
+ */
+use GeoIp2\Database\Reader;
+
+class ApiNarocilaController{
+
+
+ private $private_key = 'NLFYb67/[pUE%W-s'; // Kljuc za preverjanje tokena
+
+ private $params; // Parametri v url-ju
+ private $data; // Podatki poslani preko post-a
+
+ private $response = array(); // Response, ki ga vrnemo v json formatu
+
+
+ function __construct(){
+
+ // Preberemo poslane podatke
+ $this->processCall();
+
+
+ // Preverimo, ce je klic ok (token)
+ if($this->checkToken()){
+
+ // Izvedemo akcijo
+ $this->executeAction();
+ }
+
+
+ // Logiramo response klica
+ $SL = new SurveyLog();
+
+ if($this->response['success'] == true){
+
+ if(isset($this->data['email']))
+ $call_data = ', '.$this->data['email'];
+ elseif(isset($this->data['narocilo_id']))
+ $call_data = ', '.$this->data['narocilo_id'];
+ else
+ $call_data = '';
+
+ $SL->addMessage(SurveyLog::PAYMENT, "USPEŠEN KLIC (".$this->params['action'] . $call_data.")");
+ }
+ else{
+ $SL->addMessage(SurveyLog::PAYMENT, "NAPAKA pri klicu za plačevanje ".$this->params['action'].": ".$this->response['error']);
+ }
+
+ $SL->write();
+
+
+ // Vrnemo json objekt responsa
+ $this->processReturn();
+ }
+
+
+ // Preberemo poslane podatke (ce posiljamo preko curl)
+ private function processCall(){
+
+ // Metoda - POST, GET, DELETE...
+ $this->method = $_SERVER['REQUEST_METHOD'];
+
+ // Get parametri
+ $this->params = $_GET;
+
+ // Preberemo podatke iz post-a
+ $this->data = json_decode(file_get_contents('php://input'), true);
+
+ if(is_null($this->data)){
+ $this->data = $_POST;
+ }
+ }
+
+ private function checkToken(){
+ $raw_post_data = '';
+
+ if($this->method == 'POST' && $this->data){
+ $raw_post_data = http_build_query($this->data);
+ }
+
+ // Dobimo request (brez id in token)
+ $request_url = ($_SERVER["HTTPS"] == 'on') ? 'https://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] : 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
+
+ if(!isset($_SERVER['HTTP_IDENTIFIER']))
+ $request_url = preg_replace('/([?&])identifier=[^&]+(&|$)/', '$1', $request_url);
+
+ if(!isset($_SERVER['HTTP_TOKEN']))
+ $request_url = preg_replace('/([?&])token=[^&]+(&|$)/', '$1', $request_url);
+
+ if(!isset($_SERVER['HTTP_TOKEN']) || !isset($_SERVER['HTTP_IDENTIFIER']))
+ $request_url = substr($request_url, 0, -1);
+
+ // Na nasi strani naredimo hmac podatkov z ustreznim private key-em
+ $data = $this->method . $request_url . $raw_post_data;
+ $token = hash_hmac('sha256', $data, $this->private_key);
+
+ if($this->params['token'] == $token)
+ return true;
+ else{
+ $this->response['error'] = 'Napaka! Napačen token.';
+ $this->response['success'] = false;
+
+ return false;
+ }
+ }
+
+
+ // Preveri ce je user ze logiran v 1ko in nastavi globalne spremenljivke in cookie (kopirano iz function.php)
+ private function executeAction(){
+ global $lang;
+
+ if (!isset($this->params['action'])) {
+ $this->response['error'] = 'Napaka! Manjkajo parametri!';
+ $this->response['success'] = false;
+ }
+ else {
+
+ // Vedno nastavimo ustrezni jezik (npr. za emaile) ce imamo parameter
+ $language = isset($this->data['lang']) ? $this->data['lang'] : 'sl';
+ if($language == 'en'){
+ include('../../lang/2.php');
+ }
+
+ switch ($this->params['action']) {
+
+ // Ustvari novo narocilo
+ case 'create_narocilo':
+ $narocilo = new UserNarocila();
+ $this->response = $narocilo->createNarocilo($this->data);
+
+ break;
+
+ // Posodobi obstoječe narocilo (npr. nastavi nacin placila)
+ case 'update_narocilo':
+ $narocilo = new UserNarocila();
+ $this->response = $narocilo->updateNarocilo($this->data);
+
+ break;
+
+ // Dobimo pdf predracun (ce ne obstaja ga ustvarimo)
+ case 'get_predracun':
+
+ if(isset($this->data['narocilo_id'])){
+ $cebelica = new UserNarocilaCebelica($this->data['narocilo_id']);
+ $this->response = $cebelica->getNarociloPredracun();
+ }
+ else{
+ $this->response['error'] = 'Napaka! Manjka ID narocila!';
+ $this->response['success'] = false;
+ }
+
+ break;
+
+ // Dobimo pdf racun
+ case 'get_racun':
+
+ if(isset($this->data['narocilo_id'])){
+ $cebelica = new UserNarocilaCebelica($this->data['narocilo_id']);
+ $this->response = $cebelica->getNarociloRacun();
+ }
+ else{
+ $this->response['error'] = 'Napaka! Manjka ID narocila!';
+ $this->response['success'] = false;
+ }
+
+ break;
+
+ // Placamo narocilo - aktiviramo uporabniku paket za uporabo, zgeneriramo in vrnemo url do pdf racuna in ga tudi posljemo po mailu
+ case 'placaj_narocilo':
+
+ $narocilo = new UserNarocila();
+ $this->response = $narocilo->payNarocilo($this->data['narocilo_id']);
+
+ break;
+
+
+ // Dobimo vse pakete, ki so na voljo
+ case 'get_paketi':
+
+ $narocilo = new UserNarocila();
+
+ $sqlPackages = sisplet_query("SELECT id, name, description FROM user_access_paket");
+ while($row = mysqli_fetch_array($sqlPackages)){
+
+ $this->response['paketi'][$row['id']] = $row;
+
+ // Dobimo se ceno za paket za 1, 3 in 12 mesecev
+ if($row['name'] == '2ka' || $row['name'] == '3ka'){
+
+ // Cene za 1 mesec
+ $cena1 = $narocilo->getPrice($row['name'], 1);
+ foreach($cena1 as $key => $value){
+ $cena1[$key] = str_replace('.', ',', $value);
+ }
+ $this->response['paketi'][$row['id']]['price']['1'] = $cena1;
+
+ // Cene za 3 mesece
+ $cena3 = $narocilo->getPrice($row['name'], 3);
+ foreach($cena3 as $key => $value){
+ $cena3[$key] = str_replace('.', ',', $value);
+ }
+ $this->response['paketi'][$row['id']]['price']['3'] = $cena3;
+
+ // Cene za 12 mesecev
+ $cena12 = $narocilo->getPrice($row['name'], 12);
+ foreach($cena12 as $key => $value){
+ $cena12[$key] = str_replace('.', ',', $value);
+ }
+ $this->response['paketi'][$row['id']]['price']['12'] = $cena12;
+ }
+ }
+
+ break;
+
+ // Poslje maila za povprasevanje za poslovne uporabnike
+ case 'send_poslovni_uporabniki':
+ $narocilo = new UserNarocila();
+ $this->response = $narocilo->sendPoslovniUporabniki($this->data);
+
+ break;
+
+ // Vrne trenutno aktivno narocnino
+ case 'get_active_subscription':
+
+ $usr_id = 0;
+
+ // Dobimo user id iz emaila
+ if(isset($this->data['email'])){
+ $sqlU = sisplet_query("SELECT id FROM users WHERE email='".$this->data['email']."'");
+ $rowU = mysqli_fetch_array($sqlU);
+
+ $usr_id = $rowU['id'];
+ }
+
+ if($usr_id == '' || $usr_id == 0){
+ $this->response['error'] = 'ERROR! Missing user ID.';
+ $this->response['success'] = false;
+
+ break;
+ }
+
+ // Dobimo ime paketa iz id-ja
+ $sqlPackage = sisplet_query("SELECT name FROM user_access_paket WHERE id='".$this->data['package_id']."'");
+ $rowPackage = mysqli_fetch_array($sqlPackage);
+
+ $narocilo = new UserNarocila();
+
+ $discount = $narocilo->getDiscount($usr_id, $rowPackage['name'], $this->data['trajanje']);
+ $price = $narocilo->getPrice($rowPackage['name'], $this->data['trajanje'], $discount);
+
+ $this->response = $price;
+
+ break;
+
+ // Dokoncaj narocilo ce je placano preko paypala (ko je stranka potrdila placilo v paypalu)
+ case 'capture_narocilo_paypal':
+
+ if(isset($this->data['narocilo_id'])){
+ $paypal = new UserNarocilaPaypal($this->data['narocilo_id']);
+ $this->response = $paypal->paypalCaptureOrder();
+ }
+ else{
+ $this->response['error'] = 'Napaka! Manjka ID narocila!';
+ $this->response['success'] = false;
+ }
+
+ break;
+
+ // Preklici narocilo za paypal (ko je stranka preklicala placilo v paypalu)
+ case 'cancel_narocilo_paypal':
+
+ if(isset($this->data['narocilo_id'])){
+ $paypal = new UserNarocilaPaypal($this->data['narocilo_id']);
+ $this->response = $paypal->paypalCancelOrder();
+ }
+ else{
+ $this->response['error'] = 'Napaka! Manjka ID narocila!';
+ $this->response['success'] = false;
+ }
+
+ break;
+
+ // Preveri, ce je podjetje zavezanec iz tujine (eu) in ustrezno preracuna znesek (odbije ddv)
+ case 'check_ddv':
+
+ $podjetje_drzava = isset($this->data['podjetje_drzava']) ? $this->data['podjetje_drzava'] : '';
+ $podjetje_davcna = isset($this->data['podjetje_davcna']) ? $this->data['podjetje_davcna'] : '';
+ $cena = isset($this->data['cena']) ? str_replace(',', '.', $this->data['cena']) : '';
+
+ if($podjetje_drzava != '' && $cena != ''){
+
+ // Mora placati ddv - cena ostane ista
+ if(UserNarocila::checkPayDDV($podjetje_davcna, $podjetje_drzava)){
+ $this->response['cena'] = $cena;
+ $this->response['ddv'] = true;
+ }
+ // Ne placa ddv - placa samo osnovo
+ else{
+ $this->response['cena'] = number_format(floatval($cena) / 1.22, 2, '.', '');
+ $this->response['ddv'] = false;
+ }
+
+ $this->response['success'] = true;
+ }
+ else {
+ $this->response['error'] = 'Napaka! Manjkajo zahtevani parametri!';
+ }
+
+ break;
+
+ // Dokoncaj narocilo ce je placano preko stripe (ko je stranka potrdila placilo preko sca)
+ case 'stripe_checkout_success':
+
+ if(isset($this->data['narocilo_id'])){
+ $stripe = new UserNarocilaStripe($this->data['narocilo_id']);
+ $this->response = $stripe->stripeCheckoutSuccess();
+ }
+ else{
+ $this->response['error'] = 'Napaka! Manjka ID narocila!';
+ $this->response['success'] = false;
+ }
+
+ break;
+
+ // Preklici narocilo za stripe (ko je stranka preklicala placilo preko sca)
+ case 'stripe_checkout_cancel':
+
+ if(isset($this->data['narocilo_id'])){
+ $stripe = new UserNarocilaStripe($this->data['narocilo_id']);
+ $this->response = $stripe->stripeCheckoutCancel();
+ }
+ else{
+ $this->response['error'] = 'Napaka! Manjka ID narocila!';
+ $this->response['success'] = false;
+ }
+
+ break;
+
+ case 'get_lokacija':
+
+ global $site_path;
+
+ $reader = new Reader($site_path.'admin/survey/modules/mod_geoIP/db/GeoLite2-City.mmdb');
+ $podatki = $reader->city($this->data['ip']);
+
+ // Vrnemo ime države
+ $this->response['drzava'] = $podatki->country->name;
+
+ break;
+ }
+ }
+ }
+
+ // Sprocesiramo return
+ private function processReturn(){
+
+ $json = json_encode($this->response, true);
+
+ echo $json;
+ }
+
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserAccess.php b/frontend/payments/classes/class.UserAccess.php
new file mode 100644
index 0000000..105d4c9
--- /dev/null
+++ b/frontend/payments/classes/class.UserAccess.php
@@ -0,0 +1,475 @@
+<?php
+
+/**
+ *
+ * Class ki vsebuje skrbi za pregled in urejanje dostopa uporabnika glede na paket ki ga placuje
+ *
+ */
+
+class UserAccess{
+
+
+ private static $instance = false;
+
+ private $usr_id;
+ private $user_access;
+ private $user_not_author = false;
+
+ private $anketa_old = false; // Pri starih anketah ne upostevamo paketov in so na voljo vse funkcionalnosti
+ private $anketa_old_date = '2020-07-01'; // Anketa je stara, ce je bila ustvarjena pred tem datumom
+
+ // Array z vsemi paketi
+ private $packages = array();
+
+ // Array z vsemi funkcionalnostmi, ki so placljive (in v katerem paketu so)
+ private $functionality_package = array(
+
+ /* Urejanje ankete */
+ 'question_type_multitable' => 2, // Tip vprasanja - kombinirana tabela - 24
+ 'question_type_ranking' => 2, // Tip vprasanja - razvrscanje - 17
+ 'question_type_sum' => 2, // Tip vprasanja - vsota - 18
+ 'question_type_location' => 2, // Tip vprasanja - lokacija - 26
+ 'question_type_heatmap' => 2, // Tip vprasanja - heatmap - 27
+ 'question_type_calculation' => 3, // Tip vprasanja - kalkulacija - 22
+ 'question_type_quota' => 3, // Tip vprasanja - kvota - 25
+ 'question_type_signature' => 3, // Tip vprasanja - podpis - 21_6
+ 'loop' => 3, // Zanke
+ 'if' => 2, // If-i
+ 'block' => 2, // Bloki
+ 'validation' => 2, // Validacija
+ 'theme-editor' => 2, // Urejanje teme ankete, upload logotipa...
+ 'theme-editor_css' => 3, // Urejanje lastnega css-ja !!!
+ 'theme-editor_upload' => 3, // Urejanje lastnega css-ja !!!
+
+ /* Status */
+ 'para_graph' => 2, // Statistika naprav
+ 'geoip_location' => 3, // Statistika ip lokacije
+ 'nonresponse_graph' => 3, // Neodgovor spremenljivke
+ 'speeder_index' => 3, // Speeder index
+ 'usable_resp' => 3, // Uporabni respondenti
+ 'text_analysis' => 3, // Analiza besedil
+ 'edits_analysis' => 3, // Analiza urejanj
+
+ /* Podatki */
+ 'data_export' => 2, // Izvoz podatkov - spss, xls, csv...
+ 'data_append' => 3, // Uvoz - dodaj podatke
+ 'data_merge' => 3, // Uvoz - zdruzi podatke
+ 'data_calculation' => 3, // Izracunane vrednosti
+ 'data_coding_auto' => 3, // Avtomatsko kodiranje
+ 'data_coding' => 3, // Kodiranje
+ 'data_recoding' => 3, // Rekodiranje
+
+ /* Analiza */
+ 'analysis_export' => 2, // Izvoz analiz - pdf, rtf, xls
+ 'analysis_analysis_links' => 2, // Javne
+ 'analysis_charts' => 2, // Grafi
+ 'analysis_crosstabs' => 2, // Tabele
+ 'analysis_break' => 2, // Razbitje
+ 'analysis_ttest' => 3, // Ttest
+ 'analysis_means' => 3, // Povprecje
+ 'analysis_multicrosstabs' => 3, // Multitabele
+ 'analysis_analysis_creport' => 3, // Porocilo po meri
+
+ /* Napredni moduli */
+ 'uporabnost' => 3, // Evalvacija strani (split screen)
+ //'vnos' => 2, // Vnos vprasalnikov
+ 'kviz' => 2, // Kviz
+ 'voting' => 3, // Volitve
+ 'social_network' => 3, // Socialna omrezja
+ 'slideshow' => 3, // Prezentacija
+ 'telephone' => 3, // Telefonska anketa
+ 'chat' => 3, // Chat
+ 'panel' => 3, // Panel
+
+ /* Ostale funkcionalnosti */
+ 'prevajanje' => 2, // Vecjezikovna anketa
+ 'export' => 2, // Izvozi ankete
+ 'filters' => 2, // Filtriranje podatkov in analiz
+ 'nice_url' => 2, // Lepi linki
+ 'password' => 2, // Dostop do ankete z geslom
+ 'gdpr_export' => 2, // Izvoz porocil evidenc za gdpr
+ 'skupine' => 2, // Skupine
+ 'archive' => 2, // Arhiviranje
+ 'arhivi' => 2, // Arhiviranje - izvoz datoteke ankete, podatkov
+ //'arhivi_export' => 2, // Arhiviranje - izvoz datoteke vprasalnika in vprasalnika s podatki
+ 'analysis_anal_arch' => 2, // Arhiviranje analiz
+ 'public_link' => 3, // Javne povezave
+
+ //'ustvari_anketo_archive' => 2, // Ustvarjanje ankete iz datoteke
+ 'ustvari_anketo_from_text' => 2, // Ustvarjanje ankete iz besedila
+ 'ustvari_anketo_template' => 2, // Ustvarjanje ankete iz predloge
+
+ 'komentarji' => 3, // Komentarji na anketo
+ 'komentarji_anketa' => 3, // Komentarji na anketo
+ 'urejanje' => 3, // Komentarji na anketo
+
+ 'alert' => 2, // Obvescanje
+ 'invitations' => 3, // Email vabila
+
+ /* Moje ankete */
+ 'my_survey_folders' => 2, // Mape v mojih anketah
+ );
+
+
+ public static function getInstance($usr_id){
+
+ if (!self::$instance)
+ self::$instance = new UserAccess($usr_id);
+
+ return self::$instance;
+ }
+
+ private function __construct($usr_id){
+ global $app_settings;
+
+ // Ce so paketi onemogoceni nič ne preverjamo
+ if(!isset($app_settings['commercial_packages']) || $app_settings['commercial_packages'] == false){
+ return;
+ }
+
+ // Ce nimamo usr_id-ja ga poskusimo pridobiti iz id-ja ankete
+ if(!isset($usr_id) || $usr_id < 1 || $usr_id == ''){
+
+ if(isset($_POST['anketa']) || isset($_GET['anketa'])){
+
+ $ank_id = (isset($_GET['anketa'])) ? $_GET['anketa'] : $_POST['anketa'];
+
+ $sqlU = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='".$ank_id."'");
+ $rowU = mysqli_fetch_array($sqlU);
+
+ $usr_id = $rowU['insert_uid'];
+ }
+ else{
+ $usr_id = 0;
+ }
+ }
+
+ if($usr_id > 0){
+ $this->usr_id = $usr_id;
+
+ // Preverimo, ce smo znotraj dolocene ankete in ce je usr_id enak id-ju avtorja ankete
+ $this->checkSurveyAuthor();
+
+ // Zakesiramo vse dostope userja
+ $this->cacheUserAccess();
+
+ // Zakesiramo vse pakete
+ $this->cachePackages();
+
+ // Pogledamo ce smo v anketi in ce gre za staro anketo - stare ankete nimajo vklopljenih paketov
+ $this->checkAnketaOld();
+ }
+ else{
+ echo 'Napaka! Manjka ID uporabnika.';
+ die();
+ }
+ }
+
+
+
+ // Dobimo podatke o dostopu za posameznega uporabnika
+ private function cacheUserAccess(){
+
+ $sqlUserAccess = sisplet_query("SELECT ua.*, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access ua, user_access_paket up
+ WHERE ua.usr_id='".$this->usr_id."' AND up.id=ua.package_id
+ ");
+
+ // Uporabnik se nima nobenega paketa
+ if(mysqli_num_rows($sqlUserAccess) == 0)
+ return;
+
+ $rowUserAccess = mysqli_fetch_array($sqlUserAccess);
+
+ // Dodatno preverimo, ce je paket ze potekel
+ if(strtotime($rowUserAccess['time_expire']) < time())
+ return;
+
+ // Vse ok - uporabniku nastavimo trenuten paket
+ $this->user_access = $rowUserAccess;
+ }
+
+ // Dobimo podatke o vseh paketih
+ private function cachePackages(){
+
+ $sqlPackages = sisplet_query("SELECT * FROM user_access_paket");
+ while($row = mysqli_fetch_array($sqlPackages)){
+ $this->packages[$row['id']] = $row;
+ }
+ }
+
+ // Pogledamo ce smo v anketi in ce gre za staro anketo - stare ankete nimajo vklopljenih paketov
+ private function checkAnketaOld(){
+
+ // Ce nismo znotraj ankete ti ignoriramo
+ if(!isset($_GET['anketa'])){
+ return;
+ }
+
+ // Nastavimo id ankete
+ $ank_id = $_GET['anketa'];
+
+ $sqlA = sisplet_query("SELECT insert_time FROM srv_anketa WHERE id='".$ank_id."'");
+ $rowA = mysqli_fetch_array($sqlA);
+
+ // Ce je datum kreiranja starejši je stara anketa
+ if(strtotime($rowA['insert_time']) < strtotime($this->anketa_old_date)){
+ $this->anketa_old = true;
+ }
+ }
+
+ public function isAnketaOld(){
+ return $this->anketa_old;
+ }
+
+ public function userNotAuthor(){
+ return $this->user_not_author;
+ }
+
+
+ // Preverimo ce ima uporabnik dostop do neke funkcionalnosti
+ public function checkUserAccess($what=''){
+ global $app_settings;
+ global $admin_type;
+ global $global_user_id;
+ global $mysql_database_name;
+
+ // Ce so paketi onemogoceni vrnemo vedno true
+ if(!isset($app_settings['commercial_packages']) || $app_settings['commercial_packages'] == false){
+ return true;
+ }
+
+ // Ce nimamo usr_id-ja zaenkrat pustimo vse
+ if(!isset($this->usr_id) || $this->usr_id < 1 || $this->usr_id == ''){
+ return true;
+ }
+
+ // Ce je metaadmin ali admin enklikanketa@gmail.com lahko tudi vedno vse uporablja
+ if(Dostop::isMetaAdmin() || ($mysql_database_name == 'real1kasi' && $admin_type == 0 && $global_user_id == '440')){
+ return true;
+ }
+
+ // Ce je anketa ustvarjena pred nekim datumom, ne preverjamo paketov
+ if($this->anketa_old == true){
+ return true;
+ }
+
+
+ // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
+ if($what == ''){
+ $what = $this->getFunctionalityFromUrl();
+ }
+
+ // Preverimo, ce funkcionalnost ni v paketu, ki ga ima uporabnik
+ $package_id = $this->getPackage();
+ if(isset($this->functionality_package[$what]) && $this->functionality_package[$what] > $package_id){
+ return false;
+ }
+
+ return true;
+ }
+
+ // Vrnemo vse podatke o dostopu uporabnika
+ public function getAccess(){
+
+ return $this->user_access;
+ }
+
+ // Vrnemo paket uporabnika
+ public function getPackage(){
+ global $app_settings;
+ global $admin_type;
+
+ // Ce so paketi onemogoceni vrnemo -1
+ if(!isset($app_settings['commercial_packages']) || $app_settings['commercial_packages'] == false){
+ return -1;
+ }
+
+ // Ce je admin ali manager lahko tudi vedno vse uporablja
+ /*if($admin_type == 0 || $admin_type == 1){
+ return 3;
+ }*/
+
+ // Ce nima nastavljeno nic je brez paketa
+ if(!isset($this->user_access['package_id']))
+ return 1;
+
+ return $this->user_access['package_id'];
+ }
+
+ // Vrnemo aray vseh paketov
+ public function getPackages(){
+ return $this->packages;
+ }
+
+ // Preverimo, ce smo znotraj dolocene ankete in ce je usr_id enak id-ju avtorja ankete
+ private function checkSurveyAuthor(){
+
+ // Nastavimo id ankete
+ if(isset($_GET['anketa'])){
+ $ank_id = $_GET['anketa'];
+ }
+ elseif(isset($_POST['anketa']) && $_POST['anketa'] != 'undefined'){
+ $ank_id = $_POST['anketa'];
+ }
+ // Ce nismo znotraj ankete je vse ok
+ else{
+ return;
+ }
+
+ // Ce smo znotraj ankete, preverimo, ce je usr_id enak avtorju ankete
+ $sqlA = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='".$ank_id."'");
+ if(mysqli_num_rows($sqlA) > 0){
+ $rowA = mysqli_fetch_array($sqlA);
+
+ // Ce user ni avtor, preverjamo za avtorja
+ if($this->usr_id != $rowA['insert_uid']){
+ $this->usr_id = $rowA['insert_uid'];
+ $this->user_not_author = true;
+ }
+ }
+
+ return;
+ }
+
+
+ // Izpisemo obvestilo, da je funkcionalnost onemogocena in naj kupi paket
+ public function displayNoAccess($what=''){
+ global $lang;
+ global $site_url;
+
+ // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
+ if($what == ''){
+ $what = $this->getFunctionalityFromUrl();
+ }
+
+ // Kateri paket je potreben za to funkcionalnost
+ $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3;
+ $package_required_name = $this->packages[$package_required]['name'];
+
+ if($lang['id'] == '2')
+ $drupal_url = $site_url.'d/en/purchase/'.$package_required.'/package';
+ else
+ $drupal_url = $site_url.'d/izvedi-nakup/'.$package_required.'/podatki';
+
+ echo '<div class="user_access_warning">';
+
+ // Ce user ni avtor ankete
+ if($this->user_not_author){
+ echo '<p>'.$lang['srv_access_no_access_not_author'].'</p>';
+ }
+
+ echo '<p>'.$lang['srv_access_no_access'].' "'.$package_required_name.'".</p>';
+ if(!$this->user_not_author)
+ echo '<span class="floatLeft"><div class="buttonwrapper"><a class="ovalbutton ovalbutton_blue" href="'.$drupal_url.'" target="_blank">'.$lang['srv_narocila_buy'].'</a></div></span>';
+
+ echo '</div>';
+ }
+
+ // Izpisemo popup obvestilo, da je funkcionalnost onemogocena in naj kupi paket
+ public function displayNoAccessPopup($what){
+ global $lang;
+ global $site_url;
+
+ // Kateri paket je potreben za to funkcionalnost
+ $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3;
+ $package_required_name = $this->packages[$package_required]['name'];
+
+ if($lang['id'] == '2')
+ $drupal_url = $site_url.'d/en/purchase/'.$package_required.'/package';
+ else
+ $drupal_url = $site_url.'d/izvedi-nakup/'.$package_required.'/podatki';
+
+ // Ce user ni avtor ankete
+ if($this->user_not_author){
+ echo '<p>'.$lang['srv_access_no_access_not_author'].'</p>';
+ }
+
+ echo '<p>'.$lang['srv_access_no_access'].' "'.$package_required_name.'".</p>';
+ if(!$this->user_not_author)
+ echo '<span class="floatRight"><div class="buttonwrapper"><a class="ovalbutton ovalbutton_blue" href="'.$drupal_url.'" target="_blank">'.$lang['srv_narocila_buy'].'</a></div></span>';
+ echo '<span class="floatRight spaceRight"><div class="buttonwrapper"><a class="ovalbutton ovalbutton_gray" href="#" onClick="popupUserAccess_close();">'.$lang['srv_zapri'].'</a></div></span>';
+ }
+
+ // Izpisemo obvestilo, da je funkcionalnost onemogocena in naj kupi paket
+ public function displayNoAccessText($what=''){
+ global $lang;
+
+ // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
+ if($what == ''){
+ $what = $this->getFunctionalityFromUrl();
+ }
+
+ // Kateri paket je potreben za to funkcionalnost
+ $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3;
+ $package_required_name = $this->packages[$package_required]['name'];
+
+ echo '<p class="user_access_warning_text">';
+
+ // Ce user ni avtor ankete
+ if($this->user_not_author){
+ echo $lang['srv_access_no_access_not_author'].'<br /><br />';
+ }
+
+ echo $lang['srv_access_no_access'].' "'.$package_required_name.'"';
+
+ echo '</p>';
+ }
+
+
+ // Vrnemo funkcionalnost glede na urle kjer se nahajamo
+ private function getFunctionalityFromUrl(){
+
+ $what = '';
+
+ // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
+ if(isset($_GET['a'])){
+
+ $what = $_GET['a'];
+
+ if($_GET['a'] == 'analysis' || $_GET['a'] == 'data'){
+
+ if(isset($_GET['m'])){
+ $what .= '_'.$_GET['m'];
+ }
+ }
+ elseif($_GET['a'] == 'ustvari_anketo'){
+
+ if(isset($_GET['b'])){
+ $what .= '_'.$_GET['b'];
+ }
+ }
+ elseif($_GET['a'] == 'theme-editor'){
+
+ if(isset($_GET['t'])){
+ $what .= '_'.$_GET['t'];
+ }
+ }
+ elseif($_GET['a'] == 'langStatistic'){
+ $what = 'prevajanje';
+ }
+ elseif($_GET['a'] == 'skupine'){
+ $what = '';
+ }
+ elseif($_GET['a'] == 'arhivi' && isset($_GET['m']) && ($_GET['m'] == 'survey_data' || $_GET['m'] == 'survey')){
+ $what .= '_export';
+ }
+ }
+
+ return $what;
+ }
+
+
+ // Ajax klici
+ public function ajax(){
+
+ if (isset($_POST['what']))
+ $what = $_POST['what'];
+
+
+ // Prikazemo popup z obvestilom, da je funkcionalnost onemogocena in naj kupi paket
+ if($_GET['a'] == 'displayNoAccessPopup') {
+ $this->displayNoAccessPopup($what);
+ }
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserMailCron.php b/frontend/payments/classes/class.UserMailCron.php
new file mode 100644
index 0000000..8f588c7
--- /dev/null
+++ b/frontend/payments/classes/class.UserMailCron.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za posiljanje cron emailov povezanih z racunom, placili...
+ *
+ */
+
+class UserMailCron{
+
+
+ // ID userja
+ private $usr_id = '';
+
+
+ function __construct(){
+
+ }
+
+
+ // Nastavimo fazo v kateri se nahaja uporabnik
+ public function setStage($stage){
+
+ }
+
+
+ // Izvedemo cron ob 9h zjutraj
+ public static function executeCron(){
+
+ // Loop cez vse userje v bazi
+ $sql = sisplet_query("SELECT c.*, u.email, u.ime, u.type, u.status, u.name, u.surname
+ FROM user_cronjob c, users u
+ WHERE (a.package_id = 2 OR a.package_id = 3)
+ AND ".$interval_query."
+ AND u.id=a.usr_id
+ ");
+
+ while($row = mysqli_fetch_array($sql)){
+
+ // Process cronjob for user
+ }
+ }
+
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserNarocila.php b/frontend/payments/classes/class.UserNarocila.php
new file mode 100644
index 0000000..e831e33
--- /dev/null
+++ b/frontend/payments/classes/class.UserNarocila.php
@@ -0,0 +1,1632 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za pregled, dodajanje, urejanje narocil uporabnika
+ *
+ */
+
+class UserNarocila{
+
+
+ // Array z vsemi paketi
+ private $packages = array();
+
+ // Filter narocil
+ private $narocila_filter = array('neplacana' => 1, 'pacana' => 0, 'stornirana' => 0);
+
+
+ function __construct(){
+
+ // Zakesiramo vse pakete
+ $this->cachePackages();
+
+ if(isset($_SESSION['narocila_filter']['neplacana']) && $_SESSION['narocila_filter']['neplacana'] == '0')
+ $this->narocila_filter['neplacana'] = 0;
+
+ if(isset($_SESSION['narocila_filter']['placana']) && $_SESSION['narocila_filter']['placana'] == '1')
+ $this->narocila_filter['placana'] = 1;
+
+ if(isset($_SESSION['narocila_filter']['stornirana']) && $_SESSION['narocila_filter']['stornirana'] == '1')
+ $this->narocila_filter['stornirana'] = 1;
+ }
+
+
+ // Dobimo array narocil (vseh oz. za dolocenega uporabnika)
+ private function getNarocila($usr_id=0){
+ global $admin_type;
+
+ $narocila = array();
+
+ // Vsa narocila lahko pregledujejo samo admini
+ if($admin_type == 0 && $usr_id == 0){
+
+ // Filter po statusu
+ $status = ' AND un.status IN (';
+ $status .= ($this->narocila_filter['neplacana'] == 1) ? '0,' : '';
+ $status .= ($this->narocila_filter['placana'] == 1) ? '1,' : '';
+ $status .= ($this->narocila_filter['stornirana'] == 1) ? '2,' : '';
+ $status = substr($status, 0, -1);
+ $status .= ') ';
+
+ // Loop po vseh narocilih v sistemu
+ $sqlNarocilo = sisplet_query("SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access_narocilo un, users u, user_access_paket up
+ WHERE un.usr_id=u.id AND un.package_id=up.id ".$status."
+ ORDER BY un.id DESC
+ ");
+ while($rowNarocilo = mysqli_fetch_array($sqlNarocilo)){
+
+ $narocila[] = $rowNarocilo;
+ }
+ }
+ elseif($usr_id > 0){
+
+ // Loop po vseh narocilih uporabnika
+ $sqlNarocilo = sisplet_query("SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access_narocilo un, users u, user_access_paket up
+ WHERE un.usr_id='".$usr_id."' AND un.usr_id=u.id AND un.package_id=up.id
+ ORDER BY un.id DESC
+ ");
+ while($rowNarocilo = mysqli_fetch_array($sqlNarocilo)){
+
+ $narocila[] = $rowNarocilo;
+ }
+ }
+
+ return $narocila;
+ }
+
+ // Izracunamo koncno ceno glede na paket, trajanje in popust (v eur)
+ public function getPrice($package_name, $trajanje, $discount=0, $time=''){
+
+ $cena = array();
+
+ // Mesecna cena paketa
+ $package_price = $this->packages[$package_name]['price'];
+
+ // Narocila pred 7.12. morajo imeti stare cene
+ if($time != '' && strtotime($time) < strtotime('2020-12-06 20:00:00')){
+
+ // Mesecno ceno zmanjsamo glede na trajanje
+ if($package_name == '2ka'){
+ if((int)$trajanje >= 12){
+ $cena['monthly'] = number_format(11.90 - 2, 2, '.', '');
+ }
+ elseif((int)$trajanje >= 3){
+ $cena['monthly'] = number_format(11.90 - 1, 2, '.', '');
+ }
+ else{
+ $cena['monthly'] = number_format(11.90, 2, '.', '');
+ }
+ }
+ elseif($package_name == '3ka'){
+ if((int)$trajanje >= 12){
+ $cena['monthly'] = number_format(21.90 - 2, 2, '.', '');
+ }
+ elseif((int)$trajanje >= 3){
+ $cena['monthly'] = number_format(21.90 - 1, 2, '.', '');
+ }
+ else{
+ $cena['monthly'] = number_format(21.90, 2, '.', '');
+ }
+ }
+ }
+ else{
+
+ // Mesecno ceno zmanjsamo glede na trajanje
+ if($package_name == '2ka'){
+ if((int)$trajanje >= 12){
+ $cena['monthly'] = number_format($package_price - 4, 2, '.', '');
+ }
+ elseif((int)$trajanje >= 3){
+ $cena['monthly'] = number_format($package_price - 2, 2, '.', '');
+ }
+ else{
+ $cena['monthly'] = number_format($package_price, 2, '.', '');
+ }
+ }
+ elseif($package_name == '3ka'){
+ if((int)$trajanje >= 12){
+ $cena['monthly'] = number_format($package_price - 3, 2, '.', '');
+ }
+ elseif((int)$trajanje >= 3){
+ $cena['monthly'] = number_format($package_price - 1.5, 2, '.', '');
+ }
+ else{
+ $cena['monthly'] = number_format($package_price, 2, '.', '');
+ }
+ }
+ }
+
+
+ // Se brez davka za monthly
+ $cena['monthly_without_tax'] = number_format(floatval($cena['monthly']) / 1.22, 2, '.', '');
+
+
+ // Cena za celotno obdobje
+ $cena['full'] = number_format((int)$trajanje * floatval($cena['monthly']), 2, '.', '');
+
+ // Se brez davka za full
+ $cena['full_without_tax'] = number_format(floatval($cena['full']) / 1.22, 2, '.', '');
+
+
+ // Cena s popustom
+ $cena['full_discount'] = $cena['full'];
+ $cena['discount'] = $discount;
+
+ // Odstejemo se popust ce je posebej nastavljen
+ if($discount != 0){
+
+ // Ce je popust vecji od celotnega zneska, je cena 0 (cena ne more biti negativna)
+ if($discount > $cena['full']){
+ $cena['full_discount'] = 0;
+ $cena['discount'] = $cena['full'];
+ }
+ else{
+ //$cena['full_discount'] = number_format(floatval($cena['full_discount']) - (floatval($discount) * floatval($cena['full']) / 100), 2, '.', '');
+ $cena['full_discount'] = number_format(floatval($cena['full_discount']) - floatval($discount), 2, '.', '');
+ }
+ }
+
+ // Dodatno se izracunamo popust v %
+ if($cena['full'] > 0)
+ $cena['discount_percentage'] = round(floatval($cena['discount']) / floatval($cena['full']) * 100);
+ else
+ $cena['discount_percentage'] = 0;
+
+ // Se davek
+ $cena['final_without_tax'] = number_format(floatval($cena['full_discount']) / 1.22, 2, '.', '');
+ $cena['tax'] = number_format($cena['full_discount'] - $cena['final_without_tax'], 2, '.', '');
+ $cena['final'] = $cena['full_discount'];
+
+ return $cena;
+ }
+
+ // Izracunamo popust glede na uporabnika (pri upgradu / downgradu paketa)
+ public function getDiscount($usr_id, $package_name, $trajanje){
+
+ // Dobimo trenuten dostop userja
+ $ua = UserAccess::getInstance($usr_id);
+ $user_access = $ua->getAccess();
+
+ // Dobimo polno ceno za paket
+ $price = $this->getPrice($package_name, $trajanje);
+
+ // UPGRADE oz. DOWNGRADE - iz 2ka na 3ka ali iz 3ka na 2ka
+ if( isset($user_access['package_name']) && (($user_access['package_name'] == '2ka' && $package_name == '3ka') || ($user_access['package_name'] == '3ka' && $package_name == '2ka')) ){
+
+ // Mesecna cena obstojecega paketa
+ $package_price = floatval($this->packages[$user_access['package_name']]['price']);
+
+ // Stevilo dni dokler je obstojeci paket se veljaven
+ $now = time();
+ $expire = strtotime($user_access['time_expire']);
+ $expire_in_days = floor(($expire - $now) / (60 * 60 * 24));
+
+ // Popravimo ceno, ce ima veljaven paket se za 3 mesece ali vec (pomeni, da je imel popust pri nakupu kar upostevamo)
+ if($package_name == '2ka'){
+ if($expire_in_days > 92){
+ $package_price = number_format($package_price - 4, 2, '.', '');
+ }
+ elseif($expire_in_days > 31){
+ $package_price = number_format($package_price - 2, 2, '.', '');
+ }
+ }
+ elseif($package_name == '3ka'){
+ if($expire_in_days > 92){
+ $package_price = number_format($package_price - 3, 2, '.', '');
+ }
+ elseif($expire_in_days > 31){
+ $package_price = number_format($package_price - 1.5, 2, '.', '');
+ }
+ }
+
+ // Popust izracunamo kot delez cene paketa in
+ $dayly_discount = number_format($package_price / 31, 2, '.', '');
+ $discount = number_format($dayly_discount * $expire_in_days, 2, '.', '');
+
+ return $discount;
+ }
+ // Drugace nimamo nobenega popusta
+ else{
+ return 0;
+ }
+ }
+
+ // Preverimo, ce narocilo slucajno nima ddv-ja (zavezanec za ddv iz tujine)
+ public function isWithoutDDV($narocilo_id){
+
+ $sqlNarocilo = sisplet_query("SELECT podjetje_drzava, podjetje_no_ddv
+ FROM user_access_narocilo
+ WHERE id='".$narocilo_id."'
+ ");
+ if(mysqli_num_rows($sqlNarocilo) == 1){
+
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ // Slovenija ima vedno ddv
+ if($rowNarocilo['podjetje_drzava'] == 'Slovenija' || $rowNarocilo['podjetje_drzava'] == 'Slovenia'){
+ return false;
+ }
+
+ // Ce ni iz slovenije in ima oznaceno da ne placa ddv-ja
+ if($rowNarocilo['podjetje_no_ddv'] == '1'){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ // Dobimo jezik narocila - v istem jeziku so potem emaili in racun/predracun
+ public function getNarociloLanguage($narocilo_id){
+
+ $sqlNarocilo = sisplet_query("SELECT language
+ FROM user_access_narocilo
+ WHERE id='".$narocilo_id."'
+ ");
+ if(mysqli_num_rows($sqlNarocilo) == 1){
+
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ if($rowNarocilo['language'] == 'sl'){
+ return 'si';
+ }
+ else{
+ return 'en';
+ }
+ }
+
+ return 'en';
+ }
+
+
+ // Izpisemo podatke o narocilih uporabnika
+ public function displayNarocila(){
+ global $lang, $global_user_id;
+
+ // Podatki o trenutnem paketu uporabnika
+ echo '<fieldset>';
+ echo '<legend>'.$lang['srv_narocila_current'].'</legend>';
+
+ $ua = UserAccess::getInstance($global_user_id);
+ $user_access = $ua->getAccess();
+
+ // Ce ni polja v bazi oz je nastavljen paket na 1 ima osnovni paket
+ if(!$user_access || $user_access['package_id'] == '1'){
+ echo '<p>'.$lang['srv_narocila_current_package'].':</span> <span class="bold">1KA</span></p>';
+ }
+ // Imamo aktiviran paket - izpisemo podatke
+ else{
+ echo '<div class="data"><span class="setting_title">'.$lang['srv_narocila_current_package'].':</span> <span class="bold">'.$user_access['package_name'],'</span></div>';
+ echo '<div class="data"><span class="setting_title">'.$lang['srv_narocila_current_start'].':</span> <span class="bold">'.date( 'd.m.Y', strtotime($user_access['time_activate'])).'</span></div>';
+ echo '<div class="data"><span class="setting_title">'.$lang['srv_narocila_current_expire'].':</span> <span class="bold">'.date( 'd.m.Y', strtotime($user_access['time_expire'])),'</span></div>';
+ }
+
+ echo '</fieldset>';
+
+
+ // Tabela vseh narocil uporabnika
+ echo '<fieldset>';
+ echo '<legend>'.$lang['srv_narocila_list'].'</legend>';
+
+ $sqlNarocilaCount = sisplet_query("SELECT count(id) FROM user_access_narocilo WHERE usr_id='".$global_user_id."'");
+ $rowNarocilaCount = mysqli_fetch_array($sqlNarocilaCount);
+ if($rowNarocilaCount['count(id)'] > 0){
+ $this->displayNarocilaTable();
+ }
+ else{
+ echo '<p>'.$lang['srv_narocila_no_package_text'].'</p>';
+ }
+
+ echo '</fieldset>';
+ }
+
+ // Izpisemo seznam vseh narocil uporabnika
+ public function displayNarocilaTable(){
+ global $lang, $global_user_id;
+
+ // Dobimo vsa narocila uporabnika
+ $data = $this->getNarocila($global_user_id);
+
+ echo '<table id="user_narocila" class="user_narocila">';
+
+ // Glava tabele
+ echo ' <thead>';
+ echo ' <tr>';
+
+ echo ' <th>'.$lang['srv_narocilo_paket'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_trajanje'].' ('.$lang['srv_narocilo_trajanje_mesecev'].')</th>';
+ echo ' <th>'.$lang['srv_narocilo_cas'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_nacin_placila'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_cena'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_status'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_pdf'].'</th>';
+
+ echo ' </tr>';
+ echo ' </thead>';
+
+ // Vsebina tabele
+ echo ' <tbody>';
+
+ foreach($data as $usr_id => $data_row){
+
+ echo '<tr>';
+
+ echo '<td>'.$data_row['package_name'].'</td>';
+ echo '<td>'.$data_row['trajanje'].'</td>';
+ echo '<td>'.date("j.n.Y H:i", strtotime($data_row['time'])).'</td>';
+ echo '<td>'.$data_row['payment_method'].'</td>';
+
+ // Cena
+ $cena = $this->getPrice($data_row['package_name'], $data_row['trajanje'], $data_row['discount'], $data_row['time']);
+
+ // Zavezanec iz tujine nima ddv-ja
+ if($this->isWithoutDDV($data_row['id']))
+ echo '<td>'.$cena['final_without_tax'].'</td>';
+ else
+ echo '<td>'.$cena['final'].'</td>';
+
+ if($data_row['status'] == '0')
+ $status_color = 'red';
+ elseif($data_row['status'] == '1')
+ $status_color = 'green';
+ else
+ $status_color = 'black';
+ echo '<td class="'.$status_color.'">'.$lang['srv_narocilo_status_'.$data_row['status']].'</td>';
+
+ // PDF
+ echo '<td>';
+ echo '<span class="pointer as_link" onClick="getNarociloPredracun(\''.$data_row['id'].'\')">'.$lang['srv_narocilo_pdf_predracun'].'</span>';
+ if($data_row['status'] == '1'){
+ echo ' | <span class="pointer as_link" onClick="getNarociloRacun(\''.$data_row['id'].'\')">'.$lang['srv_narocilo_pdf_racun'].'</span>';
+ }
+ echo '</td>';
+
+ echo '</tr>';
+ }
+
+ echo ' </tbody>';
+
+ echo '</table>';
+ }
+
+ // Izpisemo seznam vseh narocil - admin
+ public function displayNarocilaTableAdmin(){
+ global $lang, $global_user_id, $app_settings;
+
+ // Admini vidijo vsa narocila
+ $data = $this->getNarocila();
+
+ // Filtri po statusu
+ echo '<div class="narocila_filters">';
+ echo '<label for="filter_narocila_0"><input type="checkbox" id="filter_narocila_0" '.($this->narocila_filter['neplacana'] == 1 ? 'checked="checked"' : '').' onClick="filterNarocila(\'0\', this.checked)">'.$lang['srv_narocilo_filter_status_0'].'</label>';
+ echo '<label for="filter_narocila_1"><input type="checkbox" id="filter_narocila_1" '.($this->narocila_filter['placana'] == 1 ? 'checked="checked"' : '').' onClick="filterNarocila(\'1\', this.checked)">'.$lang['srv_narocilo_filter_status_1'].'</label>';
+ echo '<label for="filter_narocila_2"><input type="checkbox" id="filter_narocila_2" '.($this->narocila_filter['stornirana'] == 1 ? 'checked="checked"' : '').' onClick="filterNarocila(\'2\', this.checked)">'.$lang['srv_narocilo_filter_status_2'].'</label>';
+ echo '</div>';
+
+ echo '<table id="user_narocila" class="dataTable user_narocila_admin" style="width:100%">';
+
+ // Glava tabele
+ echo ' <thead>';
+ echo ' <tr>';
+ echo ' <th>ID</th>';
+ echo ' <th>'.$lang['srv_narocilo_ime'].'</th>';
+ echo ' <th>'.$lang['email'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_paket'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_trajanje'].' ('.$lang['srv_narocilo_trajanje_mesecev'].')</th>';
+ echo ' <th>'.$lang['srv_narocilo_cas'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_nacin_placila'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_ddv'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_cena'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_status'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_podjetje_eracun'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_pdf'].'</th>';
+ echo ' <th>'.$lang['edit2'].'</th>';
+ echo ' </tr>';
+ echo ' </thead>';
+
+
+ // Vsebina tabele
+ echo ' <tbody>';
+
+ foreach($data as $usr_id => $data_row){
+
+ if($data_row['status'] == '0')
+ $status_color = 'red';
+ elseif($data_row['status'] == '1')
+ $status_color = 'green';
+ else
+ $status_color = 'black';
+
+ echo '<tr class="'.$status_color.'_bg">';
+
+ echo '<td>'.$data_row['id'].'</td>';
+ echo '<td>'.$data_row['ime'].' '.($data_row['podjetje_ime'] != '' ? '('.$data_row['podjetje_ime'].')' : '').'</td>';
+ echo '<td><span class="as_link" onClick="edit_user(\''.$data_row['usr_id'].'\'); return false;">'.$data_row['email'].'</span></td>';
+ echo '<td>'.$data_row['package_name'].'</td>';
+ echo '<td>'.$data_row['trajanje'].'</td>';
+ echo '<td data-order="'.date("Y-n-j", strtotime($data_row['time'])).'">'.date("j.n.Y H:i", strtotime($data_row['time'])).'</td>';
+ echo '<td>'.$lang['srv_narocilo_nacin_placila_'.$data_row['payment_method']].'</td>';
+
+ // Ali placa ddv (podjetje - zavezanec iz tujine ga ne)
+ echo '<td>'.($this->isWithoutDDV($data_row['id']) ? $lang['no'] : $lang['yes']).'</td>';
+
+ // Cena
+ $cena = $this->getPrice($data_row['package_name'], $data_row['trajanje'], $data_row['discount'], $data_row['time']);
+
+ // Zavezanec iz tujine nima ddv-ja
+ if($this->isWithoutDDV($data_row['id']))
+ echo '<td>'.$cena['final_without_tax'].'</td>';
+ else
+ echo '<td>'.$cena['final'].'</td>';
+
+ echo '<td class="'.$status_color.'">';
+
+ echo $lang['srv_narocilo_status_'.$data_row['status']];
+
+ // Na www.1ka.si lahko narocilo placa samo Goran
+ if($data_row['status'] != '1' && $data_row['status'] != '2' && ($app_settings['app_name'] != 'www.1ka.si' || $global_user_id == '112696')){
+ echo '<br />';
+ echo '<span class="as_link" onClick="urediNarociloPay(\''.$data_row['id'].'\')">'.$lang['srv_narocilo_placaj'].'</span>';
+
+ if($data_row['podjetje_eracun'] == '1')
+ echo ' | <span class="as_link" onClick="urediNarociloPayEracun(\''.$data_row['id'].'\')">'.$lang['srv_narocilo_placaj_eracun'].'</span>';
+ }
+
+ echo '</td>';
+
+ // Eračun
+ echo '<td>'.($data_row['podjetje_eracun'] == '1' ? $lang['yes'] : $lang['no']).'</td>';
+
+ echo '<td>';
+ // Ce je bila cena 0 je bil avtomatsko "placan" in nima racuna oz. predracuna
+ if($cena['final'] == 0){
+ echo '/';
+ }
+ else{
+ echo '<span class="pointer as_link" onClick="getNarociloPredracun(\''.$data_row['id'].'\')">'.$lang['srv_narocilo_pdf_predracun'].'</span>';
+ if($data_row['status'] == '1'){
+ echo ' | <span class="pointer as_link" onClick="getNarociloRacun(\''.$data_row['id'].'\')">'.$lang['srv_narocilo_pdf_racun'].'</span>';
+ }
+ }
+ echo '</td>';
+
+ echo '<td>';
+ echo '<a href="#" onClick="displayNarociloPopup(\''.$data_row['id'].'\')" title="'.$lang['srv_narocila_edit'].'"><i class="fa fa-pencil-alt link-sv-moder"></i>';
+ // Narocilo se lahko pobrise samo ce se ni placano
+ if($data_row['status'] != '1')
+ echo ' <span class="no-print"> | </span><a href="#" onClick="brisiNarocilo(\''.$data_row['id'].'\')" title="'.$lang['srv_narocila_delete'].'"><i class="fa fa-times link-sv-moder"></a>';
+ echo '</td>';
+
+ echo '</tr>';
+ }
+
+ echo ' </tbody>';
+
+ echo '</table>';
+
+ // Se inicializiramo dataTable jquery
+ echo '<script> prepareNarocilaTableAdmin(); </script>';
+ }
+
+ // Prikazemo popup za pregled in urejanje narocilo
+ private function displayNarociloEdit($narocilo_id){
+ global $lang;
+
+ // Loop po vseh narocilih uporabnika
+ $sqlNarocilo = sisplet_query("SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access_narocilo un, users u, user_access_paket up
+ WHERE un.id='".$narocilo_id."' AND un.usr_id=u.id AND un.package_id=up.id
+ ");
+
+ if(mysqli_num_rows($sqlNarocilo) == 0){
+ echo 'Naročilo ne obstaja!';
+ return;
+ }
+
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ echo '<h2>'.$lang['srv_narocilo_number'].' '.$narocilo_id.'</h2>';
+
+
+ echo '<div class="edit_narocilo_content">';
+
+ echo '<div class="form_holder"><form name="edit_narocilo" id="edit_narocilo">';
+
+ echo '<input type="hidden" name="narocilo_id" value="'.$narocilo_id.'">';
+
+
+ // Podatki narocnika
+ echo '<div class="edit_narocilo_segment">';
+
+ // Ime in uporabnik
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_ime'].':</span> '.$rowNarocilo['ime'];
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_uporabnik'].':</span> '.$rowNarocilo['name'].' '.$rowNarocilo['surname'].' ('.$rowNarocilo['email'].')';
+ echo '</div>';
+
+ // Telefon
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_telefon'].':</span> ';
+ //echo '<input type="hidden" name="phone" value="'.$rowNarocilo['phone'].'">';
+ echo '<input type="text" name="phone" value="'.$rowNarocilo['phone'].'">';
+ echo '</div>';
+
+ echo '</div>';
+
+
+ // Podatki narocila
+ $cena = $this->getPrice($rowNarocilo['package_name'], $rowNarocilo['trajanje'], $rowNarocilo['discount'], $rowNarocilo['time']);
+
+ echo '<div class="edit_narocilo_segment">';
+
+ // Cas narocila
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_cas'].':</span> '.date("j.n.Y H:i", strtotime($rowNarocilo['time']));
+ echo '<input type="hidden" name="time" value="'.$rowNarocilo['time'].'">';
+ echo '</div>';
+
+ // Paket
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_paket'].':</span> ';
+ if($rowNarocilo['status'] == '1'){
+ echo $rowNarocilo['package_id'].'ka';
+ echo '<input type="hidden" name="package_id" value="'.$rowNarocilo['package_id'].'">';
+ }
+ else{
+ echo '<select name="package_id">';
+ echo '<option value="1" '.($rowNarocilo['package_id'] == '1' ? 'selected="selected"' : '').'>1ka</option>';
+ echo '<option value="2" '.($rowNarocilo['package_id'] == '2' ? 'selected="selected"' : '').'>2ka</option>';
+ echo '<option value="3" '.($rowNarocilo['package_id'] == '3' ? 'selected="selected"' : '').'>3ka</option>';
+ echo '</select>';
+ }
+ echo '</div>';
+
+ // Trajanje v mesecih
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_trajanje'].':</span> ';
+ if($rowNarocilo['status'] == '1'){
+ echo $rowNarocilo['trajanje'].' '.$lang['srv_narocilo_trajanje_mesecev'];
+ echo '<input type="hidden" name="trajanje" value="'.$rowNarocilo['trajanje'].'">';
+ }
+ else{
+ echo '<input type="text" name="trajanje" value="'.$rowNarocilo['trajanje'].'" size="4"> '.$lang['srv_narocilo_trajanje_mesecev'];
+ }
+ echo '</div>';
+
+ // Cena paketa * trajanje
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_cena_brez_popusta'].':</span> '.$cena['full'].' € ('.$rowNarocilo['trajanje'].' '.$lang['srv_narocilo_trajanje_mesecev'].')';
+ echo '</div>';
+
+ // Popust
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_popust'].':</span> ';
+ if($rowNarocilo['status'] == '1'){
+ echo $rowNarocilo['discount'].' %';
+ echo '<input type="hidden" name="discount" value="'.$rowNarocilo['discount'].'">';
+ }
+ else{
+ echo '<input type="text" name="discount" value="'.$rowNarocilo['discount'].'" size="4"> %';
+ }
+ echo '</div>';
+
+ // Koncna cena - zavezanec iz tujine nima ddv-ja
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_cena'].':</span> '.($this->isWithoutDDV($data_row['id']) ? $cena['final_without_tax'] : $cena['final']).' €';
+ echo '</div>';
+
+ // Nacin placila
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_nacin_placila'].':</span> ';
+ if($rowNarocilo['status'] == '1'){
+ echo $lang['srv_narocilo_nacin_placila_'.$rowNarocilo['payment_method']];
+ echo '<input type="hidden" name="payment_method" value="'.$rowNarocilo['payment_method'].'">';
+ }
+ else{
+ echo '<select name="payment_method">';
+ echo '<option value="1" '.($rowNarocilo['payment_method'] == '1' ? 'selected="selected"' : '').'>'.$lang['srv_narocilo_nacin_placila_1'].'</option>';
+ echo '<option value="2" '.($rowNarocilo['payment_method'] == '2' ? 'selected="selected"' : '').'>'.$lang['srv_narocilo_nacin_placila_2'].'</option>';
+ echo '<option value="3" '.($rowNarocilo['payment_method'] == '3' ? 'selected="selected"' : '').'>'.$lang['srv_narocilo_nacin_placila_3'].'</option>';
+ echo '</select>';
+ }
+ echo '</div>';
+
+ // Status narocila
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_status'].':</span> ';
+ echo $lang['srv_narocilo_status_'.$rowNarocilo['status']];
+ echo '<input type="hidden" name="status" value="'.$rowNarocilo['status'].'">';
+ /*echo '<select name="status">';
+ echo '<option value="0" '.($rowNarocilo['status'] == '0' ? 'selected="selected"' : '').'>'.$lang['srv_narocilo_status_0'].'</option>';
+ echo '<option value="1" '.($rowNarocilo['status'] == '1' ? 'selected="selected"' : '').' disabled="disabled">'.$lang['srv_narocilo_status_1'].'</option>';
+ echo '<option value="2" '.($rowNarocilo['status'] == '2' ? 'selected="selected"' : '').'>'.$lang['srv_narocilo_status_2'].'</option>';
+ echo '</select>';*/
+ echo '</div>';
+
+ echo '</div>';
+
+
+ // Podatki podjetja ce je racun na podjetje
+ if($rowNarocilo['podjetje_ime'] != ''){
+ echo '<div class="edit_narocilo_segment">';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_ime'].':</span> ';
+ //echo '<input type="hidden" name="podjetje_ime" value="'.$rowNarocilo['podjetje_ime'].'">';
+ echo '<input type="text" name="podjetje_ime" value="'.$rowNarocilo['podjetje_ime'].'">';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_naslov'].':</span> ';
+ //echo '<input type="hidden" name="podjetje_naslov" value="'.$rowNarocilo['podjetje_naslov'].'">';
+ echo '<input type="text" name="podjetje_naslov" value="'.$rowNarocilo['podjetje_naslov'].'">';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_postna'].':</span> ';
+ //echo '<input type="hidden" name="podjetje_postna" value="'.$rowNarocilo['podjetje_postna'].'">';
+ echo '<input type="text" name="podjetje_postna" value="'.$rowNarocilo['podjetje_postna'].'">';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_posta'].':</span> ';
+ //echo '<input type="hidden" name="podjetje_posta" value="'.$rowNarocilo['podjetje_posta'].'">';
+ echo '<input type="text" name="podjetje_posta" value="'.$rowNarocilo['podjetje_posta'].'">';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_drzava'].':</span> ';
+ echo '<input type="text" name="podjetje_drzava" value="'.$rowNarocilo['podjetje_drzava'].'">';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_davcna'].':</span> ';
+ //echo '<input type="hidden" name="podjetje_davcna" value="'.$rowNarocilo['podjetje_davcna'].'">';
+ echo '<input type="text" name="podjetje_davcna" value="'.$rowNarocilo['podjetje_davcna'].'">';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_no_ddv'].':</span> ';
+ echo '<select name="podjetje_no_ddv">';
+ echo '<option value="0" '.($rowNarocilo['podjetje_no_ddv'] == '0' ? 'selected="selected"' : '').'>'.$lang['no'].'</option>';
+ echo '<option value="1" '.($rowNarocilo['podjetje_no_ddv'] == '1' ? 'selected="selected"' : '').'>'.$lang['yes'].'</option>';
+ echo '</select>';
+ echo '</div>';
+
+ echo '<div class="edit_narocilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_narocilo_podjetje_eracun'].':</span> ';
+ echo '<select name="podjetje_eracun">';
+ echo '<option value="0" '.($rowNarocilo['podjetje_eracun'] == '0' ? 'selected="selected"' : '').'>'.$lang['no'].'</option>';
+ echo '<option value="1" '.($rowNarocilo['podjetje_eracun'] == '1' ? 'selected="selected"' : '').'>'.$lang['yes'].'</option>';
+ echo '</select>';
+ echo '</div>';
+
+ echo '</div>';
+ }
+
+ echo '</form></div>';
+
+ // Gumbi na dnu
+ echo '<div class="buttons_holder">';
+ echo ' <div class="buttonwrapper floatRight"><a class="ovalbutton ovalbutton_orange btn_savesettings" href="#" onclick="urediNarociloSave();"><span>'.$lang['edit1337'].'</span></a></div>';
+ echo ' <div class="buttonwrapper floatRight spaceRight"><a class="ovalbutton ovalbutton_gray" href="#" onclick="urediNarociloClose();"><span>'.$lang['srv_zapri'].'</span></a></div>';
+ echo '</div>';
+
+ echo '</div>';
+ }
+
+
+
+ // Ustvari novo narocilo za uporabnika
+ public function createNarocilo($narocilo_data){
+ global $global_user_id;
+ global $lang;
+
+ $response = array();
+
+ if(isset($narocilo_data['email'])){
+ $uporabnik = sisplet_query("SELECT id, email FROM users WHERE email='".$narocilo_data['email']."'", "obj");
+ $usr_id = $uporabnik->id;
+ }
+
+ $status = isset($narocilo_data['status']) ? $narocilo_data['status'] : 0;
+ $package_id = isset($narocilo_data['package_id']) ? $narocilo_data['package_id'] : 1;
+ $payment_method = isset($narocilo_data['payment_method']) ? $narocilo_data['payment_method'] : 0;
+ //$discount = isset($narocilo_data['discount']) ? $narocilo_data['discount'] : 0;
+ $trajanje = isset($narocilo_data['trajanje']) ? $narocilo_data['trajanje'] : 0;
+
+ $ime_na_racunu = isset($narocilo_data['ime']) ? $narocilo_data['ime'] : '';
+ $phone = isset($narocilo_data['phone']) ? $narocilo_data['phone'] : '';
+
+ $podjetje_ime = isset($narocilo_data['podjetje_ime']) ? $narocilo_data['podjetje_ime'] : '';
+ $podjetje_naslov = isset($narocilo_data['podjetje_naslov']) ? $narocilo_data['podjetje_naslov'] : '';
+ $podjetje_postna = isset($narocilo_data['podjetje_postna']) ? $narocilo_data['podjetje_postna'] : '';
+ $podjetje_posta = isset($narocilo_data['podjetje_posta']) ? $narocilo_data['podjetje_posta'] : '';
+ $podjetje_drzava = isset($narocilo_data['podjetje_drzava']) ? $narocilo_data['podjetje_drzava'] : '';
+ $podjetje_davcna = isset($narocilo_data['podjetje_davcna']) ? $narocilo_data['podjetje_davcna'] : '';
+ $podjetje_eracun = isset($narocilo_data['podjetje_eracun']) ? '1' : '0';
+
+ $language = isset($narocilo_data['lang']) ? $narocilo_data['lang'] : 'sl';
+
+ if($usr_id <= 0){
+ $response['error'] = 'ERROR! Missing user ID.';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Nastavimo ce placa DDV (zavezanci iz EU ga ne placajo)
+ if(self::checkPayDDV($podjetje_davcna, $podjetje_drzava))
+ $podjetje_no_ddv = '0';
+ else
+ $podjetje_no_ddv = '1';
+
+ $brezplacen_preklop = false;
+
+ // Preverimo, ce ima uporabnik ze aktiven paket - po novem lahko to predhodno preklaplja, ker se to preracuna v popust
+ $sqlAccess = sisplet_query("SELECT * FROM user_access WHERE usr_id='".$usr_id."' AND package_id != '1' AND time_expire > NOW()");
+ if(mysqli_num_rows($sqlAccess) > 0){
+
+ $rowAccess = mysqli_fetch_array($sqlAccess);
+
+ // Ce zeli uporabnik kupiti drug placljiv paket kot ga ima trenutno, preracunamo obstojec paket v popust
+ if($rowAccess['package_id'] != $package_id){
+ $sqlPackage = sisplet_query("SELECT name FROM user_access_paket WHERE id='".$package_id."'");
+ $rowPackage = mysqli_fetch_array($sqlPackage);
+
+ $discount = $this->getDiscount($usr_id, $rowPackage['name'], $trajanje);
+
+ // Preverimo, ce je cena slucajno 0 - oznacimo, da gre za brezplacen preklop
+ $cena = $this->getPrice($rowPackage['name'], $trajanje, $discount);
+ if($cena['final'] == 0){
+ $brezplacen_preklop = true;
+
+ // Dodamo piškotek, če gre za brezplačni nakup
+ global $cookie_domain;
+ setcookie('brezplacen_preklop', 1, time()+1800, '/', $cookie_domain);
+ }
+ }
+ }
+
+ $sqlNarocilo = sisplet_query("INSERT INTO user_access_narocilo
+ (usr_id, status, time, package_id, ime, payment_method, discount, trajanje, phone, podjetje_ime, podjetje_naslov, podjetje_postna, podjetje_posta, podjetje_drzava, podjetje_davcna, podjetje_no_ddv, podjetje_eracun, language)
+ VALUES
+ ('".$usr_id."', '".$status."', NOW(), '".$package_id."', '".$ime_na_racunu."', '".$payment_method."', '".$discount."', '".$trajanje."', '".$phone."', '".$podjetje_ime."', '".$podjetje_naslov."', '".$podjetje_postna."', '".$podjetje_posta."', '".$podjetje_drzava."', '".$podjetje_davcna."', '".$podjetje_no_ddv."', '".$podjetje_eracun."', '".$language."')
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $narocilo_id = mysqli_insert_id($GLOBALS['connect_db']);
+
+
+ // Ce gre za brezplacen preklop izvedemo placilo (aktivacijo paketa) brez izdaje racuna, maila...
+ if($brezplacen_preklop){
+ $response = $this->payNarocilo($narocilo_id, $brezplacen_preklop);
+ }
+ // Drugace izdamo predracun oz. placamo s kartico/paypalom
+ else{
+
+ // Glede na tip plačila dobmo ustrezen url (predracun, paypal, kartica)
+ // Paypal
+ if($payment_method == '2'){
+ $response = $this->finishNarociloPaypal($narocilo_id, $narocilo_data);
+ }
+ // Kartica
+ elseif($payment_method == '3'){
+ $response = $this->finishNarociloStripe($narocilo_id, $narocilo_data);
+ }
+ // Predracun
+ else{
+ $response = $this->finishNarociloPredracun($narocilo_id, $narocilo_data);
+ }
+ }
+
+
+ return $response;
+ }
+
+ // Dokoncaj narocilo s placilom preko predracuna
+ private function finishNarociloPredracun($narocilo_id, $narocilo_data){
+ global $lang;
+
+ $response = array();
+ $response['narocilo_id'] = $narocilo_id;
+
+ $cebelica = new UserNarocilaCebelica($narocilo_id);
+ $response['payment_link'] = $cebelica->getNarociloPredracun();
+
+ // Posljemo mail s predracunom
+ $subject = $lang['srv_narocilo_email_predracun_subject'].' '.$narocilo_id;
+
+ $content = $lang['srv_narocilo_email_predracun_content1'];
+ $content .= '<br /><br />'.$lang['srv_narocilo_email_predracun_content2'];
+ $content .= '<br /><a href="'.$response['payment_link'].'">'.$lang['srv_narocilo_email_predracun_file'].'</a>';
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter($anketa=null, $type='payments');
+
+ $MA->addRecipients($narocilo_data['email']);
+
+ // Dodamo predracun v attachment
+ $MA->addAttachment(file_get_contents($response['payment_link']), $file_name='1ka_narocilo_'.$narocilo_id.'_predracun.pdf');
+
+ // Posljemo mail
+ $resultX = $MA->sendMail($content, $subject);
+
+ $response['success'] = true;
+ }
+ catch (Exception $e){
+ $response['error'] = 'ERROR! Sending email with invoice failed.';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ return $response;
+ }
+
+ // Dokoncaj narocilo s placilom preko predracuna
+ private function finishNarociloStripe($narocilo_id, $narocilo_data){
+ global $lang;
+
+ $response = array();
+
+ // Inicializiramo paypal
+ $stripe = new UserNarocilaStripe($narocilo_id);
+
+ // Ustvarimo stripe session za placilo in vrnemo id sessiona, da uporabnik potrdi placilo
+ $stripe_response = $stripe->stripeCreateSession();
+
+ // Ce je bilo placilo preko stripa uspesno zgeneriramo racun in uporabniku aktiviramo paket
+ if($stripe_response['success'] == true){
+ $response['session_id'] = $stripe_response['session_id'];
+ $response['success'] = true;
+ }
+ else{
+ $response['error'] = $stripe_response['error'];
+ $response['success'] = false;
+ }
+
+ return $response;
+ }
+
+ // Dokoncaj narocilo s placilom preko predracuna
+ private function finishNarociloPaypal($narocilo_id, $narocilo_data){
+ global $lang;
+
+ $response = array();
+
+ // Inicializiramo paypal
+ $paypal = new UserNarocilaPaypal($narocilo_id);
+
+ // Ustvarimo paypal placilo in vrnemo url, da se uporabnik prijavi v paypal in potrdi placilo
+ $paypal_response = $paypal->paypalCreatePayment();
+
+ // Ce je bilo placilo preko stripa uspesno zgeneriramo racun in uporabniku aktiviramo paket
+ if($paypal_response['success'] == true){
+ $response['paypal_link'] = $paypal_response['paypal_link'];
+ $response['success'] = true;
+ }
+ else{
+ $response['error'] = $paypal_response['error'];
+ $response['success'] = false;
+ }
+
+ return $response;
+ }
+
+
+
+ // Posodobi obstojece narocilo za uporabnika
+ public function updateNarocilo($narocilo_data){
+ global $global_user_id;
+
+ $response = array();
+
+ // ce nimamo id-ja narocila vrnemo error
+ if(!isset($narocilo_data['narocilo_id']) || $narocilo_data['narocilo_id'] == '0'){
+ $response['error'] = 'Napaka! Manjka ID narocila!';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $update = '';
+
+ $update .= isset($narocilo_data['status']) ? ', status='.$narocilo_data['status'] : '';
+ $update .= isset($narocilo_data['package_id']) ? ', package_id='.$narocilo_data['package_id'] : '';
+ $update .= isset($narocilo_data['payment_method']) ? ', payment_method='.$narocilo_data['payment_method'] : '';
+ $update .= isset($narocilo_data['discount']) ? ', discount='.$narocilo_data['discount'] : '';
+ $update .= isset($narocilo_data['ime']) ? ', ime='.$narocilo_data['ime'] : '';
+ $update .= isset($narocilo_data['trajanje']) ? ', trajanje='.$narocilo_data['trajanje'] : '';
+
+ $update .= isset($narocilo_data['phone']) ? ', phone='.$narocilo_data['phone'] : '';
+
+ $update .= isset($narocilo_data['podjetje_ime']) ? ', podjetje_ime='.$narocilo_data['podjetje_ime'] : '';
+ $update .= isset($narocilo_data['podjetje_naslov']) ? ', podjetje_naslov='.$narocilo_data['podjetje_naslov'] : '';
+ $update .= isset($narocilo_data['podjetje_postna']) ? ', podjetje_postna='.$narocilo_data['podjetje_postna'] : '';
+ $update .= isset($narocilo_data['podjetje_posta']) ? ', podjetje_posta='.$narocilo_data['podjetje_posta'] : '';
+ $update .= isset($narocilo_data['podjetje_drzava']) ? ', podjetje_drzava='.$narocilo_data['podjetje_drzava'] : '';
+ $update .= isset($narocilo_data['podjetje_davcna']) ? ', podjetje_davcna='.$narocilo_data['podjetje_davcna'] : '';
+ $update .= isset($narocilo_data['podjetje_no_ddv']) ? ', podjetje_no_ddv='.$narocilo_data['podjetje_no_ddv'] : '';
+ $update .= isset($narocilo_data['podjetje_eracun']) ? ', podjetje_eracun='.$narocilo_data['podjetje_eracun'] : '';
+
+ $update = substr($update, 1);
+
+ // Update narocila in pobrisemo id racuna in predracuna, ker ga moramo generirati na novo
+ $sqlNarocilo = sisplet_query("UPDATE user_access_narocilo SET ".$update.", cebelica_id_racun='0', cebelica_id_predracun='0' WHERE id='".$narocilo_data['narocilo_id']."'");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+ // Placa obstojece narocilo, uporabniku aktivira paket, zgenerira racun in ga poslje po mailu
+ public function payNarocilo($narocilo_id, $brezplacen_preklop=false){
+ global $global_user_id;
+ global $lang;
+
+ $response = array();
+
+ // Ce nimamo id-ja narocila vrnemo error
+ if($narocilo_id == 0){
+ $response['error'] = 'Napaka! Manjka ID narocila!';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Dobimo podatke narocila
+ $sqlNarocilo = sisplet_query("SELECT n.*, u.email FROM user_access_narocilo n, users u WHERE n.id='".$narocilo_id."' AND u.id=n.usr_id");
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ // Ce je bil racun ze placan ne naredimo nicesar
+ if($rowNarocilo['status'] == 1){
+ $response['error'] = 'Napaka! Račun je že plačan!';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Nastavimo ustrezen jezik - mail mora biti v istem jeziku kot je bilo narocilo
+ if($rowNarocilo['language'] == 'en'){
+ include('../../lang/2.php');
+ }
+
+
+ // Preverimo, ce ima uporabnik ze aktiven paket in ce je ta paket isti kot ta, ki ga je kupil
+ $sqlAccessCheck = sisplet_query("SELECT * FROM user_access WHERE usr_id='".$rowNarocilo['usr_id']."' AND package_id != '1' AND time_expire > NOW()");
+ if(mysqli_num_rows($sqlAccessCheck) > 0){
+
+ $rowAccessCheck = mysqli_fetch_array($sqlAccessCheck);
+
+ // Ce zeli uporabnik kupiti drug placljiv paket kot ga ima trenutno, ga zavrnemo - po novem normalno izvedemo ker preracunamo v popust
+ if($rowAccessCheck['package_id'] != $rowNarocilo['package_id']){
+
+ // Nastavimo dostop uporabniku
+ $sqlAccess = sisplet_query("INSERT INTO user_access
+ (usr_id, time_activate, time_expire, package_id)
+ VALUES
+ ('".$rowNarocilo['usr_id']."', NOW(), NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, '".$rowNarocilo['package_id']."')
+ ON DUPLICATE KEY UPDATE
+ time_activate=NOW(), time_expire=NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, package_id='".$rowNarocilo['package_id']."'
+ ");
+ if (!$sqlAccess){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+ // Uporabnik kupuje isti paket kot ga ze ima - mu ga samo podaljsamo
+ else{
+ $sqlAccess = sisplet_query("UPDATE user_access SET time_expire = time_expire + INTERVAL '".$rowNarocilo['trajanje']."' MONTH WHERE usr_id='".$rowNarocilo['usr_id']."'");
+ if (!$sqlAccess){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+ }
+ else{
+
+ // Nastavimo dostop uporabniku
+ $sqlAccess = sisplet_query("INSERT INTO user_access
+ (usr_id, time_activate, time_expire, package_id)
+ VALUES
+ ('".$rowNarocilo['usr_id']."', NOW(), NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, '".$rowNarocilo['package_id']."')
+ ON DUPLICATE KEY UPDATE
+ time_activate=NOW(), time_expire=NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, package_id='".$rowNarocilo['package_id']."'
+ ");
+ if (!$sqlAccess){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+
+
+ // Nastavimo status narocila na placan
+ $sqlNarociloStatus = sisplet_query("UPDATE user_access_narocilo SET status='1' WHERE id='".$narocilo_id."'");
+ if (!$sqlNarociloStatus){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Brezplacen preklop - samo posljemo mail z obvestilom o vklopu paketa
+ if($brezplacen_preklop){
+
+ // Posljemo mail z obvestilom
+ $subject = $lang['srv_narocilo_free_email_subject'].' '.$rowNarocilo['id'];
+
+ $content = $lang['srv_narocilo_free_email_content1'];
+ $content .= '<br /><br />'.$lang['srv_narocilo_free_email_content2'];
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter($anketa=null, $type='payments');
+ $MA->addRecipients($rowNarocilo['email']);
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ $response['false'] = true;
+ }
+ }
+ // Ce ne gre za brezplacen preklop zapisemo v placila, izdamo racun in posljemo mail
+ else{
+
+ // Ustvarimo placilo v tabeli placil
+ $up = new UserPlacila();
+ $up->createPlacilo($rowNarocilo);
+
+
+ // Ustvarimo racun
+ $cebelica = new UserNarocilaCebelica($narocilo_id);
+ $response['racun'] = $cebelica->getNarociloRacun();
+
+
+ // Posljemo mail z racunom
+ $subject = $lang['srv_narocilo_email_subject'].' '.$rowNarocilo['id'];
+
+ $content = $lang['srv_narocilo_email_content1'];
+ $content .= '<br /><br />'.$lang['srv_narocilo_email_content2'];
+ $content .= '<br /><a href="'.$response['racun'].'">'.$lang['srv_narocilo_email_file'].'</a>';
+
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter($anketa=null, $type='payments');
+
+ $MA->addRecipients($rowNarocilo['email']);
+
+ // Dodamo predracun v attachment
+ $MA->addAttachment(file_get_contents($response['racun']), $file_name='1ka_narocilo_'.$rowNarocilo['id'].'_racun.pdf');
+
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ $response['false'] = true;
+ }
+ }
+
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+ // Placa narocilo - za eracune, kjer se jih zabelezi kot placane ampak imajo 30 dnevni rok
+ public function payNarociloEracun($narocilo_id){
+ global $global_user_id;
+ global $lang;
+
+ $response = array();
+
+ // Ce nimamo id-ja narocila vrnemo error
+ if($narocilo_id == 0){
+ $response['error'] = 'Napaka! Manjka ID narocila!';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Dobimo podatke narocila
+ $sqlNarocilo = sisplet_query("SELECT n.*, u.email FROM user_access_narocilo n, users u WHERE n.id='".$narocilo_id."' AND u.id=n.usr_id");
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ // Ce je bil racun ze placan ne naredimo nicesar
+ if($rowNarocilo['status'] == 1){
+ $response['error'] = 'Napaka! Račun je že plačan!';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Nastavimo ustrezen jezik - mail mora biti v istem jeziku kot je bilo narocilo
+ if($rowNarocilo['language'] == 'en'){
+ include('../../lang/2.php');
+ }
+
+
+ // Preverimo, ce ima uporabnik ze aktiven paket in ce je ta paket isti kot ta, ki ga je kupil
+ $sqlAccessCheck = sisplet_query("SELECT * FROM user_access WHERE usr_id='".$rowNarocilo['usr_id']."' AND package_id != '1' AND time_expire > NOW()");
+ if(mysqli_num_rows($sqlAccessCheck) > 0){
+
+ $rowAccessCheck = mysqli_fetch_array($sqlAccessCheck);
+
+ // Ce zeli uporabnik kupiti drug placljiv paket kot ga ima trenutno, ga zavrnemo - po novem normalno izvedemo ker preracunamo v popust
+ if($rowAccessCheck['package_id'] != $rowNarocilo['package_id']){
+
+ // Nastavimo dostop uporabniku
+ $sqlAccess = sisplet_query("INSERT INTO user_access
+ (usr_id, time_activate, time_expire, package_id)
+ VALUES
+ ('".$rowNarocilo['usr_id']."', NOW(), NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, '".$rowNarocilo['package_id']."')
+ ON DUPLICATE KEY UPDATE
+ time_activate=NOW(), time_expire=NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, package_id='".$rowNarocilo['package_id']."'
+ ");
+ if (!$sqlAccess){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+ // Uporabnik kupuje isti paket kot ga ze ima - mu ga samo podaljsamo
+ else{
+ $sqlAccess = sisplet_query("UPDATE user_access SET time_expire = time_expire + INTERVAL '".$rowNarocilo['trajanje']."' MONTH WHERE usr_id='".$rowNarocilo['usr_id']."'");
+ if (!$sqlAccess){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+ }
+ else{
+
+ // Nastavimo dostop uporabniku
+ $sqlAccess = sisplet_query("INSERT INTO user_access
+ (usr_id, time_activate, time_expire, package_id)
+ VALUES
+ ('".$rowNarocilo['usr_id']."', NOW(), NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, '".$rowNarocilo['package_id']."')
+ ON DUPLICATE KEY UPDATE
+ time_activate=NOW(), time_expire=NOW() + INTERVAL '".$rowNarocilo['trajanje']."' MONTH, package_id='".$rowNarocilo['package_id']."'
+ ");
+ if (!$sqlAccess){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+
+
+ // Nastavimo status narocila na placan
+ $sqlNarociloStatus = sisplet_query("UPDATE user_access_narocilo SET status='1' WHERE id='".$narocilo_id."'");
+ if (!$sqlNarociloStatus){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Ustvarimo placilo v tabeli placil
+ $up = new UserPlacila();
+ $up->createPlacilo($rowNarocilo, $eracun=true);
+
+
+ // Ustvarimo racun - nima "markPayed"!
+ $cebelica = new UserNarocilaCebelica($narocilo_id);
+ $response['racun'] = $cebelica->getNarociloRacun($eracun=true);
+
+
+ // Posljemo mail z racunom
+ $subject = $lang['srv_narocilo_email_subject'].' '.$rowNarocilo['id'];
+
+ $content = $lang['srv_narocilo_email_content1'];
+ $content .= '<br /><br />'.$lang['srv_narocilo_email_content2_eracun'];
+ $content .= '<br /><a href="'.$response['racun'].'">'.$lang['srv_narocilo_email_file'].'</a>';
+
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter($anketa=null, $type='payments');
+
+ $MA->addRecipients($rowNarocilo['email']);
+
+ // Dodamo racun (brez "markPayed") v attachment
+ $MA->addAttachment(file_get_contents($response['racun']), $file_name='1ka_narocilo_'.$rowNarocilo['id'].'_racun.pdf');
+
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ $response['false'] = true;
+ }
+
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+
+ // Poslje mail z povprasevanjem za poslovne uporabnike (virtualna domena ali lastna instalacija)
+ public function sendPoslovniUporabniki($narocilo_data){
+ global $lang;
+ global $global_user_id;
+
+ $response = array();
+
+
+ $ime = isset($narocilo_data['ime']) ? $narocilo_data['ime'] : '';
+ $organizacija = isset($narocilo_data['organizacija']) ? $narocilo_data['organizacija'] : '';
+ $naslov = isset($narocilo_data['naslov']) ? $narocilo_data['naslov'] : '';
+ $telefon = isset($narocilo_data['telefon']) ? $narocilo_data['telefon'] : '';
+ $email = isset($narocilo_data['email']) ? $narocilo_data['email'] : '';
+
+ $paket = isset($narocilo_data['paket']) ? $narocilo_data['paket'] : '';
+
+ // Virtualna domena ali instalacija na 1ka strezniku
+ $vrsta_domene = isset($narocilo_data['vrsta_domene']) ? $narocilo_data['vrsta_domene'] : '';
+ $domena = isset($narocilo_data['domena']) ? $narocilo_data['domena'] : '';
+
+ // Lastna instalacija - paket
+ $strinjanje_s_pogoji = isset($narocilo_data['strinjanje_s_pogoji']) ? $narocilo_data['strinjanje_s_pogoji'] : '';
+
+
+ // Posljemo mail s podatki povprasevanja
+ $subject = $lang['srv_narocilo_poslovni_email_1ka_subject'];
+
+ $content = $lang['srv_narocilo_poslovni_email_1ka_text'];
+ $content .= '<br /><br />'.$lang['srv_narocilo_poslovni_email_1ka_text2'];
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_ime'].' <b>'.$ime.'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_organizacija'].' <b>'.$organizacija.'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_naslov'].' <b>'.$naslov.'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_telefon'].' <b>'.$telefon.'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_email'].' <b>'.$email.'</b>';
+
+ // lastna instalacija na 1ka streziku
+ if($paket == 2){
+ $content .= '<br /><br />'.$lang['srv_narocilo_poslovni_email_1ka_paket'].' <b>'.$lang['srv_narocilo_poslovni_email_1ka_paket2'].'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_paket1_1'].' <b>'.($vrsta_domene == '2' ? 'xxx.yyy.zz' : 'xxx.1ka.si').'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_paket1_2'].' <b>'.$domena.'</b>';
+ }
+ // lastna instalacija - paket
+ elseif($paket == 3){
+ $content .= '<br /><br />'.$lang['srv_narocilo_poslovni_email_1ka_paket'].' <b>'.$lang['srv_narocilo_poslovni_email_1ka_paket3'].'</b>';
+ }
+ // Virtualna domena
+ else{
+ $content .= '<br /><br />'.$lang['srv_narocilo_poslovni_email_1ka_paket'].' <b>'.$lang['srv_narocilo_poslovni_email_1ka_paket1'].'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_paket1_1'].' <b>'.($vrsta_domene == '2' ? 'xxx.yyy.zz' : 'xxx.1ka.si').'</b>';
+ $content .= '<br />'.$lang['srv_narocilo_poslovni_email_1ka_paket1_2'].' <b>'.$domena.'</b>';
+ }
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter();
+ $MA->addRecipients('info@1ka.si');
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ $response['false'] = true;
+ }
+
+
+ // Posljemo mail stranki o uspesnem prejemu
+ // lastna instalacija na 1ka strezniku
+ if($paket == 2){
+ $subject = $lang['srv_narocilo_poslovni_email_stranka_subject_2'];
+
+ $content = $lang['srv_narocilo_poslovni_email_stranka_text_1_2'];
+ $content .= ' <b>'.$domena.'</b> ';
+ $content .= $lang['srv_narocilo_poslovni_email_stranka_text_2'];
+ }
+ // lastna instalacija - paket
+ elseif($paket == 3){
+ $subject = $lang['srv_narocilo_poslovni_email_stranka_subject_3'];
+
+ $content = $lang['srv_narocilo_poslovni_email_stranka_text_1_3'];
+ $content .= ' ';
+ $content .= $lang['srv_narocilo_poslovni_email_stranka_text_2'];
+ }
+ // Virtualna domena
+ else{
+ $subject = $lang['srv_narocilo_poslovni_email_stranka_subject_1'];
+
+ $content = $lang['srv_narocilo_poslovni_email_stranka_text_1_1'];
+ $content .= ' <b>'.$domena.'</b> ';
+ $content .= $lang['srv_narocilo_poslovni_email_stranka_text_2'];
+ }
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter();
+ $MA->addRecipients($email);
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ $response['false'] = true;
+ }
+
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+ // Izvede api klic kjer preveri davcno stevilko in zavezanost za DDV
+ public static function checkPayDDV($davcna_stevilka, $drzava){
+ global $lang;
+ global $global_user_id;
+
+ // Drzave EU brez slovenije
+ $countries_eu = array();
+ $countries_eu['Austria'] = 'AT';
+ $countries_eu['Belgium'] = 'BE';
+ $countries_eu['Bulgaria'] = 'BG';
+ $countries_eu['Cyprus'] = 'CY';
+ $countries_eu['Czech Republic'] = 'CZ';
+ $countries_eu['Germany'] = 'DE';
+ $countries_eu['Denmark'] = 'DK';
+ $countries_eu['Estonia'] = 'EE';
+ $countries_eu['Spain'] = 'ES';
+ $countries_eu['Finland'] = 'FI';
+ $countries_eu['France'] = 'FR';
+ $countries_eu['United Kingdom'] = 'GB';
+ $countries_eu['Greece'] = 'GR';
+ $countries_eu['Hungary'] = 'HU';
+ $countries_eu['Croatia'] = 'HR';
+ $countries_eu['Ireland'] = 'IE';
+ $countries_eu['Italy'] = 'IT';
+ $countries_eu['Lithuania'] = 'LT';
+ $countries_eu['Luxembourg'] = 'LU';
+ $countries_eu['Latvia'] = 'LV';
+ $countries_eu['Malta'] = 'MT';
+ $countries_eu['Netherlands'] = 'NL';
+ $countries_eu['Poland'] = 'PL';
+ $countries_eu['Portugal'] = 'PT';
+ $countries_eu['Romania'] = 'RO';
+ $countries_eu['Sweden'] = 'SE';
+ //$countries_eu['Slovenia'] = 'SI';
+ $countries_eu['Slovakia'] = 'SK';
+
+
+ // Ce drzava ni oznacena - placa DDV
+ if($drzava == '')
+ return true;
+
+ // Slovenija - vedno placa DDV
+ if($drzava == 'Slovenija' || $drzava == 'Slovenia')
+ return true;
+
+ // Ce ni drzava s seznama in ni Slovenija - po novem nikoli ne placa DDV
+ if(!isset($countries_eu[$drzava]))
+ return false;
+
+ // Drugace gre za tujca iz EU
+ // Pocistimo davcno stevilko - ohranimo samo stevilke ce je vnesel v obliki "DE12345678" -> "12345678"
+ $davcna_stevilka = preg_replace('[\D]', '', $davcna_stevilka);
+
+ // Preverimo, ce je zavezanec
+ $client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");
+ try{
+ $response = $client->checkVat( array('countryCode' => $countries_eu[$drzava], 'vatNumber' => $davcna_stevilka) );
+ }
+ catch (Exception $e) {
+ return true;
+ }
+
+ // Je valid zavezanec iz EU
+ if(isset($response->valid) && $response->valid == true)
+ return false;
+
+ return true;
+ }
+
+
+ // Dobimo podatke o vseh paketih
+ private function cachePackages(){
+
+ $sqlPackages = sisplet_query("SELECT * FROM user_access_paket");
+ while($row = mysqli_fetch_array($sqlPackages)){
+ $this->packages[$row['name']] = $row;
+ }
+ }
+
+
+ // Ajax klici
+ public function ajax(){
+
+ $narocilo_id = (isset($_POST['narocilo_id'])) ? $_POST['narocilo_id'] : 0;
+
+
+ // Prikazemo popup z urejanjem posameznega narocila
+ if($_GET['a'] == 'displayNarociloPopup') {
+
+ if($narocilo_id > 0)
+ $this->displayNarociloEdit($narocilo_id);
+ }
+
+ // Urejamo narocilo
+ if($_GET['a'] == 'editNarocilo') {
+
+ if($narocilo_id > 0){
+
+ $update = '';
+
+ $update .= (isset($_POST['status'])) ? " status='".$_POST['status']."'," : "";
+ $update .= (isset($_POST['package_id'])) ? " package_id='".$_POST['package_id']."'," : "";
+ $update .= (isset($_POST['payment_method'])) ? " payment_method='".$_POST['payment_method']."'," : "";
+ $update .= (isset($_POST['discount'])) ? " discount='".$_POST['discount']."'," : "";
+ $update .= (isset($_POST['trajanje'])) ? " trajanje='".$_POST['trajanje']."'," : "";
+
+ $update .= (isset($_POST['phone'])) ? " phone='".$_POST['phone']."'," : "";
+
+ $update .= (isset($_POST['podjetje_ime'])) ? " podjetje_ime='".$_POST['podjetje_ime']."'," : "";
+ $update .= (isset($_POST['podjetje_naslov'])) ? " podjetje_naslov='".$_POST['podjetje_naslov']."'," : "";
+ $update .= (isset($_POST['podjetje_postna'])) ? " podjetje_postna='".$_POST['podjetje_postna']."'," : "";
+ $update .= (isset($_POST['podjetje_posta'])) ? " podjetje_posta='".$_POST['podjetje_posta']."'," : "";
+ $update .= (isset($_POST['podjetje_drzava'])) ? " podjetje_drzava='".$_POST['podjetje_drzava']."'," : "";
+ $update .= (isset($_POST['podjetje_davcna'])) ? " podjetje_davcna='".$_POST['podjetje_davcna']."'," : "";
+ $update .= (isset($_POST['podjetje_no_ddv'])) ? " podjetje_no_ddv='".$_POST['podjetje_no_ddv']."'," : "";
+ $update .= (isset($_POST['podjetje_eracun'])) ? " podjetje_eracun='".$_POST['podjetje_eracun']."'," : "";
+
+ if($update != ''){
+
+ $update = substr($update, 0, -1);
+
+ $sqlNarocilo = sisplet_query("UPDATE user_access_narocilo SET ".$update.", cebelica_id_racun='0', cebelica_id_predracun='0' WHERE id='".$narocilo_id."'");
+ if (!$sqlNarocilo)
+ echo mysqli_error($GLOBALS['connect_db']);
+ }
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayNarocilaTableAdmin();
+ }
+
+ // Urejamo narocilo
+ if($_GET['a'] == 'payNarocilo') {
+
+ if($narocilo_id > 0){
+
+ // Ce imamo nastavljen payment_method na 1 pomeni da gre za klik na "placano" v tabeli (Goran) in potem popravimo narocilu, da ima vedno nacin placila preko trr
+ $payment_method = (isset($_POST['payment_method'])) ? $_POST['payment_method'] : 0;
+ if($payment_method == '1'){
+ $sqlNarociloNacin = sisplet_query("UPDATE user_access_narocilo SET payment_method='1' WHERE id='".$narocilo_id."'");
+ }
+
+ $this->payNarocilo($narocilo_id);
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayNarocilaTableAdmin();
+ }
+
+ // Placamo narocilo brez racuna
+ if($_GET['a'] == 'payNarociloEracun') {
+
+ if($narocilo_id > 0){
+
+ // Ce imamo nastavljen payment_method na 1 pomeni da gre za klik na "placano" v tabeli (Goran) in potem popravimo narocilu, da ima vedno nacin placila preko trr
+ $payment_method = (isset($_POST['payment_method'])) ? $_POST['payment_method'] : 0;
+ if($payment_method == '1'){
+ $sqlNarociloNacin = sisplet_query("UPDATE user_access_narocilo SET payment_method='1' WHERE id='".$narocilo_id."'");
+ }
+
+ $this->payNarociloEracun($narocilo_id);
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayNarocilaTableAdmin();
+ }
+
+ // Brisemo narocilo
+ if($_GET['a'] == 'deleteNarocilo') {
+
+ if($narocilo_id > 0){
+ $sqlNarocilo = sisplet_query("DELETE FROM user_access_narocilo WHERE id='".$narocilo_id."'");
+ }
+ }
+
+ // Filter narocil
+ if($_GET['a'] == 'filterNarocila') {
+
+ $status = (isset($_POST['status'])) ? $_POST['status'] : '';
+ $value = (isset($_POST['value'])) ? $_POST['value'] : '';
+
+ if($status != '' && $value != ''){
+
+ if($status == '0'){
+ $_SESSION['narocila_filter']['neplacana'] = $value;
+ $this->narocila_filter['neplacana'] = $value;
+ }
+ elseif($status == '1'){
+ $_SESSION['narocila_filter']['placana'] = $value;
+ $this->narocila_filter['placana'] = $value;
+ }
+ elseif($status == '2'){
+ $_SESSION['narocila_filter']['stornirana'] = $value;
+ $this->narocila_filter['stornirana'] = $value;
+ }
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayNarocilaTableAdmin();
+ }
+
+ // Vrnemo predracun
+ if($_GET['a'] == 'getPredracun') {
+
+ $narocilo_id = (isset($_POST['narocilo_id'])) ? $_POST['narocilo_id'] : '';
+
+ if($narocilo_id != ''){
+ $cebelica = new UserNarocilaCebelica($narocilo_id);
+ $predracun = $cebelica->getNarociloPredracun();
+
+ echo $predracun;
+ }
+ }
+
+ // Vrnemo racun
+ if($_GET['a'] == 'getRacun') {
+
+ $narocilo_id = (isset($_POST['narocilo_id'])) ? $_POST['narocilo_id'] : '';
+
+ if($narocilo_id != ''){
+ $cebelica = new UserNarocilaCebelica($narocilo_id);
+ $predracun = $cebelica->getNarociloRacun();
+
+ echo $predracun;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserNarocilaCebelica.php b/frontend/payments/classes/class.UserNarocilaCebelica.php
new file mode 100644
index 0000000..f7c823b
--- /dev/null
+++ b/frontend/payments/classes/class.UserNarocilaCebelica.php
@@ -0,0 +1,235 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za generiranje pdf-jev (racuni, predracuni) in komunikacijo s cebelico
+ *
+*/
+
+
+global $site_root;
+
+
+// Podatki izdajatelja
+define("DDV", 0.22); // Stopnja DDV
+define("IZDAJATELJ_DAVCNA", "49554042"); // davčna številka osebe, ki izda račun
+define("IZDAJATELJ_IME", "Goran"); // ime osebe, ki izda račun
+
+// folderji
+//define("SITE_ROOT", "C:/xampp/htdocs/cebelca");
+define("SITE_ROOT", $site_root."frontend/payments/cebelica");
+define("MAPA_RACUNI", "/racuni/");
+define("MAPA_PREDRACUNI", "/predracuni/");
+
+
+class UserNarocilaCebelica{
+
+
+ private $narocilo;
+
+
+ public function __construct($narocilo_id=0){
+ global $cebelica_api;
+
+ // Api koda za komunikacijo s cebelico
+ define("API_KODA", $cebelica_api);
+
+ if($narocilo_id > 0){
+
+ // Dobimo podatke narocila
+ $sqlNarocilo = sisplet_query("SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access_narocilo un, users u, user_access_paket up
+ WHERE un.id='".$narocilo_id."' AND un.usr_id=u.id AND un.package_id=up.id");
+ if(mysqli_num_rows($sqlNarocilo) > 0){
+ $this->narocilo = mysqli_fetch_array($sqlNarocilo);
+ }
+ else{
+ die("Napaka pri komunikaciji s čebelico! Narocilo ne obstaja.");
+ }
+ }
+ else {
+ die("Napaka pri komunikaciji s čebelico! Manjka ID naročila.");
+ }
+ }
+
+
+ // Zgeneriramo in vrnemo link do pdf-ja racuna za narocilo
+ public function getNarociloRacun($eracun=false){
+ global $global_user_id;
+
+ // Preverimo, ce racun ze obstaja
+ if($this->narocilo['cebelica_id_racun'] != '0' && file_exists(SITE_ROOT.MAPA_RACUNI.'1ka_racun_'.$this->narocilo['cebelica_id_racun'].'.pdf')){
+
+ // Dobimo hashiran url do dokumenta
+ $pdf_url = $this->getPdfUrl($type='racun', $this->narocilo['cebelica_id_racun']);
+
+ return $pdf_url;
+ }
+
+ // Ce predracun ne obstaja ga moramo najprej zgenerirati
+ if($this->narocilo['cebelica_id_predracun'] == '0'){
+ $this->getNarociloPredracun();
+ }
+
+ // Zgeneriramo pdf racun na podlagi predracuna
+ $cebelica_id_new = $this->generatePdf($this->narocilo['cebelica_id_predracun'], $eracun);
+
+ // Vstavimo id cebelice predracuna v bazo
+ $sqlNarocilo = sisplet_query("UPDATE user_access_narocilo SET cebelica_id_racun='".$cebelica_id_new."' WHERE id='".$this->narocilo['id']."'");
+
+ // Dobimo hashiran url do dokumenta
+ $pdf_url = $this->getPdfUrl($type='racun', $cebelica_id_new);
+
+ return $pdf_url;
+ }
+
+ // Zgeneriramo in vrnemo link do pdf-ja predracuna za narocilo
+ public function getNarociloPredracun(){
+ global $global_user_id;
+
+ // Preverimo, ce predracun ze obstaja
+ if($this->narocilo['cebelica_id_predracun'] != '0' && file_exists(SITE_ROOT.MAPA_PREDRACUNI.'1ka_predracun_'.$this->narocilo['cebelica_id_predracun'].'.pdf')){
+
+ // Dobimo hashiran url do dokumenta
+ $pdf_url = $this->getPdfUrl($type='predracun', $this->narocilo['cebelica_id_predracun']);
+
+ return $pdf_url;
+ }
+
+ // Zgeneriramo pdf predracun na podlagi podatkov narocila (cebelica)
+ $cebelica_id_new = $this->generatePdf($cebelica_id=0);
+
+ // Vstavimo id cebelice predracuna v bazo
+ $sqlNarocilo = sisplet_query("UPDATE user_access_narocilo SET cebelica_id_predracun='".$cebelica_id_new."' WHERE id='".$this->narocilo['id']."'");
+
+ // Popravimo se id v arrayu ce gre za generiranje predracuna pred generiranjem racuna
+ $this->narocilo['cebelica_id_predracun'] = $cebelica_id_new;
+
+ // Dobimo hashiran url do dokumenta
+ $pdf_url = $this->getPdfUrl($type='predracun', $cebelica_id_new);
+
+ return $pdf_url;
+ }
+
+
+ // Poklicemo cebelico in zgeneriramo predracun oz. racun
+ private function generatePdf($cebelica_id=0, $eracun=false){
+ global $site_path;
+
+ // Api za povezavo s cebelico
+ require_once($site_path.'frontend/payments/cebelica/InvoiceFox/cebelcaApi.php');
+
+ $UA = new UserNarocila();
+
+ // Dobimo ceno
+ $cena = $UA->getPrice($this->narocilo['package_name'], $this->narocilo['trajanje'], $this->narocilo['discount'], $this->narocilo['time']);
+
+ // Dobimo jezik za predracun/racun
+ $lang = $UA->getNarociloLanguage($this->narocilo['id']);
+
+
+ // Slovenki racun/predracun
+ if($lang == 'si'){
+
+ if($this->narocilo['trajanje'] == 1)
+ $months_string = 'mesec';
+ elseif($this->narocilo['trajanje'] == 2)
+ $months_string = 'meseca';
+ elseif($this->narocilo['trajanje'] == 3 || $this->narocilo['trajanje'] == 4)
+ $months_string = 'mesece';
+ else
+ $months_string = 'mesecev';
+
+ $ime_storitve = '1KA naročnina (paket '.strtoupper($this->narocilo['package_name']). ' - '.$this->narocilo['trajanje'].' '.$months_string.')';
+ }
+ // Angleski racun/predracun
+ else{
+
+ if($this->narocilo['trajanje'] == 1)
+ $months_string = 'month';
+ else
+ $months_string = 'months';
+
+ $ime_storitve = '1KA subscription (package '.strtoupper($this->narocilo['package_name']). ' - '.$this->narocilo['trajanje'].' '.$months_string.')';
+ }
+
+
+ // Zavezanec iz tujine ima racun/predracun brez ddv
+ if($UA->isWithoutDDV($this->narocilo['id'])){
+ $ddv = 0;
+ $cena_za_placilo = $cena['final_without_tax'];
+ }
+ else{
+ $ddv = 1;
+ $cena_za_placilo = $cena['final'];
+ }
+
+ // Kartica
+ if($this->narocilo['payment_method'] == '3')
+ $tip_placila = 3;
+ // Paypal
+ elseif($this->narocilo['payment_method'] == '2')
+ $tip_placila = 5;
+ // TRR
+ else
+ $tip_placila = 1;
+
+ $podatki = array(
+ 'narocilo_id' => $this->narocilo['id'], // id narocila
+ 'stranka' => $this->narocilo['ime'], // ime kupca
+ 'email' => $this->narocilo['email'], // email kupca
+ 'datum' => date("j.n.Y"), // datum izdaje računa
+
+ 'telefon' => $this->narocilo['phone'],
+
+ 'drzava' => $this->narocilo['podjetje_drzava'],
+
+ 'podjetjeime' => $this->narocilo['podjetje_ime'],
+ 'podjetjenaslov'=> $this->narocilo['podjetje_naslov'],
+ 'podjetjepostna'=> $this->narocilo['podjetje_postna'],
+ 'podjetjeposta' => $this->narocilo['podjetje_posta'],
+ 'podjetjedavcna'=> $this->narocilo['podjetje_davcna'], // davčna številka kupca, če je podjetje
+
+ 'ime_storitve' => $ime_storitve,
+
+ 'cena' => $cena['final_without_tax'], // cena brez DDV
+ 'za_placilo' => $cena_za_placilo, // znesek za plačilo
+ ///'popust' => $cena['discount_percentage'], // procent s celo številko. 5 pomeni 5%
+ 'veljavnost' => "3", // veljavnost predračuna v dnevih
+
+ 'ddv' => $ddv, // Obracunan ddv (zavezanec iz tujine ga nima)
+
+ 'tip_placila' => $tip_placila // Tip placila - 1=nakazilo, 3=kartica, 5=paypal
+ );
+
+
+
+ // 0 generira predračun, številka naredi račun iz predračuna
+ $cebelica_id_new = vnosRacunaCebelca($podatki, $debug=false, $cebelica_id, $lang, $eracun);
+
+ if($cebelica_id_new){
+ return $cebelica_id_new;
+ }
+ else{
+ return "Napaka pri vnosu dokumenta v cebelca.biz.";
+ }
+ }
+
+
+ // Dobimo hash za url do pdf-ja
+ private function getPdfUrl($type, $id){
+ global $site_url;
+
+ $params = array(
+ 'type' => $type, // "racun" ali "predracun"
+ 'id' => $id // ID pdf dokumenta
+ );
+
+ // Array s podatki zaheshiramo
+ $hash = base64_encode(urlencode(serialize($params)));
+
+ $url = $site_url.'/payment/'.$hash;
+
+ return $url;
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserNarocilaCron.php b/frontend/payments/classes/class.UserNarocilaCron.php
new file mode 100644
index 0000000..a763dad
--- /dev/null
+++ b/frontend/payments/classes/class.UserNarocilaCron.php
@@ -0,0 +1,198 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za opomnike trgoovine (cronjob)
+ *
+ * Cron jobi nej bodo 3. (ob 9h zjutraj)
+ * 1. 6 dni prej k zgenerira predračun. Vsebina v smislu: vaša naročnina se bo kmalu iztekla. Zagotovite si neomejeno uporabo 2ka/3ka še naprej s plačilom predračuna v priponki.
+ * 2. 1 dan pred potekom. Vsebina v smislu: Danes je zadnji dan veljavnosti vašega paketa. Zagotovite si delovanje 1ka še naprej ...
+ * 3. En dan po poteku. Vsebina v smislu: Vaša naročnina se je iztekla. Nov paket lahko naročite na 1ka.si
+ *
+*/
+
+
+class UserNarocilaCron{
+
+
+ public function __construct(){
+ global $app_settings;
+
+ }
+
+
+ /**
+ * izvede ustrezno akcijo
+ */
+ public function executeAction($action = '') {
+
+ // Izvedemo ustrezno akcijo
+ if(method_exists('UserNarocilaCron', $action) && $action != '')
+ $this->$action();
+ else
+ echo 'Method '.$action.' does not exist!';
+ }
+
+
+ // Mail 6 dni pred potekom narocnine
+ private function notifyIn6(){
+
+ $expired_users = $this->getExpiredUsers($expire='in6');
+
+ foreach($expired_users as $usr_id => $user){
+
+ $narocilo = $this->getLastNarocilo($usr_id);
+
+ // Nastavimo ustrezen jezik - mail mora biti v istem jeziku kot je bilo zadnje narocilo
+ if($narocilo['language'] == 'en')
+ include('../lang/2.php');
+ else
+ include('../lang/1.php');
+
+
+ // Posljemo mail
+ $subject = $lang['srv_access_expire_in6_subject'];
+ $content = str_replace('#PACKAGE_NAME#', $narocilo['package_id'].'ka', $lang['srv_access_expire_in6_content1']);
+ $content .= str_replace('#PACKAGE_ID#', $narocilo['package_id'], $lang['srv_access_expire_in6_content2']);
+ $content .= $lang['srv_access_expire_in6_content3'] . $user['email'];
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter();
+ $MA->addRecipients($user['email']);
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ }
+ }
+
+ }
+
+ // Mail 1 dan pred potekom narocnine
+ private function notifyIn1(){
+
+ $expired_users = $this->getExpiredUsers($expire='in1');
+
+ foreach($expired_users as $usr_id => $user){
+
+ $narocilo = $this->getLastNarocilo($usr_id);
+
+ // Nastavimo ustrezen jezik - mail mora biti v istem jeziku kot je bilo zadnje narocilo
+ if($narocilo['language'] == 'en')
+ include('../lang/2.php');
+ else
+ include('../lang/1.php');
+
+
+ // Posljemo mail
+ $subject = $lang['srv_access_expire_in1_subject'];
+ $content = str_replace('#PACKAGE_NAME#', $narocilo['package_id'].'ka', $lang['srv_access_expire_in1_content1']);
+ $content .= str_replace('#PACKAGE_ID#', $narocilo['package_id'], $lang['srv_access_expire_in1_content2']);
+ $content .= $lang['srv_access_expire_in1_content3'] . $user['email'];
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter();
+ $MA->addRecipients($user['email']);
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ }
+ }
+ }
+
+ // Mail 1 dan po poteku narocnine
+ private function notifyExpired(){
+
+ $expired_users = $this->getExpiredUsers($expire='expired');
+
+ foreach($expired_users as $usr_id => $user){
+
+ $narocilo = $this->getLastNarocilo($usr_id);
+
+ // Nastavimo ustrezen jezik - mail mora biti v istem jeziku kot je bilo zadnje narocilo
+ if($narocilo['language'] == 'en')
+ include('../lang/2.php');
+ else
+ include('../lang/1.php');
+
+
+ // Posljemo mail
+ $subject = $lang['srv_access_expire_expired_subject'];
+ $content = str_replace('#PACKAGE_NAME#', $narocilo['package_id'].'ka', $lang['srv_access_expire_expired_content1']);
+ $content .= str_replace('#PACKAGE_ID#', $narocilo['package_id'], $lang['srv_access_expire_expired_content2']);
+ $content .= $lang['srv_access_expire_expired_content3'] . $user['email'];
+
+ // Podpis
+ $signature = Common::getEmailSignature();
+ $content .= $signature;
+
+ try{
+ $MA = new MailAdapter();
+ $MA->addRecipients($user['email']);
+ $resultX = $MA->sendMail($content, $subject);
+ }
+ catch (Exception $e){
+ }
+ }
+ }
+
+
+
+ // Dobimo seznam uporabnikov, ki jim potece paket na dolocen dan
+ private function getExpiredUsers($expire){
+
+ if($expire == 'in6'){
+ $interval_query = 'DATE(time_expire) = DATE(NOW() + INTERVAL 6 DAY)';
+ }
+ elseif($expire == 'in1'){
+ $interval_query = 'DATE(time_expire) = DATE(NOW() + INTERVAL 1 DAY)';
+ }
+ if($expire == 'expired'){
+ $interval_query = 'DATE(time_expire) = DATE(NOW() - INTERVAL 1 DAY)';
+ }
+
+ $result = array();
+
+ // Loop po vseh uporabnikih, ki imajo zakupljen paket in jim potece cez 6 dni
+ $sqlAccess = sisplet_query("SELECT a.*, u.email
+ FROM user_access a, users u
+ WHERE (a.package_id = 2 OR a.package_id = 3)
+ AND ".$interval_query."
+ AND u.id=a.usr_id
+ ");
+
+ while($rowAccess = mysqli_fetch_array($sqlAccess)){
+ $result[$rowAccess['usr_id']] = $rowAccess;
+ }
+
+ return $result;
+ }
+
+ // Dobimo zadnji placan paket uporabnika
+ private function getLastNarocilo($usr_id){
+
+ // Dobimo podatke zadnjega placanega narocila za tega uporabnika
+ $sqlNarocilo = sisplet_query("SELECT *
+ FROM user_access_narocilo
+ WHERE usr_id='".$usr_id."' AND status='1'
+ ORDER BY time DESC
+ LIMIT 1
+ ");
+
+ // Uporabnik nima nobenega placanega paketa
+ if(mysqli_num_rows($sqlNarocilo) == 0){
+ return false;
+ }
+
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ return $rowNarocilo;
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserNarocilaPaypal.php b/frontend/payments/classes/class.UserNarocilaPaypal.php
new file mode 100644
index 0000000..de8bb64
--- /dev/null
+++ b/frontend/payments/classes/class.UserNarocilaPaypal.php
@@ -0,0 +1,308 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za placila s paypalom
+ *
+*/
+
+
+use PayPalCheckoutSdk\Core\PayPalHttpClient;
+use PayPalCheckoutSdk\Core\SandboxEnvironment;
+use PayPalCheckoutSdk\Core\ProductionEnvironment;
+use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
+use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;
+
+
+class UserNarocilaPaypal{
+
+
+ private $narocilo;
+ private $paypal_client;
+
+
+ public function __construct($narocilo_id){
+ global $app_settings;
+ global $paypal_client_id;
+ global $paypal_secret;
+ global $mysql_database_name;
+
+ if($narocilo_id > 0){
+
+ // Dobimo podatke narocila
+ $sqlNarocilo = sisplet_query("SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access_narocilo un, users u, user_access_paket up
+ WHERE un.id='".$narocilo_id."' AND un.usr_id=u.id AND un.package_id=up.id");
+ if(mysqli_num_rows($sqlNarocilo) > 0){
+ $this->narocilo = mysqli_fetch_array($sqlNarocilo);
+ }
+ else{
+ die("Napaka pri komunikaciji s paypal! Narocilo ne obstaja.");
+ }
+
+
+ // Ustvarimo okolje za paypal
+ if($mysql_database_name == 'real1kasi')
+ $environment = new ProductionEnvironment($paypal_client_id, $paypal_secret);
+ else
+ $environment = new SandboxEnvironment($paypal_client_id, $paypal_secret);
+
+ $this->paypal_client = new PayPalHttpClient($environment);
+ }
+ else {
+ die("Napaka pri komunikaciji s paypal! Manjka ID naročila.");
+ }
+ }
+
+
+ // Placamo narocilo s paypal
+ public function paypalCreatePayment(){
+ global $site_url;
+
+ $response = array();
+
+
+ $UA = new UserNarocila();
+ $cena = $UA->getPrice($this->narocilo['package_name'], $this->narocilo['trajanje'], $this->narocilo['discount'], $this->narocilo['time']);
+
+ if($this->narocilo['trajanje'] == 1)
+ $months_string = 'mesec';
+ elseif($this->narocilo['trajanje'] == 2)
+ $months_string = 'meseca';
+ elseif($this->narocilo['trajanje'] == 3 || $this->narocilo['trajanje'] == 4)
+ $months_string = 'mesece';
+ else
+ $months_string = 'mesecev';
+
+
+ // Zavezanec iz tujine ima racun/predracun brez ddv
+ if($UA->isWithoutDDV($this->narocilo['id'])){
+ $ddv = 0;
+ $cena_za_placilo = $cena['final_without_tax'];
+ }
+ else{
+ $ddv = 1;
+ $cena_za_placilo = $cena['final'];
+ }
+
+
+ // Podatki narocila
+ $orderDetails = array(
+ 'ime' => '1KA naročnina (paket '.strtoupper($this->narocilo['package_name']). ' - '.$this->narocilo['trajanje'].' '.$months_string.')',
+ 'narocilo_id' => $this->narocilo['id'],
+ 'cena' => $cena_za_placilo,
+ );
+
+ // Ustvarimo order na paypal, da se lahko potem user prijavi in ga placa
+ $paypal_response = $this->paypalCreateOrder($orderDetails);
+
+ if(!isset($paypal_response['success']) || $paypal_response['success'] == false){
+ return $paypal_response;
+ }
+
+
+ // Vstavimo plačilo v bazo
+ $sqlNarocilo = sisplet_query("INSERT INTO user_access_paypal_transaction
+ (transaction_id, narocilo_id, price, currency_type, time, status)
+ VALUES
+ ('".$paypal_response['transaction_id']."', '".$this->narocilo['id']."', '".$cena_za_placilo."', 'EUR', NOW(), 'CREATED')
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ $response['paypal_link'] = $paypal_response['paypal_link'];
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+ // Posljemo podatke za placilo paypalu
+ private function paypalCreateOrder($orderDetails){
+ global $site_url;
+ global $lang;
+
+ $response = array();
+
+ $request = new OrdersCreateRequest();
+
+ $request->prefer('return=representation');
+ //$request->headers["prefer"] = "return=representation";
+
+ if($lang['id'] == '2'){
+ $drupal_url_confirm = $site_url.'/d/en/paypal-purchase/success?narocilo_id='.$orderDetails['narocilo_id'];
+ $drupal_url_cancel = $site_url.'/d/en/paypal-purchase/cancel?narocilo_id='.$orderDetails['narocilo_id'];
+ }
+ else{
+ $drupal_url_confirm = $site_url.'/d/narocilo/paypal?narocilo_id='.$orderDetails['narocilo_id'];
+ $drupal_url_cancel = $site_url.'/d/narocilo/paypal-cancel?narocilo_id='.$orderDetails['narocilo_id'];
+ }
+
+ $request->body = [
+ "intent" => "CAPTURE",
+ "purchase_units" => [[
+ "reference_id" => $orderDetails['narocilo_id'],
+ 'description' => $orderDetails['ime'],
+
+ "amount" => [
+ "value" => $orderDetails['cena'],
+ "currency_code" => "EUR"
+ ]
+ ]],
+ "application_context" => [
+ "cancel_url" => $drupal_url_cancel,
+ "return_url" => $drupal_url_confirm,
+
+ 'brand_name' => '1KA'
+ ]
+ ];
+
+ try {
+ // Poklicemo paypal api za ustvarjanje narocila
+ $paypal_response = $this->paypal_client->execute($request);
+
+ if($paypal_response->result->status != 'CREATED'){
+ $response['error'] = 'ERROR! Order was not created.';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Dobimo id paypal narocila
+ $response['transaction_id'] = $paypal_response->result->id;
+
+ // Dobimo link za preusmeritev stranke, da potrdi narocilo in potem lahko izvedemo "capture"
+ foreach($paypal_response->result->links as $link){
+
+ if($link->rel == 'approve')
+ $response['paypal_link'] = $link->href;
+ }
+ }
+ catch (HttpException $e) {
+ $response['error'] = $e->getMessage();
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+
+ // Zakljucimo placilo, ce je bilo placilo ok odobreno preko paypala s strani stranke
+ public function paypalCaptureOrder(){
+
+ $response = array();
+
+ // Preverimo plačilo v bazo
+ $sqlNarociloPaypal = sisplet_query("SELECT transaction_id
+ FROM user_access_paypal_transaction
+ WHERE narocilo_id='".$this->narocilo['id']."'
+ ");
+ if (!$sqlNarociloPaypal){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Narocilo ne obstaja (ni v bazi paypal narocil)
+ if (mysqli_num_rows($sqlNarociloPaypal) == 0){
+ $response['error'] = 'ERROR! Paypal order does not exist.';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $rowNarociloPaypal = mysqli_fetch_array($sqlNarociloPaypal);
+
+ // Preverimo, ce je bilo vse ok placano - POST request to /v2/checkout/orders
+ $request = new OrdersCaptureRequest($rowNarociloPaypal['transaction_id']);
+ //$request->prefer('return=representation');
+
+ try {
+ // Poklicemo paypal api kjer preverimo placilo narocila
+ $paypal_response = $this->paypal_client->execute($request);
+ }
+ catch (HttpException $e) {
+ $response['error'] = $e->getMessage();
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Posodobimo status narocila
+ $sqlNarocilo = sisplet_query("UPDATE user_access_paypal_transaction
+ SET status='".$paypal_response->result->status."'
+ WHERE transaction_id='".$paypal_response->result->id."'
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Nastavimo narocilo na placano, aktiviramo paket in vrnemo racun
+ $narocilo = new UserNarocila();
+ $payment_response = $narocilo->payNarocilo($this->narocilo['id']);
+
+ if($payment_response['success'] == true){
+ $response['racun'] = $payment_response['racun'];
+ $response['success'] = true;
+ }
+ else{
+ $response['error'] = $payment_response['error'];
+ $response['success'] = false;
+ }
+
+ $response['narocilo_id'] = $this->narocilo['id'];
+
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+
+ // Preklicemo placilo, ce je bilo placilo preklicano preko paypala s strani stranke
+ public function paypalCancelOrder(){
+
+ $response = array();
+
+ // Posodobimo status narocila
+ $sqlNarocilo = sisplet_query("UPDATE user_access_paypal_transaction
+ SET status='CANCELLED'
+ WHERE narocilo_id='".$this->narocilo['id']."'
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Nastavimo status narocila na storniran
+ $sqlNarociloStatus = sisplet_query("UPDATE user_access_narocilo SET status='2' WHERE id='".$this->narocilo['id']."'");
+ if (!$sqlNarociloStatus){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $response['success'] = true;
+
+ return $response;
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserNarocilaStripe.php b/frontend/payments/classes/class.UserNarocilaStripe.php
new file mode 100644
index 0000000..82efce2
--- /dev/null
+++ b/frontend/payments/classes/class.UserNarocilaStripe.php
@@ -0,0 +1,266 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za placila s kreditno kartico (stripe) - TODO
+ *
+*/
+
+
+use \Stripe\Stripe;
+use \Stripe\Customer;
+use \Stripe\ApiOperations\Create;
+use \Stripe\Charge;
+
+use \Stripe\StripeClient;
+
+
+class UserNarocilaStripe{
+
+
+ private $narocilo;
+
+ private $apiKey;
+ private $stripeService;
+
+
+ public function __construct($narocilo_id){
+ global $app_settings;
+ global $stripe_secret;
+ global $stripe_key;
+
+ $this->stripeService = new \Stripe\StripeClient($stripe_secret);
+
+ if($narocilo_id > 0){
+
+ // Dobimo podatke narocila
+ $sqlNarocilo = sisplet_query("SELECT un.*, u.name, u.surname, u.email, up.name AS package_name, up.description AS package_description, up.price AS package_price
+ FROM user_access_narocilo un, users u, user_access_paket up
+ WHERE un.id='".$narocilo_id."' AND un.usr_id=u.id AND un.package_id=up.id");
+ if(mysqli_num_rows($sqlNarocilo) > 0){
+ $this->narocilo = mysqli_fetch_array($sqlNarocilo);
+ }
+ else{
+ die("Napaka pri komunikaciji s stripe! Narocilo ne obstaja.");
+ }
+ }
+ else {
+ die("Napaka pri komunikaciji s stripe! Manjka ID naročila.");
+ }
+ }
+
+
+ // Ustvarimo session za placilo v stripe - V DELU
+ public function stripeCreateSession(){
+ global $site_url;
+ global $lang;
+
+ $response = array();
+
+
+ $UA = new UserNarocila();
+ $cena = $UA->getPrice($this->narocilo['package_name'], $this->narocilo['trajanje'], $this->narocilo['discount'], $this->narocilo['time']);
+
+ if($this->narocilo['trajanje'] == 1)
+ $months_string = 'mesec';
+ elseif($this->narocilo['trajanje'] == 2)
+ $months_string = 'meseca';
+ elseif($this->narocilo['trajanje'] == 3 || $this->narocilo['trajanje'] == 4)
+ $months_string = 'mesece';
+ else
+ $months_string = 'mesecev';
+
+
+ // Zavezanec iz tujine ima racun/predracun brez ddv
+ if($UA->isWithoutDDV($this->narocilo['id'])){
+ $ddv = 0;
+ $cena_za_placilo = $cena['final_without_tax'];
+ }
+ else{
+ $ddv = 1;
+ $cena_za_placilo = $cena['final'];
+ }
+
+
+ // URL po potrditvi oz preklicu
+ if($lang['id'] == '2'){
+ $drupal_url_confirm = $site_url.'/d/en/stripe-purchase/success?narocilo_id='.$this->narocilo['id'];
+ $drupal_url_cancel = $site_url.'/d/en/stripe-purchase/cancel?narocilo_id='.$this->narocilo['id'];
+ }
+ else{
+ $drupal_url_confirm = $site_url.'/d/narocilo/stripe?narocilo_id='.$this->narocilo['id'];
+ $drupal_url_cancel = $site_url.'/d/narocilo/stripe-cancel?narocilo_id='.$this->narocilo['id'];
+ }
+
+ // Ustvarimo checkout session
+ try {
+ $session = $this->stripeService->checkout->sessions->create([
+ 'success_url' => $drupal_url_confirm,
+ 'cancel_url' => $drupal_url_cancel,
+
+ 'payment_method_types' => ['card'],
+ 'mode' => 'payment',
+
+ 'customer_email' => $this->narocilo['email'],
+
+ 'line_items' => [
+ [
+ 'price_data' => array(
+ 'currency' => 'EUR',
+ 'product_data' => array(
+ 'name' => '1KA naročnina (paket '.strtoupper($this->narocilo['package_name']). ' - '.$this->narocilo['trajanje'].' '.$months_string.')',
+ ),
+ 'unit_amount' => $cena_za_placilo * 100,
+ ),
+ 'quantity' => 1,
+ ],
+ ],
+ ]);
+
+ // Dobimo id paypal narocila
+ $stripe_response['session_id'] = $session->id;
+ }
+ catch (HttpException $e) {
+ $response['error'] = $e->getMessage();
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Vstavimo stripe charge v bazo
+ $sqlNarocilo = sisplet_query("INSERT INTO user_access_stripe_charge
+ (session_id, narocilo_id, price, time, status)
+ VALUES
+ ('".$stripe_response['session_id']."', '".$this->narocilo['id']."', '".$cena_za_placilo."', NOW(), 'CREATED')
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ $response['session_id'] = $stripe_response['session_id'];
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+
+ // Zakljucimo placilo, ce je bilo placilo ok odobreno preko stripe s strani stranke - V DELU
+ public function stripeCheckoutSuccess(){
+
+ $response = array();
+
+ // Preverimo plačilo v bazo
+ $sqlNarociloStripe = sisplet_query("SELECT session_id
+ FROM user_access_stripe_charge
+ WHERE narocilo_id='".$this->narocilo['id']."'
+ ");
+ if (!$sqlNarociloStripe){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Narocilo ne obstaja (ni v bazi stripe narocil)
+ if (mysqli_num_rows($sqlNarociloStripe) == 0){
+ $response['error'] = 'ERROR! Stripe order session does not exist.';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $rowNarociloStripe = mysqli_fetch_array($sqlNarociloStripe);
+
+
+ // Preverimo, ce je bilo vse ok placano
+ try{
+ // Poklicemo paypal api kjer preverimo placilo narocila
+ $session = $this->stripeService->checkout->sessions->retrieve($rowNarociloStripe['session_id']);
+ }
+ catch(HttpException $e) {
+ $response['error'] = $e->getMessage();
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Ce je session placan, posodobimo status narocila
+ if($session->payment_status == 'paid'){
+
+ $sqlNarocilo = sisplet_query("UPDATE user_access_stripe_charge
+ SET status='PAID'
+ WHERE session_id='".$paypal_response->result->id."'
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+ }
+ else{
+ $response['error'] = 'ERROR! SESSION IS NOT PAID!';
+ $response['success'] = false;
+
+ return $response;
+ }
+
+
+ // Nastavimo narocilo na placano, aktiviramo paket in vrnemo id narocila
+ $narocilo = new UserNarocila();
+ $payment_response = $narocilo->payNarocilo($this->narocilo['id']);
+
+ if($payment_response['success'] == true){
+ $response['racun'] = $payment_response['racun'];
+ $response['success'] = true;
+ }
+ else{
+ $response['error'] = $payment_response['error'];
+ $response['success'] = false;
+ }
+
+
+ $response['narocilo_id'] = $this->narocilo['id'];
+
+ $response['success'] = true;
+
+ return $response;
+ }
+
+ // Preklicemo placilo, ce je bilo placilo preklicano preko stripe s strani stranke
+ public function stripeCheckoutCancel(){
+
+ $response = array();
+
+ // Posodobimo status narocila
+ $sqlNarocilo = sisplet_query("UPDATE user_access_stripe_charge
+ SET status='CANCELLED'
+ WHERE narocilo_id='".$this->narocilo['id']."'
+ ");
+ if (!$sqlNarocilo){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ // Nastavimo status narocila na storniran
+ $sqlNarociloStatus = sisplet_query("UPDATE user_access_narocilo SET status='2' WHERE id='".$this->narocilo['id']."'");
+ if (!$sqlNarociloStatus){
+ $response['error'] = 'ERROR! '.mysqli_error($GLOBALS['connect_db']);
+ $response['success'] = false;
+
+ return $response;
+ }
+
+ $response['success'] = true;
+
+ return $response;
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/classes/class.UserPlacila.php b/frontend/payments/classes/class.UserPlacila.php
new file mode 100644
index 0000000..a21d6fb
--- /dev/null
+++ b/frontend/payments/classes/class.UserPlacila.php
@@ -0,0 +1,547 @@
+<?php
+
+/**
+ *
+ * Class ki skrbi za pregled, dodajanje, urejanje placil uporabnika
+ *
+ */
+
+class UserPlacila{
+
+
+ function __construct(){
+
+
+ }
+
+
+ // Dobimo array placil (vseh oz. za dolocen id)
+ private function getPlacila(){
+ global $admin_type;
+
+ $placila = array();
+
+ // Loop po vseh placilih v sistemu
+ $sqlPlacilo = sisplet_query("SELECT * FROM user_access_placilo ORDER BY id DESC");
+ while($rowPlacilo = mysqli_fetch_array($sqlPlacilo)){
+
+ $placila[$rowPlacilo['id']] = $rowPlacilo;
+
+ // Dobimo se podatke narocila, ce imamo id
+ if($rowPlacilo['narocilo_id'] > 0){
+
+ $sqlNarocilo = sisplet_query("SELECT n.*, u.name, u.surname, u.email
+ FROM user_access_narocilo n, users u
+ WHERE n.usr_id=u.id AND n.id='".$rowPlacilo['narocilo_id']."'
+ ");
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ $placila[$rowPlacilo['id']]['narocilo'] = $rowNarocilo;
+ }
+ }
+
+ return $placila;
+ }
+
+ // Dobimo podatke placila dolocen id
+ private function getPlacilo($placilo_id){
+ global $admin_type;
+
+ $placilo = array();
+
+ // Loop po vseh placilih v sistemu
+ $sqlPlacilo = sisplet_query("SELECT * FROM user_access_placilo WHERE id='".$placilo_id."'");
+ $placilo = mysqli_fetch_array($sqlPlacilo);
+
+ // Dobimo se podatke narocila, ce imamo id
+ if($placilo['narocilo_id'] > 0){
+
+ $sqlNarocilo = sisplet_query("SELECT n.*, u.name, u.surname, u.email
+ FROM user_access_narocilo n, users u
+ WHERE n.usr_id=u.id AND n.id='".$placilo['narocilo_id']."'
+ ");
+ $rowNarocilo = mysqli_fetch_array($sqlNarocilo);
+
+ $placilo['narocilo'] = $rowNarocilo;
+ }
+
+ return $placilo;
+ }
+
+ // Ustvarimo placilo iz narocila
+ public function createPlacilo($narocilo, $eracun=false){
+
+ // Preverimo, ce slucajno se obstaja placilo za to narocilo - vrnemo error
+ $sqlPlaciloCheck = sisplet_query("SELECT id FROM user_access_placilo WHERE narocilo_id='".$narocilo['id']."'");
+ if(mysqli_num_rows($sqlPlaciloCheck) > 0){
+ echo 'Napaka! Plačilo za to naročilo že obstaja.';
+ return;
+ }
+
+ $note = 'Plačilo naročila '.$narocilo['id'];
+
+ // Dobimo ceno glede na narocilo in paket
+ $sqlPackage = sisplet_query("SELECT name FROM user_access_paket WHERE id='".$narocilo['package_id']."'");
+ $rowPackage = mysqli_fetch_array($sqlPackage);
+
+ $UA = new UserNarocila();
+ $cena = $UA->getPrice($rowPackage['name'], $narocilo['trajanje'], $narocilo['discount'], $narocilo['time']);
+
+ // Zavezanec iz tujine je placal brez ddv
+ $cena_placano = ($UA->isWithoutDDV($narocilo['id'])) ? $cena['final_without_tax'] : $cena['final'];
+
+ // Ce je placilo eracuna, bo placano sele cez 30 dni
+ $time = ($eracun) ? 'NOW() + INTERVAL 1 MONTH': 'NOW()';
+
+ $sqlPlacilo = sisplet_query("INSERT INTO user_access_placilo
+ (narocilo_id, note, time, price, payment_method)
+ VALUES
+ ('".$narocilo['id']."', '".$note."', ".$time.", '".$cena_placano."', '".$narocilo['payment_method']."')
+ ");
+ if (!$sqlPlacilo)
+ echo mysqli_error($GLOBALS['connect_db']);
+ }
+
+
+ // Izpisemo podatke o placilih
+ public function displayPlacila(){
+ global $lang, $global_user_id, $app_settings;
+
+ // Tabela vseh placil
+ $this->displayPlacilaTable();
+
+ // Gumb za dodajanje placila
+ /*echo '<div class="buttons_holder">';
+ echo ' <div class="buttonwrapper floatLeft"><a class="ovalbutton ovalbutton_orange btn_savesettings" href="#" onclick="displayPlaciloPopup();"><span>'.$lang['srv_placila_create'].'</span></a></div>';
+ echo '</div>';*/
+
+ // Izracun zasluzka in provizij po mesecih - samo Goran
+ if($app_settings['app_name'] == 'www.1ka.si' && $global_user_id == '112696')
+ $this->displayPlacilaPovzetek();
+ }
+
+ // Izpisemo seznam vseh placil
+ public function displayPlacilaTable(){
+ global $lang, $global_user_id, $app_settings;
+
+ // Admini vidijo vsa placila
+ $data = $this->getPlacila();
+
+ echo '<table id="user_placila" class="dataTable user_placila_admin" style="width:100%">';
+
+ // Glava tabele
+ echo ' <thead>';
+ echo ' <tr>';
+
+ echo ' <th>'.$lang['srv_placilo_narocilo'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_note'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_time'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_price'].'</th>';
+ echo ' <th>'.$lang['srv_narocilo_ddv'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_payment_method'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_stornirano'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_drzava'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_paket'].'</th>';
+ echo ' <th>'.$lang['srv_placilo_trajanje'].'</th>';
+ echo ' <th>'.$lang['edit2'].'</th>';
+ echo ' </tr>';
+ echo ' </thead>';
+
+
+ // Vsebina tabele
+ echo ' <tbody>';
+
+ foreach($data as $placilo_id => $data_row){
+
+ echo '<tr>';
+
+ // Narocilo
+ if(isset($data_row['narocilo'])){
+ echo '<td>'.$data_row['narocilo']['id'].' ('.$data_row['narocilo']['email'].')</td>';
+ }
+ else{
+ echo '<td>/</td>';
+ }
+
+ // Note
+ echo '<td>'.$data_row['note'].'</td>';
+
+ // Time
+ echo '<td data-order="'.date("Y-n-j", strtotime($data_row['time'])).'">'.date( 'd.m.Y G:i', strtotime($data_row['time'])).'</td>';
+
+ // Price
+ echo '<td>'.$data_row['price'].'</td>';
+
+ // Brez ddv (zavezanec iz tujine)
+ $UA = new UserNarocila();
+ echo '<td>'.($UA->isWithoutDDV($data_row['narocilo']['id']) ? $lang['no'] : $lang['yes']).'</td>';
+
+ // Payment method
+ echo '<td>'.$lang['srv_narocilo_nacin_placila_'.$data_row['payment_method']].'</td>';
+
+ // Stornirano method
+ echo '<td>'.($data_row['canceled'] == '1' ? $lang['yes'] : $lang['no']).'</td>';
+
+ // Država
+ echo '<td>'.$data_row['narocilo']['podjetje_drzava'].'</td>';
+
+ // Paket
+ echo '<td>'.$data_row['narocilo']['package_id'].'KA</td>';
+
+ // Trajanje
+ echo '<td>'.$data_row['narocilo']['trajanje'].'</td>';
+
+ // Edit / delete
+ echo '<td>';
+ // Na www.1ka.si lahko placilo ureja samo Goran
+ if($app_settings['app_name'] != 'www.1ka.si' || $global_user_id == '112696'){
+
+ // Uredi
+ echo '<a href="#" onClick="displayPlaciloPopup(\''.$data_row['id'].'\')" title="'.$lang['srv_placila_edit'].'"><i class="fa fa-pencil-alt link-sv-moder"></i></a> <span class="no-print"> | </span>';
+
+ // Brisi
+ echo '<a href="#" onClick="brisiPlacilo(\''.$data_row['id'].'\')" title="'.$lang['srv_placila_delete'].'"><i class="fa fa-times link-sv-moder"></i></a>';
+
+ // Storniraj
+ if($data_row['canceled'] != '1')
+ echo ' <span class="no-print"> | </span><a href="#" onClick="stornirajPlacilo(\''.$data_row['id'].'\')" title="'.$lang['srv_placila_storniraj'].'">Storniraj</a>';
+ }
+ else{
+ echo '/';
+ }
+ echo '</td>';
+
+ echo '</tr>';
+ }
+
+ echo ' </tbody>';
+
+ echo '</table>';
+
+ // Se inicializiramo dataTable jquery
+ echo '<script> preparePlacilaTableAdmin(); </script>';
+ }
+
+ // Prikazemo popup za dodajanje novega placila
+ private function displayPlaciloCreate(){
+ global $lang;
+
+ echo '<h2>'.$lang['srv_placila_create'].'</h2>';
+
+
+ echo '<div class="edit_placilo_content">';
+
+ echo '<div class="form_holder"><form name="create_placilo" id="create_placilo">';
+
+ // Podatki narocnika
+ echo '<div class="edit_placilo_segment">';
+
+ // Note
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_note'].':</span> ';
+ //echo '<input type="text" name="note">';
+ echo '<textarea name="note"></textarea>';
+ echo '</div>';
+
+ // Time
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_time'].':</span> ';
+ echo '<input type="text" name="time">';
+ echo '</div>';
+
+ // Price
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_price'].':</span> ';
+ echo '<input type="text" name="price">';
+ echo '</div>';
+
+ // Payment method
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_payment_method'].':</span> ';
+ echo '<input type="text" name="payment_method">';
+ echo '</div>';
+
+ echo '</div>';
+
+ echo '</form></div>';
+
+ // Gumbi na dnu
+ echo '<div class="buttons_holder">';
+ echo ' <div class="buttonwrapper floatRight"><a class="ovalbutton ovalbutton_orange btn_savesettings" href="#" onclick="createPlaciloSave();"><span>'.$lang['edit1337'].'</span></a></div>';
+ echo ' <div class="buttonwrapper floatRight spaceRight"><a class="ovalbutton ovalbutton_gray" href="#" onclick="urediPlaciloClose();"><span>'.$lang['srv_zapri'].'</span></a></div>';
+ echo '</div>';
+
+ echo '</div>';
+ }
+
+ // Prikazemo popup za pregled in urejanje placila - TODO
+ private function displayPlaciloEdit($placilo_id){
+ global $lang;
+
+ // Dobimo podatke placila
+ $placilo = $this->getPlacilo($placilo_id);
+
+
+ echo '<h2>'.$lang['srv_placila_create'].'</h2>';
+
+
+ echo '<div class="edit_placilo_content">';
+
+ echo '<div class="form_holder"><form name="edit_placilo" id="edit_placilo">';
+
+ // Podatki narocnika
+ echo '<div class="edit_placilo_segment">';
+
+ // Input za id porocila
+ echo '<input type="hidden" name="placilo_id" value="'.$placilo_id.'">';
+
+ // Note
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_note'].':</span> ';
+ //echo '<input type="text" name="note" value="'.$placilo['note'].'">';
+ echo '<textarea name="note">'.$placilo['note'].'</textarea>';
+ echo '</div>';
+
+ // Time
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_time'].':</span> ';
+ echo '<input type="text" name="time" value="'.$placilo['time'].'">';
+ echo '</div>';
+
+ // Price
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_price'].':</span> ';
+ echo '<input type="text" name="price" value="'.$placilo['price'].'">';
+ echo '</div>';
+
+ // Payment method
+ echo '<div class="edit_placilo_line">';
+ echo '<span class="nastavitveSpan5">'.$lang['srv_placilo_payment_method'].':</span> ';
+ echo '<input type="text" name="payment_method" value="'.$placilo['payment_method'].'">';
+ echo '</div>';
+
+ echo '</div>';
+
+ echo '</form></div>';
+
+ // Gumbi na dnu
+ echo '<div class="buttons_holder">';
+ echo ' <div class="buttonwrapper floatRight"><a class="ovalbutton ovalbutton_orange btn_savesettings" href="#" onclick="urediPlaciloSave();"><span>'.$lang['edit1337'].'</span></a></div>';
+ echo ' <div class="buttonwrapper floatRight spaceRight"><a class="ovalbutton ovalbutton_gray" href="#" onclick="urediPlaciloClose();"><span>'.$lang['srv_zapri'].'</span></a></div>';
+ echo '</div>';
+
+ echo '</div>';
+ }
+
+
+ // Prikazemo popup za pregled in urejanje placila
+ private function displayPlacilaPovzetek(){
+ global $lang;
+
+ /*
+ TRR: 0,12 €
+ EU kartica 1,4% + 0,25 €
+ Non-EU kartica: 2,9% + 0,25 €
+ PayPal: 3,4% + 0,35 €
+ */
+
+ echo '<div style="clear:both; margin: 50px 0;">';
+ echo '<fieldset><legend>Izračun po mesecih</legend>';
+
+ $sqlPlacilo = sisplet_query("SELECT *, MONTH(time) as month, YEAR(time) as year
+ FROM user_access_placilo
+ ");
+ while($rowPlacilo = mysqli_fetch_array($sqlPlacilo)){
+
+ // Paypal
+ if($rowPlacilo['payment_method'] == '2'){
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['sum_paypal'] += $rowPlacilo['price'];
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['provizija_paypal'] += ($rowPlacilo['price'] * 0.34) + 0.35;
+ }
+ // Kartica
+ elseif($rowPlacilo['payment_method'] == '3'){
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['sum_kartica'] += $rowPlacilo['price'];
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['provizija_kartica'] += ($rowPlacilo['price'] * 0.014) + 0.25;
+ }
+ // TRR
+ else{
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['sum_trr'] += $rowPlacilo['price'];
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['provizija_trr'] += 0.12;
+ }
+
+ // Suma placil za mesec
+ $placila[$rowPlacilo['year']][$rowPlacilo['month']]['sum'] += $rowPlacilo['price'];
+ }
+
+ foreach($placila as $year => $placila_leto){
+
+ foreach($placila_leto as $month => $placila_mesec){
+
+ echo '<br>';
+
+ $month_name = date("F", mktime(0, 0, 0, $month, 10));
+ echo '<span class="bold">'.$month_name.' '.$year.'</span>';
+
+ echo '<br>';
+
+ echo 'Vsota plačil na TRR: '.$placila_mesec['sum_trr'];
+ echo '<br>TRR provizija: '.$placila_mesec['provizija_trr'];
+
+ echo '<br><br>';
+
+ echo 'Vsota plačil s kartico: '.$placila_mesec['sum_kartica'];
+ echo '<br>Kartica provizija: '.$placila_mesec['provizija_kartica'];
+
+ echo '<br><br>';
+
+ echo 'Vsota plačil s paypal: '.$placila_mesec['sum_paypal'];
+ echo '<br>Paypal provizija: '.$placila_mesec['provizija_paypal'];
+
+ echo '<br><br>';
+
+ echo 'Vsota plačil: '.$placila_mesec['sum'];
+
+ echo '<br><br>';
+ }
+ }
+
+ echo '</fieldset>';
+ echo '</div>';
+ }
+
+
+ // Ajax klici
+ public function ajax(){
+
+ $placilo_id = (isset($_POST['placilo_id'])) ? $_POST['placilo_id'] : 0;
+
+
+ // Prikazemo popup z urejanjem posameznega narocila
+ if($_GET['a'] == 'displayPlaciloPopup') {
+
+ if($placilo_id > 0){
+ $this->displayPlaciloEdit($placilo_id);
+ }
+ else{
+ $this->displayPlaciloCreate();
+ }
+ }
+
+ // Urejamo narocilo
+ if($_GET['a'] == 'editPlacilo') {
+
+ if($placilo_id > 0){
+
+ $update = '';
+
+ $update .= (isset($_POST['narocilo_id'])) ? " narocilo_id='".$_POST['narocilo_id']."'," : "";
+ $update .= (isset($_POST['note'])) ? " note='".$_POST['note']."'," : "";
+ $update .= (isset($_POST['time'])) ? " time='".$_POST['time']."'," : "";
+ $update .= (isset($_POST['price'])) ? " price='".$_POST['price']."'," : "";
+ $update .= (isset($_POST['payment_method'])) ? " payment_method='".$_POST['payment_method']."'," : "";
+
+ if($update != ''){
+
+ $update = substr($update, 0, -1);
+
+ $sqlPlacilo = sisplet_query("UPDATE user_access_placilo SET ".$update." WHERE id='".$placilo_id."'");
+ if (!$sqlPlacilo)
+ echo mysqli_error($GLOBALS['connect_db']);
+ }
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayPlacila();
+ }
+
+ // Urejamo narocilo
+ if($_GET['a'] == 'createPlacilo') {
+
+ $narocilo_id = (isset($_POST['narocilo_id'])) ? $_POST['narocilo_id'] : 0;
+ $note = (isset($_POST['note'])) ? $_POST['note'] : '';
+ $time = (isset($_POST['time'])) ? $_POST['time'] : '';
+ $price = (isset($_POST['price'])) ? $_POST['price'] : 0;
+ $payment_method = (isset($_POST['payment_method'])) ? $_POST['payment_method'] : '';
+
+ if($price != '' && $price != 0){
+
+ // Preverimo, ce slucajno se obstaja placilo za to narocilo - vrnemo error
+ if($narocilo_id != 0){
+ $sqlPlaciloCheck = sisplet_query("SELECT id FROM user_access_placilo WHERE narocilo_id='".$narocilo_id."'");
+
+ if(mysqli_num_rows($sqlPlaciloCheck) > 0){
+ echo 'Napaka! Plačilo za to naročilo že obstaja.';
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayPlacila();
+
+ return;
+ }
+ }
+
+ $sqlPlacilo = sisplet_query("INSERT INTO user_access_placilo
+ (narocilo_id, note, time, price, payment_method)
+ VALUES
+ ('".$narocilo_id."', '".$note."', '".$time."', '".$price."', '".$payment_method."')
+ ");
+ if (!$sqlPlacilo)
+ echo mysqli_error($GLOBALS['connect_db']);
+ }
+ else{
+ echo 'Napaka! Cana za plačilo ne sme biti 0.';
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayPlacila();
+ }
+
+ // Brisemo narocilo
+ if($_GET['a'] == 'deletePlacilo') {
+
+ if($placilo_id > 0){
+ $sqlPlacilo = sisplet_query("DELETE FROM user_access_placilo WHERE id='".$placilo_id."'");
+ }
+
+ // Na novo izrisemo tabelo z narocili
+ $this->displayPlacila();
+ }
+
+ // Storniramo narocilo
+ if($_GET['a'] == 'stornirajPlacilo') {
+
+ if($placilo_id > 0){
+
+ // Nastavimo se status narocila na storniran
+ $sqlPlacilo = sisplet_query("SELECT p.*, n.usr_id
+ FROM user_access_placilo p, user_access_narocilo n
+ WHERE p.id='".$placilo_id."' AND p.narocilo_id=n.id
+ ");
+ if(mysqli_num_rows($sqlPlacilo) > 0){
+ $rowPlacilo = mysqli_fetch_array($sqlPlacilo);
+
+ // Nastavimo status originalnega placila na stornirano
+ $sqlPlaciloStatus = sisplet_query("UPDATE user_access_placilo SET canceled='1' WHERE id='".$placilo_id."'");
+
+ // Nastavimo status narocila na stornirano
+ $sqlNarociloStatus = sisplet_query("UPDATE user_access_narocilo SET status='2' WHERE id='".$rowPlacilo['narocilo_id']."'");
+
+ // Negativni znesek
+ $znesek = number_format((-1) * $rowPlacilo['price'], 2, '.', '');
+
+ // Ustvarimo kopijo placila z negativnim zneskom
+ $sqlStorniranoPlacilo = sisplet_query("INSERT INTO user_access_placilo
+ (narocilo_id, note, time, price, payment_method, canceled)
+ VALUES
+ ('".$rowPlacilo['narocilo_id']."', '".$rowPlacilo['note']."', NOW(), '".$znesek."', '".$rowPlacilo['payment_method']."', '1')
+ ");
+
+ // Stranki deaktiviramo paket
+ $sqlNarociloStatus = sisplet_query("UPDATE user_access SET package_id='1' WHERE usr_id='".$rowPlacilo['usr_id']."'");
+ }
+ }
+
+ // Na novo izrisemo tabelo s placili
+ $this->displayPlacila();
+ }
+ }
+} \ No newline at end of file
diff --git a/frontend/payments/getPdf.php b/frontend/payments/getPdf.php
new file mode 100644
index 0000000..df2aa5d
--- /dev/null
+++ b/frontend/payments/getPdf.php
@@ -0,0 +1,35 @@
+<?php
+
+# Skripta za downloadanje pdf-jev (ker ga izvedemo preko lepega linka "www.1ka.si/payment/hash")
+
+
+include_once '../../function.php';
+global $site_path;
+
+if(isset($_GET['hash'])){
+
+ // Decode hash
+ $hash = $_GET['hash'];
+ $params = unserialize(urldecode(base64_decode($hash)));
+
+ // Vrnemo predracun
+ if($params['type'] == 'predracun' || $params['type'] == 'racun'){
+
+ $pdf_name = "1ka_".$params['type']."_".$params['id'].".pdf";
+
+ if($params['type'] == 'predracun')
+ $pdf_folder = $site_path."/frontend/payments/cebelica/predracuni/";
+ else
+ $pdf_folder = $site_path."/frontend/payments/cebelica/racuni/";
+
+ $pdf_path = $pdf_folder . $pdf_name;
+
+ header('Content-type: application/pdf');
+ header('Content-Disposition: attachment; filename="'.$pdf_name.'"');
+
+ readfile($pdf_path);
+ }
+}
+
+
+?>