コード例 #1
0
ファイル: rsmembership.php プロジェクト: JozefAB/qk
 public function onAfterRender()
 {
     $app = JFactory::getApplication();
     $db = JFactory::getDbo();
     if ($app->isAdmin() || !class_exists('RSMembershipHelper')) {
         return;
     }
     $body = JResponse::getBody();
     if (strpos($body, '{rsmembership-subscribe') !== false) {
         $pattern = '#\\{rsmembership-subscribe ([0-9]+)\\}#i';
         if (preg_match_all($pattern, $body, $matches)) {
             $find = array();
             $replace = array();
             foreach ($matches[1] as $i => $membership_id) {
                 $membership_id = (int) $membership_id;
                 $query = $db->getQuery(true);
                 $query->select($db->qn('id') . ', ' . $db->qn('name'))->from($db->qn('#__rsmembership_memberships'))->where($db->qn('published') . ' = ' . $db->q(1))->where($db->qn('id') . ' = ' . $db->q($membership_id));
                 $db->setQuery($query);
                 if ($membership = $db->loadObject()) {
                     $find[] = $matches[0][$i];
                     $replace[] = JRoute::_('index.php?option=com_rsmembership&task=subscribe&cid=' . $membership_id . ':' . JFilterOutput::stringURLSafe($membership->name));
                 }
             }
             $body = str_replace($find, $replace, $body);
             JResponse::setBody($body);
         }
     }
     if (strpos($body, '{rsmembership ') !== false) {
         $pattern = '#\\{rsmembership (id|category)="([0-9,\\s]+)"\\}(.*?){/rsmembership}#is';
         if (preg_match_all($pattern, $body, $matches)) {
             $find = array();
             $replace = array();
             // Get current user's memberships and extras
             list($userMemberships, $userExtras) = RSMembershipHelper::getUserSubscriptions();
             foreach ($matches[0] as $i => $fullmatch) {
                 $type = strtolower($matches[1][$i]);
                 $values = explode(',', $matches[2][$i]);
                 $inside = $matches[3][$i];
                 $find[] = $fullmatch;
                 // Make sure we have only numbers.
                 JArrayHelper::toInteger($values);
                 // Two argument types: either membership IDs or category IDs
                 if ($type == 'id') {
                     $sharedMemberships = $values;
                 } elseif ($type == 'category') {
                     $query = $db->getQuery(true);
                     $query->select('id')->from($db->qn('#__rsmembership_memberships'))->where($db->qn('category_id') . ' IN (' . implode(',', $values) . ')');
                     $sharedMemberships = $db->setQuery($query)->loadColumn();
                 }
                 // Do we have an {else} statement?
                 if (strpos($inside, '{else}') !== false) {
                     list($inside, $other) = explode('{else}', $inside, 2);
                 } else {
                     $other = '';
                 }
                 // Does the user have the required memberships?
                 if (array_intersect($sharedMemberships, $userMemberships)) {
                     $replace[] = $inside;
                 } else {
                     $replace[] = $other;
                 }
             }
             $body = str_replace($find, $replace, $body);
             JResponse::setBody($body);
         }
     }
 }
コード例 #2
0
ファイル: helper.php プロジェクト: JozefAB/qk
 public static function checkShared()
 {
     $option = RSMembershipHelper::getOption();
     if (!$option) {
         return;
     }
     $app = JFactory::getApplication();
     // Get the language
     $lang = JFactory::getLanguage();
     $lang->load('com_rsmembership');
     $msg = JText::_('COM_RSMEMBERSHIP_MEMBERSHIP_NEED_SUBSCRIPTION');
     // Get the database object
     $db = JFactory::getDBO();
     list($memberships, $extras) = RSMembershipHelper::getUserSubscriptions();
     $has_access = false;
     $found_shared = false;
     $redirect = '';
     if (!$app->isAdmin()) {
         // Check the articles, categories and sections
         if ($option == 'com_content') {
             RSMembershipHelper::checkContent($has_access, $found_shared, $redirect, $memberships, $extras);
         }
         // Menu - Itemid
         RSMembershipHelper::checkMenu($has_access, $found_shared, $redirect, $memberships, $extras);
     }
     $instances = RSMembership::getSharedContentPlugins();
     foreach ($instances as $instance) {
         if (method_exists($instance, 'checkShared')) {
             $instance->checkShared($option, $has_access, $found_shared, $redirect, $memberships, $extras);
         }
     }
     // Custom URL
     RSMembershipHelper::checkURL($has_access, $found_shared, $redirect, $memberships, $extras);
     if (!$found_shared) {
         $has_access = true;
     }
     if ($found_shared && $has_access) {
         JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_rsmembership/tables');
         $row = JTable::getInstance('Log', 'RSMembershipTable');
         $row->date = JFactory::getDate()->toSql();
         $row->user_id = JFactory::getUser()->get('id');
         $row->path = '[URL] ' . JUri::getInstance()->toString();
         $row->ip = $_SERVER['REMOTE_ADDR'];
         $row->store();
     }
     if (!$has_access) {
         $redirect = empty($redirect) ? JURI::root() : JRoute::_($redirect, false);
         $app->redirect($redirect, $msg);
     }
 }
コード例 #3
0
ファイル: mymembership.php プロジェクト: JozefAB/qk
 public function cancel()
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $id = $this->user->id;
     $cid = $this->getCid();
     $transaction = JTable::getInstance('Transaction', 'RSMembershiptable');
     $transaction->load($this->_data->from_transaction_id);
     $membership = JTable::getInstance('Membership', 'RSMembershiptable');
     $membership->load($this->_data->membership_id);
     $plugins = RSMembership::getPlugins();
     // Keep a legacy mode for Authorize.net
     if (in_array($transaction->gateway, $plugins) || $transaction->gateway == 'Authorize.Net') {
         $plugin = array_search($transaction->gateway, $plugins);
         if ($plugin === false) {
             $plugin = 'rsmembershipauthorize';
         }
         $args = array('plugin' => $plugin, 'data' => &$this->_data, 'membership' => $membership, 'transaction' => &$transaction);
         JFactory::getApplication()->triggerEvent('onMembershipCancelPayment', $args);
     }
     $query->clear();
     $query->update($db->qn('#__rsmembership_membership_subscribers'))->set($db->qn('status') . ' = ' . $db->q('3'))->where($db->qn('id') . ' = ' . $db->q($cid));
     $db->setQuery($query);
     $db->execute();
     if (!is_array($membership->gid_expire)) {
         $membership->gid_expire = explode(',', $membership->gid_expire);
     }
     if ($membership->gid_enable) {
         RSMembership::updateGid($id, $membership->gid_expire, false, 'remove');
     }
     if ($membership->disable_expired_account) {
         list($memberships, $extras) = RSMembershipHelper::getUserSubscriptions($id);
         if (!$memberships) {
             RSMembership::disableUser($id);
             $app = JFactory::getApplication();
             $app->logout();
         }
     }
 }
コード例 #4
0
 function checkShared()
 {
     $option = RSMembershipHelper::getOption();
     if (!$option) {
         return;
     }
     $mainframe =& JFactory::getApplication();
     // Get the language
     $lang =& JFactory::getLanguage();
     $lang->load('com_rsmembership');
     $msg = JText::_('RSM_MEMBERSHIP_NEED_SUBSCRIPTION');
     // Get the database object
     $db = JFactory::getDBO();
     list($memberships, $extras) = RSMembershipHelper::getUserSubscriptions();
     $has_access = false;
     $found_shared = false;
     $redirect = '';
     if (!$mainframe->isAdmin()) {
         // Check the articles, categories and sections
         if ($option == 'com_content') {
             RSMembershipHelper::checkContent($has_access, $found_shared, $redirect, $memberships, $extras);
         }
         // Menu - Itemid
         RSMembershipHelper::checkMenu($has_access, $found_shared, $redirect, $memberships, $extras);
     }
     $instances = RSMembership::getSharedContentPlugins();
     foreach ($instances as $instance) {
         if (method_exists($instance, 'checkShared')) {
             $instance->checkShared($option, $has_access, $found_shared, $redirect, $memberships, $extras);
         }
     }
     // Custom URL
     RSMembershipHelper::checkURL($has_access, $found_shared, $redirect, $memberships, $extras);
     if (!$found_shared) {
         $has_access = true;
     }
     if (!$has_access) {
         $redirect = empty($redirect) ? JURI::root() : JRoute::_($redirect, false);
         $mainframe->redirect($redirect, $msg);
     }
 }