PageRenderTime 51ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/cmd/main/cinema_subscribers.php

https://bitbucket.org/kostyantyn_kyyashko/kino-teatr.ua
PHP | 346 lines | 269 code | 62 blank | 15 comment | 30 complexity | f5f063aad2f749ea222f0bed422ee0c7 MD5 | raw file
Possible License(s): LGPL-2.1, LGPL-2.0
  1. <?
  2. require_once('../init.php');
  3. if(!$task['id'])
  4. die('error');
  5. sys::useLib('main::shows');
  6. ///////////////////////////////////////////////////////
  7. function getCinemaBillBoard($cinema_id, $user)
  8. {
  9. sys::useLib('main::cinemas');
  10. sys::useLib('main::films');
  11. sys::useLib('main::cards');
  12. global $_db, $_cfg;
  13. $date=sys::date2Db(date("d.m.Y"),false,'%d.%m.%Y');
  14. $lang = $_cfg['sys::lang_id']?intval($_cfg['sys::lang_id']):1;
  15. $q="
  16. SELECT
  17. shw.begin,
  18. shw.end,
  19. shw.film_id,
  20. shw.partner_id,
  21. flm.title_orig,
  22. flm.rating,
  23. flm.pre_rating,
  24. flm.votes,
  25. flm.pre_votes,
  26. flm.year,
  27. flm.`3d` as `film_3d`,
  28. shw.id AS `show_id`,
  29. hls_lng.title AS `hall`,
  30. cnm_lng.title AS `cinema`,
  31. cnm.site,
  32. cnm.notice_begin,
  33. cnm.notice_end,
  34. cnm_lng.notice,
  35. cnm.ticket_url,
  36. cnm.phone,
  37. hls.cinema_id,
  38. hls.id AS `hall_id`,
  39. hls.scheme,
  40. hls.`3d`,
  41. flm_lng.title AS `film`,
  42. shw.hall_id
  43. FROM `#__main_shows` AS `shw`
  44. LEFT JOIN `#__main_cinemas_halls` AS `hls`
  45. ON hls.id=shw.hall_id
  46. LEFT JOIN `#__main_films` AS `flm`
  47. ON flm.id=shw.film_id
  48. LEFT JOIN `#__main_cinemas` AS `cnm`
  49. ON cnm.id=hls.cinema_id
  50. LEFT JOIN `#__main_cinemas_lng` AS `cnm_lng`
  51. ON cnm_lng.record_id=cnm.id
  52. AND cnm_lng.lang_id=".$lang."
  53. LEFT JOIN `#__main_cinemas_halls_lng` AS `hls_lng`
  54. ON hls_lng.record_id=hls.id
  55. AND hls_lng.lang_id=".$lang."
  56. LEFT JOIN `#__main_films_lng` AS `flm_lng`
  57. ON flm_lng.record_id=shw.film_id
  58. AND flm_lng.lang_id=".$lang."
  59. WHERE
  60. cnm.id=".intval($cinema_id)."
  61. AND shw.end>='".mysql_real_escape_string($date)."'
  62. AND shw.begin<='".mysql_real_escape_string($date)."'
  63. ORDER BY cnm.order_number, shw.hall_id, hls.order_number, shw.begin
  64. ";
  65. $r=$_db->query($q);
  66. $result=array();
  67. while ($obj=$_db->fetchAssoc($r))
  68. {
  69. $q = "
  70. SELECT tms.time, tms.prices, tms_lng.note, tms.3d as seans_3d, tms.sale_id, tms.sale_status, tms.id as time_id
  71. FROM `#__main_shows_times` AS `tms`
  72. LEFT JOIN `#__main_shows_times_lng` AS `tms_lng`
  73. ON tms_lng.record_id=tms.id
  74. AND tms_lng.lang_id=".$lang."
  75. WHERE
  76. tms.show_id=".$obj['show_id']." AND tms.time >= '00:00' AND tms.time <= '23:59'
  77. ORDER BY tms.time
  78. ";
  79. $r2=$_db->query($q);
  80. $obj['prices']=array();
  81. while ($time=$_db->fetchAssoc($r2))
  82. {
  83. $time['past']=false;
  84. if($date==date('Y-m-d').' 00:00:00')
  85. {
  86. $timestamp=sys::date2Timestamp(date('Y-m-d').' '.$time['time'],'%Y-%m-%d %H:%M:%S');
  87. if($timestamp<time())
  88. $time['past']=true;
  89. else
  90. $time['past']=false;
  91. }
  92. $time['time']=sys::cutStrRight($time['time'],3);
  93. // $time['url']=main_cards::getCardUrl($time['time'],$_GET['date'],$obj['film_id'],$obj['hall_id']);
  94. $prices=explode(',',$time['prices']);
  95. $obj['prices']=array_merge($obj['prices'],$prices);
  96. $obj['times'][]=$time;
  97. }
  98. $obj['prices']=array_unique($obj['prices']);
  99. sort($obj['prices']);
  100. $obj['price_range']=trim($obj['prices'][0]);
  101. if(count($obj['prices'])>1)
  102. {
  103. $obj['price_range'].='-'.trim($obj['prices'][count($obj['prices'])-1]);
  104. }
  105. // if($obj['scheme'])
  106. // $obj['scheme_url']=main_cinemas::getHallSchemeUrl($obj['hall_id']);
  107. // else
  108. // $obj['scheme_url']=false;
  109. $obj['film_url']=main_films::getFilmUrl($obj['film_id']);
  110. $obj['cinema_url']=main_cinemas::getCinemaUrl($obj['cinema_id']);
  111. $obj['begin']=sys::db2Date($obj['begin'],false, $_cfg['sys::date_format']);
  112. $obj['end']=sys::db2Date($obj['end'],false, $_cfg['sys::date_format']);
  113. $result[$obj['cinema_id']]['title']=$obj['cinema'];
  114. if(strtotime($obj['notice_begin'])<time() && time()<strtotime($obj['notice_end']))
  115. {
  116. $result[$obj['cinema_id']]['notice']=$obj['notice'];
  117. }
  118. $result[$obj['cinema_id']]['phone']=$obj['phone'];
  119. $result[$obj['cinema_id']]['id']=$obj['cinema_id'];
  120. $result[$obj['cinema_id']]['site']=$obj['site'];
  121. /*if($obj['ticket_url'] && $_user['id']==2)
  122. $obj['ticket_url']=sys::rewriteUrl('?mod=main&act=register');*/
  123. // $result[$obj['cinema_id']]['ticket_url']=$obj['ticket_url'];
  124. $result[$obj['cinema_id']]['shows_url']=main_cinemas::getCinemaShowsUrl($obj['cinema_id']);
  125. $result[$obj['cinema_id']]['url']=main_cinemas::getCinemaUrl($obj['cinema_id']);
  126. $result[$obj['cinema_id']]['halls'][$obj['hall_id']]['title']=$obj['hall'];
  127. $result[$obj['cinema_id']]['halls'][$obj['hall_id']]['3d']=$obj['3d'];
  128. $result[$obj['cinema_id']]['halls'][$obj['hall_id']]['scheme_url']=$obj['scheme_url'];
  129. $result[$obj['cinema_id']]['halls'][$obj['hall_id']]['url']=main_cinemas::getHallUrl($obj['cinema_id'],$obj['hall_id']);
  130. $result[$obj['cinema_id']]['halls'][$obj['hall_id']]['shows'][]=$obj;
  131. if (count($obj['times'])!=0)
  132. {
  133. $result[$obj['cinema_id']]['shows'][$obj['show_id']]=$obj;
  134. $result[$obj['cinema_id']]['countfilms']++;
  135. }
  136. }
  137. return $result;
  138. }
  139. function tplBillBoard($billboard)
  140. {
  141. global $_db, $_cfg;
  142. $countfilms = 0;
  143. // $_db->printR($billboard);
  144. ob_start();
  145. ?>
  146. <table width="100%" cellpadding="3" cellspacing="3" border="0">
  147. <?
  148. foreach ($billboard as $obj) {
  149. // массив с индексами для *
  150. $notes = array();
  151. foreach ($obj['shows'] as $show)
  152. foreach ($show['times'] as $time)
  153. {
  154. $trim_note = $time["note"];
  155. if($trim_note && !in_array($trim_note, $notes)) $notes[] = $trim_note;
  156. }
  157. if($obj['countfilms']>0):
  158. $countfilms += $obj['countfilms'];
  159. ?>
  160. <tr>
  161. <th colspan=5>
  162. <b><a href='<?=$obj['url']?>' title='<?=sys::translate('main::cinema')?> <?=$obj['title']?>'><?=sys::translate('main::cinema')?> <?=$obj['title']?></a></b>
  163. </th>
  164. </tr>
  165. <tr>
  166. <th><?=sys::translate('main::film')?></th>
  167. <th><?=sys::translate('main::hall')?></th>
  168. <th><?=sys::translate('main::shows')?></th>
  169. <th>&nbsp;</th>
  170. <th><?=sys::translate('main::prices')?></th>
  171. </tr>
  172. <?
  173. $arrshows = $obj['shows'];
  174. usort($arrshows, "cmp");
  175. foreach ($arrshows as $show) { ?>
  176. <tr>
  177. <td><a href='<?=$show['film_url']?>' title="<?=sys::translate('main::film')?> <?=$show['film']?> <?=$show['year']?>"><?=$show['film']?></a></td>
  178. <td>
  179. <?if($show['hall']):?>
  180. <?=$show['hall']?>
  181. <?else:?>
  182. &mdash;
  183. <?endif;?>
  184. </td>
  185. <td>
  186. <?
  187. $is_2d = 0;
  188. $has_3d = 0;
  189. $timesa = array();
  190. //if(sys::isDebugIP()) sys::printR($show['times']);
  191. foreach ($show['times'] as $time)
  192. {
  193. $has_3d += $time['seans_3d'];
  194. $star_class = $time['past']?"mark_star_time_past":"mark_star_time";
  195. $note = array_search($time['note'],$notes,true);
  196. $note = ($note===FALSE)?"":'<sup class="'.$star_class.'"><a href=# onclick=\'return ShowNote('.$obj['id'].')\'>'.str_repeat("*",$note+1)."</a></sup>";
  197. $is_2d = ($show['film_3d'] && $show['3d'] && !$time['seans_3d'])?"<sup class='mark3d'><b>2D</b></sup>":"";
  198. if($time['past'])
  199. {
  200. $timesa[] = "<span class='timepast'>".strip_tags($time['time'])."$is_2d</span>$note";
  201. } else{
  202. $timesa[] = "<span class='time'>".$time['time']."<b>$is_2d</b></span>$note";
  203. }
  204. }
  205. $timesar = implode('<span class="delimiter">, </span>', $timesa);
  206. ?>
  207. <?=$timesar?>
  208. </td>
  209. <td>
  210. <?if($show['film_3d'] && $show['3d'] && $has_3d):?>
  211. <b>3D</b>
  212. <?else:?>
  213. &nbsp;
  214. <?endif;?>
  215. </td>
  216. <td><?=$show['price_range']?> <?=sys::translate('main::grn')?></td>
  217. </tr>
  218. <? } //endforeach; // of foreach ($obj['shows'] as $show)?>
  219. <? endif; // if($obj['countfilms']>0):?>
  220. <? } //endforeach; ?>
  221. </table>
  222. <?
  223. $result = ob_get_clean();
  224. return ($countfilms?$result:"");
  225. }
  226. function loadAdminMessage($lang_id)
  227. {
  228. global $_db;
  229. $info=$_db->getRecord('delivery_message', "date_from<=curdate() and date_to>=curdate() and trim(concat(title_ru,title_uk))<>'' AND trim(concat(message_ru,message_uk))<>''");
  230. if($info)
  231. {
  232. if($info[title_uk]=="") $info[title_uk] = $info[title_ru];
  233. if($info[title_ru]=="") $info[title_ru] = $info[title_uk];
  234. if($info[title_ru].$info[title_uk] == "") return "";
  235. if($info[message_uk]=="") $info[message_uk] = $info[message_ru];
  236. if($info[message_ru]=="") $info[message_ru] = $info[message_uk];
  237. if($info[message_ru].$info[message_uk] == "") return "";
  238. $lng = ($lang_id==3)?"uk":"ru";
  239. $subject = trim($info["title_$lng"]);
  240. $text = trim($info["message_$lng"]);
  241. if(trim(strip_tags($subject.$text)) == "") return "";
  242. $message = <<<message
  243. <table width="98%" cellpadding=10>
  244. <!--tr><td bgcolor="#e31e24" style="font-size:14px; padding:10px 20px; color:#fff;"><b>Вам сообщение:</b></td></tr-->
  245. <tr><td>
  246. <div style="margin: 0pt 0pt 20px;">
  247. <h4 style="font-size: 14px;">$subject</h4>
  248. <div style="font-size: 12px;text-align:justify;">$text</div>
  249. </div>
  250. </td></tr></table><hr>
  251. message;
  252. return $message;
  253. }
  254. return "";
  255. }
  256. ///////////////////////// MAIN //////////////////////////////
  257. $_db->setValue('sys_mods_tasks','last_run',gmdate('Y-m-d H:i:s'),intval($task['id']));
  258. $r=$_db->query("SELECT * FROM `#__main_users_cinema_subscribe`");
  259. $users = array();
  260. $otpiska = "<hr>Вы подписаны на рассылку расписания выбранных Вами кинотеатров, для изменения или отписки посетите свой профиль на портале: <a href=https://kino-teatr.ua/ru/main/user_profile.phtml>kino-teatr.ua</a><hr>";
  261. while ($subscribe=$_db->fetchAssoc($r))
  262. {
  263. $users[$subscribe['user_id']][]=$subscribe['cinema_id'];
  264. }
  265. //$_db->printR($users);
  266. foreach ($users as $user_id=>$cinema)
  267. {
  268. sys::loadEnvVars($user_id);
  269. sys::useLang("main"); //Подключить языковой файл модуля
  270. $email['billboard'] = "";
  271. foreach ($cinema as $cinema_id)
  272. {
  273. $billboard = getCinemaBillBoard($cinema_id);
  274. $email['billboard'] .= tplBillBoard($billboard);
  275. }
  276. $admin_message = loadAdminMessage($_cfg['sys::lang_id']); // взять из таблицы delivery_message
  277. if($email['billboard'])
  278. {
  279. $email['billboard'] = $admin_message.$email['billboard'].$otpiska;
  280. //sys::printR($email['billboard']);
  281. sys::addMailTpl($user_id,'main::user_cinema_subscriber',$email); // user_cinema_subscriber - шаблон в админке
  282. }
  283. }
  284. ?>