Файл: InstantSocial/uploud/components/users/includes/catalog.inc.php
Строк: 311
<?
$inCore->loadModel('catalog');
$model_catalog = new cms_model_catalog();
$inCore->includeFile('components/catalog/includes/shopcore.php');
function isNew($item_id, $shownew, $newint){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
if ($shownew){
$sql = "SELECT id FROM cms_uc_items WHERE id = $item_id AND pubdate >= DATE_SUB(NOW(), INTERVAL $newint)";
$result = $inDB->query($sql) ;
return $inDB->num_rows($result);
} else { return 0; }
}
function getAlphaList($cat_id){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
global $_LANG;
$html = '';
$sql = "SELECT UPPER(SUBSTRING(LTRIM( title ) , 1, 1)) AS first_letter, COUNT( id ) AS num
FROM cms_uc_items
WHERE category_id = '$cat_id' AND published = 1
GROUP BY first_letter";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)){
$html .= '<div class="uc_alpha_list">';
while($a = $inDB->fetch_assoc($result)){
if(preg_match('/^([a-zA-Zа-яёіїєґА-ЯЁІЇЄҐ0-9]+)$/i', $a['first_letter'])){
$html .= '<a class="uc_alpha_link" href="/catalog/'.$cat_id.'/find-first/'.urlencode($a['first_letter']).'" title="'.$_LANG['ARTICLES'].': '.$a['num'].'">'.$a['first_letter'].'</a>';
}
}
$html .= '</div>';
}
return $html;
}
function subCatsList($parent_id, $left_key, $right_key){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$html = '';
$model = new cms_model_catalog();
if (!$parent_id) { $parent_id = $inDB->get_field('cms_uc_cats', 'parent_id=0', 'id'); }
$cats = $model->getSubCats($parent_id, $left_key, $right_key);
if ($cats){
$smarty = $inCore->initSmarty('components', 'com_catalog_cats.tpl');
$smarty->assign('cfg', $inCore->loadComponentConfig('catalog'));
$smarty->assign('cats', $cats);
ob_start();
$smarty->display('com_catalog_cats.tpl');
$html = ob_get_clean();
}
return $html;
}
function orderForm($orderby, $orderto, $shop=false){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
global $_LANG;
$html = '';
$html .= '<form action="'.$_SERVER['REQUEST_URI'].'" method="POST"><div class="catalog_sortform"><table cellspacing="2" cellpadding="2" >' ."n";
$html .= '<tr>' ."n";
$html .= '<td>'.$_LANG['ORDER_ARTICLES'].': </td>' ."n";
$html .= '<td valign="top"><select name="orderby" id="orderby">' ."n";
if($shop){
$html .= '<option value="price" '; if($orderby=='price') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_PRICE'].'</option>' ."n";
}
$html .= '<option value="title" '; if($orderby=='title') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_TITLE'].'</option>' ."n";
$html .= '<option value="pubdate" '; if($orderby=='pubdate') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_DATE'].'</option>' ."n";
$html .= '<option value="rating" '; if($orderby=='rating') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_RATING'].'</option>' ."n";
$html .= '<option value="hits" '; if($orderby=='hits') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_HITS'].'</option>' ."n";
$html .= '</select> <select name="orderto" id="orderto">';
$html .= '<option value="desc" '; if($orderto=='desc') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_DESC'].'</option>' ."n";
$html .= '<option value="asc" '; if($orderto=='asc') { $html .= 'selected'; } $html .= '>'.$_LANG['ORDERBY_ASC'].'</option>' ."n";
$html .= '</select>';
$html .= ' <input type="submit" value=">>" />' ."n";
$html .= '</td>' ."n";
$html .= '</tr>' ."n";
$html .= '</table></div></form>' ."n";
return $html;
}
function ratingData($item_id){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$sql = "SELECT *, IFNULL(AVG(points), 0) as rating, COUNT(id) as votes
FROM cms_uc_ratings
WHERE item_id = $item_id
GROUP BY item_id";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)){
$data = $inDB->fetch_assoc($result);
} else {
$data['rating'] = 0;
$data['votes'] = 0;
}
return $data;
}
function buildRating($rating){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
global $_LANG;
$rating = round($rating, 2);
$html = '<a href="#" title="'.$_LANG['RATING'].': '.$rating.'">';
for($r = 0; $r < 5; $r++){
if (round($rating) > $r){
$html .= '<img src="/images/ratings/starfull.gif" border="0" />';
} else {
$html .= '<img src="/images/ratings/starhalf.gif" border="0" />';
}
}
$html .= '</a>';
return $html;
}
function tagLine($tagstr, $cat_id){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$html = '';
if (!$tagstr) { return ''; }
$tagstr = str_replace(', ', ',', $tagstr);
$tagstr = str_replace(' ,', ',', $tagstr);
$tags = explode(',', $tagstr);
$num = 0;
foreach($tags as $key=>$value){
$value = strtolower($value);
$html .= '<a href="/catalog/'.$cat_id.'/tag/'.urlencode($value).'">'.$value.'</a>';
if ($num < sizeof($tags)-1) { $html .= ', '; $num++; }
}
return $html;
}
$_LANG['CATALOG']="Каталог";
include 'languages/ru/components/catalog.php';
$inPage->addPathway($user['nickname']);
$inPage->setTitle($_LANG['CATALOG'].' - '.$user['nickname']);
$inPage->setDescription($_LANG['CATALOG'].' - '.$user['nickname']);
if ($_REQUEST['cat']=="cat"){
//get category data
$sql = "SELECT * FROM cms_uc_cats WHERE id = $catid";
} else {
$sql = "SELECT * FROM cms_uc_cats";
}
$catres = $inDB->query($sql);
if ($inDB->num_rows($catres)>0){
$cat = $inDB->fetch_assoc($catres);
$fstruct = unserialize($cat['fieldsstruct']);
$inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.$_LANG['CATALOG'].'" href="'.HOST.'/rss/catalog/'.$cat['id'].'/feed.rss">');
$inPage->addHeadJS('includes/jquery/lightbox/js/jquery.lightbox.js');
$inPage->addHeadCSS('includes/jquery/lightbox/css/jquery.lightbox.css');
//heading
//PATHWAY ENTRY
$left_key = $cat['NSLeft'];
$right_key = $cat['NSRight'];
$path_list = $model_catalog->getCategoryPath($left_key, $right_key);
if ($path_list){
foreach($path_list as $pcat){
$inPage->addPathway($pcat['title'], '/catalog/'.$pcat['id']);
}
}
$inPage->addPathway($cat['title'], '/catalog/'.$cat['id']);
$inPage->setTitle($cat['title']);
//subcategories
$subcats = subCatsList($cat['id'], $cat['NSLeft'], $cat['NSRight']);
//alphabetic list
if ($cat['showabc']){ $alphabet = getAlphaList($cat['id']); } else { $alphabet = ''; }
//Tool links
$shopcartlink = shopCartLink();
//get items SQL
if (!isset($findsql)){
if ($_REQUEST['cat']=="cat"){
$sqlcat='AND i.category_id = '.$catid;
}
$sql = "SELECT i.* , IFNULL(AVG( r.points ), 0) AS rating, i.price as price
FROM cms_uc_items i
LEFT JOIN cms_uc_ratings r ON r.item_id = i.id
WHERE i.published = 1 {$sqlcat} AND i.user_id = {$user['id']}
GROUP BY i.id";
} else {
$sql = $findsql;
if (!$advsearch){ $inPage->addPathway(ucfirst($query)); } else
{ $inPage->addPathway($_LANG['SEARCH_RESULT']); }
}
//ordering
if (isset($_POST['orderby'])) {
$orderby = $inCore->request('orderby', 'str');
$_SESSION['uc_orderby'] = $orderby;
} elseif(isset($_SESSION['uc_orderby'])) {
$orderby = $_SESSION['uc_orderby'];
} else {
$orderby = $cat['orderby'];
}
if (isset($_POST['orderto'])) {
$orderto = $inCore->request('orderto', 'str');
$_SESSION['uc_orderto'] = $orderto;
} elseif(isset($_SESSION['uc_orderto'])) {
$orderto = $_SESSION['uc_orderto'];
} else {
$orderto = $cat['orderto'];
}
$sql .= " ORDER BY ".$orderby." ".$orderto;
//get total items count
$result = $inDB->query($sql);
$itemscount = $inDB->num_rows($result);
//can user add items here?
$is_cat_access = $model_catalog->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id);
$is_can_add = $is_cat_access || $inUser->is_admin;
$smarty->assign('page_title', $_LANG['CATALOG'].' - '.$user['nickname']);
$smarty->assign('id', $catid);
$smarty->assign('cat', $cat);
$smarty->assign('LANG', $_LANG);
$smarty->assign('subcats', $subcats);
$smarty->assign('alphabet', $alphabet);
$smarty->assign('shopcartlink', $shopcartlink);
$smarty->assign('itemscount', $itemscount);
$smarty->assign('is_can_add', $is_can_add);
$smarty->assign('orderform', orderForm($orderby, $orderto, ($cat['view_type']=='shop')));
if ($itemscount>0){
//pagination
if (!@$advsearch) { $perpage = $cat['perpage']; } else { $perpage='1000'; }
$page = $inCore->request('page', 'int', 1);
//request items using pagination
$sql .= " LIMIT ".(($page-1)*$perpage).", $perpage";
$result = $inDB->query($sql) ;
//search details, if needed
$search_details = '';
if (isset($findsql)){
if ($advsearch){
$search_details = '<div class="uc_queryform"><strong>'.$_LANG['SEARCH_RESULT'].' - </strong> '.$_LANG['FOUNDED'].': '.$itemscount.' | <a href="/catalog/'.$cat['id'].'">'.$_LANG['CANCEL_SEARCH'].'</a></div>';
} else {
$search_details = '<div class="uc_queryform"><strong>'.$_LANG['SEARCH_BY_TAG'].'</strong> "'.ucfirst($query).'" ('.$_LANG['MATCHES'].': '.$itemscount.') <a href="/catalog/'.$cat['id'].'">'.$_LANG['CANCEL_SEARCH'].'</a></div>';
}
}
$items = array();
while($item = $inDB->fetch_assoc($result)){
$item['ratingdata'] = ratingData($item['id']);
$item['fdata'] = unserialize($item['fieldsdata']);
$item['price'] = number_format(shopDiscountPrice($item['id'], $item['category_id'], $item['price']), 2, '.', ' ');
$item['rating'] = buildRating($item['ratingdata']['rating']);
$item['is_new'] = isNew($item['id'], $cat['shownew'], $cat['newint']);
$item['tagline'] = tagLine($item['tags'], $cat['id']);
$item['can_edit'] = ($cat['can_edit'] && $is_cat_access && ($inUser->id == $item['user_id'])) || $inUser->is_admin;
$item['fields'] = array();
if (sizeof($fstruct)>0){
$fields_show = 0;
foreach($fstruct as $key=>$value){
if ($fields_show < $cat['fields_show']){
if ($item['fdata'][$key]){
if (strstr($value, '/~h~/')){ $value = str_replace('/~h~/', '', $value); $is_html = true; } else { $is_html = false; }
if (strstr($value, '/~m~/')){
$value = str_replace('/~m~/', '', $value);
$makelink = true;
} else {$makelink = false; }
if (!$is_html){
if (strstr($value, '/~l~/')){
if (@$item['fdata'][$key]!=''){
$field = '<a class="uc_fieldlink" href="/load/url='.$item['fdata'][$key].'" target="_blank">'.str_replace('/~l~/', '', $value).'</a> ('.$inCore->fileDownloadCount($item['fdata'][$key]).')';
}
} else {
if ($makelink){
$field = $inCore->getUCSearchLink($cat['id'], null, $key, $item['fdata'][$key]);
} else {
$field = $item['fdata'][$key];
}
}
} else {
$field = $item['fdata'][$key];
}
if (isset($query)) { if (@strstr($query, $fdata[$key]) || @strstr($fdata[$key], $query)) { $field .= '<span class="uc_findsame"> ← <i>'.$_LANG['MATCHE'].'</i></span>';} }
$fields_show++;
$item['fields'][stripslashes($value)] = stripslashes($field);
}
} else { break; }
}
}
$items[] = $item;
}
if (!$pagemode){
$pagebar = cmsPage::getPagebar($itemscount, $page, $perpage, '/catalog/'.$catid.'-%page%');
} else {
if ($pagemode=='findfirst'){
$pagebar = cmsPage::getPagebar($itemscount, $page, $perpage, '/catalog/'.$catid.'-%page%/find-first/'.urlencode($query));
}
if ($pagemode=='find'){
$pagebar = cmsPage::getPagebar($itemscount, $page, $perpage, '/catalog/'.$catid.'-%page%/find/'.urlencode($query));
}
}
$smarty->assign('cfg', $cfg);
$smarty->assign('page', $page);
$smarty->assign('search_details', $search_details);
$smarty->assign('fstruct', $fstruct);
$smarty->assign('items', $items);
$smarty->assign('pagebar', $pagebar);
}
} else { cmsCore::error404(); }
return true;
?>