<?php
defined('COT_CODE') or die('Wrong URL.');
require_once cot_incfile('extrafields');

// Tables and extras
cot::$db->registerTable('ads');
cot_extrafields_register_table('ads');
global $db_x, $db_ads;
if(!isset($db_ads)) $db_ads = $db_x.'ads';

$ads_positions = array(
  1 => array(
    'title' => 'Главная страница - "Популярные услуги"',
    'hint' => 'вкладка "Популярные услуги", для авторизованных пользователей',
    'ratio' => 1.5,
    'limit' => 0 //не регулируется тут
  ),
  /*
  2 => array(
    'title' => 'Главная страница - "Левый блок"',
    'hint' => 'левый блок над новостями, для авторизованных пользователей',
    'ratio' => 1.2
  ),
  */
  3 => array(
    'title' => 'Страница '.cot_sitename('padeg', 'r').' - "Рекомендуемые"',
    'hint' => 'блок "Рекомендуемые", после описания',
    'ratio' => 1,
    'limit' => 10
  ),
  4 => array(
    'title' => 'Страница '.cot_sitename('padeg', 'r').' - "Правый блок"',
    'hint' => 'блок справа, ниже списка категорий',
    'ratio' => 0.8,
    'limit' => 3
  ),
  5 => array(
    'title' => 'Выделение '.cot_sitename('padeg', 'r').' цветом',
    'hint' => cot_sitename('phrases', 'vasha', 'fcharup').' будет более '.cot_sitename('words', 'zametnee').' среди других, рекомендуем использовать вместе с услугой "Поднятие '.cot_sitename('padeg', 'r').'"',
    'ratio' => 0.5,
    'limit' => 0 // не влияет
  ),
  6 => array(
    'title' => 'Поднятие '.cot_sitename('padeg', 'r'),
    'hint' => cot_sitename('phrases', 'vasha', 'fcharup').' будет '.cot_sitename('words', 'showed').' на первой странице поиска',
    'ratio' => 0.7,
    'limit' => 4
  ),
  7 => array(
    'title' => 'Страница заказа - "Правый блок"',
    'hint' => cot_sitename('phrases', 'vasha', 'fcharup').' будет '.cot_sitename('words', 'showed').' у покупателей в заказах',
    'ratio' => 0.7,
    'limit' => 3
  ),
);

$ads_merge_pos = array(  // поиск других баннеров (могут быть одновременно выведены)
  1 => array(5, 6),
  5 => array(1, 6),
  6 => array(1, 5),
);

$ads_positions_special = array(
  'market_showonindex' => 1, //ссылка на id позиции в случае изменений в $ads_positions,
  'market_top' => 6,
  'market_bold' => 5,
);

function ads_show($pos = 0, $prdid = 0, $parcat = '', $cat = '', $catattr = '', $cnt = 1, $addview = true)
{
    global $sys, $usr, $cfg, $db, $db_users, $db_ads, $db_market, $db_structure, $structure;
    
    require_once cot_incfile('market', 'module');

    $where = array();
    $catsquery = array();
    $cnt = (int)$cnt;

    $where['item_position'] = "item_position=".$pos;
    $where['item_published'] = "item_paused=0";
    $where['item_expire'] = "item_expire >='".(int)$sys['now']."'";
    if($prdid > 0) $where['item_marketid'] = "item_marketid!=".$prdid;

    if (!empty($parcat)) {
      $catsub = cot_structure_children('market', $parcat);
      $catsquery[] = "(item_catvariant=1 AND item_cat IN ('" . implode("','", $catsub) . "'))";
    }
    if (!empty($cat)) {
      $catsub = cot_structure_children('market', $cat);
      $catsquery[] = "(item_catvariant=2 AND item_cat IN ('" . implode("','", $catsub) . "'))";
    }

    if (!empty($catattr)) {
      $catsquery[] = "(item_catvariant=3 AND item_cat='".$catattr."')";
    }

    if(count($catsquery) > 0) {
      $where['item_cats'] = "(".implode(" OR ", $catsquery).")";
    }

    $where = (!empty($where)) ? ' WHERE '.implode(' AND ', $where) : '';

    $ads = $db->query("SELECT * FROM $db_ads 
         $where ORDER BY item_lastshow ASC LIMIT $cnt")->fetchAll();
    
    $parsedmrktids = array();

    $t = new XTemplate(cot_tplfile(array('ads', '_'.$pos), 'plug'));
    $jj=0;
    foreach ($ads as $ad)
    {
      if($ad['item_marketid'] > 0 && !in_array($ad['item_marketid'], $parsedmrktids)) {
        $item = $db->query("SELECT * FROM $db_market WHERE item_id=".$ad['item_marketid']." AND item_userid=".$ad['item_userid'].' AND item_state=0 AND item_ismoder!=0 LIMIT 1')->fetch();
        if($item['item_id'] > 0) {
          $jj++;

          $t->assign(cot_generate_markettags($item, 'ADPRD_', $cfg['market']['shorttextlen'], $usr['isadmin'], $cfg['homebreadcrumb']));
          $t->assign(cot_generate_usertags($item['item_userid'], 'ADPRD_OWNER_'));
          $t->assign(ads_generate_tags($ad, 'ADS_ROW_'));
          $t->assign(array(
              'ADS_ROW_NUM' => $jj,
          ));

          $t->parse('MAIN.ROW');

          if($addview) ads_tracks($ad['item_id'], 'show');  // записываем показ
        } else {
          $db->update($db_ads,  array('item_expire' => 0, 'item_paused' => ($ad['item_expire'] - $sys['now'])), "item_id=".(int)$ad['item_id']);
        }
        $parsedmrktids[] = $ad['item_marketid'];
      }
    }
    $t->parse('MAIN');

    return ($jj > 0 ? $t->text('MAIN') : '');
}

function ads_generate_tags($ads, $tagPrefix = '')
{
    global $cfg, $L, $Ls, $sys, $usr, $structure, $cot_extrafields, $db_ads, $ads_positions;

    $temp_array = array();

    if (is_int($ads) && $ads > 0)
    {
        $ads = $db->query("SELECT * FROM $db_ads WHERE item_id = ".(int)$ads." LIMIT 1")->fetch();
    }
    if ($ads['item_id'] > 0)
    {
        $temp_array = array(
            'DEL_URL' => ($ads['item_expire'] < $sys['now'] && $ads['item_paused'] == 0) ? cot_url('plug', array('e' => 'ads', 'm' => 'edit', 'act' => 'del', 'id' => $ads['item_id'])) : '',
            'ID' => $ads['item_id'],
            'CLICKS' => $ads['item_track_clicks'],
            'SHOWS' => $ads['item_track_shows'],
            'CATEGORY' => $ads['item_cat'],
            'CATEGORY_TITLE' => htmlspecialchars($structure['market'][$ads['item_cat']]['title']),
            'CLICKS_PERSENT' => ($ads['item_track_shows'] > 0) ?
                round($ads['item_track_clicks'] / $ads['item_track_shows'] * 100, 0)." %" : '0 %',
            'CLICK_URL' => cot_url('plug', 'e=ads&a=click&id='.$ads['item_id']),
	          'EXPIRE' => $ads['item_expire'],
            'PAUSED' => $ads['item_paused'],
            'PAUSED_TIME' => ($ads['item_paused'] > 0) ? cot_build_timegap($sys['now'] - $ads['item_paused']) : '',
            'PERIOD' => cot_declension($ads['item_period'], $Ls['ads_'.$cfg['plugin']['ads']['purchase_period']]),
            'POSITION' => $ads_positions[$ads['item_position']],
            'CAT' => $structure['market'][$ads['item_cat']]
        );

        foreach ($cot_extrafields[$db_ads] as $exfld)
        {
            $tag = mb_strtoupper($exfld['field_name']);
            $exfld_val = cot_build_extrafields_data('item_', $exfld, $row['item_'.$exfld['field_name']]);
            $exfld_title = isset($L['item_' . $exfld['field_name'] . '_title']) ? $L['item_' . $exfld['field_name'] . '_title'] : $exfld['field_description'];
            $temp_array[$tag . '_TITLE'] = $exfld_title;
            $temp_array[$tag] = $exfld_val;
            $temp_array[$tag . '_VALUE'] = $row['item_'.$exfld['field_name']];
        }
    }

    $return_array = array();
    foreach ($temp_array as $key => $val)
    {
      $return_array[$tagPrefix.$key] = $val;
    }

    return $return_array;
}

function ads_tracks($id, $type = 'show')
{
  global $db, $sys, $cfg, $db_ads;

  if ($type == 'show')
  {
    $db->query("UPDATE $db_ads SET item_track_shows = item_track_shows+1, item_lastshow = ".$sys['now']." WHERE item_id = ".(int)$id."");
  }
  elseif($type == 'click')
  {
     $db->query("UPDATE $db_ads SET item_track_clicks = item_track_clicks+1 WHERE item_id = ".(int)$id."");
  }
}

/**
 * Создание платежки
 * @param string $area тип услуги, по-умолчанию пополнение счета
 * @param int $summ стоимость
 * @param array $options дополнительные параметры
 */
function cot_payments_create_adsorder($summ, $options = array())
{
	global $db_payments, $db_payments_balance, $db, $sys, $cfg, $usr;

  require_once cot_incfile('payments', 'module');

	if(empty($summ))
	{
		cot_redirect(cot_url('payments', 'm=error&msg=3', '', true));
	}

	$payinfo['pay_userid'] = $usr['id'];
	$payinfo['pay_area'] = 'ads';
	$payinfo['pay_summ'] = $summ;
	$payinfo['pay_cdate'] = $sys['now'];
	$payinfo['pay_status'] = 'new';

	if (count($options) > 0)
	{
		foreach ($options as $i => $opt)
		{
			$payinfo['pay_' . $i] = $opt;
		}
	}

  $return = false;

  if($payinfo['pay_userid'] > 0 && cot_payments_getuserbalance($payinfo['pay_userid']) >= $payinfo['pay_summ']) {
  	$db->insert($db_payments, $payinfo);
  	$id = $db->lastInsertId();

  	if (cot_payments_updatestatus($id, 'paid'))
    {
  		cot_payments_updateuserbalance($payinfo['pay_userid'], -$payinfo['pay_summ'], $id);

      $return = true;
  		/* === Hook === */
  		foreach (cot_getextplugins('payments.billing.paid.done') as $pl)
  		{
  			include $pl;
  		}
  		/* ===== */
  	}
  }

  return $return;
}