Current File : /home/pacjaorg/www/km/components/com_djclassifieds/controllers/additem.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;
class DJClassifiedsControllerAddItem extends JControllerLegacy
{
public function display($cachable = false, $urlparams = Array())
{
$app = JFactory::getApplication();
$app->setUserState('djcf.pre_edit_page', null);
parent::display();
}
function captcha()
{
$app = JFactory::getApplication();
$token = $app->input->getCMD('token', '');
$subscr_id = $app->input->getCMD('subscr_id', '');
if(DJClassifiedsAccess::isCaptchaValid()){
$app->setUserState('captcha_sta','1');
}
$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('additem').($token ? '&token='.$token : '').($subscr_id ? '&subscr_id='.$subscr_id : ''), false));
}
function save()
{
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
JTable::addIncludePath(JPATH_ROOT.'/administrator/components/com_djclassifieds/tables');
$row = JTable::getInstance('Items', 'DJClassifiedsTable');
$id = $app->input->getInt('id', 0);
$copy = $app->input->getInt('copy', 0);
$token = $app->input->get('token');
$redirect = '';
$new_ad_uri = DJClassifiedsSEO::getViewUri('additem').($id ? '&id='.$id : '').($copy ? '©='.$copy : '').($token ? '&token='.$token : '');
if(!$id && !$copy && !$token){
$app->setUserState('djcf.additem.data', $app->input->post->getArray());
}
if(!$id && !$token && ($par->get('captcha','0')==1 || ($par->get('captcha','0')==2 && !$user->id)) && $par->get('captcha_newad_placement','0')=='1' && !DJClassifiedsAccess::isCaptchaValid()){
$app->redirect(JRoute::_($new_ad_uri, false));
}
if($par->get('user_type') == '1' && !$user->id){
DJClassifiedsSEO::redirectLogIn($new_ad_uri);
}
if($id){
$item = $model->getItemById($id);
}elseif($token){
$item = $model->getItemByToken($token);
}
if(!empty($item)){
$can_edit = DJClassifiedsAccess::canEditItem($item, $par, true);
if($can_edit !== true){
DJClassifiedsSEO::redirectWrongItem(null, $can_edit);
}
$row->load($item->id);
}
$cat_id = DJClassifiedsTheme::getIdFromTree($app->input->getVar('cats'));
$mcat_limit = $app->input->getInt('mcat_limit', 0);
$mcat_ids = array();
for($mi = 0; $mi < $mcat_limit; $mi++){
$mc = DJClassifiedsTheme::getIdFromTree($app->input->getVar('mcats'.$mi));
if($mc){
$mcat_ids[] = $mc;
}
}
if(!$id && !DJClassifiedsAccess::checkAdsLimits($par)){
$app->redirect(JURI::base());
}
$cats_to_check = array_merge(array($cat_id), $mcat_ids);
if(!DJClassifiedsAccess::checkCatAllowed($cats_to_check) || ($cat_id != $row->cat_id && !DJClassifiedsAccess::checkCatAdsLimits($cats_to_check))){
$app->redirect(JRoute::_($new_ad_uri, false));
}
if($par->get('img_required','0') && $par->get('img_limit','3') > 0 && !$app->input->get('img_image')){
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MISSING_IMAGES'), 'error');
$app->redirect(JRoute::_($new_ad_uri, false));
}
DJClassifiedsField::clearOverwritableFields($row);
$row->bind($app->input->post->getArray());
if($token && !$user->id && !$id){
$query = "SELECT id FROM #__djcf_items WHERE user_id=0 AND token=".$db->q($db->escape($token));
$db->setQuery($query);
$ad_id = $db->loadResult();
if($ad_id){
$row->id = $ad_id;
}else{
DJClassifiedsSEO::redirectLogIn(DJClassifiedsSEO::getViewUri('additem'));
}
}
$app->triggerEvent('onAfterInitialiseDJClassifiedsSaveAdvert', array(&$row, &$par));
if($par->get('title_char_limit','0')>0){
$row->name = mb_substr($row->name, 0,$par->get('title_char_limit','100'),"UTF-8");
}
if((int)$par->get('allow_htmltags','1') && $par->get('pay_desc_chars','0') == '0'){
$row->description = $app->input->get('description', '', 'RAW');
$allowed_tags = implode('', array_map(function($v){return '<'.$v.'>';}, explode(';',$par->get('allowed_htmltags','div;p;span;strong;i;b;em;ul;li;ol;br;hr'))));
$row->description = strip_tags($row->description, $allowed_tags);
}else{
$row->description = nl2br($app->input->getStr('description', ''));
$row->description = str_ireplace("\r\n", "", $row->description);
}
$row->intro_desc = $row->intro_desc ? mb_substr(strip_tags(nl2br($row->intro_desc)), 0, $par->get('introdesc_char_limit','120'), "UTF-8") : '';
if(!$row->intro_desc || !$app->input->exists('intro_desc')){
$row->intro_desc = $row->description ? mb_substr(strip_tags($row->description), 0, $par->get('introdesc_char_limit','120'), "UTF-8") : '';
}
$row->contact = nl2br($app->input->getStr('contact', ''));
$row->price_negotiable = $app->input->getInt('price_negotiable', 0);
$row->bid_min = floatval(str_ireplace(',', '.', $app->input->getStr('bid_min', '')));
$row->bid_max = floatval(str_ireplace(',', '.', $app->input->getStr('bid_max', '')));
$row->price_start = floatval(str_ireplace(',', '.', $app->input->getStr('price_start', '')));
$row->price_reserve = floatval(str_ireplace(',', '.', $app->input->getStr('price_reserve', '')));
if(!$row->id && !$app->input->exists('auction_assist') && $par->get('auctions_assist','0') == '1'){
$row->auction_assist = 1;
}
if(!$id && !$token && !$user->id){
$characters = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$row->token = '';
for($p = 0; $p < 20; $p++){
$row->token .= $characters[mt_rand(0, strlen($characters))];
}
}
$row->cat_id = $cat_id;
$row->region_id = DJClassifiedsTheme::getIdFromTree($app->input->getVar('regions'));
if($app->input->get('latitude',0) > 0 && $app->input->get('longitude',0) > 0){
$row->latitude = $app->input->getFloat('latitude');
$row->longitude = $app->input->getFloat('longitude');
}elseif($row->region_id || $row->address){
if($row->post_code){
$loc_coord = DJClassifiedsGeocode::getLocationPostCode($row->post_code, $row->address, $row->region_id);
}else{
$loc_coord = DJClassifiedsGeocode::getLocation($row->address, $row->region_id);
}
if(!empty($loc_coord)){
$row->latitude = floatval($loc_coord['lat']);
$row->longitude = floatval($loc_coord['lng']);
}
}
$row->latitude = $row->latitude ? $row->latitude : '0';
$row->longitude = $row->longitude ? $row->longitude : '0';
if($row->id == 0){
$row->user_id = $user->id;
$row->ip_address = $_SERVER['REMOTE_ADDR'];
}
$duration_price = 0;
$duration_points = 0;
if($row->id == 0 || $row->new == 1){
if($par->get('durations_list')){
if($app->input->exists('exp_days')){
$exp_days = $app->input->getInt('exp_days', 0);
}elseif($row->id){
$exp_days = $row->exp_days;
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_DURATION_LIMIT'), 'error');
$app->redirect(JRoute::_($new_ad_uri, false));
}
$duration = $model->getDuration($exp_days, $row->cat_id);
if($duration){
$duration_price = $duration->price;
$duration_points = $duration->points;
}else{
$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_DURATION_LIMIT'), 'error');
$app->redirect(JRoute::_($new_ad_uri, false));
}
}else{
$exp_days = $par->get('exp_days','7');
}
}
$cat = null;
if($row->cat_id){
$query = "SELECT * FROM #__djcf_categories WHERE id=".$row->cat_id;
$db->setQuery($query);
$cat = $db->loadObject();
if(!$cat->alias){
$cat->alias = DJClassifiedsSEO::getAliasName($cat->name);
}
}
$type = null;
$type_price = 0;
$type_points = 0;
if($row->type_id){
$type = DJClassifiedsPayment::getTypePrice($user->id, $row->type_id);
if($type){
$type_price = $type->price;
$type_points = $type->points;
}
}else{
$row->type_id = 0;
}
$row->promotions = '';
$promotions = $par->get('promotion','1')=='1' ? $model->getPromotionsPrices() : array();
$is_new = 1;
$old_row = JTable::getInstance('Items', 'DJClassifiedsTable'); // empty row (for new items' price check)
if($row->id){
$query = "SELECT * FROM #__djcf_items WHERE id=".$row->id;
$db->setQuery($query);
$old_row = $db->loadObject();
$row->date_start = $old_row->date_start;
$row->alias = $old_row->alias;
$row->metarobots = $old_row->metarobots;
$is_new = 0;
}else{
$row->date_start = JFactory::getDate()->toSQL();
}
if($old_row->new){
$row->new = $old_row->new;
}elseif(!$row->id){
$row->new = 1;
}else{
$row->new = 0;
}
$row->date_mod = JFactory::getDate()->toSQL();
if(isset($exp_days) && $old_row->exp_days !== $exp_days){
if($exp_days == 0){
$row->date_exp = '2038-01-01 00:00:00';
}elseif($exp_days > 0){
$new_date_exp = JFactory::getDate($row->date_start)->modify('+'.$exp_days.' day')->toSQL();
$row->date_exp = $new_date_exp;
}
if($row->date_exp == '1970-01-01 1:00:00' || $row->date_exp > '2038-01-01 00:00:00'){
$row->date_exp = '2038-01-01 00:00:00';
}
$row->exp_days = $exp_days;
}else{
$row->exp_days = $old_row->exp_days;
}
if(!$row->alias){
$row->alias = DJClassifiedsSEO::getAliasName($row->name);
}
DJClassifiedsAccess::overrideUserAutopublish($par);
if($cat->autopublish == '0'){
if($par->get('autopublish','1') == '1'){
$row->published = 1;
}elseif($par->get('autopublish','1') == '2'){ // edit only
$row->published = ($row->id && $row->published == 1) ? 1 : 0;
}else{
$row->published = 0;
}
}elseif($cat->autopublish == '1'){
$row->published = 1;
}elseif($cat->autopublish == '3'){ // edit only
$row->published = ($row->id && $row->published == 1) ? 1 : 0;
}elseif($cat->autopublish == '2'){
$row->published = 0;
}
if($row->published){
$message = JText::_($row->id ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY');
}else{
$message = JText::_($row->id ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_WAITING_FOR_PUBLISH' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_WAITING_FOR_PUBLISH');
}
if($par->get('ad_preview','0') && $app->input->getInt('prev_val',0)){
$row->published = 0;
}
if($is_new){
$row->date_sort = $row->date_start;
}
$app->triggerEvent('onBeforeDJClassifiedsSaveAdvert', array(&$row, $is_new));
if(!$row->store()){
throw new Exception($row->getError());
}
$images_c = DJClassifiedsImage::saveItemImages($row, $is_new, $par);
$imgfreelimit = $par->get('img_free_limit','-1');
$images_to_pay = 0;
if($imgfreelimit > -1 && $images_c > $imgfreelimit){
$images_to_pay = $images_c - $imgfreelimit;
if(!$is_new){
$images_to_pay = $images_to_pay - $old_row->extra_images; // 'extra_images' holds the number of images already paid
if($images_to_pay < 0){
$images_to_pay = 0;
}
}
}
$desc_chars_limit = $par->get('pay_desc_chars_free_limit',0);
$chars_to_pay = 0;
$desc_c = mb_strlen(str_ireplace(array('<br /> ','<br />','<br>','<br/>'), "\n", $row->description));
if($par->get('pay_desc_chars',0) && $desc_c > $desc_chars_limit){
$chars_to_pay = $desc_c - $desc_chars_limit;
if(!$is_new){
$chars_to_pay = $chars_to_pay - $old_row->extra_chars; // 'extra_chars' holds the number of chars already paid
if($chars_to_pay < 0){
$chars_to_pay = 0;
}
}
}
$mcat_list = array();
if($mcat_ids){
if($is_new){
$query = "SELECT * FROM #__djcf_items_categories WHERE item_id=0";
}else{
$query = "SELECT * FROM #__djcf_items_categories WHERE item_id=".$row->id;
}
$db->setQuery($query);
$mcat_old_list = $db->loadObjectList('cat_id');
$query = "SELECT * FROM #__djcf_categories WHERE published=1 AND id IN (".implode(',', $mcat_ids).")";
$db->setQuery($query);
$mcat_list = $db->loadObjectList('id');
}
$app->triggerEvent('onBeforePaymentsDJClassifiedsSaveAdvert', array(&$row, $is_new, &$cat, &$promotions, &$type_price, &$duration_price, &$images_to_pay, &$chars_to_pay, &$type_points, &$duration_points, &$mcat_list));
$pay_redirect = false;
$row->pay_type = '';
$pay_types = array();
$old_pay_types = explode(',', ($old_row->pay_type ? $old_row->pay_type : ''));
if(!DJClassifiedsPayment::isFree($cat->price, $cat->points, $par) && (intval($old_row->cat_id) !== intval($row->cat_id) || (intval($old_row->cat_id) === intval($row->cat_id) && in_array('cat', $old_pay_types)))){
$pay_types[] = 'cat';
}
if(!DJClassifiedsPayment::isFree($duration_price, $duration_points, $par) && (intval($old_row->exp_days) !== intval($row->exp_days) || (intval($old_row->exp_days) === intval($row->exp_days) && in_array('duration', $old_pay_types)))){
$pay_types[] = 'duration';
}
if(!DJClassifiedsPayment::isFree($type_price, $type_points, $par) && (intval($old_row->type_id) !== intval($row->type_id) || (intval($old_row->type_id) === intval($row->type_id) && in_array('type', $old_pay_types)))){
$pay_types[] = 'type';
}
if(in_array('duration_renew', $old_pay_types)){
$pay_types[] = 'duration_renew';
}
$row->extra_images_to_pay = $images_to_pay;
if($images_to_pay > 0){
$pay_types[] = 'extra_img';
}
$row->extra_chars_to_pay = $chars_to_pay;
if($chars_to_pay > 0){
$pay_types[] = 'extra_chars';
}
foreach($mcat_list as $mc){
if(!DJClassifiedsPayment::isFree($mc->price, $mc->points, $par) && (empty($mcat_old_list[$mc->id]) || in_array('mc'.$mc->id, $old_pay_types))){
$pay_types[] = 'mc'.$mc->id;
}
}
$row->pay_type = implode(',', $pay_types).($pay_types ? ',' : '');
if($par->get('promotion','1') == '1'){
DJClassifiedsPayment::checkApplyPromotions($row, $old_row, $promotions, $par);
}
$app->triggerEvent('onAfterPaymentsDJClassifiedsSaveAdvert', array(&$row, $is_new));
if($row->pay_type){
$pay_redirect = true;
if(!DJClassifiedsPayment::isPayTypePromsOnly($row->pay_type)){ // if non-prom pay types
$row->published = 0;
}
}
if(!$row->store()){
throw new Exception($row->getError());
}
if($mcat_ids){
$mcat_ids[] = $row->cat_id;
$mcat_where = ' IN ('.implode(',', $mcat_ids).')';
}else{
$mcat_where = ' = '.$row->cat_id.' ';
}
$query = "SELECT f.* "
."FROM #__djcf_fields f "
."LEFT JOIN #__djcf_fields_xref fx ON f.id=fx.field_id "
."WHERE fx.cat_id ".$mcat_where." AND f.source=0 AND f.edition_blocked=0 "
."GROUP BY fx.field_id "
."UNION "
."SELECT f.* "
."FROM #__djcf_fields f "
."LEFT JOIN #__djcf_fields_xref fx ON f.id=fx.field_id "
."WHERE f.source=1 AND f.edition_blocked=0";
$db->setQuery($query);
$fields_list = $db->loadObjectList();
DJClassifiedsField::saveFieldsValues($fields_list, $row->id);
if(!($par->get('ad_preview','0') && $app->input->getInt('prev_val',0))){
$new_ad = ($id || (!$id && $token)) && empty($old_row->new_draft) ? 0 : 1;
if($par->get('notify_admin','0')){
if($par->get('notify_admin','0')==1){
DJClassifiedsNotify::notifyAdmin($row, $new_ad);
}else if($par->get('notify_admin','0')==2 && $new_ad){
DJClassifiedsNotify::notifyAdmin($row, $new_ad);
}
}
if($new_ad && $par->get('user_new_ad_email','0') && ($user->id || ($par->get('email_for_guest','0') && $row->email))){
DJClassifiedsNotify::notifyNewAdvertUser($row);
}
if($row->new_draft){
$row->date_start = JFactory::getDate()->toSQL();
$row->date_sort = JFactory::getDate()->toSQL();
}
$row->new_draft = 0;
}elseif($id == 0){
$row->new_draft = 1;
}
if($old_row->published == 2){
$row->published = 2;
}
if(!$pay_redirect){
$row->new = 0;
}
if(!$row->store()){
throw new Exception($row->getError());
}
$app->triggerEvent('onAfterDJClassifiedsSaveAdvert', array(&$row, $is_new));
if($par->get('ad_preview','0') && $app->input->getInt('prev_val',0)){
$pay_redirect = false;
$message = null;
$item = $model->getItemById($row->id);
$redirect = DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias, $item->cat_id.':'.$item->c_alias, $item->region_id.':'.$item->r_alias).($row->token ? '&token='.$row->token : '').'&prev=1';
}
if($pay_redirect){
if($row->pay_type != $old_row->pay_type){
DJClassifiedsPayment::deletePrevStartPayment($row->id);
}
$redirect = DJClassifiedsSEO::getViewUri('payment').'&id='.$row->id;
$message = JText::_($is_new ? 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_CHOOSE_PAYMENT' : 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_CHOOSE_PAYMENT');
}
if(!$redirect){
if($par->get('item_save_redirect')){
$redirect = 'index.php?Itemid='.$par->get('item_save_redirect');
}else{
$item = $model->getItemById($row->id);
$redirect = DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias, $item->cat_id.':'.$item->c_alias, $item->region_id.':'.$item->r_alias).($item->token ? '&token='.$item->token : '');
}
}
$app->triggerEvent('onBeforeDJClassifiedsSaveAdvertRedirect', array(&$row, $is_new, &$redirect, &$message, $pay_redirect));
$app->setUserState('djcf.additem.data', null);
$app->enqueueMessage($message, 'success');
$app->redirect(JRoute::_($redirect, false));
}
public function publish()
{
$app = JFactory::getApplication();
$user = JFactory::getUser();
$model = $this->getModel('additem');
$par = $app->getParams('com_djclassifieds');
$id = $app->input->getInt('id', 0);
$token = $app->input->get('token');
$row = JTable::getInstance('Items', 'DJClassifiedsTable');
$redirect = '';
if(!($id || $token) || $par->get('ad_preview','0') == '0'){
DJClassifiedsSEO::redirectWrongItem();
}
if($id){
$item = $model->getItemById($id);
}elseif($token){
$item = $model->getItemByToken($token);
}
if(empty($item) || !DJClassifiedsAccess::canEditItem($item)){
DJClassifiedsSEO::redirectWrongItem();
}
$app->triggerEvent('onBeforeDJClassifiedsPublishAdvert', array(&$item, &$par));
$row->load($item->id);
DJClassifiedsAccess::overrideUserAutopublish($par);
if($item->c_autopublish == '0'){
if($par->get('autopublish','1') == '1'){
$row->published = 1;
}elseif($par->get('autopublish','1') == '2'){ // edit only
$row->published = $row->new_draft ? $row->published : 1;
}
}elseif($item->c_autopublish == '1'){
$row->published = 1;
}elseif($item->c_autopublish == '3'){ // edit only
$row->published = $row->new_draft ? $row->published : 1;
}
if($item->pay_type && !DJClassifiedsPayment::isPayTypePromsOnly($row->pay_type)){ // if non-prom pay types
$row->published = 0;
}
if($item->pay_type){
$redirect = DJClassifiedsSEO::getViewUri('payment').'&id='.$item->id;
$message = JText::_(!$row->new_draft ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_CHOOSE_PAYMENT' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_CHOOSE_PAYMENT');
}elseif($row->published){
$message = JText::_(!$row->new_draft ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY');
}else{
$message = JText::_(!$row->new_draft ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_WAITING_FOR_PUBLISH' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_WAITING_FOR_PUBLISH');
}
if($item->user_id != $user->id && $par->get('admin_can_edit_delete','0') && $user->authorise('core.admin', 'com_djclassifieds')){
$row->published = 1;
$redirect = null;
$message = JText::_('COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY');
}
if(!$row->store()){
throw new Exception($row->getError());
}
if($item->new_draft){
if($par->get('notify_admin','0')){
$new_ad = 1;
DJClassifiedsNotify::notifyAdmin($item, $new_ad);
}
if($par->get('user_new_ad_email','0') && ($user->id || ($par->get('email_for_guest','0') && $item->email))){
DJClassifiedsNotify::notifyNewAdvertUser($item);
}
$row->new_draft = 0;
$row->date_start = JFactory::getDate()->toSQL();
$row->date_sort = JFactory::getDate()->toSQL();
}elseif($par->get('notify_admin','0')=='1'){
$new_ad = 0;
DJClassifiedsNotify::notifyAdmin($item, $new_ad);
}
if(!$row->store()){
throw new Exception($row->getError());
}
$app->triggerEvent('onAfterDJClassifiedsPublishAdvert', array(&$row));
if(!$redirect){
if($par->get('item_save_redirect')){
$redirect = 'index.php?Itemid='.$par->get('item_save_redirect');
}else{
$redirect = DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias, $item->cat_id.':'.$item->c_alias, $item->region_id.':'.$item->r_alias).($app->input->get('token') ? '&token='.$app->input->get('token') : '');
}
}
$app->enqueueMessage($message, 'success');
$app->redirect(JRoute::_($redirect, false));
}
public function getFields()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
$id = $app->input->post->getInt('id', 0);
$id_copy = $app->input->post->getInt('id_copy', 0);
$token = $app->input->post->get('token', '');
$cid = $app->input->getInt('cat_id', 0);
$mcat_ids = $app->input->getStr('mcat_ids', '');
$id = !$id ? $id_copy : $id;
$id = !$user->id ? 0 : $id;
if($id){
$item = $model->getItemById($id);
if($item->user_id != $user->id){
if($par->get('admin_can_edit_delete','0')==0 || !$user->authorise('core.admin', 'com_djclassifieds')){
$id = 0;
}
}
}else if($token){
$query = "SELECT * FROM #__djcf_items WHERE token='".addslashes($token)."' AND user_id=0 LIMIT 1";
$db->setQuery($query);
$item = $db->loadObject();
if($item){
$id = $item->id;
}
}
$mcats_list = '';
if($mcat_ids){
$mcats = array_filter(explode(',', $mcat_ids));
foreach($mcats as $mcat){
$mc = intval(str_ireplace('p', '', $mcat));
if($mc>0){
$mcats_list .= $mc.',';
}
}
}
$cat_where = '';
if($mcats_list){
$mcats_list .= $cid;
$cat_where = ' IN ('.$mcats_list.')';
}elseif($cid){
$cat_where = ' = '.$cid.' ';
}
$query = $db->getQuery(true);
$query->select(array('fv.*', 'f.*'))
->from('#__djcf_fields f')
->join('LEFT', '#__djcf_fields_values fv ON fv.field_id = f.id AND fv.item_id = '.$id)
->where('f.source = 0')
->where('f.published = 1')
->where('f.edition_blocked = 0');
if($cat_where){
$query->join('INNER', '#__djcf_fields_xref fx ON f.id = fx.field_id AND fx.cat_id '.$cat_where);
$query->order('fx.cat_id, fx.ordering, f.ordering');
}else{
$query->where('f.all_cats = 1');
$query->order('f.ordering');
}
if($mcats_list){
$query->group('fx.field_id');
}
$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query, 'additem'));
$db->setQuery($query);
$fields_list = $db->loadObjectList();
foreach($fields_list as $f){
if(!DJClassifiedsAccess::hasAccessToFormField($f)){
continue;
}
if($id && $f->value == '' && in_array($f->name, DJClassifiedsField::getOverwritableFieldNames())){
$f->value = $item->{$f->name};
}
if($f->item_id === null){
DJClassifiedsField::setFieldDefaultValue($f, $user->id);
}
echo DJClassifiedsField::renderFormField($f, $id, (!$id ? $app->getUserState('djcf.additem.data') : null));
}
$app->close();
}
public function getContactFields()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$user = JFactory::getUser();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
$id = $app->input->post->getInt('id', 0);
$id_copy = $app->input->post->getInt('id_copy', 0);
$token = $app->input->post->get('token', '');
$id = !$id ? $id_copy : $id;
$id = !$user->id ? 0 : $id;
if($id){
$item = $model->getItemById($id);
if($item->user_id != $user->id){
if($par->get('admin_can_edit_delete','0')==0 || !$user->authorise('core.admin', 'com_djclassifieds')){
$id = 0;
}
}
}else if($token){
$query = "SELECT * FROM #__djcf_items WHERE token='".addslashes($token)."' AND user_id=0 LIMIT 1";
$db->setQuery($query);
$item = $db->loadObject();
if($item){
$id = $item->id;
}
}
$query = $db->getQuery(true);
$query->select(array('fv.*', 'f.*'))
->from('#__djcf_fields f')
->join('LEFT', '#__djcf_fields_values fv ON fv.field_id = f.id AND fv.item_id = '.$id)
->where('f.source = 1')
->where('f.published = 1')
->where('f.edition_blocked = 0')
->order('f.ordering');
$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query, 'additem'));
$db->setQuery($query);
$fields_list = $db->loadObjectList();
foreach($fields_list as $f){
if(!DJClassifiedsAccess::hasAccessToFormField($f)){
continue;
}
if($f->item_id === null){
DJClassifiedsField::setFieldDefaultValue($f, $user->id);
}
echo DJClassifiedsField::renderFormField($f, $id, (!$id ? $app->getUserState('djcf.additem.data') : null));
}
$app->close();
}
public function getCategorySelect()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
if(strpos($app->input->get('cat_id', ''), 'p') !== false){
$app->close();
}
$id = $app->input->getInt('cat_id', 0);
$subscr_id = $app->input->getInt('subscr_id', 0);
$show_paid = 1;
$show_price = 1;
if($id){
$app->triggerEvent('onBeforeDJClassifiedsItemEditGetCategorySelect', array($id, &$show_paid, &$show_price, &$par));
$parent_cat = $model->getCategory($id);
$cats = $model->getCategories($par->get('cat_ordering', 'ordering'), $id);
$context = 'additem';
$app->triggerEvent('onDJClassifiedsItemEditGetCategorySelect', array(&$cats, &$par, $subscr_id, $context));
if($cats){
$cl = $parent_cat->ads_disabled ? 'validate-djcat' : '';
echo $parent_cat->ads_disabled ? '<label for="cat_'.$id.'" class="cat-req-helper" style="display:none">'.JText::_('COM_DJCLASSIFIEDS_CATEGORY').'</label>' : '';
echo DJClassifiedsTheme::renderLayout('selectcategory', array('cats' => $cats, 'cat_id' => $id, 'cl' => $cl, 'show_paid' => $show_paid, 'show_price' => $show_price, 'parent_cat' => $parent_cat, 'par' => $par));
echo "<div id=\"after_cat_$id\"></div>";
}
}
$app->close();
}
public function getRegionSelect()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
$id = $app->input->getInt('reg_id', 0);
if($id){
$parent_reg = $model->getRegion($id);
$regions = $model->getRegions($par->get('reg_ordering', 'ordering,name'), $id);
if($regions){
$cl = $parent_reg->ads_disabled ? 'validate-djreg' : '';
echo $parent_reg->ads_disabled ? '<label for="reg_'.$id.'" class="reg-req-helper" style="display:none">'.JText::_('COM_DJCLASSIFIEDS_LOCALIZATION').'</label>' : '';
echo DJClassifiedsTheme::renderLayout('selectregion', array('regions' => $regions, 'reg_id' => $id, 'cl' => $cl, 'parent_reg' => $parent_reg, 'par' => $par));
echo '<div id="after_reg_'.$id.'"></div>';
}
}
$app->close();
}
public function getDurationSelect()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
$id = $app->input->getInt('cat_id', 0);
$c_days = $app->input->getVar('c_days', $par->get('exp_days', '7'));
$days = $model->getDays($id);
echo DJClassifiedsTheme::renderLayout('selectduration', array('days' => $days, 'exp_days' => $c_days, 'par' => $par));
$app->close();
}
public function getDescCharsPriceInit()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
$cat_id = $app->input->post->getInt('cat_id', 0);
$exp_days = $app->input->post->getInt('exp_days', 0);
$days = $model->getDays($cat_id);
$day = !empty($days[$exp_days]) ? $days[$exp_days] : null;
$char_price = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_price : $par->get('desc_char_price','0');
$char_points = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_points : $par->get('desc_char_price_points','0');
echo DJClassifiedsPayment::getPriceText($char_price, $char_points, $par);
$app->close();
}
public function getDescCharsPrice()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel('additem');
$cat_id = $app->input->post->getInt('cat_id', 0);
$chars_to_pay = $app->input->post->getInt('chars_to_pay', 0);
$exp_days = $app->input->post->getInt('exp_days', 0);
$days = $model->getDays($cat_id);
$day = !empty($days[$exp_days]) ? $days[$exp_days] : null;
$char_price = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_price : $par->get('desc_char_price','0');
$char_points = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_points : $par->get('desc_char_price_points','0');
$new_desc_price = 0;
if($chars_to_pay > 0){
$new_desc_price = DJClassifiedsPayment::getPriceText((round($char_price * $chars_to_pay * 100) / 100), (round($char_points * $chars_to_pay * 100) / 100), $par);
}
echo $new_desc_price;
$app->close();
}
public function checkEmail()
{
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$par = $app->getParams('com_djclassifieds');
$email = $app->input->getVar('email');
$query = "SELECT count(id) FROM #__users WHERE email=".$db->q($email);
$db->setQuery($query);
$u_exist = $db->loadResult();
if($u_exist){
echo JText::_('COM_DJCLASSIFIEDS_EMAIL_EXIST_IN_OUR_DATABASE_PLEASE_LOGIN');
}else if($par->get('adverts_limit','0')){
$query = "SELECT count(id) FROM #__djcf_items WHERE email=".$db->q($email);
$db->setQuery($query);
$ads_l = $db->loadResult();
if($ads_l >= $par->get('adverts_limit','0')){
echo JText::_('COM_DJCLASSIFIEDS_ADVERTS_LIMIT_REACHED_FOR_THIS_EMAIL');
}
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo JText::_('COM_DJCLASSIFIEDS_EMAIL_ADDRESS_NOT_VALID');
}
$app->close();
}
function rotateImage()
{
$app = JFactory::getApplication();
$img_src = $app->input->getStr('img_src', '');
$filename = JPATH_ROOT.'/'.$img_src;
DJClassifiedsImage::rotate($filename, 1);
$app->close();
}
}