Ejemplo n.º 1
0
 function store(&$data)
 {
     $db = $this->getDbo();
     $row = $this->getTable('OsMembership', 'Subscriber');
     $row->load($data['id']);
     if (isset($data['password'])) {
         $userData = array();
         $query = $db->getQuery(true);
         $query->select('COUNT(*)')->from('#__users')->where('email=' . $db->quote($data['email']))->where('id!=' . (int) $row->user_id);
         $db->setQuery($query);
         $total = $db->loadResult();
         if (!$total) {
             $userData['email'] = $data['email'];
         }
         if ($data['password']) {
             $userData['password2'] = $userData['password'] = $data['password'];
         }
         if (count($userData)) {
             $user = JFactory::getUser($row->user_id);
             $user->bind($userData);
             $user->save(true);
         }
     }
     if (!$row->bind($data)) {
         $this->setError($db->getErrorMsg());
         return false;
     }
     if (!$row->check()) {
         $this->setError($db->getErrorMsg());
         return false;
     }
     if (!$row->store()) {
         $this->setError($db->getErrorMsg());
         return false;
     }
     //Store custom field data for this profile record
     $rowFields = OSMembershipHelper::getProfileFields(0, false);
     $form = new RADForm($rowFields);
     $form->storeData($row->id, $data);
     //Syncronize profile data of other subscription records from this subscriber
     OSMembershipHelper::syncronizeProfileData($row, $data);
     //Trigger event	onProfileUpdate event
     JPluginHelper::importPlugin('osmembership');
     $dispatcher = JDispatcher::getInstance();
     $dispatcher->trigger('onProfileUpdate', array($row));
     return true;
 }
Ejemplo n.º 2
0
 public static function syncronizeProfileData($row, $data)
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $action = isset($data['act']) ? $data['act'] : '';
     if ($action == 'renew') {
         // Get last subscription record of this plan
         $query->select('*')->from('#__osmembership_subscribers')->where('profile_id = ' . $row->profile_id)->where('id != ' . $row->id)->order('id DESC');
         $db->setQuery($query);
         $rowProfile = $db->loadObject();
         if ($rowProfile) {
             // Get the fields which are hided
             $query->clear();
             $query->select('*')->from('#__osmembership_fields')->where('published = 1')->where('hide_on_membership_renewal = 1')->where('`access` IN (' . implode(',', JFactory::getUser()->getAuthorisedViewLevels()) . ')')->where('(plan_id=0 OR id IN (SELECT field_id FROM #__osmembership_field_plan WHERE plan_id=' . $row->plan_id . '))');
             $db->setQuery($query);
             $hidedFields = $db->loadObjectList();
             if (count($hidedFields)) {
                 $fieldIds = array();
                 foreach ($hidedFields as $field) {
                     if ($field->is_core) {
                         $fieldName = $field->name;
                         $row->{$fieldName} = $rowProfile->{$fieldName};
                     } else {
                         $fieldIds[] = $field->id;
                     }
                     // Store the core fields
                     $row->store();
                     if (count($fieldIds)) {
                         $sql = 'INSERT INTO #__osmembership_field_value (subscriber_id, field_id, field_value) ' . " SELECT {$row->id}, field_id, field_value FROM #__osmembership_field_value " . " WHERE subscriber_id = {$rowProfile->id} AND field_id IN (" . implode(',', $fieldIds) . ")";
                         $db->setQuery($sql);
                         $db->execute();
                     }
                 }
             }
         }
         $query->clear();
     }
     $query->select('id')->from('#__osmembership_subscribers')->where('profile_id=' . (int) $row->profile_id)->where('id !=' . (int) $row->id);
     $db->setQuery($query);
     $subscriptionIds = $db->loadColumn();
     if (count($subscriptionIds)) {
         $rowFields = OSMembershipHelper::getProfileFields(0, false);
         $form = new RADForm($rowFields);
         $form->storeData($row->id, $data);
         //Store core fields data
         $query->clear();
         $query->select('name')->from('#__osmembership_fields')->where('is_core=1 AND published = 1');
         $db->setQuery($query);
         $coreFields = $db->loadColumn();
         $coreFieldData = array();
         foreach ($coreFields as $field) {
             if (isset($data[$field])) {
                 $coreFieldData[$field] = $data[$field];
             } else {
                 $coreFieldData[$field] = '';
             }
         }
         foreach ($subscriptionIds as $subscriptionId) {
             $rowSubscription = JTable::getInstance('OsMembership', 'Subscriber');
             $rowSubscription->load($subscriptionId);
             $rowSubscription->bind($coreFieldData);
             $rowSubscription->store();
             $form->storeData($subscriptionId, $data);
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Override store function to perform specific saving
  * @see OSModel::store()
  */
 function store(&$data)
 {
     $row = $this->getTable('OsMembership', 'Subscriber');
     $isNew = true;
     if (!$data['id'] && $data['username'] && $data['password']) {
         //Store this account into the system and get the username
         jimport('joomla.user.helper');
         $params = JComponentHelper::getParams('com_users');
         $newUserType = $params->get('new_usertype', 2);
         $data['groups'] = array();
         $data['groups'][] = $newUserType;
         $data['block'] = 0;
         $data['name'] = $data['first_name'] . ' ' . $data['last_name'];
         $data['password1'] = $data['password2'] = $data['password'];
         $data['email1'] = $data['email2'] = $data['email'];
         $user = new JUser();
         $user->bind($data);
         if (!$user->save()) {
             JFactory::getApplication()->redirect('index.php?option=com_osmembership&view=subscribers', $user->getError(), 'error');
         }
         $data['user_id'] = $user->id;
     }
     if ($data['id']) {
         $isNew = false;
         $row->load($data['id']);
         $published = $row->published;
     } else {
         $published = 0;
         //Default is pending
     }
     if (!$row->bind($data)) {
         $this->setError($this->_db->getErrorMsg());
         return false;
     }
     if (!$row->check()) {
         $this->setError($this->_db->getErrorMsg());
         return false;
     }
     $row->user_id = (int) $row->user_id;
     $db = $this->getDbo();
     $sql = "SELECT id FROM #__osmembership_subscribers WHERE is_profile=1 AND ((user_id={$row->user_id} AND user_id>0) OR email='{$row->email}')";
     $db->setQuery($sql);
     $profileId = $db->loadResult();
     if ($profileId && $profileId != $row->id) {
         $row->is_profile = 0;
         $row->profile_id = $profileId;
     } else {
         $row->is_profile = 1;
     }
     $sql = ' SELECT lifetime_membership FROM #__osmembership_plans WHERE id=' . (int) $data['plan_id'];
     $db->setQuery($sql);
     $lifetimeMembership = $db->loadResult();
     if ($lifetimeMembership == 1 && $data['to_date'] == '') {
         $row->to_date = "2099-31-12 00:00:00";
     }
     if (!$row->store()) {
         $this->setError($this->_db->getErrorMsg());
         return false;
     }
     if (!$row->profile_id) {
         $row->profile_id = $row->id;
         $row->store();
     }
     $rowFields = OSMembershipHelper::getProfileFields($row->plan_id, false);
     $form = new RADForm($rowFields);
     $form->storeData($row->id, $data);
     JPluginHelper::importPlugin('osmembership');
     $dispatcher = JDispatcher::getInstance();
     if ($isNew) {
         $dispatcher->trigger('onAfterStoreSubscription', array($row));
     }
     if ($published != 1 && $row->published == 1) {
         //Membership active, trigger plugin
         $dispatcher->trigger('onMembershipActive', array($row));
         OSMembershipHelper::sendMembershipApprovedEmail($row);
     } elseif ($published == 1) {
         if ($row->published != 1) {
             $dispatcher->trigger('onMembershipExpire', array($row));
         }
     }
     $data['id'] = $row->id;
     if (!$isNew) {
         $dispatcher->trigger('onMembershipUpdate', array($row));
     }
     OSMembershipHelper::syncronizeProfileData($row, $data);
     return true;
 }