function addFavorite($results) { $listing_ids = array_keys($results); if (!isset($this->Config)) { App::import('Component', 'config', 'jreviews'); $this->Config = RegisterClass::getInstance('ConfigComponent'); } if ($this->Config->favorites_enable) { # Get favoured count $query = "\n SELECT \n content_id AS listing_id, count(*) AS favored FROM #__jreviews_favorites AS Favorite\n\t\t\t WHERE \n Favorite.content_id IN (" . implode(',', $listing_ids) . ")\n\t\t\t GROUP BY \n listing_id\n "; $this->_db->setQuery($query); $favored = $this->_db->loadAssocList('listing_id'); # Check if in user's favorites list if ($this->_user->id) { $query = "\n SELECT \n Favorite.user_id, Favorite.content_id AS listing_id\n\t\t\t\t FROM \n #__jreviews_favorites AS Favorite\n\t\t\t\t WHERE \n Favorite.content_id IN (" . implode(',', $listing_ids) . ")\n\t\t\t\t AND Favorite.user_id = " . $this->_user->id; $this->_db->setQuery($query); $my_favorite = $this->_db->loadAssocList('listing_id'); } foreach ($results as $key => $result) { if (isset($favored[$result['Listing']['listing_id']]['favored'])) { $results[$key]['Favorite']['favored'] = $favored[$result['Listing']['listing_id']]['favored']; } else { $results[$key]['Favorite']['favored'] = 0; } if (isset($my_favorite[$result['Listing']['listing_id']]['user_id'])) { $results[$key]['Favorite']['my_favorite'] = 1; } else { $results[$key]['Favorite']['my_favorite'] = 0; } } } return $results; }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images /* Very hard to implement when the content types each have their own separate table with different columns for images */ $imagePath = ''; $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true); } return $results; }
function startup(&$controller) { $this->inAdmin = defined('MVC_FRAMEWORK_ADMIN'); App::import('Helper', array('routes', 'html'), 'jreviews'); $this->Routes = RegisterClass::getInstance('RoutesHelper'); $this->Html = RegisterClass::getInstance('HtmlHelper'); $this->c =& $controller; }
function afterSave($status) { if ($status) { // Update vote count in review table App::import('Model', 'review', 'jreviews'); $Review = RegisterClass::getInstance('ReviewModel'); $Review->updateVoteHelpfulCount($this->data['Vote']['review_id'], $this->data['Vote']['vote_yes']); } }
function index() { $Session = RegisterClass::getInstance('MvcSession'); $module_id = Sanitize::getInt($this->params, 'module_id', Sanitize::getInt($this->data, 'module_id')); if (!isset($this->params['module'])) { $this->params['module'] = array(); } // For direct calls to the controller if ($this->ajaxRequest) { $this->params = $Session->get('module_params' . $module_id, null, S2Paths::get('jreviews', 'S2_CMSCOMP')); } else { srand((double) microtime() * 1000000); $this->params['rand'] = rand(); $Session->set('module_rand' . $module_id, $this->params['rand'], S2Paths::get('jreviews', 'S2_CMSCOMP')); $Session->set('module_params' . $module_id, $this->params, S2Paths::get('jreviews', 'S2_CMSCOMP')); } $this->viewSuffix = Sanitize::getString($this->params['module'], 'tmpl_suffix'); // Read the module parameters $img_width = Sanitize::getInt($this->params['module'], 'img_width', 50); $random_mode = Sanitize::getString($this->params['module'], 'random_mode', 'Random Users'); $favorites_mode = Sanitize::getString($this->params['module'], 'favorites_mode', 'Other users interested in {title}'); // Pagination $this->Community->limit = $this->module_limit; $this->Community->offset = $this->module_offset; # Get url params for current controller/action $url = Sanitize::getString($_REQUEST, 'url'); $route['url']['url'] = $url; $route['data'] = array(); $route = S2Router::parse($route, true, 'jreviews'); # Check if page is listing detail $detail = Sanitize::getString($route['url'], 'extension', 'com_content') == 'com_content' && isset($route['data']) && Sanitize::getString($route['data'], 'controller') == 'listings' && Sanitize::getString($route['data'], 'action') == 'detail' ? true : false; # Initialize variables $listing_id = $detail ? Sanitize::getInt($route, 'id') : Sanitize::getInt($this->params, 'id'); $option = Sanitize::getString($this->params, 'option'); $view = Sanitize::getString($this->params, 'view'); $task = Sanitize::getString($this->params, 'task'); $listing_title = ''; # Article auto-detect - only for com_content if ($detail || 'com_content' == $option && ('article' == $view || 'view' == $task)) { $query = "SELECT Listing.id, Listing.title FROM #__content AS Listing WHERE Listing.id = " . $listing_id; $this->_db->setQuery($query); $listing = current($this->_db->loadObjectList()); $listing_title = $listing->title; } else { $listing_id = null; } $profiles = $this->Community->getListingFavorites($listing_id, $this->_user->id, $this->params); $total = $this->Community->count; unset($this->Community->count); $this->set(array('profiles' => $profiles, 'listing_title' => $listing_title, 'total' => $total)); $page = $this->render('modules', 'favorite_cbusers'); if ($this->ajaxRequest) { return $this->ajaxResponse($page, false); } else { return $page; } }
function afterDelete($key, $values, $condition) { switch ($this->post['Discussion']['type']) { case 'review': App::import('Model', 'review', 'jreviews'); $Review = RegisterClass::getInstance('ReviewModel'); $Review->updatePostCount($this->post['Discussion']['review_id'], -1); break; } }
function &getInstance() { static $instance = array(); if (!isset($instance[0]) || !$instance[0]) { $instance[0] = new sef_jreviews(); require dirname(__FILE__) . DS . 'jreviews' . DS . 'framework.php'; App::import('Model', 'Menu', 'jreviews'); $instance[0]->__Menu =& RegisterClass::getInstance('MenuModel'); } return $instance[0]; }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $images = $result['Listing']['images']; unset($results[$key]['Listing']['images']); $results[$key]['Listing']['images'] = array(); $upload_dir = ''; // You can hard set an upload directory here and comment out the code below. e.g. ('/uploads') //dynamically pull the directory information if (!defined('RES_GENERAL_UPLOAD')) { // initialyze resource Controller, this will set the RES_GENERAL_UPLOAD constant require_once '..' . DS . 'administrator' . DS . 'components' . DS . 'com_resource' . DS . 'controllers' . DS . 'config.php'; ResControllerConfig::initialyze(); } $upload_dir = RES_GENERAL_UPLOAD; if ($images != '') { if (@file_exists($upload_dir . DS . 'picture' . DS . $result['Listing']['user'] . DS . 'thumbnail_blog' . DS . $images)) { $imagePath = $upload_dir . DS . 'picture' . DS . $result['Listing']['user'] . DS . 'thumbnail_blog' . DS . $images; } else { if (@file_exists($upload_dir . DS . 'picture' . DS . $result['Listing']['user'] . DS . $images)) { $imagePath = $upload_dir . DS . 'picture' . DS . $result['Listing']['user'] . DS . $images; } } } else { // Put a noimage path here? $imagePath = $upload_dir . DS . 'na.jpg'; // remember to put an na.jpg in your standard upload folder! } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true); } return $results; }
function afterFilter() { App::import('Helper', 'assets', 'jreviews'); $Assets = RegisterClass::getInstance('AssetsHelper'); $Assets->name = $this->name; $Assets->action = $this->action; $Assets->params = $this->params; $Assets->Access = $this->Access; $Assets->Config = $this->Config; $Assets->assetParams['review_fields'] = $this->review_fields; unset($this->review_fields); parent::afterFilter(); }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $imagePath = ''; $images = $this->getImage($result['Listing']['listing_id']); $results[$key]['Listing']['images'] = array(); if ($images != '') { if (@file_exists("media/com_hotproperty/images/thb/" . $images)) { $imagePath = "media/com_hotproperty/images/thb/" . $images; } elseif (@file_exists("components/com_hotproperty/img/thb/" . $images)) { // v0.9 $imagePath = "components/com_hotproperty/img/thb/" . $images; } } else { if (@file_exists('media/com_hotproperty/images/noimage_thb.png')) { // Put a noimage path here? $imagePath = "media/com_hotproperty/images/noimage_thb.png"; } elseif (@file_exists("components/com_hotproperty/img/thb/noimage.npg")) { // v0.9 $imagePath = "components/com_hotproperty/img/thb/noimage.npg"; } } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true); } return $results; }
function onProfileDisplay() { if (!file_exists($this->_path . DS . 'admin.jreviews.php')) { return JText::_('jReviews is not installed. Please contact site administrator.'); } else { $user = CFactory::getActiveProfile(); $userId = $user->id; $cacheSetting = $this->params->get('cache', 1) ? JApplication::getCfg('caching') : 0; # Load CSS stylesheets -- done here because when cache is on css is not loaded if ($cacheSetting) { # MVC initalization script if (!defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } require 'components' . DS . 'com_jreviews' . DS . 'jreviews' . DS . 'framework.php'; $cache_file = 'jreviews_config_' . md5(cmsFramework::getConfig('secret')); $Config =& S2Cache::read($cache_file); if (!is_object($Config)) { //Create config file $eParams['data']['controller'] = 'common'; $eParams['data']['action'] = 'index'; $Dispatcher = new S2Dispatcher('jreviews', false, true); $Dispatcher->dispatch($eParams); $Config =& S2Cache::read($cache_file); unset($Dispatcher); } App::import('Helper', 'html'); $Html =& RegisterClass::getInstance('HtmlHelper'); $Html->viewTheme = $Config->template; $Html->app = 'jreviews'; $Html->startup(); App::import('Helper', 'libraries', 'jreviews'); $Libraries =& RegisterClass::getInstance('LibrariesHelper'); $Html->css(array('theme', 'plugins', 'paginator')); $Html->js(array('jreviews', 'jquery' => 'jquery', 'jq.scrollable'), $Libraries->js()); } $cache =& JFactory::getCache('plgCommunityJreviews_myfavorites'); $cache->setCaching($cacheSetting); $callback = array('plgCommunityJreviews_myfavorites', '_getPage'); $contents = $cache->call($callback, $userId, $this->params, $cacheSetting); return $contents; } }
function afterFind($results) { if (empty($results) || defined('MVC_FRAMEWORK_ADMIN')) { # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); } return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; $result['Listing']['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($result); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $images = $result['Listing']['images']; unset($results[$key]['Listing']['images']); if ($images != '') { $imagePath = $images; } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true, 'skipthumb' => true); } return $results; }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $images = $result['Listing']['images']; unset($results[$key]['Listing']['images']); $results[$key]['Listing']['images'] = array(); if ($images != '') { if (@file_exists("images/com_sobi2/clients/" . $images)) { $imagePath = "images/com_sobi2/clients/" . $images; } else { $imagePath = "images/com_sobi2/clients/" . $images; } } else { // Put a noimage path here? $imagePath = ''; //"components/com_virtuemart/shop_image/product/" . $images; } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true); } return $results; }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); # Reformat image and criteria info foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images // Gets the src of the first image in the html code for the blog post $images = preg_match('/<img.*?src=([\'"])([^"\\1]+)\\1/i', $result['Listing']['summary'], $matches); $results[$key]['images'] = array(); $results[$key]['Listing']['images'] = array(); if ($images != '') { if (@file_exists($matches[2])) { $imagePath = $matches[2]; } } else { // Put a noimage path here? $imagePath = ''; //"components/com_virtuemart/shop_image/product/" . $images; } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true); } return $results; }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; $result['Listing']['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($result); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $imagePath = ''; $images = $result['Listing']['images']; $results[$key]['Listing']['images'] = array(); if ($images != '') { $imagePath = $images; } else { // Put a noimage path here? $imagePath = WWW_ROOT . 'components/com_resman/images/no_image_small.png'; //$images; } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'skipthumb' => true, 'basepath' => true); } return $results; }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); # Reformat image and criteria info foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; $results[$key][$this->name]['url'] = $this->listingUrl($results[$key]); if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $images = $result['Listing']['images']; unset($results[$key]['Listing']['images']); $results[$key]['Listing']['images'] = array(); if ($images != '' && @file_exists("components/com_ezrealty/ezrealty/th/" . $images)) { $imagePath = "components/com_ezrealty/ezrealty/th/" . $images; } else { // Put a noimage path here? $imagePath = "components/com_ezrealty/th/nothumb.gif"; } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true); } return $results; }
function JreviewsBuildRoute(&$query) { global $Menu; $segments = array(); if (isset($query['url'])) { $query_string = explode('/', $query['url']); // Properly urlencodes the jReviews parameters contained within the url parameter foreach ($query_string as $key => $param) { $query_string[$key] = urlencodeParam($param); } $query['url'] = implode('/', $query_string); $segments[0] = $query['url']; unset($query['url']); // Forces Joomla to use the menu alias for JReviews menus of type url instead of /component/jreviews if (isset($query['Itemid'])) { App::import('Model', 'menu', 'jreviews'); $MenuModel = RegisterClass::getInstance('MenuModel'); if (isset($MenuModel->menues[$query['Itemid']]) && $MenuModel->menues[$query['Itemid']]->componentid == 0) { $query['option'] = ''; } } } return $segments; }
function plgAfterSave(&$model) { $data = array(); App::import('Model', 'activity', 'jreviews'); App::import('Helper', 'routes', 'jreviews'); $Activity = new ActivityModel(); $Routes = RegisterClass::getInstance('RoutesHelper'); $data['Activity']['user_id'] = $this->c->_user->id; $data['Activity']['email'] = $this->c->_user->email; $data['Activity']['created'] = gmdate('Y-m-d H:i:s'); $data['Activity']['ipaddress'] = $this->c->ipaddress; $data['Activity']['activity_new'] = isset($model->data['insertid']) ? 1 : 0; switch ($this->activityModel->name) { case 'Claim': //Get the full listing info to create proper permalinks $listing = $this->c->Listing->findRow(array('conditions' => array('Listing.id = ' . (int) $model->data['Claim']['listing_id'])), array()); $permalink = $Routes->content('', $listing, array('return_url' => true)); $permalink = cmsFramework::makeAbsUrl($permalink); $data['Activity']['activity_type'] = 'claim'; $data['Activity']['listing_id'] = $model->data['Claim']['listing_id']; $data['Activity']['extension'] = 'com_content'; $data['Activity']['activity_new'] = 1; $data['Activity']['permalink'] = $permalink; $Activity->store($data); break; case 'Listing': // Skip logging of admin actions on user listings // if($this->c->_user->id != $model->data['Listing']['created_by']) break; //Get the full listing info to create proper permalinks $listing = $this->c->Listing->findRow(array('conditions' => array('Listing.id = ' . (int) $model->data['Listing']['id']))); $permalink = $Routes->content('', $listing, array('return_url' => true)); $permalink = cmsFramework::makeAbsUrl($permalink); $data['Activity']['activity_type'] = 'listing'; $data['Activity']['email'] = Sanitize::getString($model->data, 'email'); $data['Activity']['listing_id'] = $model->data['Listing']['id']; $data['Activity']['extension'] = 'com_content'; $data['Activity']['permalink'] = $permalink; $Activity->store($data); break; case 'Review': // Skip logging of admin actions on user listings // if($this->c->_user->id != $model->data['Review']['userid']) break; $data['Activity']['activity_type'] = 'review'; $data['Activity']['listing_id'] = $model->data['Review']['pid']; $data['Activity']['review_id'] = $model->data['Review']['id']; $data['Activity']['extension'] = $model->data['Review']['mode']; $data['Activity']['value'] = round(Sanitize::getVar($model->data, 'average_rating'), 0); $data['Activity']['permalink'] = $Routes->reviewDiscuss('', array('review_id' => $data['Activity']['review_id']), array('return_url' => true)); $Activity->store($data); break; case 'OwnerReply': // Skip logging of admin actions on user listings // if($this->c->_user->id != $model->data['Listing']['created_by']) break; $data['Activity']['activity_type'] = 'owner_reply'; $data['Activity']['listing_id'] = $model->data['Listing']['listing_id']; $data['Activity']['review_id'] = $model->data['OwnerReply']['id']; $data['Activity']['extension'] = $model->data['Listing']['extension']; // Editing not yet implemented so all replies are new $data['Activity']['activity_new'] = 1; $data['Activity']['permalink'] = $Routes->reviewDiscuss('', array('review_id' => $data['Activity']['review_id']), array('return_url' => true)); $Activity->store($data); break; case 'Discussion': // Skip logging of admin actions on user listings // if($this->c->_user->id != $model->data['Discussion']['user_id']) break; // Get listing id and extension $this->c->_db->setQuery("\n SELECT \n Review.pid AS listing_id, Review.`mode` AS extension\n FROM \n #__jreviews_comments AS Review\n WHERE \n Review.id = " . $model->data['Discussion']['review_id']); // Get listing owner id and check if it matches the current user if ($listing = current($this->c->_db->loadAssocList())) { $data['Activity']['activity_type'] = 'review_discussion'; $data['Activity']['listing_id'] = $listing['listing_id']; $data['Activity']['review_id'] = $model->data['Discussion']['review_id']; $data['Activity']['post_id'] = $model->data['Discussion']['discussion_id']; $data['Activity']['extension'] = $listing['extension']; $data['Activity']['permalink'] = $Routes->reviewDiscuss('', array('review_id' => $data['Activity']['review_id']), array('return_url' => true)); $Activity->store($data); } break; case 'Report': $data['Activity']['activity_type'] = $model->data['Report']['post_id'] ? 'discussion_report' : 'review_report'; $data['Activity']['listing_id'] = $model->data['Report']['listing_id']; $data['Activity']['review_id'] = $model->data['Report']['review_id']; $data['Activity']['extension'] = $model->data['Report']['extension']; // Editing not yet implemented so all replies are new $data['Activity']['activity_new'] = 1; $data['Activity']['permalink'] = $Routes->reviewDiscuss('', array('review_id' => $data['Activity']['review_id']), array('return_url' => true)); $Activity->store($data); break; case 'Vote': // Get listing id and extension $this->c->_db->setQuery("\n SELECT \n Review.pid AS listing_id, Review.`mode` AS extension\n FROM \n #__jreviews_comments AS Review\n WHERE \n Review.id = " . $model->data['Vote']['review_id']); // Get listing owner id and check if it matches the current user if ($listing = current($this->c->_db->loadAssocList())) { $data['Activity']['activity_type'] = 'helpful_vote'; $data['Activity']['listing_id'] = $listing['listing_id']; $data['Activity']['review_id'] = $model->data['Vote']['review_id']; $data['Activity']['helpful_vote_id'] = $model->data['Vote']['vote_id']; $data['Activity']['extension'] = $listing['extension']; $data['Activity']['value'] = $model->data['Vote']['vote_yes']; $data['Activity']['permalink'] = $Routes->reviewDiscuss('', array('review_id' => $data['Activity']['review_id']), array('return_url' => true)); $Activity->store($data); } break; } $this->published = false; // Run once. With paid listings it is possible for a plugin to run a 2nd time when the order is processed together with the listing (free) }
function afterFind($results) { if (empty($results)) { return $results; } # Find Itemid for component $Menu = RegisterClass::getInstance('MenuModel'); $menu_id = $Menu->getComponentMenuId($this->extension); foreach ($results as $key => $result) { // Process component menu id $results[$key][$this->name]['menu_id'] = $menu_id; $result['Listing']['menu_id'] = $menu_id; // Process listing url $results[$key][$this->name]['url'] = $this->listingUrl($result); // Process criteria if (isset($result['Criteria']['criteria']) && $result['Criteria']['criteria'] != '') { $results[$key]['Criteria']['criteria'] = explode("\n", $result['Criteria']['criteria']); } if (isset($result['Criteria']['tooltips']) && $result['Criteria']['tooltips'] != '') { $results[$key]['Criteria']['tooltips'] = explode("\n", $result['Criteria']['tooltips']); } if (isset($result['Criteria']['weights']) && $result['Criteria']['weights'] != '') { $results[$key]['Criteria']['weights'] = explode("\n", $result['Criteria']['weights']); } // Process images $images = $result['Listing']['images']; unset($results[$key]['Listing']['images']); $results[$key]['Listing']['images'] = array(); if ($images != '') { // From bookmarks.html.php $urlkey = '##URL_HERE##'; // *** Prepare Image url (compute link) if (!(preg_match("/^http:\\/\\//", $images) || preg_match("/^https:\\/\\//", $images) || preg_match("/^func:\\/\\//", $images))) { // Internal image (not HTTP, HTTPS or FUNC) ? $imagePath = WWW_ROOT . 'images/stories/' . $images; // Internal image from Images/Stories } else { $imagePath = $images; // External image (use url) if (preg_match("/^func:\\/\\//", $imagePath)) { // Verify if there is a FUNC to process $func = substr($imagePath, 7); $func = '$picurl=' . str_replace($urlkey, "'" . $result['Listing']['bookmark_url'] . "'", $func); eval($func); // Compute function } else { if (preg_match('/' . $urlkey . '/', $imagePath)) { // is the URL Keyword present ? $imagePath = str_replace($urlkey, $result['Listing']['bookmark_url'], $imagePath); // replace the "URL Keyword" with the URL... } } } } else { // Put a noimage path here? $imagePath = ''; } $results[$key]['Listing']['images'][] = array('path' => $imagePath, 'caption' => $results[$key]['Listing']['title'], 'basepath' => true, 'skipthumb' => true); } return $results; }
/** * Saves review ratings, fields and recalculates listing totals * * @param mixed $status */ function afterSave($status) { $isNew = Sanitize::getBool($this->data, 'new'); $ratings_col_empty = Sanitize::getBool($this->data, 'ratings_col_empty'); $weights = ''; if (isset($this->data['Criteria']) && Sanitize::getInt($this->data['Criteria'], 'state') == 1) { // Process rating data // to account for "n/a" values in the ratings and weights, changing the source arrays rather than the whole computation procedure. // init variables $applicableRatings = array_filter($this->data['Rating']['ratings'], create_function('$el', 'return is_numeric($el);')); $ratings_qty = count($applicableRatings); $this->data['average_rating'] = $ratings_sum = 'na'; if ($ratings_qty > 0) { if (trim($this->data['Criteria']['weights']) != '') { $weights = explode("\n", $this->data['Criteria']['weights']); // we have to remove the irrelevant weights so to produce clean weights_sum to be used later for proportion calculations $sumWeights = array_sum(array_intersect_key($weights, $applicableRatings)); if ($sumWeights > 0) { foreach ($applicableRatings as $key => $rating) { $ratings_sum += $rating * $weights[$key] / $sumWeights; } $ratings_sum = $ratings_sum * $ratings_qty; // This is not the real sum, but it is divided again in the queries. } } else { $ratings_sum = array_sum($applicableRatings); } // Makes average rating easily available in Everywhere model afterSave method $this->data['average_rating'] = $ratings_sum / $ratings_qty; $this->data['Rating']['ratings_sum'] = $ratings_sum; $this->data['Rating']['ratings_qty'] = $ratings_qty; } # if ( $ratings_qty > 0 )i $this->data['Rating']['reviewid'] = $this->data['Review']['id']; $this->data['Rating']['ratings'] = implode(',', $this->data['Rating']['ratings']); # Save rating fields appLogMessage('*******Save standard rating fields', 'database'); if ($isNew || !$isNew && $ratings_col_empty) { $save = $this->insert('#__jreviews_ratings', 'Rating', $this->data, 'reviewid'); } else { $save = $this->update('#__jreviews_ratings', 'Rating', $this->data, 'reviewid'); } if (!$save) { appLogMessage('*******There was a problem saving the ratings', 'database'); return false; } } # if ( $criteria['Criteria']['state'] == 1 ) // save listing totals if (!$this->saveListingTotals($this->data['Review']['pid'], $this->data['Review']['mode'], $weights)) { return false; } # Save custom fields appLogMessage('*******Save review custom fields', 'database'); $this->data['Field']['Review']['reviewid'] = $this->data['Review']['id']; App::import('Model', 'field', 'jreviews'); $FieldModel = RegisterClass::getInstance('FieldModel'); if (count($this->data['Field']['Review']) > 1 && !$FieldModel->save($this->data, 'review', $isNew, $this->valid_fields)) { return false; } }
function truncateTweet($text, $url) { $max_chars = 140; $truncate = strlen($url) + 1; // +1 for space in between text and url App::import('Helper', 'text'); $Text = RegisterClass::getInstance('TextHelper'); return $Text->truncate($text, $max_chars - $truncate) . ' ' . $url; }
function onBeforeDisplayContent(&$article, &$params) { if (!class_exists('cmsFramework')) { return; } // Make sure this is a Joomla article page $option = Sanitize::getString($_REQUEST, 'option', ''); $view = Sanitize::getString($_REQUEST, 'view', ''); $layout = Sanitize::getString($_REQUEST, 'layout', ''); $id = Sanitize::getInt($_REQUEST, 'id'); if (!($option == 'com_content' && $view == 'article' && $id)) { return; } /** * Retrieve $listing array from memory */ $_this =& cmsFramework::getInstance(); $Config = Configure::read('JreviewsSystem.Config'); $title = trim(Sanitize::getString($Config, 'type_metatitle')); $keywords = trim(Sanitize::getString($Config, 'type_metakey')); $description = trim(Sanitize::getString($Config, 'type_metadesc')); $listing =& $_this->listing; // Has all the data that's also available in the detail.thtml theme file so you can create any sort of conditionals with it if ($title != '' || $keywords != '' || $description != '') { if (isset($_this->listing) && is_array($_this->listing)) { // Instantiate the CustomFields helper class $CustomFields =& RegisterClass::getInstance('CustomFieldsHelper'); // Get and process all tags $tags = plgContentJreviews::extractTags($title . $keywords . $description); $tags_array = array(); foreach ($tags as $tag) { switch ($tag) { case 'title': $tags_array['{title}'] = Sanitize::stripAll($listing['Listing'], 'title'); break; case 'section': $tags_array['{section}'] = Sanitize::stripAll($listing['Section'], 'title'); break; case 'category': $tags_array['{category}'] = Sanitize::stripAll($listing['Category'], 'title'); break; case 'metakey': $tags_array['{metakey}'] = Sanitize::stripAll($listing['Listing'], 'metakey'); break; case 'metadesc': $tags_array['{metadesc}'] = Sanitize::stripAll($listing['Listing'], 'metadesc'); break; default: if (substr($tag, 0, 3) == 'jr_') { $field = $CustomFields->fieldText($tag, $listing, false, false, ','); $tags_array['{' . $tag . '}'] = !empty($field) ? $field : ''; } break; } } # Process title $title != '' and $title = str_replace(array_keys($tags_array), $tags_array, $title) and cmsFramework::meta('title', $title); # Process description $description != '' and $description = str_replace(array_keys($tags_array), $tags_array, $description) and cmsFramework::meta('description', $description); # Process keywords $keywords != '' and $keywords = str_replace(array_keys($tags_array), $tags_array, $keywords) and cmsFramework::meta('keywords', $keywords); } } elseif (isset($article->parameters) && $article->parameters->get('show_page_title') && $article->parameters->get('num_leading_articles') == '' && $article->parameters->get('filter_type') == '') { $title = $article->parameters->get('page_title'); $title != '' and cmsFramework::meta('title', $title); } if (isset($_this->crumbs) && !empty($_this->crumbs)) { cmsFramework::setPathway($_this->crumbs); } unset($_this); }
/** * Dynamically replace the field tags with their labels/form field equivalents */ function afterFilter() { $output =& $this->output; $names = array(); $labels = array(); $select = array(); $cat_tag = false; $date_field = false; $dir_id = $section_id = $cat_id = $criteria_id = ''; # Initialize FormHelper $Form = new FormHelper(); $CustomFields = new CustomFieldsHelper(); $CustomFields->Config =& $this->Config; # Process custom field tag attributes foreach ($this->fieldTags as $key => $value) { $var = explode('|', $value); if (!strstr($value, '_label')) { $names[$var[0]] = $value; } elseif (strstr($value, '_label')) { $labels[] = substr($value, 0, -6); } if ($value == 'category') { $cat_tag = true; /************************/ if (isset($var[1]) && $var[1] == 'm') { $category_select_type = ' multiple="multiple"'; } if (isset($var[2]) && (int) $var[2] > 0) { $category_select_size = ' size="' . $var[2] . '"'; } /************************/ } if (isset($var[1]) && strtolower($var[1]) == 'm') { $select[$var[0]] = 'selectmultiple'; } elseif (isset($var[1]) && strtolower($var[1]) == 's') { $select[$var[0]] = 'select'; } $select_size[$var[0]] = isset($var[2]) ? $var[2] : 5; # Check for category select list if ($var[0] == 'category') { if (isset($var[1]) && strtolower($var[1]) == 's') { $category_select_type = ' multiple="multiple"'; } if (isset($var[2]) && (int) $var[2] > 0) { $category_select_size = ' size="' . $var[2] . '"'; } } } # Get selected values from url $entry = array(); foreach ($this->params as $key => $value) { if (substr($key, 0, 3) == 'jr_') { $entry['Field']['pairs'][$key]['value'] = explode('_', $value); } // Add categories/sections } if (isset($this->params['tag'])) { $entry['Field']['pairs']['jr_' . $this->params['tag']['field']]['value'] = array($this->params['tag']['value']); } # Generate category list if tag found in view if ($cat_tag) { # Category auto detect if (Sanitize::getInt($this->params['module'], 'cat_auto')) { $ids = CommonController::_discoverIDs($this); extract($ids); } if ($section_id == '' && $cat_id != '') { $sql = "SELECT section FROM #__categories WHERE id IN (" . $cat_id . ")"; $this->_db->setQuery($sql); $section_id = $this->_db->loadResult(); } $cat_id != '' and $this->params['module']['cat_id'] = $cat_id; $cat_id == '' and $section_id != '' and $this->params['module']['section_id'] = $section_id; $cat_id == '' and $criteria_id != '' and $this->params['module']['criteria_id'] = $criteria_id; $categorySelect = $this->Category->categoryTree($this->_user->gid, $this->params); $output = str_replace('{' . $names['category'] . '}', $categorySelect, $output); } $fields = $this->Field->getFieldsArrayFromNames(array_keys($names), 'listing', $entry); # Replace label tags and change field type based on view atttributes if ($fields) { foreach ($fields as $key => $group) { foreach ($group['Fields'] as $name => $field) { if (isset($field['optionList']) && isset($select[$name])) { $fields[$key]['Fields'][$name]['type'] = $select[$name]; $fields[$key]['Fields'][$name]['properties']['size'] = $select_size[$name]; } elseif ($fields[$key]['Fields'][$name]['type'] == 'textarea') { $fields[$key]['Fields'][$name]['type'] = 'text'; } if (in_array($name, $labels)) { $output = str_replace('{' . $name . '_label}', $field['title'], $output); } if ($field['type'] == 'date') { $date_field = true; } } } $search = true; $location = 'listing'; $CustomFields->form_id = Sanitize::getInt($this->params, 'module_id'); $formFields = $CustomFields->getFormFields($fields, $location, $search, __t("Select", true)); # Replace input tags foreach ($names as $key => $name) { if (isset($formFields["data[Field][Listing][{$key}]"])) { $output = str_replace('{' . $names[$key] . '}', $formFields["data[Field][Listing][{$key}]"], $output); } } # Load js and css if ($date_field) { $Html = RegisterClass::getInstance('HtmlHelper'); $Html->app = 'jreviews'; $Html->startup(); $Libraries = RegisterClass::getInstance('LibrariesHelper'); $Html->js(arrayFilter(array('jq.ui.core', 'jq.ui.datepicker'), $Libraries->js()), $inline); $Html->css(arrayFilter(array('jq.ui.core'), $Libraries->css()), false); ?> <script type="text/javascript">jreviews.datepicker();</script> <?php } } return $output; }
function index() { $this->EverywhereAfterFind = true; // Triggers the afterFind in the Observer Model // Required for ajax pagination to remember module settings $Session = RegisterClass::getInstance('MvcSession'); $module_id = Sanitize::getVar($this->params, 'module_id', Sanitize::getVar($this->data, 'module_id')); $cache_file = $module_id . '_' . md5(serialize($this->params)); if ($this->ajaxRequest) { $this->params = $Session->get($module_id, null, S2Paths::get('jreviews', 'S2_CMSCOMP')); } else { srand((double) microtime() * 1000000); $this->params['rand'] = rand(); // $Session->set($module_id.'_rand',$this->params['rand'],S2Paths::get('jreviews','S2_CMSCOMP')); $Session->set($module_id, $this->params, S2Paths::get('jreviews', 'S2_CMSCOMP')); } if (!Sanitize::getVar($this->params['module'], 'community')) { cmsFramework::noAccess(); return; } $conditions = array(); $joins = array(); $order = array(); // 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 module parameters $extension = Sanitize::getString($this->params['module'], 'extension'); $user_id = Sanitize::getInt($this->params, 'user', $this->_user->id); if (!$user_id && !$this->_user->id) { cmsFramework::noAccess(); return; } # Cached version /* if($this->_user->id ===0) { $page = $this->cached($cache_file); if($page && $this->xajaxRequest) { $xajax->assign('jr_modContainer'.$module_id,'innerHTML',$page); return $xajax; } elseif ($page) { return $page; } } */ $catids_url = Sanitize::getString($this->params['module'], 'category'); $listing_id = Sanitize::getString($this->params['module'], 'listing'); if ($extension == 'com_content') { $dir_id = Sanitize::getString($this->params['module'], 'dir'); $section_id = Sanitize::getString($this->params['module'], 'section'); $criteria_ids = Sanitize::getString($this->params['module'], 'criteria'); } else { $dir_id = null; $section_id = null; $criteria_ids = null; } $cat_autodetect = Sanitize::getInt($this->params['module'], 'cat_auto'); // This parameter determines the module mode $sort = Sanitize::getString($this->params['module'], 'reviews_order'); # Remove unnecessary fields from model query // $this->Review->modelUnbind(); if ($extension != '') { $conditions[] = "Review.mode = '{$extension}'"; } $conditions[] = "Review.userid = " . (int) $user_id; # Set conditionals based on configuration parameters if ($extension == 'com_content') { // Only works for core articles $conditions = array_merge($conditions, array('( 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 . '") )', 'Listing.access <= ' . $this->_user->gid, 'Listing.catid > 0')); $conditions[] = $this->Access->canEditListing() ? 'Listing.state >= 0' : 'Listing.state = 1'; if ($dir_id) { $conditions[] = 'JreviewsCategory.dirid IN (' . $dir_id . ')'; } if ($section_id) { $conditions[] = 'Listing.sectionid IN (' . $section_id . ')'; } if ($catids_url) { $conditions[] = 'Listing.catid IN (' . $catids_url . ')'; } } else { if (Sanitize::getInt($this->params['module'], 'cat_auto') && method_exists($this->Listing, 'catUrlParam')) { if ($catids_url = Sanitize::getInt($this->passedArgs, $this->Listing->catUrlParam())) { $conditions[] = 'JreviewsCategory.id IN (' . $catids_url . ')'; } } elseif ($catids_url) { $conditions[] = 'JreviewsCategory.id IN (' . $catids_url . ')'; } } if ($listing_id) { $conditions[] = "Review.pid IN ({$listing_id})"; } $conditions[] = 'Review.published > 0'; switch ($sort) { case 'latest': $order[] = $this->Review->processSorting('rdate'); break; case 'helpful': $order[] = $this->Review->processSorting('helpful'); break; case 'random': $order[] = 'RAND(' . $this->params['rand'] . ')'; break; default: $order[] = $this->Review->processSorting('rdate'); break; } $queryData = array('fields' => array(), 'joins' => $joins, 'conditions' => $conditions, 'order' => $order, 'limit' => $this->module_limit, 'offset' => $this->module_offset); # Don't run it here because it's run in the Everywhere Observer Component $this->Review->runProcessRatings = false; // Excludes listing owner info in Everywhere component $this->Review->controller = 'module_reviews'; $reviews = $this->Review->findAll($queryData); if (Sanitize::getInt($this->params['module'], 'ajax_nav', 1)) { unset($queryData['order']); $count = $this->Review->findCount($queryData, 'DISTINCT Review.id'); } else { $count = $this->module_limit; } # Send variables to view template $this->set(array('Access' => $this->Access, 'User' => $this->_user, 'reviews' => $reviews, 'total' => $count, 'module_id' => $module_id)); $page = $this->render('community_plugins', 'community_myreviews'); # Save cached version /* if($this->_user->id ===0) { $this->cacheView('modules','reviews',$cache_file, $page); } */ if ($this->ajaxRequest) { return $this->ajaxResponse($page, false); } else { return $page; } }
function getConfig($var, $default = null) { # Will need to add a conversion table for configuration variable names once they start differing between CMSs $cmsConfig = RegisterClass::getInstance('JConfig'); if (isset($cmsConfig->{$var})) { return $cmsConfig->{$var}; } else { return $default; } }
function com_content_view($passedArgs) { $this->layout = 'detail'; $content_row = $passedArgs['row']; $content_params = $passedArgs['params']; // Escape quotes in meta tags $content_row->metadesc = htmlspecialchars($content_row->metadesc, ENT_QUOTES, 'UTF-8'); $content_row->metakey = htmlspecialchars($content_row->metakey, ENT_QUOTES, 'UTF-8'); $editor_review = array(); $editor_ratings_summary = array(); $editor_review_count = null; $reviews = array(); $ratings_summary = array(); $review_count = null; $crumbs = array(); // Check if item category is configured for jreviews if (!$this->Category->isJreviewsCategory($content_row->catid)) { return array('row' => $content_row, 'params' => $content_params); } # Override content page parameter settings // prx($content_params); // $content_params->set('show_pdf_icon',0); // $content_params->set('show_print_icon',0); // $content_params->set('show_email_icon',0); $content_params->set('show_title', 0); $content_params->set('item_title', 0); // J1.0.x & Mambo 4.6.x $content_params->set('show_category', 0); $content_params->set('category', 0); // J1.0.x & Mambo 4.6.x $content_params->set('show_section', 0); $content_params->set('section', 0); // J1.0.x & Mambo 4.6.x $content_params->set('show_author', 0); $content_params->set('author', 0); // J1.0.x & Mambo 4.6.x $content_params->set('show_create_date', 0); $content_params->set('createdate', 0); // J1.0.x & Mambo 4.6.x $content_params->set('show_vote', 0); $content_params->set('rating', 0); // J1.0.x & Mambo 4.6.x $content_params->set('show_modify_date', 0); $content_params->set('modifydate', 0); // J1.0.x & Mambo 4.6.x $content_params->set('page_title', ''); $content_params->set('show_page_title', 0); // J1.5.4+ $content_params->set('show_hits', 0); $content_params->set('show_item_navigation', 0); $content_params->set('item_navigation', 0); // J1.0.x & Mambo 4.6.x # Get listing and review summary data $fields = array('Criteria.criteria AS `Criteria.criteria`', 'Criteria.tooltips AS `Criteria.tooltips`'); // Need to query the listing even if view cache enabled because otherwise there's no way to set breadcrumbs and meta data in the content plugin $listing = $this->Listing->findRow(array('fields' => $fields, 'conditions' => array('Listing.id = ' . $content_row->id))); # Override global configuration isset($listing['ListingType']) and $this->Config->override($listing['ListingType']['config']); // Override CMS breadcrumbs if ($this->Config->breadcrumb_detail_override) { App::import('Helper', 'routes'); $Routes = RegisterClass::getInstance('RoutesHelper'); $Routes->Config = $this->Config; $this->Config->dir_show_breadcrumb = false; // Disable the JReviews breadcrumb because there's no need two breadcrumbs on the page if ($this->Config->breadcrumb_detail_directory) { $crumbs[] = array('name' => $listing['Directory']['title'], 'link' => $Routes->directory($listing, array('return_url' => true))); } if ($this->Config->breadcrumb_detail_section) { $crumbs[] = array('name' => $listing['Section']['title'], 'link' => $Routes->section($listing, $listing['Section'], array('return_url' => true))); } if ($this->Config->breadcrumb_detail_category) { $crumbs[] = array('name' => $listing['Category']['title'], 'link' => $Routes->category($listing, $listing['Section'], $listing['Category'], array('return_url' => true))); } $crumbs[] = array('name' => $listing['Listing']['title'], 'link' => ''); } # Get cached vesion if ($this->_user->id === 0) { $page = $this->cached($this->here . 'plugin'); if ($page) { $content_row->text = $page; return array('row' => $content_row, 'params' => $content_params, 'listing' => $listing, 'crumbs' => $crumbs); } } $this->owner_id = $listing['Listing']['user_id']; // Used in AssetsHelper // Check if the listing has any html tags, and if it does, then strip the double /r/r added by J1.5, otherwise it is // required for proper spacing of summary and description fields if (preg_match('/(<\\w+)(\\s*[^>]*)(>)/', $content_row->text)) { $listing['Listing']['text'] = str_replace("\r", '', $content_row->text); // Elimites double break between summary and description } else { $listing['Listing']['text'] = $content_row->text; } $regex = '/{mosimage\\s*.*?}/i'; $listing['Listing']['text'] = preg_replace($regex, '', $listing['Listing']['text']); # Get editor review data if ($this->Config->author_review) { $fields = array('Criteria.id AS `Criteria.criteria_id`', 'Criteria.criteria AS `Criteria.criteria`', 'Criteria.state AS `Criteria.state`', 'Criteria.tooltips AS `Criteria.tooltips`', 'Criteria.weights AS `Criteria.weights`'); // $joins = $this->Listing->joinsReviews; $conditions = array('Review.pid = ' . $listing['Listing']['listing_id'], 'Review.author = 1', 'Review.published = 1'); $queryData = array('fields' => $fields, 'conditions' => $conditions, 'offset' => 0, 'limit' => $this->Config->editor_limit, 'order' => array($this->Review->processSorting())); $editor_review = $this->Review->findAll($queryData); $editor_review_count = $this->Review->findCount($queryData); if ($editor_review_count <= 1 && $this->Config->author_review == 1) { // used for the separate display routine when we are in single-editor-review mode, and also for backwards compat with older templates $editor_review = array_shift($editor_review); } $editor_ratings_summary = array('Rating' => array('average_rating' => $listing['Review']['editor_rating'], 'ratings' => explode(',', $listing['Review']['editor_criteria_rating']), 'criteria_rating_count' => explode(',', $listing['Review']['editor_criteria_rating_count'])), 'Criteria' => $listing['Criteria'], 'summary' => 1); } # Ger user review data if ($this->Config->user_reviews) { $fields = array('Review.owner_reply_approved As `Review.owner_reply_approved`', 'Review.owner_reply_text As `Review.owner_reply_text`', 'Criteria.id AS `Criteria.criteria_id`', 'Criteria.criteria AS `Criteria.criteria`', 'Criteria.state AS `Criteria.state`', 'Criteria.tooltips AS `Criteria.tooltips`', 'Criteria.weights AS `Criteria.weights`'); // $joins = $this->Listing->joinsReviews; $conditions = array('Review.pid= ' . $listing['Listing']['listing_id'], 'Review.author = 0', 'Review.published = 1', 'Review.mode = \'com_content\'', 'JreviewsCategory.`option` = \'com_content\''); $queryData = array('fields' => $fields, 'conditions' => $conditions, 'offset' => 0, 'limit' => $this->Config->user_limit, 'order' => array($this->Review->processSorting($this->Config->user_review_order))); $reviews = $this->Review->findAll($queryData); $review_count = $this->Review->findCount($queryData); $ratings_summary = array('Rating' => array('average_rating' => $listing['Review']['user_rating'], 'ratings' => explode(',', $listing['Review']['user_criteria_rating']), 'criteria_rating_count' => explode(',', $listing['Review']['user_criteria_rating_count'])), 'Criteria' => $listing['Criteria'], 'summary' => 1); } # Get custom fields for review form if form is shown on page $review_fields = $this->review_fields = $this->Field->getFieldsArrayNew($listing['Criteria']['criteria_id'], 'review'); $security_code = ''; if ($this->Access->showCaptcha) { $captcha = $this->Captcha->displayCode(); $security_code = $captcha['image']; } # Initialize review array and set Criteria and extension keys $review = $this->Review->init(); $review['Criteria'] = $listing['Criteria']; $review['Review']['extension'] = $listing['Listing']['extension']; # check for duplicate reviews $is_jr_editor = $this->Access->isJreviewsEditor($this->_user->id); $this->_user->duplicate_review = false; // It's a guest so we only care about checking the IP address if this feature is not disabled and // server is not localhost if (!$this->_user->id) { if (!$this->Config->review_ipcheck_disable && $this->ipaddress != '127.0.0.1') { // Do the ip address check everywhere except in localhost $this->_user->duplicate_review = (bool) $this->Review->findCount(array('conditions' => array('Review.pid = ' . $content_row->id, "Review.ipaddress = '{$this->ipaddress}'", "Review.mode = 'com_content'", "Review.author = 0", "Review.published >= 0"))); } } elseif (!$is_jr_editor && !$this->Config->user_multiple_reviews || $is_jr_editor && $this->Config->author_review == 2) { $this->_user->duplicate_review = (bool) $this->Review->findCount(array('conditions' => array('Review.pid = ' . $content_row->id, "(Review.userid = {$this->_user->id}" . ($this->ipaddress != '127.0.0.1' && !$this->Config->review_ipcheck_disable && !$is_jr_editor ? " OR Review.ipaddress = '{$this->ipaddress}') " : ')'), "Review.mode = 'com_content'", "Review.published >= 0", $this->Config->author_review == 0 ? "Review.author = 0" : "Review.author >= 0"))); } /** HTGMOD - #1490 **/ if (isset($listing['Field']['pairs']['jr_brufoss']) && $listing['Field']['pairs']['jr_brufoss']['value'][0] == 1) { $this->viewSuffix = '_brufoss'; } /** END HTGMOD **/ $this->set(array('extension' => 'com_content', 'Access' => $this->Access, 'User' => $this->_user, 'listing' => $listing, 'editor_review' => $editor_review, 'reviews' => $reviews, 'ratings_summary' => $ratings_summary, 'editor_ratings_summary' => $editor_ratings_summary, 'review_count' => $review_count, 'editor_review_count' => $editor_review_count, 'review_fields' => $review_fields, 'review' => $review, 'captcha' => $security_code)); $content_row->text = $this->render('listings', 'detail'); # Save cached version if ($this->_user->id === 0) { $this->cacheView('listings', 'detail', $this->here . 'plugin', $content_row->text); } return array('row' => $content_row, 'params' => $content_params, 'listing' => $listing, 'crumbs' => $crumbs); }
function index() { $this->EverywhereAfterFind = true; // Triggers the afterFind in the Observer Model if (!isset($this->params['module'])) { $this->params['module'] = array(); } // For direct calls to the controller // Required for ajax pagination to remember module settings $Session = RegisterClass::getInstance('MvcSession'); $module_id = Sanitize::getInt($this->params, 'module_id', Sanitize::getInt($this->data, 'module_id')); if ($this->ajaxRequest) { $this->params = $Session->get('module_params' . $module_id, null, S2Paths::get('jreviews', 'S2_CMSCOMP')); } else { srand((double) microtime() * 1000000); $this->params['rand'] = rand(); $Session->set('module_rand' . $module_id, $this->params['rand'], S2Paths::get('jreviews', 'S2_CMSCOMP')); $Session->set('module_params' . $module_id, $this->params, S2Paths::get('jreviews', 'S2_CMSCOMP')); } # Prevent sql injection $token = Sanitize::getString($this->params, 'token'); $tokenMatch = 0 === strcmp($token, cmsFramework::formIntegrityToken($this->params, array('module', 'module_id', 'form', 'data'), false)); $this->viewSuffix = Sanitize::getString($this->params['module'], 'tmpl_suffix'); $conditions = array(); $joins = array(); $order = array(); # Read module parameters $extension = Sanitize::getString($this->params['module'], 'extension'); $reviews_type = Sanitize::getString($this->params['module'], 'reviews_type'); $custom_where = Sanitize::getString($this->params['module'], 'custom_where'); $cat_id = Sanitize::getString($this->params['module'], 'category'); $listing_id = Sanitize::getString($this->params['module'], 'listing'); if ($extension == 'com_content') { $dir_id = Sanitize::getString($this->params['module'], 'dir'); $section_id = Sanitize::getString($this->params['module'], 'section'); $criteria_id = Sanitize::getString($this->params['module'], 'criteria'); } else { $dir_id = null; $section_id = null; $criteria_id = null; } // This parameter determines the module mode $sort = Sanitize::getString($this->params['module'], 'reviews_order'); # Category auto detect if (Sanitize::getInt($this->params['module'], 'cat_auto') && $extension == 'com_content') { $ids = CommonController::_discoverIDs($this); extract($ids); } $extension != '' and $conditions[] = "Review.mode = " . $this->quote($extension); # Set conditionals based on configuration parameters if ($extension == 'com_content') { $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 . '") )', 'Listing.access <= ' . $this->_user->gid)); $cat_id != '' and $conditions[] = 'Listing.catid IN (' . cleanIntegerCommaList($cat_id) . ')'; $cat_id == '' and $section_id != '' and $conditions[] = 'Listing.sectionid IN (' . cleanIntegerCommaList($section_id) . ')'; $cat_id == '' and $dir_id != '' and $conditions[] = 'JreviewsCategory.dirid IN (' . cleanIntegerCommaList($dir_id) . ')'; $cat_id == '' and $criteria_id != '' and $conditions[] = 'JreviewsCategory.criteriaid IN (' . cleanIntegerCommaList($criteria_id) . ')'; } else { if (Sanitize::getInt($this->params['module'], 'cat_auto') && isset($this->Listing) && method_exists($this->Listing, 'catUrlParam')) { if ($cat_id = Sanitize::getInt($this->passedArgs, $this->Listing->catUrlParam())) { $conditions[] = 'JreviewsCategory.id IN (' . $cat_id . ')'; } } elseif ($cat_id) { $conditions[] = 'JreviewsCategory.id IN (' . cleanIntegerCommaList($cat_id) . ')'; } } $listing_id and $conditions[] = "Review.pid IN ( " . cleanIntegerCommaList($listing_id) . ")"; $conditions[] = 'Review.published > 0'; switch ($sort) { case 'latest': $order[] = $this->Review->processSorting('rdate'); break; case 'helpful': $order[] = $this->Review->processSorting('helpful'); break; case 'random': $order[] = 'RAND(' . $this->params['rand'] . ')'; break; default: $order[] = $this->Review->processSorting('rdate'); break; } switch ($reviews_type) { case 'all': break; case 'user': $conditions[] = 'Review.author = 0'; break; case 'editor': $conditions[] = 'Review.author = 1'; break; } # Custom WHERE $tokenMatch and $custom_where and $conditions[] = $custom_where; $queryData = array('joins' => $joins, 'conditions' => $conditions, 'order' => $order, 'limit' => $this->module_limit, 'offset' => $this->module_offset); # Don't run it here because it's run in the Everywhere Observer Component $this->Review->runProcessRatings = false; // Excludes listing owner info in Everywhere component $this->Review->controller = 'module_reviews'; $reviews = $this->Review->findAll($queryData); if (Sanitize::getInt($this->params['module'], 'ajax_nav', 1)) { unset($queryData['order']); $count = $this->Review->findCount($queryData, 'DISTINCT Review.id'); } else { $count = $this->module_limit; } # Send variables to view template $this->set(array('Access' => $this->Access, 'User' => $this->_user, 'reviews' => $reviews, 'total' => $count)); $page = $this->render('modules', 'reviews'); if ($this->ajaxRequest) { return $this->ajaxResponse($page, false); } else { return $page; } }
function save(&$data, $location = 'listing', $isNew, &$validFields) { $msg = ''; $fieldLocation = inflector::camelize($location); // Check if there are custom fields to save or exit if (isset($data['Field']) && (!is_array($data['Field'][$fieldLocation]) || count($data['Field'][$fieldLocation]) == 1)) { return $msg; } // Define field types that accept predefined options to store the reference values $optionsArray = array("select", "selectmultiple", "checkboxes", "radiobuttons"); if (!empty($validFields)) { foreach ($validFields as $validField) { $fieldName = $validField['name']; $inputValue = ''; if (Sanitize::getVar($data['Field'][$fieldLocation], $fieldName, '') != '' || $validField['type'] == 'code' && Sanitize::getVar($data['__raw']['Field'][$fieldLocation], $fieldName, '') != '') { switch ($validField['type']) { case 'selectmultiple': case 'checkboxes': //Checks for types with options $multi_options = Sanitize::getVar($data['Field'][$fieldLocation], $fieldName, ''); $inputValue = '*' . implode('*', $multi_options) . '*'; break; case 'select': case 'radiobuttons': //Checks for types with options $inputValue = '*' . Sanitize::getString($data['Field'][$fieldLocation], $fieldName) . '*'; break; case 'code': // Affiliate code left unfiltered $inputValue = Sanitize::getString($data['__raw']['Field'][$fieldLocation], $fieldName, ''); break; case 'decimal': $inputValue = Sanitize::getFloat($data['Field'][$fieldLocation], $fieldName); break; case 'integer': $inputValue = Sanitize::getInt($data['Field'][$fieldLocation], $fieldName); break; case 'date': if (Sanitize::getString($data['Field'][$fieldLocation], $fieldName) != '' && Sanitize::getString($data['Field'][$fieldLocation], $fieldName) != null) { $inputValue = strftime(_CURRENT_SERVER_TIME_FORMAT, strtotime(Sanitize::getString($data['Field'][$fieldLocation], $fieldName))); } else { $inputValue = ''; } break; case 'textarea': case 'text': if (isset($validField['_params']['allow_html']) && $validField['_params']['allow_html'] == 1) { $inputValue = Sanitize::stripScripts(Sanitize::getVar($data['__raw']['Field'][$fieldLocation], $fieldName)); $inputValue = stripslashes($inputValue); } else { $inputValue = Sanitize::getString($data['Field'][$fieldLocation], $fieldName, ''); } break; case 'website': case 'email': $inputValue = Sanitize::stripScripts(Sanitize::getVar($data['Field'][$fieldLocation], $fieldName)); break; default: $inputValue = Sanitize::getVar($data['Field'][$fieldLocation], $fieldName); break; } # Modify form post arrays to current values if ($inputValue === '' || $inputValue === '**') { $inputValue = ''; } $data['Field'][$fieldLocation][$fieldName] = $inputValue; } else { // To clear multiple choice fields switch ($validField['type']) { case 'decimal': case 'integer': $data['Field'][$fieldLocation][$fieldName] = null; break; default: $data['Field'][$fieldLocation][$fieldName] = ''; break; } } // Debug custom fields array $msg .= "{$validField['name']}=>{$inputValue}" . "<br />"; } } # Need to check if jreviews_content or jreviews_reviews record exists to decide whether to insert or update the table if ($location == 'review') { App::import('Model', 'jreviews_review_field', 'jreviews'); $JreviewsReviewFieldModel = new JreviewsReviewFieldModel(); $recordExists = $JreviewsReviewFieldModel->findCount(array('conditions' => array('JreviewsReviewField.reviewid= ' . $data['Field']['Review']['reviewid']))); } else { App::import('Model', 'jreviews_content', 'jreviews'); $JreviewsContentModel = new JreviewsContentModel(); $recordExists = $JreviewsContentModel->findCount(array('conditions' => array('JreviewsContent.contentid = ' . $data['Listing']['id']))); } $dbAction = $recordExists ? 'update' : 'insert'; if ($location == 'review') { $this->{$dbAction}('#__jreviews_review_fields', $fieldLocation, $data['Field'], 'reviewid'); } else { if (Configure::read('PaidListings.enabled') && Sanitize::getInt($data, 'paid_category')) { # PaidListings integration - saves all fields to jreviews_paid_listing_fields table and removes unpaid fields from jreviews_content table $PaidListingField = RegisterClass::getInstance('PaidListingFieldModel'); $PaidListingField->save($data); } $this->{$dbAction}('#__jreviews_content', $fieldLocation, $data['Field'], 'contentid'); } }
/** * Used in map popup to update the listing's coordinates */ function saveGeocodePopup($data) { App::import('Model', 'jreviews_content'); $Field = RegisterClass::getInstance('JreviewsContentModel'); $data['JreviewsContent'] =& $data['Field']['Listing']; if (!$Field->store($data)) { return false; } return true; }
function myreviews($params) { if ($this->_user->id === 0) { $this->cacheAction = Configure::read('Cache.expires'); } $page = array(); // Set layout $this->layout = 'reviews'; $this->autoRender = false; // Triggers the afterFind in the Observer Model $this->EverywhereAfterFind = true; $user_id = Sanitize::getInt($this->params, 'user'); if (!$user_id && !$this->_user->id) { echo cmsFramework::noAccess(); $this->autoRender = false; return; } if (!$user_id) { $user_id = $this->_user->id; } $queryData = array('conditions' => array('Review.userid= ' . $user_id, 'Review.published = 1'), 'fields' => array('Review.mode AS `Review.extension`'), 'offset' => $this->offset, 'limit' => $this->limit, 'order' => array('Review.created DESC')); # Don't run it here because it's run in the Everywhere Observer Component $this->Review->runProcessRatings = false; $reviews = $this->Review->findAll($queryData); if (empty($reviews)) { return __t("No reviews were found.", true); } $count = $this->Review->findCount($queryData); $review = current($reviews); App::import('Helper', 'community', 'jreviews'); $Community = RegisterClass::getInstance('CommunityHelper'); $Community->Config =& $this->Config; $page['title'] = $page['description'] = sprintf(__t("Reviews written by %s", true), $Community->screenName($review, false)); $this->set(array('Access' => $this->Access, 'User' => $this->_user, 'reviews' => $reviews, 'pagination' => array('total' => $count, 'offset' => ($this->page - 1) * $this->limit), 'page' => $page)); return $this->render('reviews', 'reviews'); }