File "fidelity.class.php"

Full Path: /srv/www/www.cadoro.it/src/classes/fidelity.class.php
File size: 5.35 KB
MIME-type: text/x-php
Charset: utf-8

<?php

  namespace classes;

  // Carte fedeltà:
  // 0401000000203 Attiva
  // 0401001233730 Aggregata
  // 0401000000326 Aggregante
  // 0401000123193 Bloccata
  
  // Gift card:
  // 9800851674310 Scaduta
  // 9800851311024 Attiva

  class Fidelity {

    static private function Execute($sql, $target="tessere", $first=false, $cache=true) {
      global $memcached;
      $r = null; # $cache ? $memcached->get("CADORO:WS:" . md5($sql)) : null;
      if ($r) {
        return json_decode($r, true);
      }
      if (DEBUG) {
        $url = "http://89.251.185.23/devel.php";
        $secret = "CADORO$321";
      } else {
        $url = "http://89.251.185.23/index.php";
        $secret = "CADORO%123";
      }
      $data = array(
        "sql" => $sql,
        "secret" => md5($sql . $secret),
        "target" => $target,
      );

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_USERAGENT, "api:cadoro.it");
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
      curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10000);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      $result = curl_exec($ch);
      curl_close($ch);

      if (preg_match('/(040[0-9]{10,})/', $sql, $matches)) {
        $card = $matches[1];
      } else {
        $card = null;
      }

      \models\WSLog::add(array(
        "card" => $card,
        "request" => $sql,
        "response" => $result,
      ));

      if ($result == 'QUERY ERROR') {
        $result = null;
      } else{
        $result = json_decode($result, true);
        $result = $result ? ($first ? $result[0] : $result) : null;
        if ($result) {
          $memcached->set("CADORO:WS:" . md5($sql), json_encode($result), 60);
        }
      }
      return $result;
    }

    static public function escape($data) {
        if ( !isset($data) or empty($data) ) return '';
        if ( is_numeric($data) ) return $data;

        $non_displayables = array(
            '/%0[0-8bcef]/',            // url encoded 00-08, 11, 12, 14, 15
            '/%1[0-9a-f]/',             // url encoded 16-31
            '/[\x00-\x08]/',            // 00-08
            '/\x0b/',                   // 11
            '/\x0c/',                   // 12
            '/[\x0e-\x1f]/'             // 14-31
        );
        foreach ( $non_displayables as $regex )
            $data = preg_replace( $regex, '', $data );
        $data = str_replace("'", "''", $data );
        return $data;
    }

    static public function CheckNuovaTessera($card, $store) {
      return Fidelity::Execute(sprintf("exec sp_EXT_CheckNuovaTessera '%s', '%s'", $card, $store), "tessere", true);
    }

    static public function GetTessera($card) {
      if($card) return Fidelity::Execute(sprintf("exec sp_EXT_GetTessera_2 '%s'", $card), "tessere", true);
    }

    static public function SetAnagrafica($card, $code='01', $params=array()) {
      return Fidelity::Execute(sprintf("exec sp_EXT_SetAnagrafica_2 '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'", 
            $card,
            $code,
            Fidelity::escape($params['lastname']),
            Fidelity::escape($params['firstname']),
            Fidelity::escape($params['address']),
            Fidelity::escape($params['address_no']),
            Fidelity::escape($params['zipcode']),
            Fidelity::escape($params['city']),
            Fidelity::escape($params['province']),
            Fidelity::escape($params['phone']),
            Fidelity::escape($params['mobile']),
            Fidelity::escape(_dd($params['birthday'])),
            Fidelity::escape($params['gender']),
            Fidelity::escape($params['email']),
            Fidelity::escape($params['privacy1'] ? 'S' : 'N'),
            Fidelity::escape($params['privacy2'] ? 'S' : 'N'),
            Fidelity::escape($params['privacy3'] ? 'S' : 'N'),
            Fidelity::escape(sprintf("%03d", $params['store']))
        ), "tessere", true, false);
    }

    static public function GetNuovaTessera($card) {
      return Fidelity::Execute(sprintf("exec sp_EXT_GetNuovaTessera '%s'", $card), "tessere", true, false);
    }

    static public function SetPunti($card, $points) {
      if($card) return Fidelity::Execute(sprintf("exec sp_EXT_SetPunti '%s', '%s'", $card, $points), "tessere", true, false);
    }

    static public function GetMigrazione($card) {
      if($card) return Fidelity::Execute(sprintf("exec sp_EXT_GetMigrazione '%s'", $card), "tessere", true);
    }

    static public function GetGift($card, $card2) {
      return Fidelity::Execute(sprintf("exec sp_EXT_GetGift '%s', '%s'", $card, $card2), "gift", true);
    }

    static public function BuoniPasto($id) {
      return Fidelity::Execute(sprintf("SELECT * FROM VW_EXT_Negozi_Buonipasto WHERE NEGOZIO = '" . sprintf("%03d", $id*1) . "';"), "tessere", false);
    }

    static public function Orari($id) {
      return Fidelity::Execute(sprintf("SELECT * FROM VW_EXT_Orari WHERE NEGOZIO = '" . sprintf("%03d", $id*1) . "';"), "tessere", false);
    }

    static public function Aziende() {
      return Fidelity::Execute(sprintf("SELECT * FROM VW_EXT_Aziende;"), "tessere", false);
    }

    static public function Negozi() {
      return Fidelity::Execute(sprintf("SELECT * FROM VW_EXT_Negozi;"), "tessere", false);
    }

  }

?>