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; }
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); } } }
/** * 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; }