| Server IP : 54.36.91.62 / Your IP : 216.73.217.117 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/plats-individuels/plugins/djclassifieds/plans/ |
Upload File : |
<?php
/**
* @package DJ-Classifieds
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email: contact@dj-extensions.com
*/
defined ( '_JEXEC' ) or die ( 'Restricted access' );
class plgDJClassifiedsPlans extends JPlugin
{
public function __construct(& $subject, $config) {
parent::__construct ( $subject, $config );
$this->loadLanguage ();
}
static function getItemSub($item_id)
{
$db = JFactory::getDBO();
$query = "SELECT s.* "
."FROM #__djcf_plans_subscr_items si "
."INNER JOIN #__djcf_plans_subscr s ON si.subscr_id=s.id "
."WHERE si.item_id=".$item_id." "
."LIMIT 1";
$db->setQuery($query);
$sub = $db->loadObject();
return $sub;
}
static function getUserActiveSubs($user_id)
{
$db = JFactory::getDBO();
$date_now = JFactory::getDate()->toSQL();
$query = "SELECT s.*, p.name as plan_name "
."FROM #__djcf_plans_subscr s "
."INNER JOIN #__djcf_plans p ON p.id=s.plan_id "
."WHERE s.user_id=".$user_id." AND (".self::_getActiveWhere().") "
."ORDER BY s.date_start DESC";
$db->setQuery($query);
$subs = $db->loadObjectList();
return $subs;
}
static function getUserSub($user_id, $subscr_id)
{
$db = JFactory::getDBO();
$query = "SELECT s.*, p.name, p.description "
."FROM #__djcf_plans_subscr s "
."INNER JOIN #__djcf_plans p ON p.id=s.plan_id "
."WHERE s.user_id=".$user_id." AND s.id=".$subscr_id;
$db->setQuery($query);
$sub = $db->loadObject();
return $sub;
}
function getAllowedCats($cat_id, $par)
{
$db = JFactory::getDBO();
$a_cats_full = array();
$a_cats = is_array($cat_id) ? $cat_id : array($cat_id);
foreach($a_cats as $a_cat_id){
$a_cat_children = array_map(function($v){
return $v->id;
}, DJClassifiedsCategory::getSubCat($a_cat_id, '1'));
$a_cat_parents = array_map(function($v){
return $v->id;
}, DJClassifiedsCategory::getParentPath('1', $a_cat_id));
$a_cats_full = array_merge($a_cats_full, $a_cat_children, $a_cat_parents);
}
$query = "SELECT * FROM #__djcf_categories WHERE published=1 AND id IN (".implode(',', $a_cats_full).") ORDER BY parent_id, ".$par->get('cat_ordering', 'ordering');
$db->setQuery($query);
$categories = $db->loadObjectList('id');
return $categories;
}
function _overrideParams($plan_params, &$par)
{
$par->set('points',0);
$par->set('show_video',$plan_params->video);
$par->set('show_website',$plan_params->website);
$par->set('buynow',$plan_params->buynow);
$par->set('offer',isset($plan_params->offer) ? $plan_params->offer : '0');
$par->set('auctions',$plan_params->auction);
$par->set('show_types',isset($plan_params->types) ? $plan_params->types : '0');
$par->set('img_limit',$plan_params->img_limit);
$par->set('img_free_limit',-1);
if($plan_params->chars_limit){
$par->set('pay_desc_chars_limit',$plan_params->chars_limit);
$par->set('pay_desc_chars_free_limit',$plan_params->chars_limit);
}else{
$par->set('pay_desc_chars','0');
}
if(isset($plan_params->duration)){
if($plan_params->duration == '-1'){
$par->set('durations_list','0');
$par->set('exp_days','-1');
}else{
$db = JFactory::getDBO();
$query = "SELECT * FROM #__djcf_days WHERE published=1 AND id=".$plan_params->duration;
$db->setQuery($query);
$duration = $db->loadObject();
if($duration){
$par->set('durations_list','0');
$par->set('exp_days',$duration->days);
}
}
}
if(!empty($plan_params->promotions)){
$par->set('promotion','1');
}
$par->set('showauthor',$plan_params->user_profile_ad);
if(isset($plan_params->ask_seller)){
if($plan_params->ask_seller == '1'){
if($par->get('ask_seller','0') == '0'){
$par->set('ask_seller','1');
}
}else{
$par->set('ask_seller','0');
}
}
}
function _overridePromotions($plan_params, &$promotions)
{
if($this->params->get('ps_paid_proms', 0)){
if(!empty($plan_params->promotions)){
foreach($promotions as $prom){
if(in_array($prom->id, $plan_params->promotions)){
$prom->price = 0;
$prom->points = 0;
foreach($prom->prices as $pp){
$pp->price = 0;
$pp->points = 0;
}
}
}
}
}else{
$new_promotions = array();
if(!empty($plan_params->promotions)){
foreach($promotions as $prom){
if(in_array($prom->id, $plan_params->promotions)){
$prom->price = 0;
$prom->points = 0;
foreach($prom->prices as $pp){
$pp->price = 0;
$pp->points = 0;
}
$new_promotions[] = $prom;
}
}
}
$promotions = $new_promotions;
}
if(!empty($plan_params->hidden_promotions)){
foreach($promotions as $key => $prom){
if(in_array($prom->id, $plan_params->hidden_promotions)){
unset($promotions[$key]);
}
}
}
}
function onAdminPrepareSidebar()
{
$result = array (
array (
'label' => JText::_ ( 'COM_DJCLASSIFIEDS_SUBSCRIPTION_PLANS' ),
'link' => 'index.php?option=com_djclassifieds&view=plans',
'view' => 'plans'
) ,
array (
'label' => JText::_ ( 'COM_DJCLASSIFIEDS_USER_SUBSCRIPTION_PLANS' ),
'link' => 'index.php?option=com_djclassifieds&view=usersplans',
'view' => 'usersplans'
)
);
return $result;
}
function onAdminPrepareItemEdit(&$item, &$par)
{
if($item->id){
$item_sub = self::getItemSub($item->id);
if($item_sub){
$registry = new JRegistry();
$registry->loadString($item_sub->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}
}
}
function onBeforeItemEditForm(&$id, &$par, &$subscr_id, $token)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$copy_id = $app->input->getInt('copy', 0);
$item_sub = self::getItemSub($id);
if($item_sub){
$subscr_id = $item_sub->id;
}
if(!$subscr_id && !$id && $user->id){
$query = "SELECT s.id "
."FROM #__djcf_plans_subscr s "
."INNER JOIN #__djcf_plans p ON s.plan_id=p.id "
."WHERE s.user_id=".$user->id." AND (".self::_getActiveWhere().")";
$db->setQuery($query);
$user_plans = $db->loadObjectList();
if($user_plans){
if($this->params->get('ps_plan_autoselect',0)==1){
$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('additem').($copy_id ? '©='.$copy_id : '').'&subscr_id='.$user_plans[0]->id, false));
}else if($this->params->get('ps_plan_required',0)==1){
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_CHOOSE_YOUR_SUBSCRIPTION_PLAN'), 'notice');
$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('userplans').($copy_id ? '©='.$copy_id : ''), false));
}
}elseif($this->params->get('ps_plan_required',0)==1){
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_PLEASE_BUY_SUBSCRIPTION_PLAN'), 'notice');
$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('plans'), false));
}
}
$plan = self::getUserSub($user->id, $subscr_id);
if($plan && ($item_sub || ($plan->adverts_available && ($plan->date_exp == '0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL())))){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}
}
function onItemEditForm(&$item, &$par, $subscr_id, &$promotions, &$categories, &$types)
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
$userplans_link = DJClassifiedsSEO::getViewUri('userplans');
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available || $item->id){
if($plan->date_exp == '0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL() || $item->id){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if(!empty($plan_params->root_cat_id)){
$categories = $this->getAllowedCats($plan_params->root_cat_id, $par);
}
foreach($categories as $key => $cat){
if($plan_params->pay_categories){
$categories[$key]->price = 0;
$categories[$key]->points = 0;
}elseif(!DJClassifiedsPayment::isFree($categories[$key]->price, $categories[$key]->points, $par)){
unset($categories[$key]);
}
}
$this->_overridePromotions($plan_params, $promotions);
if(!$item->id){
foreach($promotions as $prom){
if(!empty($prom->prices) && is_array($prom->prices)){
$last_price_i = array_key_last($prom->prices);
if(!$prom->prices[$last_price_i]->price && !$prom->prices[$last_price_i]->points){
$prom->prices[array_key_last($prom->prices)]->selected = true;
}
}
}
}
if($plan_params->types){
if($par->get('types_display_layout','0')==1){
$types = DJClassifiedsType::getTypesLabels(false);
}else{
$types = DJClassifiedsType::getTypesSelect(false);
}
}
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_SUBSCRIPTION_PLAN_NOT_ACTIVE'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}else{
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_ADVERTS_LIMIT_FOR_THIS_PLAN_REACHED'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_SUBSCRIPTION_PLAN'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}
}
function onItemEditFormTitle(&$item, &$par, $subscr_id)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$content = '';
$userplans_link = DJClassifiedsSEO::getViewUri('userplans');
if(!$item->id && $user->id){
if($subscr_id){
$query = "SELECT s.*, p.name, p.description "
."FROM #__djcf_plans_subscr s "
."INNER JOIN #__djcf_plans p ON s.plan_id=p.id "
."WHERE s.user_id=".$user->id." AND s.id=".$subscr_id;
$db->setQuery($query);
$plan = $db->loadObject();
if($plan){
$copy_id = $app->input->getInt('copy', 0);
$user_plans = self::getUserActiveSubs($user->id);
$links_arr = array();
if(count($user_plans) > 1){
$links_arr[] = '<a href="'.$userplans_link.($copy_id ? '©='.$copy_id : '').'">'.JText::_('COM_DJCLASSIFIEDS_CHANGE_PLAN').'</a>';
}
if(!($this->params->get('ps_plan_required', '0') == '1' || ($this->params->get('ps_plan_autoselect', '0') == '1' && $user_plans))){
$links_arr[] = '<a href="'.DJClassifiedsSEO::getViewUri('additem').($copy_id ? '©='.$copy_id : '').'">'.JText::_('PLG_DJCLASSIFIEDS_PLANS_DONT_USE_ANY_PLAN').'</a>';
}
$content = DJClassifiedsTheme::renderLayout('form', array(
'header_text' => JText::sprintf('PLG_DJCLASSIFIEDS_PLANS_NEW_ADVERT_IN_PLAN_N', $plan->name),
'links_arr' => $links_arr,
'desc' => $plan->description,
'par' => $par,
'params' => $this->params
), 'plugin', $this->_name);
}
}else{
$user_plans = self::getUserActiveSubs($user->id);
if($user_plans){
$copy_id = $app->input->getInt('copy', 0);
$content = DJClassifiedsTheme::renderLayout('form', array(
'header_text' => JText::sprintf('PLG_DJCLASSIFIEDS_PLANS_YOU_HAVE_ACTIVE_PLAN_GO_TO_N', '<a href="'.$userplans_link.($copy_id ? '©='.$copy_id : '').'">'.JText::_('COM_DJCLASSIFIEDS_YOUR_SUBSCRIPTION_PLANS').'</a>'),
'par' => $par,
'params' => $this->params
), 'plugin', $this->_name);
}
}
}else if($item->id){
$item_sub = self::getItemSub($item->id);
if($item_sub){
$registry = new JRegistry();
$registry->loadString($item_sub->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}
}
return $content;
}
function onItemEditFormRows($item, $par, $subscr_id)
{
$input = '<input type="hidden" name="subscr_id" value="'.$subscr_id.'" />';
return $input;
}
function onBeforeDJClassifiedsItemEditGetCategorySelect($id, &$show_paid, &$show_price, &$par)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($subscr_id){
$query = "SELECT * FROM #__djcf_plans_subscr WHERE user_id=".$user->id." AND id=".$subscr_id;
$db->setQuery($query);
$plan = $db->loadObject();
if($plan){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if($plan_params->pay_categories){
$show_paid = 1;
$show_price = 0;
}else{
$show_paid = 0;
$show_price = 0;
}
}
}
}
function onAfterInitialiseDJClassifiedsSaveAdvert(&$row, &$par)
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
$userplans_link = DJClassifiedsSEO::getViewUri('userplans');
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available || $row->id){
if($plan->date_exp=='0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL() || $row->id){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_SUBSCRIPTION_PLAN_NOT_ACTIVE'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}else{
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_ADVERTS_LIMIT_FOR_THIS_PLAN_REACHED'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_SUBSCRIPTION_PLAN'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}
}
function onBeforeDJClassifiedsSaveAdvert(&$row, $is_new)
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($row->new == '1' && $subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if($plan_params->duration == '-1'){
$row->date_exp = $plan->date_exp;
}
}
}
}
function onBeforePaymentsDJClassifiedsSaveAdvert(&$row, $is_new, &$cat, &$promotions, &$type_price)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if(!$is_new){
$query = "SELECT subscr_id "
."FROM #__djcf_plans_subscr_items "
."WHERE item_id=".$row->id;
$db->setQuery($query);
$subscr_id = $db->loadResult();
}
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available || $row->id){
if($plan->date_exp=='0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL()){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if($plan_params->pay_categories){
$cat->price = 0;
}
if($plan_params->types){
$type_price = 0;
}
$this->_overridePromotions($plan_params, $promotions);
}
}
}
}
}
function onAfterDJClassifiedsSaveAdvert(&$row, $is_new)
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($subscr_id && $is_new){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available){
if($plan->date_exp == '0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL()){
if(!$row->new_draft){
$query = "INSERT INTO #__djcf_plans_subscr_items (`subscr_id`,`item_id`,`item_name`) "
." VALUES ('".$subscr_id."','".$row->id."','".addslashes($row->name)."') ";
$db->setQuery($query);
$db->execute();
$query = "UPDATE #__djcf_plans_subscr SET adverts_available = adverts_available-1 "
." WHERE id=".$subscr_id;
$db->setQuery($query);
$db->execute();
}else{
$query = "INSERT INTO #__djcf_plans_subscr_items (`subscr_id`,`item_id`,`item_name`,`draft`) "
." VALUES ('".$subscr_id."','".$row->id."','".addslashes($row->name)."',1) ";
$db->setQuery($query);
$db->execute();
}
}
}
}
}else{
$query = "SELECT new_draft FROM #__djcf_items WHERE id=".$row->id;
$db->setQuery($query);
$new_draft = $db->loadResult();
if(!$new_draft){
$query = "SELECT * FROM #__djcf_plans_subscr_items WHERE item_id=".$row->id;
$db->setQuery($query);
$sub_item = $db->loadObject();
if($sub_item && $sub_item->draft){
$query = "UPDATE #__djcf_plans_subscr SET adverts_available=adverts_available-1 WHERE id=".$sub_item->subscr_id;
$db->setQuery($query);
$db->execute();
$query = "UPDATE #__djcf_plans_subscr_items SET draft=0 WHERE item_id=".$sub_item->item_id;
$db->setQuery($query);
$db->execute();
}
}
}
}
function onAfterDJClassifiedsPublishAdvert(&$item)
{
$db = JFactory::getDBO();
if($item->new_draft){
$query = "SELECT * FROM #__djcf_plans_subscr_items WHERE item_id=".$item->id;
$db->setQuery($query);
$sub_item = $db->loadObject();
if($sub_item && $sub_item->draft){
$query = "UPDATE #__djcf_plans_subscr SET adverts_available=adverts_available-1 WHERE id=".$sub_item->subscr_id;
$db->setQuery($query);
$db->execute();
$query = "UPDATE #__djcf_plans_subscr_items SET draft=0 WHERE item_id=".$sub_item->item_id;
$db->setQuery($query);
$db->execute();
}
}
}
function onDJClassifiedsPrepareItem(&$item, &$par, $context = 'item')
{
$plan = self::getItemSub($item->id);
if($plan){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}
}
function onDJClassifiedsAdminDisplay()
{
if($this->params->get('ps_exp_check_trigger', '3') == '1'){
$this->_expiredPlansCheck();
}
}
function onBeforeDJClassifiedsFrontDisplay()
{
if($this->params->get('ps_exp_check_trigger', '3') == '2'){
$this->_expiredPlansCheck();
}
}
function onAfterDJClassifiedsCronNotifications()
{
if($this->params->get('ps_exp_check_trigger', '3') == '3'){
$this->_expiredPlansCheck();
}
}
function _expiredPlansCheck()
{
$db = JFactory::getDBO();
$query = "SELECT ps.* "
."FROM #__djcf_plans_subscr ps "
."INNER JOIN #__djcf_plans p ON ps.plan_id=p.id "
."WHERE ps.notify=0 AND (".self::_getExpiredWhere().")";
$db->setQuery($query);
$subs = $db->loadObjectList();
if($subs){
$query = "SELECT * FROM #__djcf_plans";
$db->setQuery($query);
$plans = $db->loadObjectList('id');
foreach($subs as $sub){
if(isset($plans[$sub->plan_id])){
if(!empty($plans[$sub->plan_id]->groups_assignment)){
foreach(explode(',', $plans[$sub->plan_id]->groups_assignment) as $ug){
$query = "SELECT count(ps.id) "
."FROM #__djcf_plans_subscr ps "
."INNER JOIN #__djcf_plans p ON ps.plan_id=p.id "
."WHERE ps.user_id=".$sub->user_id." AND CONCAT(',',p.groups_assignment,',') LIKE '%,".$ug.",%' AND (".self::_getActiveWhere().")";
$db->setQuery($query);
$ug_active_subs = $db->loadResult();
if(!$ug_active_subs){ // deassign from user group only if the user group not set in any of the other user's active plans
// JUserHelper::removeUserFromGroup($sub->user_id, $ug); // does not work for Super Users trigerred by cron
$query = "DELETE FROM #__user_usergroup_map WHERE user_id=".$sub->user_id." AND group_id=".$ug;
$db->setQuery($query);
$db->execute();
}
}
}
if(!empty($plans[$sub->plan_id]->groups_assignment_exp)){
foreach(explode(',', $plans[$sub->plan_id]->groups_assignment_exp) as $ug){
JUserHelper::addUserToGroup($sub->user_id, $ug);
}
}
}
$query = "UPDATE #__djcf_plans_subscr SET notify=1 WHERE id=".$sub->id;
$db->setQuery($query);
$db->execute();
}
}
$notify_days = $this->params->get('ps_notify_days', '0');
if($notify_days){
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djnotify.php');
DJClassifiedsNotify::notifyPlansExpired($notify_days);
}
}
private static function _getActiveWhere()
{
require_once(JPATH_ROOT.'/components/com_djclassifieds/model.php');
$djmodel = new DJClassifiedsModel();
return $djmodel->getPlanActiveWhere();
}
private static function _getExpiredWhere()
{
require_once(JPATH_ROOT.'/components/com_djclassifieds/model.php');
$djmodel = new DJClassifiedsModel();
return $djmodel->getPlanExpiredWhere();
}
function onDJClassifiedsGetItemRenewSubscrID(&$item, &$par, $context)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$db = JFactory::getDBO();
$query = "SELECT s.id "
."FROM #__djcf_plans_subscr_items si "
."INNER JOIN #__djcf_plans_subscr s ON si.subscr_id=s.id "
."INNER JOIN #__djcf_plans p ON p.id=s.plan_id "
."WHERE si.item_id=".$item->id." AND (".self::_getActiveWhere().") "
."LIMIT 1";
$db->setQuery($query);
$subscr_id = $db->loadResult();
return $subscr_id;
}
function onDJClassifiedsPrepareItemRenewForm(&$id, &$par)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan && $plan->adverts_available && ($plan->date_exp=='0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL())){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}
}
}
function onDJClassifiedsItemRenewForm(&$item, &$par, &$promotions, &$category, &$types, &$days)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
$renewitem_link = DJClassifiedsSEO::getViewUri('renewitem').'&id='.$item->id;
$useritems_link = DJClassifiedsSEO::getViewUri('useritems');
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available){
if($plan->date_exp=='0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL()){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if($plan_params->pay_categories){
$category->price = 0;
$category->points = 0;
}
$this->_overridePromotions($plan_params, $promotions);
foreach($promotions as $prom){
if(!empty($prom->prices) && is_array($prom->prices)){
$last_price_i = array_key_last($prom->prices);
if(!$prom->prices[$last_price_i]->price && !$prom->prices[$last_price_i]->points){
$prom->prices[array_key_last($prom->prices)]->selected = true;
}
}
}
if(!empty($plan_params->types)){
$types = $par->get('types_display_layout','0') == '1' ? DJClassifiedsType::getTypesLabels(false) : DJClassifiedsType::getTypesSelect(false);
}
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_SUBSCRIPTION_PLAN_NOT_ACTIVE'), 'warning');
$app->redirect(JRoute::_($this->params->get('ps_renew', '0') == '1' ? $renewitem_link : $useritems_link, false));
}
}else{
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_ADVERTS_LIMIT_FOR_THIS_PLAN_REACHED'), 'warning');
$app->redirect(JRoute::_($this->params->get('ps_renew', '0') == '1' ? $renewitem_link : $useritems_link, false));
}
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_SUBSCRIPTION_PLAN'), 'warning');
$app->redirect(JRoute::_($this->params->get('ps_renew', '0') == '1' ? $renewitem_link : $useritems_link, false));
}
}elseif($this->params->get('ps_renew', '0')=='2'){ // plan required for renew
$user_plans = self::getUserActiveSubs($item->user_id);
if($user_plans){
$subscr_id = $user_plans[0]->id;
}
if($subscr_id){
$app->redirect(JRoute::_($renewitem_link.'&subscr_id='.$subscr_id, false));
}else{
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_PLAN_REQUIRED_TO_RENEW'), 'warning');
$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('plans'), false));
}
}
}
function onDJClassifiedsItemRenewFormTitle(&$item, &$par)
{
$user = JFactory::getUser();
$app = JFactory::getApplication();
$content = '';
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$subscr_id = $app->input->getInt('subscr_id', 0);
$user_active_subs = self::getUserActiveSubs($user->id);
if(!$user_active_subs){
$content = DJClassifiedsTheme::renderLayout('form', array(
'header_text' => JText::sprintf('PLG_DJCLASSIFIEDS_PLANS_RENEW_YOU_HAVE_NO_ACTIVE_PLANS_GO_TO_N', '<a href="'.DJClassifiedsSEO::getViewUri('plans').'">'.JText::_('COM_DJCLASSIFIEDS_SUBSCRIPTION_PLANS').'</a>'),
'renew' => true,
'par' => $par,
'params' => $this->params
), 'plugin', $this->_name);
}else{
$links_arr = array();
foreach($user_active_subs as $sub){
if($subscr_id && $sub->id == $subscr_id){
$plan_name = $sub->plan_name;
}else{
$links_arr[] = '<a href="'.DJClassifiedsSEO::getViewUri('renewitem').'&id='.$item->id.'&subscr_id='.$sub->id.'">'.JText::sprintf('PLG_DJCLASSIFIEDS_PLANS_USE_PLAN_N', $sub->plan_name).'</a>';
}
}
if($subscr_id && $this->params->get('ps_renew', '0') != '2'){
$links_arr[] = '<a href="'.DJClassifiedsSEO::getViewUri('renewitem').'&id='.$item->id.'">'.JText::_('PLG_DJCLASSIFIEDS_PLANS_DONT_USE_ANY_PLAN').'</a>';
}
if($links_arr){
$content = DJClassifiedsTheme::renderLayout('form', array(
'header_text' => $subscr_id ? JText::sprintf('PLG_DJCLASSIFIEDS_PLANS_RENEW_FROM_PLAN_N', $plan_name) : JText::_('PLG_DJCLASSIFIEDS_PLANS_RENEW_YOU_HAVE_ACTIVE_SUBSCRIPTION_PLAN'),
'links_arr' => $links_arr,
'renew' => true,
'par' => $par,
'params' => $this->params
), 'plugin', $this->_name);
}
}
return $content;
}
function onDJClassifiedsItemRenewFormRows($item, $par)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$subscr_id = $app->input->getInt('subscr_id', 0);
return $this->onItemEditFormRows($item, $par, $subscr_id);
}
function onAfterInitialiseDJClassifiedsRenewAdvert(&$row, &$par)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
$userplans_link = DJClassifiedsSEO::getViewUri('userplans');
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available){
if($plan->date_exp=='0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL()){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
$this->_overrideParams($plan_params, $par);
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_SUBSCRIPTION_PLAN_NOT_ACTIVE'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}else{
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_ADVERTS_LIMIT_FOR_THIS_PLAN_REACHED'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_SUBSCRIPTION_PLAN'), 'warning');
$app->redirect(JRoute::_($userplans_link, false));
}
}
}
function onBeforePaymentsDJClassifiedsRenewAdvert(&$row, &$cat, &$promotions, &$type_price, &$duration_price, &$images_to_pay, &$chars_to_pay)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan){
if($plan->adverts_available){
if($plan->date_exp=='0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL()){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if($plan_params->pay_categories){
$cat->price = 0;
}
if($plan_params->types){
$type_price = 0;
}
$this->_overridePromotions($plan_params, $promotions);
}
}
}
}
}
function onBeforeDJClassifiedsRenewAdvert(&$row, &$par)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$user = JFactory::getUser();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan && $plan->adverts_available && ($plan->date_exp == '0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL())){
$registry = new JRegistry();
$registry->loadString($plan->plan_params);
$plan_params = $registry->toObject();
if($plan_params->duration == '-1'){
if($plan->date_exp > $row->date_exp){
$row->date_exp = $plan->date_exp;
}else{
$app->enqueueMessage(JText::_('PLG_DJCLASSIFIEDS_PLANS_SUBSCRIPTION_EXP_DATE_NEEDS_TO_BE_HIGHER'), 'warning');
$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('renewitem').'&id='.$row->id.'&subscr_id='.$subscr_id, false));
}
}
}
}
}
function onAfterDJClassifiedsRenewAdvert(&$row, &$par)
{
if($this->params->get('ps_renew', '0') == '0'){
return;
}
$app = JFactory::getApplication();
$user = JFactory::getUser();
$db = JFactory::getDBO();
$subscr_id = $app->input->getInt('subscr_id', 0);
if($subscr_id){
$plan = self::getUserSub($user->id, $subscr_id);
if($plan && $plan->adverts_available && ($plan->date_exp == '0000-00-00 00:00:00' || $plan->date_exp > JFactory::getDate()->toSQL())){
$query = "INSERT INTO #__djcf_plans_subscr_items_renew (`subscr_id`,`item_id`) "
."VALUES (".$subscr_id.",".$row->id.")";
$db->setQuery($query);
$db->execute();
$query = "UPDATE #__djcf_plans_subscr SET adverts_available = adverts_available-1 "
."WHERE id=".$subscr_id;
$db->setQuery($query);
$db->execute();
}
}
}
}