fooRequestElementBar() functions renamed, adding of request parameters added:
[mailer.git] / inc / libs / primera_functions.php
index c28da8cc79b7ab824036ffa20906419e044faf39..ef6b65c183c4911398d6b9654ba83eb2670ad26f 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /**
- * PrimusInterface
+ * PrimeraApi
  * -------------------------------------------
  * Mit dieser Klasse ist ein einfacher Primeratransfer von Ihrem Account
- * zu dem Account eines bei Primusportal.de registrierten Mitglieds möglich.
+ * zu dem Account eines bei Primusportal.de registrierten Mitglieds mglich.
  *
  *------------------ Aenderungen durch Roland Haeder 09.08.2008 ----------------
  * Klasse umbenannt nach PrimeraApi, damit sie in das Framework besser passt.
  * die Methoden Pay,Query und Parse umbenannt.
  *------------------ Aenderungen durch Roland Haeder 09.08.2008 ----------------
  *
- * Die Einbindung des Interfaces geschieht folgendermaßen:
+ * Die Einbindung des Interfaces geschieht folgendermaen:
  *  1. Einbindung der Klasse in Ihr PHP-Auszahlungsskript:
  *     CODE:
- *       require_once( "PFAD/ZU/DER/KLASSE/PrimusInterface.class.php" );
+ *       require_once( "PFAD/ZU/DER/KLASSE/PrimeraApi.class.php" );
  *       $PPUsername = "username"; // Ihr Username bei Primusportal
  *       $PPPassword = "passwort"; // Ihr Passwort bei Primusportal
  *
- *       $Interface = new PrimusInterface($PPUsername, $PPPassword);
- *  2. Durchführen einer Auszahlung:
+ *       $Interface = new PrimeraApi($PPUsername, $PPPassword);
+ *  2. Durchfhren einer Auszahlung:
  *     CODE:
  *       $Status = $Interface->payPrimera($PayReceiver, $PayAmount, $PayDescription);
  *
- *     Wobei $PayReicer der Username des Empfängers bei
+ *     Wobei $PayReicer der Username des Empfngers bei
  *     Primusportal.de ist. $PayAmount ist der gerundete( !! ) Betrag an Primera,
- *     die der Empfänger erhalten soll. $PayDescription ist eine von Ihnen 
- *     festgelegte kurze Beschreibung. Die Länge dieses Textes darf 100 Zeichen
- *     nicht überschreiten. Beispiel:
- *       $status = $Interface->payPrimera("garbage", 10000, "Auszahlung IhreSeite.de - ID: 12345");
- *  3. Überprüfung des Status (Rückgabecode):
+ *     die der Empf�nger erhalten soll. $PayDescription ist eine von Ihnen
+ *     festgelegte kurze Beschreibung. Die Lnge dieses Textes darf 100 Zeichen
+ *     nicht berschreiten. Beispiel:
+ *       $status = $Interface->payPrimera("garbage", 10000, "Auszahlung IhreSeite.de - id: 12345");
+ *  3. �berpr�fung des Status (R�ckgabecode):
  *     CODE:
  *       if (!$status) {
  *         // Ein Fehler ist aufgetreten
- *     // Fehlerbehandlung hier einfügen...
+ *     // Fehlerbehandlung hier einfgen...
  *       }else {
- *         // Auszahlung erfolgreich durchgeführt
- *         // Führen Sie hier Ihre Datenbankabfragen durch, um die Auszahlung zu
- *         // bestätigen...
+ *         // Auszahlung erfolgreich durchgefhrt
+ *         // Fhren Sie hier Ihre Datenbankabfragen durch, um die Auszahlung zu
+ *         // besttigen...
  *       }
  *
- *     Die komplette Rückgabe des Interfaces wird als assoziatives Array in der Klassen-
+ *     Die komplette Rckgabe des Interfaces wird als assoziatives Array in der Klassen-
  *     variable __data gespeichert:
- *     __data => array("status" => Rückgabecode (PI_DONE, PI_SENDER_ERROR, ...),
- *                     "statustext" => Status in Worten (z.B.: "Transaktion erfolgreich durchgeführt"),
+ *     __data => array('status' => R�ckgabecode (PI_DONE, PI_SENDER_ERROR, ...),
+ *                     "statustext" => Status in Worten (z.B.: "Transaktion erfolgreich durchgefhrt"),
  *                     ")
  *
  *
@@ -63,7 +63,7 @@ class PrimeraApi {
        const PI_ERROR = -1;
 
        /**
-        * Statuscode für erfolgreich ausgeführte Transaktion
+        * Statuscode f�r erfolgreich ausgef�hrte Transaktion
         */
        const PI_DONE = 200;
 
@@ -103,52 +103,64 @@ class PrimeraApi {
        const PI_GET_PRIMERA_DONE = 701;
 
        /**
-        * URL für das Interface auf dem Primusserver:
+        * URL fr das Interface auf dem Primusserver:
         */
-       private $host = "www.primusportal.de";
-       private $path = "/transfer.interface.2.0.php";
+       var $host = "http://www.primusportal.de";
+       var $path = "/transfer.interface.2.0.php";
 
-       private $errno = 0;
-       private $err = "";
+       var $errno = '0';
+       var $err = '';
 
-       private $seperator = ":";
+       var $seperator = ':';
 
-       private $username = "";
-       private $password = "";
+       var $username = '';
+       var $password = '';
 
-       private $data = array();
+       var $data = array();
+
+       var $headers = '';
 
        /**
         * Konstruktor
         */
-       public function PrimeraApi ($PPUsername, $PPPassword) {
+       function PrimeraApi ($PPUsername, $PPPassword) {
                // Set data
                $this->username = $PPUsername;
                $this->password = $PPPassword;
        }
 
        /**
-        * Anfrage senden und Rückgabecode in Variable speichern
+        * Anfrage senden und Rckgabecode in Variable speichern
         */
        function queryApi ( $data = array() ) {
-               $data["PrimusInterface_Username"] = base64_encode($this->username);
-               $data["PrimusInterface_Password"] = base64_encode(md5($this->password));
+               // Base64-encode username and password hash
+               $data['PrimusInterface_Username'] = base64_encode($this->username);
+               $data['PrimusInterface_Password'] = base64_encode($this->password);
 
                // Send POST request
-               $return = POST_URL($this->host.$this->path);
+               $return = sendPostRequest($this->host.$this->path, $data);
+
+               // Convert the array into a full string
+               $returnStr = implode("\n", $return);
+
+               // Extract the real content, strip header away
+               $content = explode('<!-- return-start -->', $returnStr);
 
-               $content = explode("<!-- return-start -->", $return);
+               // Store headers away for debugging
+               $this->headers = $content[0];
+
+               // Return the content
                return $content[1];
        }
 
        /**
-        * Funktion parst die Rückgabe vom Transferskript:
+        * Funktion parst die Rckgabe vom Transferskript:
         */
        function parseContent ( $content ) {
                $x = explode("\n", $content);
                $return = array();
                foreach($x as $currentLine) {
-                       $line_exploded = explode(":", $currentLine,2);
+                       $line_exploded = explode(':', $currentLine,2);
                        if (count($line_exploded) > 1) {
                                $return[$line_exploded[0]] = $line_exploded[1];
                        }
@@ -157,42 +169,42 @@ class PrimeraApi {
        }
 
        /**
-        * @param int/string $Receiver UserID / Username des Empfängers
+        * @param int/string $Receiver UserID / Username des Empfngers
         * @param int $Amount Betrag in ganzzahligen Primera
         * @param string $Description Beschreibung (Sichtbar in Einzelauflistung)
         */
-       public function payPrimera ($Receiver, $Amount, $Description = "") {
+       function payPrimera ($Receiver, $Amount, $Description = '') {
                $valid = false;
-               $PostData = array("PrimusInterface_Action" => "Pay",
-                       "PrimusInterface_Receiver" => base64_encode($Receiver),
-                       "PrimusInterface_Amount" => base64_encode($Amount),
-                       "PrimusInterface_Description" => base64_encode($Description) );
+               $postData = array('PrimusInterface_Action' => 'Pay',
+                       'PrimusInterface_Receiver' => base64_encode($Receiver),
+                       'PrimusInterface_Amount' => base64_encode($Amount),
+                       'PrimusInterface_Description' => base64_encode($Description) );
 
-               $PostReturn = $this->parseContent( $this->queryApi($PostData) );
+               $postReturn = $this->parseContent( $this->queryApi($postData) );
 
-               $this->data = $PostReturn;
-               if ($PostReturn["status"] == "200") {
+               $this->data = $postReturn;
+               if ($postReturn['status'] == '200') {
                        $valid = true;
                }
                return $valid;
        }
 
        /**
-        * Überprüft den Status eines Primus-Users
+        * �berpr�ft den Status eines Primus-Users
         * - existiert der User
         * - ist er aktiv
         * @param string/int $User Userid / Username
         */
        function CheckPrimusUser($User) {
                $valid = false;
-               $PostData = array("PrimusInterface_Action"=> "CheckPrimusUser",
-                       "PrimusInterface_CheckPrimusUser" => $User);
+               $postData = array('PrimusInterface_Action'=> 'CheckPrimusUser',
+                       'PrimusInterface_CheckPrimusUser' => $User);
 
-               $PostReturn = $this->parseContent( $this->queryApi($PostData) );
+               $postReturn = $this->parseContent( $this->queryApi($postData) );
 
-               $this->data = $PostReturn;
+               $this->data = $postReturn;
 
-               if ($PostReturn["status"] == self::PI_USER_CHECK_OK) {
+               if ($postReturn['status'] == self::PI_USER_CHECK_OK) {
                        $valid = true;
                }
                return $valid;
@@ -203,16 +215,65 @@ class PrimeraApi {
         */
        function getPrimera() {
                $primera = false;
-               $PostData = array( "PrimusInterface_Action" => "GetPrimera" );
-               $PostReturn = $this->parseContent( $this->queryApi($PostData) );
+               $postData = array( 'PrimusInterface_Action' => 'GetPrimera' );
+               $postReturn = $this->parseContent( $this->queryApi($postData) );
 
-               $this->data = $PostReturn;
-               if ($PostReturn["status"] == self::PI_GET_PRIMERA_DONE) {
-                       $primera = $PostReturn["primera"];
+               $this->data = $postReturn;
+               if ($postReturn['status'] == self::PI_GET_PRIMERA_DONE) {
+                       $primera = $postReturn['primera'];
                }
                return $primera;
        }
+       /**
+        * Getter fuer data
+        */
+       function getData () {
+               return $this->data;
+       }
+}
+
+// Function to test the Primera API by getting the amount. If the returned value
+// is not false the API data is valid, else invalid
+function testPrimeraApi () {
+       // Get new instance
+       $api = new PrimeraApi(postRequestParameter('primera_api_name'), postRequestParameter('primera_api_md5'));
+
+       // Was that fine?
+       return ($api->getPrimera() !== false);
+}
+
+// Execute the withdraw of a sponsor only!
+function executePrimeraWithdraw ($primusNick, $userMd5, $amount) {
+       // Is the sponsor extension installed?
+       if (!isExtensionActive('sponsor')) {
+               // No, abort here
+               return false;
+       } elseif (!isSponsor()) {
+               // No sponsor, not allowed to withdraw!
+               return false;
+       }
+
+       // Get new instance
+       $api = new PrimeraApi($primusNick, $userMd5);
+
+       // Prepare purpose
+       eval("\$purpose = \"".compileRawCode(getMaskedMessage('PRIMERA_API_PURPOSE_WITHDRAW', getSession('sponsorid')))."\";");
+
+       // Pay the Primera
+       return $api->payPrimera($primusNick, $amount, $purpose);
+}
+
+// Execute the payout
+function executePrimeraPayout ($primusNick, $userMd5, $amount) {
+       // Get new instance
+       $api = new PrimeraApi(getConfig('primera_api_name'), getConfig('primera_api_md5'));
+
+       // Prepare purpose
+       eval("\$purpose = \"".compileRawCode(getMaskedMessage('PRIMERA_API_PURPOSE_PAYOUT', getMemberId()))."\";");
+
+       // Pay the Primera
+       return $api->payPrimera($primusNick, $amount, $purpose);
 }
 
 // [EOF]
-?>
\ No newline at end of file
+?>