Current File : /home/pacjaorg/public_html/km/components/com_djclassifieds/views/item/view.html.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 DJclassifiedsViewItem extends JViewLegacy
{
private static $_viewname = 'item';
public function __construct($config = array())
{
parent::__construct($config);
$par = JFactory::getApplication()->getParams('com_djclassifieds');
$this->_addPath('template', JPATH_ROOT.'/components/com_djclassifieds/themes/'.$par->get('theme','default').'/views/'.self::$_viewname);
}
private function _prepareDoc($item, $canonical_link, $category, $cat_path, $region, $reg_path, $item_images, $par)
{
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$menus = $app->getMenu('site');
$m_active = $menus->getActive();
if($item->metakey){
$document->setMetaData('keywords',$item->metakey);
}else if(!empty($category->metakey)){
$document->setMetaData('keywords',$category->metakey);
}else if(!empty($region->metakey)){
$document->setMetaData('keywords',$region->metakey);
}else if($m_active){
if($m_active->getParams()->get('menu-meta_keywords')){
$document->setMetaData('keywords',$m_active->getParams()->get('menu-meta_keywords'));
}
}
$meta_desc = '';
if($item->metadesc){
$meta_desc = $item->metadesc;
}else if($par->get('seo_item_metadesc', '0')==0){
$meta_desc = $item->intro_desc;
}else if($par->get('seo_item_metadesc', '0')==2){
$meta_desc = substr(strip_tags($item->description), 0, 160);
}else if(!empty($category->metadesc)){
$meta_desc = $category->metadesc;
}else if(!empty($region->metadesc)){
$meta_desc = $region->metadesc;
}else if($m_active){
if($m_active->getParams()->get('menu-meta_description')){
$meta_desc = $m_active->getParams()->get('menu-meta_description');
}
}
$document->setDescription($meta_desc);
$c_title = $document->getTitle();
$cat_name = JText::_($item->c_name);
$region_name = JText::_($item->r_name);
$cat_seo_title = !empty($category->metatitle) ? $category->metatitle : '';
$reg_seo_title = !empty($region->metatitle) ? $region->metatitle : '';
$item_name = $item->name;
$seo_cat_path = '';
$seo_reg_path = '';
$seo_title_separator = $par->get('seo_title_separator', ' - ');
foreach($cat_path as $cp){
if($seo_cat_path){
$seo_cat_path .= $seo_title_separator;
}
$seo_cat_path .= JText::_($cp->name);
}
foreach($reg_path as $rp){
if($seo_reg_path){
$seo_reg_path .= $seo_title_separator;
}
$seo_reg_path .= JText::_($rp->name);
}
$type_name = JText::_($item->t_name);
$seo_title_from = array('|','<default_title>','<category_name>','<category_path>','<item_name>','<region_name>','<category_seo_title>','<type_name>','<region_seo_title>','<region_path>');
$seo_title_to = array($seo_title_separator,$c_title,$cat_name,$seo_cat_path,$item_name,$region_name,$cat_seo_title,$type_name,$reg_seo_title,$seo_reg_path);
$app->triggerEvent('onPrepareDJClassifiedsSeoTitle', array($item, &$seo_title_to, 'item'));
$seo_title = str_ireplace($seo_title_from, $seo_title_to, $par->get('seo_title_item', '<item_name>|<category_name>|<default_title>'));
if($seo_title){
$document->setTitle($seo_title);
}
if($item->metarobots){
$document->setMetaData('robots',$item->metarobots);
}else if($m_active && $m_active->getParams()->get('seo_item_metarobots')){
$document->setMetaData('robots',$m_active->getParams()->get('seo_item_metarobots'));
}else if($par->get('seo_item_metarobots','')){
$document->setMetaData('robots',$par->get('seo_item_metarobots',''));
}
if($par->get('seo_canonical_tags','1')){
$document->addHeadLink($canonical_link, 'canonical');
}
$document->addCustomTag('<meta property="og:title" content="'.$item->name.'" />');
$document->addCustomTag('<meta property="og:description" content="'.$meta_desc.'" />');
$document->addCustomTag('<meta property="og:url" content="'.$canonical_link.'" />');
$document->addCustomTag('<meta property="twitter:card" content="summary" />');
$document->addCustomTag('<meta property="twitter:title" content="'.$item->name.'" />');
$document->addCustomTag('<meta property="twitter:description" content="'.$meta_desc.'" />');
$u = JURI::getInstance(JURI::root());
if($item_images){
$document->addCustomTag('<meta property="og:image" content="'.rtrim($u->toString(),'/').$item_images[0]->thumb_og.'" />');
$document->addCustomTag('<meta property="twitter:image" content="'.rtrim($u->toString(),'/').$item_images[0]->thumb_og.'" />');
$path = JPath::clean(JPATH_ROOT . '/' .$item_images[0]->thumb_og);
$size = @getimagesize($path);
if(isset($size[0])){
$document->addCustomTag('<meta property="og:image:width" content="'.$size[0].'" />');
}
if(isset($size[1])){
$document->addCustomTag('<meta property="og:image:height" content="'.$size[1].'" />');
}
}elseif($par->get('blank_img_source','0')==1){
$cat_img_path = str_replace('_ths', '', DJClassifiedsImage::getCatImage($item->cat_id));
$cat_img_path = ltrim(ltrim($cat_img_path, $u->getPath()), '/');
if(strpos($cat_img_path, 'no-image') === false){
$document->addCustomTag('<meta property="og:image" content="'.$u->toString().$cat_img_path.'" />');
$document->addCustomTag('<meta property="twitter:image" content="'.$u->toString().$cat_img_path.'" />');
$path = JPath::clean(JPATH_ROOT.'/'.$cat_img_path);
$size = @getimagesize($path);
if(isset($size[0])){
$document->addCustomTag('<meta property="og:image:width" content="'.$size[0].'" />');
}
if(isset($size[1])){
$document->addCustomTag('<meta property="og:image:height" content="'.$size[1].'" />');
}
}
}
if($par->get('comments','0') == 1 && $par->get('fb_comments_admin','') != ''){
$document->addCustomTag('<meta property="'.$par->get('fb_comments_metatag', 'fb:admins').'" content="'.$par->get('fb_comments_admin','').'" />');
}
}
function display($tpl = null)
{
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$user = JFactory::getUser();
$par = $app->getParams('com_djclassifieds');
$model = $this->getModel();
$item = $model->getItem();
if(!$item){
DJCLassifiedsSEO::redirectWrongItem();
}
if($item->user_id != $user->id){
$groups_acl = ','.implode(',', $user->getAuthorisedViewLevels()).',';
if(!strstr($groups_acl,','.$item->c_access_view.',') || !$item){
DJClassifiedsAccess::restrictionRedirect('category');
}else if($item->access_view==0){
if(!strstr($groups_acl,','.$item->c_access_item_view.',')){
DJClassifiedsAccess::restrictionRedirect();
}
}else if(!strstr($groups_acl,','.$item->access_view.',')){
DJClassifiedsAccess::restrictionRedirect();
}
}
$this->own_item = (($user->id && $user->id == $item->user_id) || (!$user->id && $app->input->get('token') && $app->input->get('token') == $item->token)) ? true : false;
// view backward compatibility START
$cfpar = JComponentHelper::getParams('com_djclassifieds');
$app->triggerEvent('onDJClassifiedsPrepareItem', array(&$item, &$cfpar, 'item'));
$app->triggerEvent('onPrepareItemDescription', array(&$item, &$cfpar, 'item'));
$app->triggerEvent('onBeforeDJClassifiedsDisplayAdvertMap', array(&$item, &$cfpar, 'item'));
DJClassifiedsTheme::includeMapsScript($cfpar);
// view backward compatibility END
$app->triggerEvent('onDJClassifiedsPrepareItem', array(&$item, &$par, 'item'));
$app->triggerEvent('onPrepareItemDescription', array(&$item, &$par, 'item'));
$canonical_link = JRoute::_(DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias,$item->cat_id.':'.$item->c_alias,$item->region_id.':'.$item->r_alias, true), true, (JUri::getInstance()->isSSL() ? 1 : -1));
$category = $model->getCategory($item->cat_id);
$region = $model->getRegion($item->region_id);
$fields = $model->getFields($item->id, $par);
$fields_contact = $model->getContactFields($item->id, $par);
$item_payments = $model->gotPayment($item->id);
$bids = $model->getBids($item->id, $par->get('bids_displayed',5));
$profile = $item->user_id ? $model->getProfile($item->user_id, true, $par) : '';
$this->user_items_c = $item->user_id ? $model->getUserItemsCount($item->user_id) : '0';
$item_images = DJClassifiedsImage::getAdsImages($item->id);
if($item_images){
JHtml::_('jquery.framework');
$document->addScript(JUri::base(true).'/media/djextensions/magnific/magnific.js');
$document->addStyleSheet(JUri::base(true).'/media/djextensions/magnific/magnific.css');
$par->set('lightbox_type','magnific'); // view backward compatibility
$cfpar->set('lightbox_type','magnific'); // view backward compatibility
}
$menus = $app->getMenu('site');
$m_active = $menus->getActive();
$cat_menu_path = array();
if($m_active && strstr($m_active->link,'com_djclassifieds') && strstr($m_active->link,'items') && !empty($m_active->query['cid'])){
$cat_menu_path = DJClassifiedsCategory::getParentPath(1, $m_active->query['cid']);
}
$warning18 = false;
$main_cat_id = $item->cat_id;
$pathway = $app->getPathway();
$cat_path = array();
$cat_theme = '';
$cat_path_cl = '';
if($item->cat_id){
$app->input->cookie->set('djcf_lastcat',$item->cat_id,0,'/');
$cat_path = DJClassifiedsCategory::getParentPath(1,$item->cat_id);
$main_cat_id = $cat_path[count($cat_path)-1]->id;
for($c=count($cat_path);$c>0;$c--){
$to_b = 1;
if(count($cat_menu_path)){
foreach($cat_menu_path as $cm){
if($cm->id==$cat_path[$c-1]->id){
$to_b = 0;
break;
}
}
}
if($to_b){
$pathway->addItem(JText::_($cat_path[$c-1]->name), DJClassifiedsSEO::getCategoryRoute($cat_path[$c-1]->id.':'.$cat_path[$c-1]->alias));
}
}
foreach($cat_path as $cp){
if($cp->theme){
$cat_theme = $cp->theme;
}
if($cp->restriction_18){
$warning18 = true;
}
$cat_path_cl .= ' '.$cp->alias;
}
}
$pathway->addItem($item->name);
$reg_path = array();
$country = '';
$city = '';
$address = '';
if($item->region_id){
if($par->get('show_regions','1')){
$reg_parts = DJClassifiedsRegion::getRegionParts($item->region_id);
if($reg_parts){
$country = $reg_parts['country'];
$city = $reg_parts['city'];
$address = $reg_parts['reg_path'];
}
}
$reg_path = DJClassifiedsRegion::getParentPath($item->region_id,1);
}
$theme = $par->get('theme','default');
if($cat_theme){
$this->_addPath('template', JPATH_ROOT.'/components/com_djclassifieds/themes/'.$cat_theme.'/views/item');
$theme = $cat_theme;
}
DJClassifiedsTheme::includeCSSfiles($theme);
DJClassifiedsTheme::includeCalendarScripts();
DJClassifiedsTheme::includeMapsScript($par);
JHTML::_('bootstrap.tooltip');
\Joomla\CMS\HTML\HTMLHelper::_('bootstrap.modal'); // show_in_modal fields
$model->updateLatestViewed($item->id);
$this->_prepareDoc($item, $canonical_link, $category, $cat_path, $region, $reg_path, $item_images, $par);
if($par->get('show_print_icon','0')){
$document->addStyleDeclaration('.contentpane.modal #dj-classifieds .print_icon,.contentpane.modal #dj-classifieds .button{display:none;}.contentpane.modal #dj-classifieds a[href]:after {content: none !important;}');
$this->print_url = clone JURI::getInstance();
$this->print_url->setVar('tmpl','component');
}
$this->highest_bid = null;
$this->bid_active = null;
$this->min_bid = null;
if($par->get('auctions','0') && $item->auction){
$item->date_exp = DJClassifiedsAuction::auctionAutoExtend($item, $bids, $par);
$this->highest_bid = $model->getHighestBid($item->id);
$this->bid_active = DJClassifiedsAuction::isBidActive($item, $bids);
$this->min_bid = $item->auction_assist ? $model->getUserMaxBid($item->id, $user->id) : $model->getMinBid($item, $bids);
}
if($par->get('show_video','0') && $item->video){
$this->video_links = DJClassifiedsImage::getVideoLinks($item->video, $par);
$this->video_link = $this->video_links ? $this->video_links[0] : null; // view backward compatibility
}
$this->contact_hide_on_start = $item->contact ? $model->isContactHiddenOnStart() : null; // view backward compatibility
if($item->published==2 || JFactory::getDate() >= $item->date_exp){
$par->set('ask_seller', 0);
}
$terms_link = '';
if($par->get('terms',1)>0 && $par->get('terms_article_id',0)>0){
$terms_link = $model->getTermsLink($par->get('terms_article_id',0), $par->get('terms',0)==2);
}
$privacy_policy_link = '';
if($par->get('privacy_policy',0)>0 && $par->get('privacy_policy_article_id',0)>0){
$privacy_policy_link = $model->getTermsLink($par->get('privacy_policy_article_id',0), $par->get('privacy_policy',0)==2);
}
/* plugins */
$app->triggerEvent('onDJClassifiedsPrepareProfile', array(&$profile, &$par, 'item'));
$app->triggerEvent('onDJClassifiedsPrepareItemAddress', array(&$item, &$address, &$par, 'item'));
$item->event = new stdClass();
$item->event->title = trim(implode("\n", $app->triggerEvent('onDJClassifiedsDisplayTitle', array(&$item, &$par, 'item'))));
$item->event->afterDJClassifiedsDisplayTitle = trim(implode("\n", $app->triggerEvent('onAfterDJClassifiedsDisplayTitle', array(&$item, &$par, 'item'))));
$item->event->beforeDJClassifiedsDisplayContact = trim(implode("\n", $app->triggerEvent('onBeforeDJClassifiedsDisplayContact', array(&$item, &$par, 'item'))));
$item->event->beforeDJClassifiedsDisplayContent = trim(implode("\n", $app->triggerEvent('onBeforeDJClassifiedsDisplayContent', array(&$item, &$par, 'item'))));
$item->event->afterDJClassifiedsDisplayContent = trim(implode("\n", $app->triggerEvent('onAfterDJClassifiedsDisplayContent', array(&$item, &$par, 'item'))));
$item->event->onAfterDJClassifiedsDisplayAdvertAuthor = trim(implode("\n", $app->triggerEvent('onAfterDJClassifiedsDisplayAdvertAuthor', array(&$item, &$par, 'item'))));
$item->event->onBeforeDJClassifiedsDisplayAdvertMap = trim(implode("\n", $app->triggerEvent('onBeforeDJClassifiedsDisplayAdvertMap', array(&$item, &$par, 'item'))));
$item->event->afterDJClassifiedsDisplayExtraFields = trim(implode("\n", $app->triggerEvent('onAfterDJClassifiedsDisplayExtraFields', array(&$item, &$par, 'item'))));
$item->event->onDJClassifiedsAccessContact = trim(implode("\n", $app->triggerEvent('onDJClassifiedsAccessContact', array(&$item, &$par, 'item'))));
$item->event->accessContactFormBtn = trim(implode("\n", $app->triggerEvent('onDJClassifiedsAccessContactFormBtn', array(&$item, &$par, 'item'))));
$item->event->accessContactForm = trim(implode("\n", $app->triggerEvent('onDJClassifiedsAccessContactForm', array(&$item, &$par, 'item'))));
if($par->get('ask_seller_in','0')=='2'){ // is ask form set to be displayed in profile only
$par->set('ask_seller','0');
}
DJClassifiedsSEO::setSiteNameInPageTitle();
$this->page_heading = DJClassifiedsSEO::getPageHeading($par);
$this->show_loc = ($par->get('show_regions','1') && $address) || ($par->get('show_address','1') && $item->address) || ($par->get('show_postcode','0') && $item->post_code) || (($par->get('show_googlemap','0')=='1' || $par->get('show_googlemap','0')=='2') && floatval($item->latitude) && floatval($item->longitude)) || $item->event->onBeforeDJClassifiedsDisplayAdvertMap;
$this->item = $item;
$this->item_images = $item_images;
$this->item_options = null; // backward compatibility
$this->fields = $fields;
$this->fields_contact = $fields_contact;
$this->country = $country;
$this->city = $city;
$this->address = $address;
$this->main_cat_id = $main_cat_id;
$this->item_payments = $item_payments;
$this->category = $category;
$this->profile = $profile;
$this->theme = $theme;
$this->bids = $bids;
$this->canonical_link = $canonical_link;
$this->dispatcher = new DJClassifiedsDispatcher(); // backward compatibility
$this->terms_link = $terms_link;
$this->privacy_policy_link = $privacy_policy_link;
$this->cat_path_cl = $cat_path_cl;
$this->ask_form_active = ($par->get('ask_seller_type','0') == '1' || $user->id) ? true : false;
$this->abuse_form_active = ($par->get('abuse_reporting_type','0') == '1' || $user->id) ? true : false;
$this->par = $par;
if(JPluginHelper::isEnabled('system', 'wbamp') && plgSystemWbamp::isAmpPage()){
$this->setLayout('amp');
parent::display($tpl);
}elseif($warning18 && !isset($_COOKIE["djcf_warning18"]) && (!$user->id || $item->user_id != $user->id)){
$this->warning18_link = $par->get('restriction_18_art_id', 0) ? $model->getTermsLink($par->get('restriction_18_art_id',0), $par->get('restriction_18_art',0)==2) : '';
parent::display('terms');
}else{
parent::display($tpl);
}
}
}