public static function save()
 {
     JCommentsSecurity::checkToken();
     $task = JCommentsInput::getVar('task');
     $id = (int) JCommentsInput::getVar('id', 0);
     require_once JCOMMENTS_TABLES . '/subscription.php';
     $db = JCommentsFactory::getDBO();
     $row = new JCommentsTableSubscription($db);
     if ($id) {
         $row->load($id);
     }
     $row->object_id = (int) JCommentsInput::getVar('object_id');
     $row->object_group = JCommentsSecurity::clearObjectGroup(JCommentsInput::getVar('object_group'));
     $row->name = preg_replace("/[\\'\"\\>\\<\\(\\)\\[\\]]?+/i", '', strip_tags(JCommentsInput::getVar('name')));
     $row->email = trim(strip_tags(JCommentsInput::getVar('email')));
     $row->published = (int) JCommentsInput::getVar('published');
     if (!$row->id) {
         $query = "SELECT id, name FROM #__users WHERE email = " . $db->Quote($row->email);
         $db->setQuery($query);
         $users = $db->loadObjectList();
         if (count($users)) {
             $row->userid = $users[0]->id;
             $row->name = $users[0]->name;
         } else {
             $row->userid = 0;
         }
         $row->lang = '';
         // TODO: add language selection if JoomFish installed
     }
     $row->store();
     switch ($task) {
         case 'subscription.apply':
             JCommentsRedirect(JCOMMENTS_INDEX . '?option=com_jcomments&task=subscription.edit&hidemainmenu=1&cid[]=' . $row->id);
             break;
         case 'subscription.save':
         default:
             JCommentsRedirect(JCOMMENTS_INDEX . '?option=com_jcomments&task=subscriptions');
             break;
     }
 }
Ejemplo n.º 2
0
 /**
  * Subscribes user for new comments notifications for an object
  *
  * @param int $object_id	The object identifier
  * @param string $object_group	The object group (component name)
  * @param int $userid	The registered user identifier
  * @param string $email	The user email (for guests only)
  * @param string $name The user name (for guests only)
  * @param string $lang The user language
  * @return boolean True on success, false otherwise.
  */
 function subscribe($object_id, $object_group, $userid, $email = '', $name = '', $lang = '')
 {
     $object_id = (int) $object_id;
     $object_group = trim($object_group);
     $userid = (int) $userid;
     $result = false;
     if ($lang == '') {
         $lang = JCommentsMultilingual::getLanguage();
     }
     $db = JCommentsFactory::getDBO();
     if ($userid != 0) {
         $user = JCommentsFactory::getUser($userid);
         $name = $user->name;
         $email = $user->email;
         unset($user);
     }
     $query = "SELECT * " . " FROM #__jcomments_subscriptions" . " WHERE object_id = " . (int) $object_id . " AND object_group = " . $db->Quote($object_group) . " AND email = " . $db->Quote($email) . (JCommentsMultilingual::isEnabled() ? " AND lang = " . $db->Quote($lang) : "");
     $db->setQuery($query);
     $rows = $db->loadObjectList();
     require_once JCOMMENTS_TABLES . '/subscription.php';
     if (count($rows) == 0) {
         $subscription = new JCommentsTableSubscription($db);
         $subscription->object_id = $object_id;
         $subscription->object_group = $object_group;
         $subscription->name = $name;
         $subscription->email = $email;
         $subscription->userid = $userid;
         $subscription->lang = $lang;
         $subscription->published = 1;
         $subscription->store();
         $result = true;
     } else {
         // if current user is registered, but already exists subscription
         // on same email by guest - update subscription data
         if ($userid > 0 && $rows[0]->userid == 0) {
             $subscription = new JCommentsTableSubscription($db);
             $subscription->id = $rows[0]->id;
             $subscription->userid = $userid;
             $subscription->lang = $lang;
             $subscription->store();
             $result = true;
         } else {
             $this->_errors[] = JText::_('ERROR_ALREADY_SUBSCRIBED');
         }
     }
     if ($result) {
         $cache = JCommentsFactory::getCache('com_jcomments_subscriptions_' . strtolower($object_group));
         $cache->clean();
     }
     return $result;
 }