--- /dev/null
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.3 |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2013 |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM. |
+ | |
+ | CiviCRM is free software; you can copy, modify, and distribute it |
+ | under the terms of the GNU Affero General Public License |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
+ | |
+ | CiviCRM is distributed in the hope that it will be useful, but |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
+ | See the GNU Affero General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU Affero General Public |
+ | License and the CiviCRM Licensing Exception along |
+ | with this program; if not, contact CiviCRM LLC |
+ | at info[AT]civicrm[DOT]org. If you have questions about the |
+ | GNU Affero General Public License or the licensing of CiviCRM, |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing |
+ +--------------------------------------------------------------------+
+*/
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id$
+ *
+ */
+
+/**
+ *
+ */
+class CRM_Core_Permission_Soap extends CRM_Core_Permission_Base {
+
+ /**
+ * given a permission string, check for access requirements
+ *
+ * @param string $str the permission to check
+ *
+ * @return boolean true if yes, else false
+ * @access public
+ */
+
+ function check($str) {
+ return TRUE;
+ }
+}
+
--- /dev/null
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.3 |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2013 |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM. |
+ | |
+ | CiviCRM is free software; you can copy, modify, and distribute it |
+ | under the terms of the GNU Affero General Public License |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
+ | |
+ | CiviCRM is distributed in the hope that it will be useful, but |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
+ | See the GNU Affero General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU Affero General Public |
+ | License and the CiviCRM Licensing Exception along |
+ | with this program; if not, contact CiviCRM LLC |
+ | at info[AT]civicrm[DOT]org. If you have questions about the |
+ | GNU Affero General Public License or the licensing of CiviCRM, |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing |
+ +--------------------------------------------------------------------+
+*/
+
+/**
+ *
+ * @package CiviCRM_Hook
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id: $
+ *
+ */
+class CRM_Utils_Hook_Soap extends CRM_Utils_Hook {
+ function invoke($numParams,
+ &$arg1, &$arg2, &$arg3, &$arg4, &$arg5,
+ $fnSuffix
+ ) {
+ // suppress all hok calls during soap
+ return;
+ }
+}
+
--- /dev/null
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.3 |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2013 |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM. |
+ | |
+ | CiviCRM is free software; you can copy, modify, and distribute it |
+ | under the terms of the GNU Affero General Public License |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
+ | |
+ | CiviCRM is distributed in the hope that it will be useful, but |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
+ | See the GNU Affero General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU Affero General Public |
+ | License and the CiviCRM Licensing Exception along |
+ | with this program; if not, contact CiviCRM LLC |
+ | at info[AT]civicrm[DOT]org. If you have questions about the |
+ | GNU Affero General Public License or the licensing of CiviCRM, |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing |
+ +--------------------------------------------------------------------+
+*/
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id$
+ *
+ */
+
+/**
+ * This class handles all SOAP client requests.
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id$
+ *
+ */
+class CRM_Utils_SoapServer {
+
+ /**
+ * Number of seconds we should let a soap process idle
+ * @static
+ */
+ static $soap_timeout = 0;
+
+ /**
+ * Cache the actual UF Class
+ */
+ public $ufClass;
+
+ /**
+ * Class constructor. This caches the real user framework class locally,
+ * so we can use it for authentication and validation.
+ *
+ * @param string $uf The userframework class
+ */
+ public function __construct() {
+ // any external program which call SoapServer is responsible for
+ // creating and attaching the session
+ $args = func_get_args();
+ $this->ufClass = array_shift($args);
+ }
+
+ /**
+ * Simple ping function to test for liveness.
+ *
+ * @param string $var The string to be echoed
+ *
+ * @return string $var
+ * @access public
+ */
+ public function ping($var) {
+ $session = CRM_Core_Session::singleton();
+ $key = $session->get('key');
+ $session->set('key', $var);
+ return "PONG: $var ($key)";
+ }
+
+ /**
+ * Verify a SOAP key
+ *
+ * @param string $key The soap key generated by authenticate()
+ *
+ * @return none
+ * @access public
+ */
+ public function verify($key) {
+ $session = CRM_Core_Session::singleton();
+
+ $soap_key = $session->get('soap_key');
+ $t = time();
+
+ if ($key !== sha1($soap_key)) {
+ throw new SoapFault('Client', 'Invalid key');
+ }
+
+
+ if (self::$soap_timeout &&
+ $t > ($session->get('soap_time') + self::$soap_timeout)
+ ) {
+ throw new SoapFault('Client', 'Expired key');
+ }
+
+ /* otherwise, we're ok. update the timestamp */
+
+ $session->set('soap_time', $t);
+ }
+
+ /**
+ * Authentication wrapper to the UF Class
+ *
+ * @param string $name Login name
+ * @param string $pass Password
+ *
+ * @return string The SOAP Client key
+ * @access public
+ * @static
+ */
+ public function authenticate($name, $pass, $loadCMSBootstrap = FALSE) {
+ require_once (str_replace('_', DIRECTORY_SEPARATOR, $this->ufClass) . '.php');
+
+ if ($this->ufClass == 'CRM_Utils_System_Joomla'){
+ $loadCMSBootstrap = true;
+ }
+
+ $className = $this->ufClass;
+ $result =& $className::authenticate($name, $pass, $loadCMSBootstrap );
+
+ if (empty($result)) {
+ throw new SoapFault('Client', 'Invalid login');
+ }
+
+ $session = CRM_Core_Session::singleton();
+ $session->set('soap_key', $result[2]);
+ $session->set('soap_time', time());
+
+ return sha1($result[2]);
+ }
+
+ /*** MAILER API ***/
+ public function mailer_event_bounce($key, $job, $queue, $hash, $body) {
+ $this->verify($key);
+ $params = array(
+ 'job_id' => $job,
+ 'time_stamp' => date('YmdHis'),
+ 'event_queue_id' => $queue,
+ 'hash' => $hash,
+ 'body' => $body,
+ 'version' => 3,
+ );
+ return civicrm_api('Mailing', 'event_bounce', $params);
+ }
+
+ public function mailer_event_unsubscribe($key, $job, $queue, $hash) {
+ $this->verify($key);
+ $params = array(
+ 'job_id' => $job,
+ 'time_stamp' => date('YmdHis'),
+ 'org_unsubscribe' => 0,
+ 'event_queue_id' => $queue,
+ 'hash' => $hash,
+ 'version' => 3,
+ );
+ return civicrm_api('MailingGroup', 'event_unsubscribe', $params);
+ }
+
+ public function mailer_event_domain_unsubscribe($key, $job, $queue, $hash) {
+ $this->verify($key);
+ $params = array(
+ 'job_id' => $job,
+ 'time_stamp' => date('YmdHis'),
+ 'org_unsubscribe' => 1,
+ 'event_queue_id' => $queue,
+ 'hash' => $hash,
+ 'version' => 3,
+ );
+ return civicrm_api('MailingGroup', 'event_domain_unsubscribe', $params);
+ }
+
+ public function mailer_event_resubscribe($key, $job, $queue, $hash) {
+ $this->verify($key);
+ $params = array(
+ 'job_id' => $job,
+ 'time_stamp' => date('YmdHis'),
+ 'org_unsubscribe' => 0,
+ 'event_queue_id' => $queue,
+ 'hash' => $hash,
+ 'version' => 3,
+ );
+ return civicrm_api('MailingGroup', 'event_resubscribe', $params);
+ }
+
+ public function mailer_event_subscribe($key, $email, $domain, $group) {
+ $this->verify($key);
+ $params = array(
+ 'email' => $email,
+ 'group_id' => $group,
+ 'version' => 3,
+ );
+ return civicrm_api('MailingGroup', 'event_subscribe', $params);
+ }
+
+ public function mailer_event_confirm($key, $contact, $subscribe, $hash) {
+ $this->verify($key);
+ $params = array(
+ 'contact_id' => $contact,
+ 'subscribe_id' => $subscribe,
+ 'time_stamp' => date('YmdHis'),
+ 'event_subscribe_id' => $subscribe,
+ 'hash' => $hash,
+ 'version' => 3,
+ );
+ return civicrm_api('Mailing', 'event_confirm', $params);
+ }
+
+ public function mailer_event_reply($key, $job, $queue, $hash, $bodyTxt, $rt, $bodyHTML = NULL, $fullEmail = NULL) {
+ $this->verify($key);
+ $params = array(
+ 'job_id' => $job,
+ 'event_queue_id' => $queue,
+ 'hash' => $hash,
+ 'bodyTxt' => $bodyTxt,
+ 'replyTo' => $rt,
+ 'bodyHTML' => $bodyHTML,
+ 'fullEmail' => $fullEmail,
+ 'time_stamp' => date('YmdHis'),
+ 'version' => 3,
+ );
+ return civicrm_api('Mailing', 'event_reply', $params);
+ }
+
+ public function mailer_event_forward($key, $job, $queue, $hash, $email) {
+ $this->verify($key);
+ $params = array(
+ 'job_id' => $job,
+ 'event_queue_id' => $queue,
+ 'hash' => $hash,
+ 'email' => $email,
+ 'version' => 3,
+ );
+ return civicrm_api('Mailing', 'event_forward', $params);
+ }
+
+ public function get_contact($key, $params) {
+ $this->verify($key);
+ $params['version'] = 3;
+ return civicrm_api('contact', 'get', $params);
+ }
+}
+
--- /dev/null
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.3 |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2013 |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM. |
+ | |
+ | CiviCRM is free software; you can copy, modify, and distribute it |
+ | under the terms of the GNU Affero General Public License |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
+ | |
+ | CiviCRM is distributed in the hope that it will be useful, but |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
+ | See the GNU Affero General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU Affero General Public |
+ | License and the CiviCRM Licensing Exception along |
+ | with this program; if not, contact CiviCRM LLC |
+ | at info[AT]civicrm[DOT]org. If you have questions about the |
+ | GNU Affero General Public License or the licensing of CiviCRM, |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing |
+ +--------------------------------------------------------------------+
+*/
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id$
+ *
+ */
+
+/**
+ * Soap specific stuff goes here
+ */
+class CRM_Utils_System_Soap extends CRM_Utils_System_Base {
+
+ /**
+ * UF container variables
+ */
+ static $uf = NULL;
+ static $ufClass = NULL;
+
+ /**
+ * sets the title of the page
+ *
+ * @param string $title title for page
+ * @paqram string $pageTitle
+ *
+ * @return void
+ * @access public
+ */
+ function setTitle($title, $pageTitle) {
+ return;
+ }
+
+ /**
+ * given a permission string, check for access requirements
+ *
+ * @param string $str the permission to check
+ *
+ * @return boolean true if yes, else false
+ * @static
+ * @access public
+ */
+ function checkPermission($str) {
+ return TRUE;
+ }
+
+ /**
+ * Append an additional breadcrumb tag to the existing breadcrumb
+ *
+ * @param string $title
+ * @param string $url
+ *
+ * @return void
+ * @access public
+ */
+ function appendBreadCrumb($title, $url) {
+ return;
+ }
+
+ /**
+ * Append a string to the head of the html file
+ *
+ * @param string $head the new string to be appended
+ *
+ * @return void
+ * @access public
+ */
+ function addHTMLHead($head) {
+ return;
+ }
+
+ /**
+ * Generate an internal CiviCRM URL
+ *
+ * @param $path string The path being linked to, such as "civicrm/add"
+ * @param $query string A query string to append to the link.
+ * @param $absolute boolean Whether to force the output to be an absolute link (beginning with http:).
+ * Useful for links that will be displayed outside the site, such as in an
+ * RSS feed.
+ * @param $fragment string A fragment identifier (named anchor) to append to the link.
+ *
+ * @return string an HTML string containing a link to the given path.
+ * @access public
+ *
+ */
+ function url($path = NULL, $query = NULL, $absolute = TRUE, $fragment = NULL) {
+ if (isset(self::$ufClass)) {
+ $className = self::$ufClass;
+ $url = $className::url($path, $query, $absolute, $fragment);
+ return $url;
+ }
+ else {
+ return NULL;
+ }
+ }
+
+ /**
+ * figure out the post url for the form
+ *
+ * @param the default action if one is pre-specified
+ *
+ * @return string the url to post the form
+ * @access public
+ */
+ function postURL($action) {
+ return NULL;
+ }
+
+ /**
+ * Function to set the email address of the user
+ *
+ * @param object $user handle to the user object
+ *
+ * @return void
+ * @access public
+ */
+ function setEmail(&$user) {}
+
+ /**
+ * Authenticate a user against the real UF
+ *
+ * @param string $name Login name
+ * @param string $pass Login password
+ *
+ * @return array Result array
+ * @access public
+ */
+ function &authenticate($name, $pass) {
+ if (isset(self::$ufClass)) {
+ $className = self::$ufClass;
+ $result =& $className::authenticate($name, $pass);
+ return $result;
+ }
+ else {
+ return NULL;
+ }
+ }
+
+ /**
+ * Swap the current UF for soap
+ *
+ * @access public
+ */
+ public function swapUF() {
+ $config = CRM_Core_Config::singleton();
+
+ self::$uf = $config->userFramework;
+ $config->userFramework = 'Soap';
+
+ self::$ufClass = $config->userFrameworkClass;
+ $config->userFrameworkClass = 'CRM_Utils_System_Soap';
+ }
+
+ /**
+ * Get the locale set in the hosting CMS
+ *
+ * @return null as the language is set elsewhere
+ */
+ function getUFLocale() {
+ return NULL;
+ }
+
+ /**
+ * Get user login URL for hosting CMS (method declared in each CMS system class)
+ *
+ * @param string $destination - if present, add destination to querystring (works for Drupal only)
+ *
+ * @return string - loginURL for the current CMS
+ * @static
+ */
+ public function getLoginURL($destination = '') {
+ throw new Exception("Method not implemented: getLoginURL");
+ }
+}
+