%PDF- %PDF-
Direktori : /home/lightco1/luminero.com.au/components/com_cmc/controllers/ |
Current File : /home/lightco1/luminero.com.au/components/com_cmc/controllers/webhooks.raw.php |
<?php /** * @package CMC * @author Compojoom <contact-us@compojoom.com> * @date 2016-04-15 * * @copyright Copyright (C) 2008 - 2016 compojoom.com - Daniel Dimitrov, Yves Hoppe. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.controllerlegacy'); /** * Class CmcControllerWebhooks * * @since 1.0 */ class CmcControllerWebhooks extends JControllerLegacy { /** * The constructor * * @param array $config - config array */ public function __construct($config = array()) { JLog::addLogger( array( 'text_file' => 'com_cmc.webhooks.php' ) ); parent::__construct(); } /** * Handles the request * * @return void */ public function request() { $secure_key = JComponentHelper::getParams('com_cmc')->get("webhooks_key", ""); $input = JFactory::getApplication()->input; $key = $input->get('key', '', 'string'); if ($key != $secure_key) { $message = 'wrong key'; JLog::add(json_encode($message)); jexit(); } $type = $input->get('type', ''); // Log the request to the log file $message = array( $input->get('type', ''), $input->get('data', '', 'array') ); JLog::add(json_encode($message)); switch ($type) { case "subscribe": $this->subscribe($input->get('data', '', 'array')); break; case "unsubscribe": $this->unsubscribe($input->get('data', '', 'array')); break; case "cleaned": $this->cleaned($input->get('data', '', 'array')); break; case "upemail": $this->upemail($input->get('data', '', 'array')); break; case "profile": $this->profile($input->get('data', '', 'array')); break; default: break; } jexit(); } /** * Subscribes the user * * @param array $data - the user array * * @return mixed */ public function subscribe($data) { /** * "type": "subscribe", * "fired_at": "2009-03-26 21:35:57", * "data[id]": "8a25ff1d98", * "data[list_id]": "a6b5da1054", * "data[email]": "api@mailchimp.com", * "data[email_type]": "html", * "data[merges][EMAIL]": "api@mailchimp.com", * "data[merges][FNAME]": "MailChimp", * "data[merges][LNAME]": "API", * "data[merges][INTERESTS]": "Group1,Group2", * "data[ip_opt]": "10.20.10.30", * "data[ip_signup]": "10.20.10.30" */ $db = JFactory::getDbo(); $query = $db->getQuery(true); $item = array('id' => null); $query->select('id')->from('#__cmc_users')->where('email=' . $db->q($data['email'])) ->where('list_id=' . $db->q($data['list_id'])); $db->setQuery($query); $update = $db->loadObject(); if ($update) { $item['id'] = $update->id; } $item['mc_id'] = $data['id']; $item['list_id'] = $data['list_id']; $item['email'] = $data['email']; $item['timestamp'] = $data['fired_at']; $item['status'] = "subscribed"; $item['email_type'] = $data['email_type']; $item['firstname'] = $data['merges']['FNAME']; $item['lastname'] = $data['merges']['LNAME']; $item['interests'] = $data['merges']['INTERESTS']; $item['merges'] = json_encode($data['merges']); $item['ip_opt'] = $data['ip_opt']; $item['ip_signup'] = $data['ip_signup']; $item['created_user_id'] = 0; $item['created_time'] = JFactory::getDate()->toSql(); $item['modified_user_id'] = 0; $item['modified_time'] = JFactory::getDate()->toSql(); $item['access'] = 1; $item['query_data'] = json_encode($data); $row = JTable::getInstance('users', 'CmcTable'); try { $row->bind($item); $row->check(); $row->store(); } catch (Exception $e) { // Log the request to the log file $message = array( 'save - subscribed error', $data ); JLog::add(json_encode($message)); } } /** * Handles the unsubscribe process * * @param array $data - the user data * * @return mixed */ public function unsubscribe($data) { /** * "type": "unsubscribe", * "fired_at": "2009-03-26 21:40:57", * "data[action]": "unsub", * "data[reason]": "manual", * "data[id]": "8a25ff1d98", * "data[list_id]": "a6b5da1054", * "data[email]": "api+unsub@mailchimp.com", * "data[email_type]": "html", * "data[merges][EMAIL]": "api+unsub@mailchimp.com", * "data[merges][FNAME]": "MailChimp", * "data[merges][LNAME]": "API", * "data[merges][INTERESTS]": "Group1,Group2", * "data[ip_opt]": "10.20.10.30", * "data[campaign_id]": "cb398d21d2", * "data[reason]": "hard" */ $db = JFactory::getDbo(); $query = $db->getQuery(true); $email = $data['email']; if ($data['action'] == "delete") { // Droping the email from the list $query->delete('#__cmc_users')->where('email =' . $db->quote($email) . ' AND list_id = ' . $db->quote($data['list_id'])); $db->setQuery($query); $db->execute(); } else { // TODO update the informations / reason too // Setting the email to unsubscribed $query->update('#__cmc_users')->set('status = ' . $db->quote('unsubscribed')) ->where('email =' . $db->quote($email) . ' AND list_id = ' . $db->quote($data['list_id'])); $db->setQuery($query); $db->execute(); } } /** * Cleaned user * * @param array $data - the user data * * @return void */ public function cleaned($data) { // Hmm } /** * Updates the user email * * @param array $data - the user data * * @return void */ public function upemail($data) { /** * "type": "upemail", * "fired_at": "2009-03-26\ 22:15:09", * "data[list_id]": "a6b5da1054", * "data[new_id]": "51da8c3259", * "data[new_email]": "api+new@mailchimp.com", * "data[old_email]": "api+old@mailchimp.com" */ $db = JFactory::getDBO(); $query = $db->getQuery(true); $oldmail = $data['old_email']; $newmail = $data['new_email']; $query->update('#__cmc_users')->set( array( 'email = ' . $db->quote($newmail), 'mc_id = ' . $db->quote($data['new_id']), 'timestamp = ' . $db->quote($data['fired_at']), 'modified_time = ' . $db->quote($data['fired_at']) ) )->where('email = ' . $db->quote($oldmail) . ' AND list_id = ' . $db->quote($data['list_id'])); $db->setQuery($query); $db->execute(); } /** * Updates the user profile * * @param array $data - the user object * * @return void */ public function profile($data) { /** * "type": "profile", * "fired_at": "2009-03-26 21:31:21", * "data[id]": "8a25ff1d98", * "data[list_id]": "a6b5da1054", * "data[email]": "api@mailchimp.com", * "data[email_type]": "html", * "data[merges][EMAIL]": "api@mailchimp.com", * "data[merges][FNAME]": "MailChimp", * "data[merges][LNAME]": "API", * "data[merges][INTERESTS]": "Group1,Group2", * "data[ip_opt]": "10.20.10.30" */ $db = JFactory::getDbo(); $query = $db->getQuery(true); $mc_id = $data['id']; $list_id = $data['list_id']; $email = $data['email']; $email_type = $data['email_type']; $ip_opt = $data['ip_opt']; // Will the E-Mail address been changed on profile updates?.... $query->update('#__cmc_users')->set( array( 'mc_id = ' . $db->quote($mc_id), 'email_type = ' . $db->quote($email_type), 'ip_opt = ' . $db->quote($ip_opt), 'timestamp = ' . $db->quote($data['fired_at']), 'modified_time = ' . $db->quote($data['fired_at']) ) )->where('email = ' . $db->quote($email) . ' AND list_id = ' . $db->quote($list_id)); $db->setQuery($query); $db->execute(); } }