示例#1
0
 function __construct($app)
 {
     # Get ip address
     $this->ipaddress = s2GetIpAddress();
     $this->app = $app;
     # Load models
     $this->__initModels();
     parent::__construct();
 }
示例#2
0
 function displayCode()
 {
     App::import('Vendor', 'captcha' . DS . 'captcha_pi');
     $vals = array('word' => '', 'img_path' => S2_CMS_CACHE, 'img_url' => S2_CMS_CACHE_URL, 'font_path' => 'texb.ttf', 'img_width' => '100', 'img_height' => 30, 'expiration' => 3600);
     $captcha = create_captcha($vals);
     $query = "INSERT INTO #__jreviews_captcha (captcha_time,word,ip_address)" . "\n VALUES ('{$captcha['time']}','{$captcha['word']}','" . s2GetIpAddress() . "')";
     $this->_db->setQuery($query);
     $this->_db->query();
     return $captcha;
 }
示例#3
0
 function __construct($app)
 {
     global $Itemid, $mosConfig_sef, $mosConfig_lang;
     cmsFramework::init($this);
     if (isset($this->xajax) && $this->xajax == true) {
         $this->loadXajax();
     }
     /****************** THIS BLOCK CAN PROBABLY BE DELETED ******************/
     $this->language = $mosConfig_lang;
     $this->itemid = $Itemid;
     $this->sef = $mosConfig_sef;
     /****************** THIS BLOCK CAN PROBABLY BE DELETED ******************/
     # Get ip address
     $this->ipaddress = s2GetIpAddress();
     $this->app = $app;
     # Load models
     $this->__initModels();
     parent::__construct();
 }
 function listings()
 {
     // Initialize variables
     $id = Sanitize::getInt($this->params, 'id');
     $option = Sanitize::getString($this->params, 'option');
     $view = Sanitize::getString($this->params, 'view');
     $menu_id = Sanitize::getString($this->params, 'Itemid');
     // Read params
     $cat_id = '';
     $criteria_ids = '';
     $in_detail_view = false;
     $detail_view = 1;
     $dir_id = Sanitize::getString($this->params, 'dir');
     $section_id = Sanitize::getString($this->params, 'section');
     $cat_id = Sanitize::getString($this->params, 'cat');
     $extension = 'com_content';
     $custom_where = null;
     $custom_fields = array();
     $click2search_auto = false;
     $cache = 0;
     $radius = 0;
     $mode = 0;
     if (isset($this->params['module'])) {
         // Read module parameters
         $click2search_auto = Sanitize::getBool($this->params['module'], 'click2search_auto', false);
         $custom_where = Sanitize::getString($this->params['module'], 'custom_where');
         $filter = Sanitize::getString($this->params['module'], 'filter');
         $detail_view = Sanitize::getString($this->params['module'], 'detail_view', 1);
         $dir_id = Sanitize::getString($this->params['module'], 'dir');
         $section_id = Sanitize::getString($this->params['module'], 'section');
         $cat_id = Sanitize::getString($this->params['module'], 'category');
         $listing_id = Sanitize::getString($this->params['module'], 'listing');
         $criteria_ids = Sanitize::getString($this->params['module'], 'criteria');
         $limit_results = Sanitize::getInt($this->params['module'], 'limit_results');
         $mode = Sanitize::getInt($this->params['module'], 'mode', 0);
         $custom_fields = str_replace(" ", "", Sanitize::getString($this->Config, 'geomaps.infowindow_fields'));
         $custom_fields = $custom_fields != '' ? explode(",", $custom_fields) : array();
         /**
          * 0 - Normal
          * 1 - GeoTargeting
          * 2 - Custom center and zoom
          */
         $radius = Sanitize::getInt($this->params['module'], 'radius');
         $cache = $mode == 1 ? 0 : Sanitize::getInt($this->params['module'], 'cache_map');
         $custom_lat = Sanitize::getFloat($this->params['module'], 'custom_lat');
         $custom_lon = Sanitize::getFloat($this->params['module'], 'custom_lon');
         if ($mode == 2 && ($custom_lat == 0 || $custom_lon == 0)) {
             echo __t("You selected the Custom Center mode, but did not specify the coordinates.");
             return;
         }
     }
     # Prevent sql injection
     $token = Sanitize::getString($this->params, 'token');
     $tokenMatch = 0 === strcmp($token, cmsFramework::formIntegrityToken($this->params, array('module', 'module_id', 'form', 'data'), false));
     $filters = $listing_id != '' || $dir_id != '' || $section_id != '' || $cat_id != '';
     if (!$filters && $id > 0 && 'article' == $view && 'com_content' == $option) {
         $sql = "SELECT catid FROM #__content WHERE id = " . $id;
         $this->_db->setQuery($sql);
         $cat_id_host_page = $this->_db->loadResult();
         if (!empty($cat_id_host_page) && $this->Category->isJreviewsCategory($cat_id_host_page)) {
             $in_detail_view = true;
             $cat_id = $cat_id_host_page;
         }
     }
     $detail_view = $this->params['module']['detail_view'] = (int) ($detail_view && $in_detail_view);
     # Custom WHERE
     $tokenMatch and $custom_where and $conditions[] = $custom_where;
     if ($click2search_auto && isset($this->params['tag'])) {
         $field = 'jr_' . Sanitize::getString($this->params['tag'], 'field');
         $value = Sanitize::getString($this->params['tag'], 'value');
         $query = "SELECT Field.type FROM #__jreviews_fields AS Field WHERE Field.name = " . $this->quote($field);
         $this->_db->setQuery($query);
         $type = $this->_db->loadResult();
         if (in_array($type, array('select', 'selectmultiple', 'checkboxes', 'radiobuttons'))) {
             $conditions[] = "Field.{$field} LIKE " . $this->quoteLike('*' . $value . '*');
         } else {
             $conditions[] = "Field.{$field} = " . $this->quote($value);
         }
     }
     # Category auto detect
     if (isset($this->params['module']) && Sanitize::getInt($this->params['module'], 'cat_auto') && $extension == 'com_content') {
         $ids = CommonController::_discoverIDs($this);
         extract($ids);
     }
     $autodetect = compact('dir_id', 'section_id', 'cat_id');
     // Check for cached version if cache enabled
     if ($cache) {
         $params = array();
         foreach ($this->params as $key => $value) {
             if ((!is_array($value) || $key == 'module') && !in_array($key, array('page', 'limit', 'order', 'Itemid'))) {
                 $params[$key] = $value;
             }
         }
         $cache_key = array_merge($params, $autodetect, Sanitize::getVar($this->params, 'tag', array()));
         $json_filename = 'geomaps_' . md5(serialize($cache_key)) . '.json';
         $json_data = S2Cache::read($json_filename);
         if ($json_data && $json_data != '') {
             $this->set('json_data', $json_data);
             S2Cache::write($json_filename, $json_data);
             return $this->render('modules', 'geomaps');
         }
     }
     $this->Listing->fields = array('Listing.id AS `Listing.listing_id`', 'Listing.title AS `Listing.title`', 'Listing.images AS `Listing.images`', 'CASE WHEN CHAR_LENGTH(Listing.alias) THEN Listing.alias ELSE "" END AS `Listing.slug`', 'Category.id AS `Listing.cat_id`', 'CASE WHEN CHAR_LENGTH(Category.alias) THEN Category.alias ELSE Category.title END AS `Category.slug`', 'Listing.sectionid AS `Listing.section_id`', 'JreviewsCategory.criteriaid AS `Criteria.criteria_id`', 'JreviewsCategory.dirid AS `Directory.dir_id`', 'JreviewsCategory.marker_icon AS `Geomaps.icon`', 'Field.featured AS `Listing.featured`', 'Totals.user_rating AS `Review.user_rating`', 'Totals.user_rating_count AS `Review.user_rating_count`', 'Totals.editor_rating AS `Review.editor_rating`', 'Totals.editor_rating_count AS `Review.editor_rating_count`', "Field.{$this->jr_lat} `Geomaps.lat`", "Field.{$this->jr_lon} `Geomaps.lon`", 'ListingType.state AS `Criteria.state`', 'ListingType.config AS `ListingType.config`');
     if ($custom_lon != '' and $custom_lat != '') {
         $this->set('CustomCenter', array('lon' => $custom_lon, 'lat' => $custom_lat));
     }
     // Geo Targeting OR Custom Center modes
     if ($mode == 1 || $mode == 2) {
         if ($mode == 1) {
             $ch = curl_init();
             curl_setopt($ch, CURLOPT_URL, 'http://www.geoplugin.net/php.gp?ip=' . s2GetIpAddress());
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
             curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
             $geoData = unserialize(curl_exec($ch));
             curl_close($ch);
             if (!empty($geoData) && isset($geoData['geoplugin_latitude']) && $geoData['geoplugin_latitude'] != '' && $geoData['geoplugin_longitude'] != '') {
                 $center = array('lon' => $geoData['geoplugin_longitude'], 'lat' => $geoData['geoplugin_latitude']);
             }
             $this->set('geoLocation', $geoData);
         }
         if ($mode == 2) {
             $center = array('lon' => $custom_lon, 'lat' => $custom_lat);
         }
         if (!empty($center) && $radius > 0) {
             $distanceIn = Sanitize::getString($this->Config, 'geomaps.radius_metric', 'mi');
             $degreeDistance = $distanceIn == 'mi' ? 69.172 : 40076 / 360;
             // Send center coordinates to theme
             $this->set('GeomapsCenter', $center);
             $lat_range = $radius / $degreeDistance;
             $lon_range = $radius / abs(cos($center['lat'] * pi() / 180) * $degreeDistance);
             $min_lat = $center['lat'] - $lat_range;
             $max_lat = $center['lat'] + $lat_range;
             $min_lon = $center['lon'] - $lon_range;
             $max_lon = $center['lon'] + $lon_range;
             $squareArea = "`Field`.{$this->jr_lat} BETWEEN {$min_lat} AND {$max_lat} AND `Field`.{$this->jr_lon} BETWEEN {$min_lon} AND {$max_lon}";
             $conditions[] = $squareArea;
         }
     }
     // Create marker_icons array
     $marker_icons = array();
     $icon_fields = array();
     $field_images = array();
     $query = "SELECT DISTINCT marker_icon FROM #__jreviews_categories WHERE marker_icon != ''";
     $this->_db->setQuery($query);
     $icon_rows = $this->_db->loadAssocList();
     foreach ($icon_rows as $icons) {
         $icon = (array) json_decode($icons['marker_icon']);
         if ($icon['field'] != '') {
             $icon_fields[$icon['field']] = "'" . $icon['field'] . "'";
         }
     }
     if (!empty($icon_fields)) {
         foreach ($icon_fields as $field_key => $field) {
             if (substr($field_key, 0, 3) == 'jr_') {
                 $this->Listing->fields[] = "Field.{$field_key} AS `Field.{$field_key}`";
             }
         }
     }
     if (!empty($custom_fields)) {
         foreach ($custom_fields as $field) {
             $this->Listing->fields[] = "Field.{$field} AS `Field.{$field}`";
         }
     }
     $this->Listing->joins = array("LEFT JOIN #__categories AS Category ON Listing.catid = Category.id", 'ParentCategory' => "LEFT JOIN #__categories AS ParentCategory ON Category.lft BETWEEN ParentCategory.lft AND ParentCategory.rgt", "LEFT JOIN #__jreviews_listing_totals AS Totals ON Totals.listing_id = Listing.id AND Totals.extension = 'com_content'", "LEFT JOIN #__jreviews_content AS `Field` ON Field.contentid = Listing.id", "INNER JOIN #__jreviews_categories AS JreviewsCategory ON Listing.catid = JreviewsCategory.id AND JreviewsCategory.`option` = 'com_content'", "LEFT JOIN #__jreviews_criteria AS ListingType ON JreviewsCategory.criteriaid = ListingType.id", "LEFT JOIN #__jreviews_directories AS Directory ON JreviewsCategory.dirid = Directory.id");
     // Don't regroup the results by model name keys to save time
     $this->Listing->primaryKey = false;
     # Set conditionals based on configuration parameters
     if ($detail_view) {
         $conditions[] = 'Listing.id = ' . $id;
     }
     if (!empty($cat_id)) {
         $conditions[] = $this->cmsVersion == CMS_JOOMLA15 ? 'Listing.catid IN (' . cleanIntegerCommaList($cat_id) . ')' : 'ParentCategory.id IN (' . cleanIntegerCommaList($cat_id) . ')';
     }
     if ($this->cmsVersion == CMS_JOOMLA15) {
         unset($this->Listing->joins['ParentCategory']);
     }
     empty($cat_id) and !empty($section_id) and $conditions[] = 'Listing.sectionid IN (' . cleanIntegerCommaList($section_id) . ')';
     empty($cat_id) and !empty($dir_id) and $conditions[] = 'JreviewsCategory.dirid IN (' . cleanIntegerCommaList($dir_id) . ')';
     empty($cat_id) and !empty($criteria_id) and $conditions[] = 'JreviewsCategory.criteriaid IN (' . cleanIntegerCommaList($criteria_id) . ')';
     if ($listing_id) {
         $conditions[] = 'Listing.id IN (' . $listing_id . ')';
     }
     if ($filter == 'featured' && !$detail_view) {
         $conditions[] = 'Field.featured = 1';
     }
     $conditions[] = "Field.{$this->jr_lat} <> ''";
     $conditions[] = "Field.{$this->jr_lon} <> ''";
     $conditions = array_merge($conditions, array('Listing.state = 1', '( Listing.publish_up = "' . NULL_DATE . '" OR DATE(Listing.publish_up) <= DATE("' . _CURRENT_SERVER_TIME . '") )', '( Listing.publish_down = "' . NULL_DATE . '" OR DATE(Listing.publish_down) >= DATE("' . _CURRENT_SERVER_TIME . '") )'));
     if ($this->cmsVersion == CMS_JOOMLA15) {
         //                    $conditions[] = 'Section.access <= ' . $this->Access->getAccessId();
         $conditions[] = 'Category.access <= ' . $this->Access->getAccessId();
         $conditions[] = 'Listing.access <= ' . $this->Access->getAccessId();
     } else {
         $conditions[] = 'Category.access IN (' . $this->Access->getAccessLevels() . ')';
         $conditions[] = 'Listing.access IN (' . $this->Access->getAccessLevels() . ')';
     }
     // Paid Listings - add plan cat id
     isset($this->PaidListings) and $this->PaidListings->applyBeforeFindListingChanges($this->Listing);
     $listings = $this->Listing->findAll(array('conditions' => $conditions, 'limit' => $limit_results), array());
     $custom_fields = array_filter(array_merge($custom_fields, array_keys($icon_fields)));
     $fieldOptionValues = array();
     // Extract custom field values to avoid loading all options for each fields
     // It's a trade-off between that and doing a foreach on all listings
     foreach ($listings as $key => $row) {
         $listings[$key]['Criteria']['state'] = $row['Criteria.state'];
         $listings[$key]['ListingType']['config'] = json_decode($row['ListingType.config'], true);
         unset($listings[$key]['Criteria.state'], $listings[$key]['ListingType.config']);
         foreach ($custom_fields as $field) {
             $optionValue = Sanitize::getVar($row, 'Field.' . $field);
             if ($optionValue != '' && $optionValue != '**') {
                 $fieldOptionValues = array_merge($fieldOptionValues, array_filter(explode('*', $optionValue)));
             }
         }
     }
     $fields = $this->Field->getFields($custom_fields, 'listing', $fieldOptionValues);
     $json_data = $this->Geomaps->makeJsonObject($listings, $fields, $this->params['module']);
     $this->set('json_data', $json_data);
     if ($cache) {
         S2Cache::write($json_filename, $json_data);
     }
     return $this->render('modules', 'geomaps');
 }
 function listings()
 {
     // Initialize variables
     $id = Sanitize::getInt($this->params, 'id');
     $option = Sanitize::getString($this->params, 'option');
     $view = Sanitize::getString($this->params, 'view');
     $task = Sanitize::getString($this->params, 'task');
     $menu_id = Sanitize::getString($this->params, 'Itemid');
     // Read params
     $cat_id = '';
     $criteria_ids = '';
     $detail_view = 1;
     $dir_id = Sanitize::getString($this->params, 'dir');
     $section_id = Sanitize::getString($this->params, 'section');
     $cat_id = Sanitize::getString($this->params, 'cat');
     $extension = 'com_content';
     $custom_where = null;
     $custom_fields = array();
     $click2search_auto = false;
     $cache = 0;
     $radius = 0;
     $mode = 0;
     $fishingmap = 0;
     $this->set('listing_id', $id);
     $extracoords = array();
     if (isset($this->params['module'])) {
         // Read module parameters
         $click2search_auto = Sanitize::getBool($this->params['module'], 'click2search_auto', false);
         $custom_where = Sanitize::getString($this->params['module'], 'custom_where');
         $filter = Sanitize::getString($this->params['module'], 'filter');
         $detail_view = Sanitize::getString($this->params['module'], 'detail_view', 1);
         $dir_id = Sanitize::getString($this->params['module'], 'dir');
         $section_id = Sanitize::getString($this->params['module'], 'section');
         $cat_id = Sanitize::getString($this->params['module'], 'category');
         $listing_id = Sanitize::getString($this->params['module'], 'listing');
         $criteria_ids = Sanitize::getString($this->params['module'], 'criteria');
         $custom_fields = Sanitize::getString($this->params['module'], 'custom_fields', '');
         $custom_fields = $custom_fields != '' ? explode(',', str_replace(' ', '', $custom_fields)) : array();
         $limit_results = Sanitize::getInt($this->params['module'], 'limit_results');
         $mode = Sanitize::getInt($this->params['module'], 'mode', 0);
         /**
          * 0 - Normal
          * 1 - GeoTargeting
          * 2 - Custom center and zoom
          */
         $radius = Sanitize::getInt($this->params['module'], 'radius');
         $cache = $mode == 1 ? 0 : Sanitize::getInt($this->params['module'], 'cache_map');
         $custom_lat = Sanitize::getFloat($this->params['module'], 'custom_lat');
         $custom_lon = Sanitize::getFloat($this->params['module'], 'custom_lon');
         if ($mode == 2 && ($custom_lat == 0 || $custom_lon == 0)) {
             echo __t("You selected the Custom Center mode, but did not specify the coordinates.");
             return;
         }
         // Added for Hooked
         $extracoords = $this->params['module']['extracoords'];
         //$extracoords = "";
         $fishingmap = Sanitize::getInt($this->params['module'], 'fishingmap', 0);
     }
     $in_detail_view = $id > 0 && ('article' == $view || 'view' == $task) && 'com_content' == $option;
     $detail_view = $this->params['module']['detail_view'] = $detail_view && $in_detail_view;
     # Custom WHERE
     if ($custom_where) {
         $conditions[] = $custom_where;
     }
     if ($click2search_auto && isset($this->params['tag'])) {
         $field = 'jr_' . Sanitize::getString($this->params['tag'], 'field');
         $value = Sanitize::getString($this->params['tag'], 'value');
         $query = "SELECT Field.type FROM #__jreviews_fields AS Field WHERE Field.name = " . $this->quote($field);
         $this->_db->setQuery($query);
         $type = $this->_db->loadResult();
         if (in_array($type, array('select', 'selectmultiple', 'checkboxes', 'radiobuttons'))) {
             $conditions[] = "Field.{$field} LIKE " . $this->quoteLike('*' . $value . '*');
         } else {
             $conditions[] = "Field.{$field} = " . $this->quote($value);
         }
     }
     # Category auto detect
     if (isset($this->params['module']) && Sanitize::getInt($this->params['module'], 'cat_auto') && $extension == 'com_content') {
         // Only works for core articles
         switch ($option) {
             case 'com_jreviews':
                 # Get url params for current controller/action
                 $url = Sanitize::getString($this->passedArgs, 'url');
                 $route['url']['url'] = $url;
                 $route = S2Router::parse($route);
                 //                    $route = $route['url'];
                 $dir_id = Sanitize::getString($route, 'dir');
                 $section_id = Sanitize::getString($route, 'section');
                 $cat_id = Sanitize::getString($route, 'cat');
                 $criteria_ids = Sanitize::getString($route, 'criteria');
                 if ($cat_id != '') {
                     $category_ids = $this->makeParamsUsable($cat_id);
                     $category_ids = explode(",", $category_ids);
                     $this->cleanArray($category_ids);
                     $cat_id = implode(",", $category_ids);
                 } elseif ($section_id != '') {
                     $cat_id = $this->sectionToCat($section_id);
                 } elseif ($criteria_ids != '') {
                     // check criteriaids {
                     $criteriaids_url = $this->makeParamsUsable($criteria_ids);
                     $cat_id = $this->criteriaToCat($criteria_ids);
                 } else {
                     //Discover the params from the menu_id
                     $params = $this->Menu->getMenuParams($menu_id);
                     $dir_id = Sanitize::getString($params, 'dirid');
                     $cat_id = Sanitize::getString($params, 'catid');
                     $section_id = Sanitize::getString($params, 'sectionid');
                 }
                 break;
             case 'com_content':
                 if ('article' == $view || 'view' == $task) {
                     $sql = "SELECT catid FROM #__content WHERE id = " . $id;
                     $this->_db->setQuery($sql);
                     $cat_id = $this->_db->loadResult();
                 } elseif ($view == "section") {
                     $cat_id = $this->sectionToCat($id);
                 } elseif ($view == "category") {
                     $cat_id = $id;
                 }
                 break;
             default:
                 //                    $cat_id = null; // Catid not detected because the page is neither content nor jreviews
                 break;
         }
     }
     $autodetect = compact('dir_id', 'section_id', 'cat_id');
     // Check for cached version if cache enabled
     if ($cache) {
         $params = array();
         foreach ($this->params as $key => $value) {
             if ((!is_array($value) || $key == 'module') && !in_array($key, array('page', 'limit', 'order', 'Itemid'))) {
                 $params[$key] = $value;
             }
         }
         $cache_key = array_merge($params, $autodetect, Sanitize::getVar($this->params, 'tag', array()));
         $json_filename = 'geomaps_' . md5(serialize($cache_key)) . '.json';
         $json_data = S2Cache::read($json_filename);
         if ($json_data && $json_data != '') {
             $this->set('json_data', $json_data);
             S2Cache::write($json_filename, $json_data);
             return $this->render('modules', 'geomaps');
         }
     }
     $this->Listing->fields = array('Listing.id AS `Listing.listing_id`', 'Listing.title AS `Listing.title`', 'Listing.images AS `Listing.images`', 'CASE WHEN CHAR_LENGTH(Listing.alias) THEN Listing.alias ELSE "" END AS `Listing.slug`', 'Category.id AS `Listing.cat_id`', 'CASE WHEN CHAR_LENGTH(Category.alias) THEN Category.alias ELSE Category.title END AS `Category.slug`', 'Listing.sectionid AS `Listing.section_id`', 'JreviewsCategory.criteriaid AS `Criteria.criteria_id`', 'JreviewsCategory.dirid AS `Directory.dir_id`', 'Field.featured AS `Listing.featured`', 'Totals.user_rating AS `Review.user_rating`', 'Totals.user_rating_count AS `Review.user_rating_count`', 'Totals.editor_rating AS `Review.editor_rating`', 'Totals.editor_rating_count AS `Review.editor_rating_count`', "Field.{$this->jr_lat} `Geomaps.lat`", "Field.{$this->jr_lon} `Geomaps.lon`", 'JreviewsCategory.marker_icon AS `Geomaps.icon`');
     if ($fishingmap) {
         $this->Listing->fields[] = 'GROUP_CONCAT(Related.id2) AS `Listing.relations`';
     }
     // Geo Targeting OR Custom Center modes
     if ($mode == 1 || $mode == 2) {
         if ($mode == 1) {
             $ch = curl_init();
             curl_setopt($ch, CURLOPT_URL, 'http://www.geoplugin.net/php.gp?ip=' . s2GetIpAddress());
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
             curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
             $geoData = unserialize(curl_exec($ch));
             curl_close($ch);
             if (!empty($geoData) && $geoData['geoplugin_latitude'] != '' && $geoData['geoplugin_longitude'] != '') {
                 $center = array('lon' => $geoData['geoplugin_longitude'], 'lat' => $geoData['geoplugin_latitude']);
             }
             $this->set('geoLocation', $geoData);
         }
         if ($mode == 2) {
             $center = array('lon' => $custom_lon, 'lat' => $custom_lat);
         }
         if (!empty($center) && $radius > 0) {
             $distanceIn = Sanitize::getString($this->Config, 'geomaps.radius_metric', 'mi');
             $degreeDistance = $distanceIn == 'mi' ? 69.172 : 40076 / 360;
             // Send center coordinates to theme
             $this->set('GeomapsCenter', $center);
             $lat_range = $radius / $degreeDistance;
             $lon_range = $radius / abs(cos($center['lat'] * pi() / 180) * $degreeDistance);
             $min_lat = $center['lat'] - $lat_range;
             $max_lat = $center['lat'] + $lat_range;
             $min_lon = $center['lon'] - $lon_range;
             $max_lon = $center['lon'] + $lon_range;
             $squareArea = "`Field`.{$this->jr_lat} BETWEEN {$min_lat} AND {$max_lat} AND `Field`.{$this->jr_lon} BETWEEN {$min_lon} AND {$max_lon}";
             // Added for Hooked
             if ($extracoords) {
                 $squareArea = "((" . $squareArea . ")";
                 foreach ($extracoords as $extra) {
                     $e_lat = $extra->y;
                     $e_lon = $extra->x;
                     $lon_range = $radius / abs(cos($e_lat * pi() / 180) * $degreeDistance);
                     $min_lat = $e_lat - $lat_range;
                     $max_lat = $e_lat + $lat_range;
                     $min_lon = $e_lon - $lon_range;
                     $max_lon = $e_lon + $lon_range;
                     $squareArea .= " OR (`Field`.{$this->jr_lat} BETWEEN {$min_lat} AND {$max_lat} AND `Field`.{$this->jr_lon} BETWEEN {$min_lon} AND {$max_lon})";
                 }
                 $squareArea .= ")";
             }
             $conditions[] = $squareArea;
         }
     }
     // Create marker_icons array
     $marker_icons = array();
     $icon_fields = array();
     $field_images = array();
     $query = "SELECT DISTINCT marker_icon FROM #__jreviews_categories WHERE marker_icon != ''";
     $this->_db->setQuery($query);
     $icon_rows = $this->_db->loadAssocList();
     foreach ($icon_rows as $icons) {
         $icon = (array) json_decode($icons['marker_icon']);
         if ($icon['field'] != '') {
             $icon_fields[$icon['field']] = "'" . $icon['field'] . "'";
         }
     }
     if (!empty($icon_fields)) {
         foreach ($icon_fields as $field_key => $field) {
             $this->Listing->fields[] = "Field.{$field_key} AS `Field.{$field_key}`";
         }
     }
     if (!empty($custom_fields)) {
         foreach ($custom_fields as $field) {
             $this->Listing->fields[] = "Field.{$field} AS `Field.{$field}`";
         }
     }
     $this->Listing->joins = array("LEFT JOIN #__categories AS Category ON Listing.catid = Category.id", "LEFT JOIN #__jreviews_listing_totals AS Totals ON Totals.listing_id = Listing.id AND Totals.extension = 'com_content'", "LEFT JOIN #__jreviews_content AS `Field` ON Field.contentid = Listing.id", "INNER JOIN #__jreviews_categories AS JreviewsCategory ON Listing.catid = JreviewsCategory.id AND JreviewsCategory.`option` = 'com_content'", "LEFT JOIN #__jreviews_directories AS Directory ON JreviewsCategory.dirid = Directory.id");
     if ($fishingmap) {
         $this->Listing->joins[] = "LEFT JOIN #__relate_listings AS Related ON Related.id1 = Listing.id";
     }
     // Don't regroup the results by model name keys to save time
     $this->Listing->primaryKey = false;
     # Set conditionals based on configuration parameters
     if ($detail_view) {
         $conditions[] = 'Listing.id = ' . $id;
     }
     if ($dir_id) {
         $conditions[] = 'JreviewsCategory.dirid IN (' . $dir_id . ')';
     }
     if ($section_id) {
         $conditions[] = 'Listing.sectionid IN (' . $section_id . ')';
     }
     if ($cat_id) {
         $conditions[] = 'Listing.catid IN (' . $cat_id . ')';
     }
     if ($listing_id) {
         $conditions[] = 'Listing.id IN (' . $listing_id . ')';
     }
     if ($filter == 'featured' && !$detail_view) {
         $conditions[] = 'Field.featured = 1';
     }
     $conditions[] = "Field.{$this->jr_lat} <> ''";
     $conditions[] = "Field.{$this->jr_lon} <> ''";
     $conditions[] = 'Listing.state = 1';
     if ($fishingmap) {
         $this->Listing->group = array('Listing.id');
     }
     // Paid Listings - add plan cat id
     isset($this->PaidListings) and $this->PaidListings->applyBeforeFindListingChanges($this->Listing);
     $listings = $this->Listing->findAll(array('conditions' => $conditions, 'limit' => $limit_results), array());
     $custom_fields = array_filter(array_merge($custom_fields, array_keys($icon_fields)));
     $fields = $this->Field->getFields($custom_fields);
     $json_data = $this->Geomaps->makeJsonObject($listings, $fields, $this->params['module']);
     $this->set('json_data', $json_data);
     if ($cache) {
         S2Cache::write($json_filename, $json_data);
     }
     return $this->render('modules', 'geomaps');
 }
示例#6
0
 function save(&$data, $Access, $validFields = array())
 {
     $Config = Configure::read('JreviewsSystem.Config');
     $User =& cmsFramework::getUser();
     $userid = $User->id;
     $this->valid_fields = $validFields;
     # Check if this is a new review or an updated review
     $isNew = (int) $data['Review']['id'] > 0 ? false : true;
     $review_id = (int) $data['Review']['id'];
     $output = array("err" => '', "reviewid" => '', "author" => 0);
     # If new then assign the logged in user info. Zero if it's a guest
     if ($isNew) {
         # Validation passed, so proceed with saving review to DB
         $data['Review']['ipaddress'] = s2GetIpAddress();
         $data['Review']['userid'] = $userid;
         $data['Review']['created'] = gmdate('Y-m-d H:i:s');
     }
     # Edited review
     if (!$isNew) {
         appLogMessage('*********Load current info because we are editing the review', 'database');
         // Load the review info
         $row = $this->findRow(array('fields' => array('Rating.rating_id AS `Rating.rating_id`'), 'conditions' => array('Review.id = ' . $review_id)), array());
         $data['ratings_col_empty'] = !Sanitize::getInt($row['Rating'], 'rating_id') && Sanitize::getString($row['Rating'], 'ratings', '') == '';
         // Used in afterFind
         // Capture ip address of reviewer
         if ($userid == $row['User']['user_id']) {
             $data['Review']['ipaddress'] = s2GetIpAddress();
         }
         $data['Review']['modified'] = gmdate('Y-m-d H:i:s');
         // Capture last modified date
         $data['Review']['author'] = $row['Review']['editor'];
     }
     # Complete user info for new reviews
     if ($isNew && $userid > 0) {
         $data['Review']['name'] = $User->name;
         $data['Review']['username'] = $User->username;
         $data['Review']['email'] = $User->email;
     } elseif (!$isNew && !$Access->isManager()) {
         unset($data['Review']['name']);
         unset($data['Review']['username']);
         unset($data['Review']['email']);
     }
     if (!defined('MVC_FRAMEWORK_ADMIN')) {
         $data['Review']['published'] = (int) (!($Access->moderateReview() && $isNew && !$data['Review']['author'] || $Config->moderation_editor_reviews && $isNew && $data['Review']['author'] || $Access->moderateReview() && $Config->moderation_review_edit && !$isNew && !$data['Review']['author'] || $Access->moderateReview() && $Config->moderation_editor_review_edit && !$isNew && $data['Review']['author']));
     }
     # Get criteria info    to process ratings
     appLogMessage('*******Get criteria info to process ratings', 'database');
     $CriteriaModel = ClassRegistry::getClass('CriteriaModel');
     $criteria = $CriteriaModel->findRow(array('conditions' => array('Criteria.id = ' . $data['Criteria']['id'])));
     // Complete review info with $criteria info
     $data = array_insert($data, $criteria);
     $data['new'] = $isNew ? 1 : 0;
     # Save standard review fields
     appLogMessage('*******Save standard review fields', 'database');
     $save = $this->store($data);
     if (!$save) {
         appLogMessage('*******There was a problem saving the review fields', 'database');
         $output['err'] = "There was a problem saving the review fields";
     }
     return $output;
 }