예제 #1
0
 function printTicketAction()
 {
     if (User::get_access_for_controller('afisha_brone') != 'edit') {
         $this->no_access();
     }
     $key = Route::param('key');
     $keys = (array) explode(',', $key);
     if (count($keys) == 0) {
         Message::GetMessage(0, 'Места не выбраны!');
         HTTP::redirect('backend/afisha/index');
     }
     $printType = Route::param('printType') ? Route::param('printType') : 'base';
     $afisha = DB::select('afisha.*', array('places.name', 'place'), 'places.filename', 'places.address', 'places.city_id')->from('afisha')->join('places')->on('afisha.place_id', '=', 'places.id')->where('afisha.id', '=', (int) Route::param('id'))->find();
     if (!$afisha) {
         return Config::error();
     }
     $city = DB::select()->from('cities')->where('id', '=', $afisha->city_id)->find();
     $seatStr = array();
     $termoSeatStr = array();
     try {
         $dom = Map::factory()->loadFile($afisha->filename)->getDomInstance();
         $gTag = $dom->getElementsByTagName('g');
         foreach ($gTag as $el) {
             $id = $el->getAttribute('id');
             if (in_array($id, $keys)) {
                 if ($el->parentNode->hasAttribute('data-plase')) {
                     $originalPlace = $el->parentNode->getAttribute('data-plase');
                 } elseif ($el->parentNode->parentNode->hasAttribute('data-plase')) {
                     $originalPlace = $el->parentNode->parentNode->getAttribute('data-plase');
                 }
                 if ($originalPlace) {
                     $place = $originalPlace;
                     $place = str_replace(array('места', 'Места'), 'место', $place);
                     $place = str_replace('(левая сторона)', '(лев. сторона)', $place);
                     $place = str_replace('(правая сторона)', '(пр. сторона)', $place);
                     $place = str_replace(',', '<br />', $place);
                     $place = str_replace('ряд', 'ряд:', $place);
                     $seatStr[$id] = $place;
                     $dataInit = json_decode($el->getAttribute('data-init'));
                     $seatStr[$id] .= $dataInit->seat;
                     //                          For termo print
                     preg_match('#^(.*)?, ряд ([0-9]+)#', $originalPlace, $matches);
                     $termoSeatStr[$id]['block'] = $matches[1];
                     $termoSeatStr[$id]['block'] = str_replace('(левая сторона)', '(лев. сторона)', $termoSeatStr[$id]['block']);
                     $termoSeatStr[$id]['block'] = str_replace('(правая сторона)', '(пр. сторона)', $termoSeatStr[$id]['block']);
                     $termoSeatStr[$id]['row'] = $matches[2];
                     $termoSeatStr[$id]['seat'] = $dataInit->seat;
                 }
             }
         }
     } catch (\Exception $e) {
         die('Ошибка загрузки карты');
     }
     $tickets = array();
     foreach ($keys as $key) {
         $priceRow = DB::select('price', 'seats.id')->from('prices')->join('seats', 'LEFT')->on('prices.id', '=', 'seats.price_id')->where('afisha_id', '=', $afisha->id)->where('seats.view_key', '=', $key)->find();
         $tickets[] = Arr::to_object(array('event_name' => $afisha->name, 'print_name' => $afisha->print_name, 'print_name_small' => $afisha->print_name_small, 'event_date' => date('j', $afisha->event_date) . ' ' . Dates::month(date('m', $afisha->event_date)) . ' ' . date('Y', $afisha->event_date) . ' в ' . $afisha->event_time, 'event_place' => $afisha->place, 'event_just_date' => date('j', $afisha->event_date) . ' ' . Dates::month(date('m', $afisha->event_date)) . ' ' . date('Y', $afisha->event_date), 'event_time' => $afisha->event_time, 'event_address' => $afisha->address, 'place_string' => $seatStr[$key], 'place_block' => $termoSeatStr[$key]['block'], 'place_row' => $termoSeatStr[$key]['row'], 'place_seat' => $termoSeatStr[$key]['seat'], 'price' => $priceRow->price, 'phone' => $city->phone, 'barcode' => $afisha->id . '-' . $key));
     }
     if ($printType == 'base') {
         echo View::tpl(array('tickets' => $tickets), 'Afisha_orders/Print');
     } else {
         echo View::tpl(array('tickets' => $tickets), 'Afisha_orders/PrintTermo');
     }
     die;
 }
예제 #2
0
 public function moreAffisheAction()
 {
     $page = (int) Arr::get($_POST, 'page');
     if (!isset($page)) {
         $this->error('Ошибка загрузки');
     }
     // list posts
     if (isset($_SESSION['idCity'])) {
         // select places id
         $places = DB::select('id')->from('places')->where('city_id', '=', $_SESSION['idCity'])->where('status', '=', DB::expr(1))->as_object()->execute();
         $ids = array();
         foreach ($places as $key => $value) {
             $ids[] = $value->id;
         }
         if (count($ids) == 0) {
             $ids[] = 0;
         }
     }
     $dbObj = DB::select('afisha.*', array('places.name', 'p_name'), array(DB::expr('MIN(prices.price)'), 'p_from'), array(DB::expr('MAX(prices.price)'), 'p_to'))->from('afisha')->join('places', 'left outer')->on('afisha.place_id', '=', 'places.id')->on('places.status', '=', DB::expr(1))->join('prices', 'left outer')->on('afisha.id', '=', 'prices.afisha_id')->where('afisha.status', '=', 1)->where('afisha.event_date', '>', DB::expr(time()));
     if (isset($_SESSION['idCity'])) {
         $dbObj->where_open()->where('afisha.place_id', 'IN', $ids)->or_where('afisha.city_id', '=', $_SESSION['idCity'])->where_close();
     }
     $result = $dbObj->group_by('afisha.id')->order_by('afisha.event_date')->limit(Config::get('limit'))->offset(($page - 1) * (int) Config::get('limit'))->execute()->as_array();
     foreach ($result as $key => $value) {
         $result[$key]['p_name'] = Afisha\Models\Afisha::getItemPlace($value, true);
         $result[$key]['cost'] = Afisha\Models\Afisha::getItemPrice($value, true);
         $result[$key]['event_date'] = date('j', $value['event_date']) . ' ' . Dates::month(date('n', $value['event_date'])) . ' ' . date('Y', $value['event_date']);
         if (!is_file(HOST . HTML::media('images/afisha/medium/' . $value['image']))) {
             $result[$key]['image'] = false;
         }
     }
     // Count of all posts
     $dbObj = DB::select(array(DB::expr('COUNT(afisha.id)'), 'count'))->from('afisha');
     if (isset($_SESSION['idCity'])) {
         $dbObj->where_open()->where('afisha.place_id', 'IN', $ids)->or_where('afisha.city_id', '=', $_SESSION['idCity'])->where_close();
     }
     $count = $dbObj->where('afisha.status', '=', 1)->where('afisha.event_date', '>', DB::expr(time()))->as_object()->execute()->current()->count;
     // Set view button more load
     $showBut = true;
     if ($count <= Config::get('limit') * $page) {
         $showBut = false;
     }
     // Render template
     $this->success(array('result' => $result, 'showBut' => $showBut));
 }
예제 #3
0
 public static function getWidgetDate($date)
 {
     $time = strtotime($date);
     return date('j', $time) . ' ' . Dates::month(date('m', $time)) . ' ' . date('Y', $time);
 }
예제 #4
0
 function printAction()
 {
     if (User::get_access_for_controller('afisha_brone') != 'edit') {
         $this->no_access();
     }
     $seats = (array) $_POST['SEATS'];
     $printType = $_POST['print-type'] ? $_POST['print-type'] : 'base';
     if (count($seats) == 0) {
         Message::GetMessage(0, 'Места не выбраны!');
         HTTP::redirect('backend/afisha_orders/edit/' . Route::param('id'));
     }
     $order = DB::select()->from($this->tablename)->where('id', '=', Route::param('id'))->find();
     if (!$order) {
         return Config::error();
     }
     $afisha = DB::select('afisha.*', array('places.name', 'place'), 'places.filename', 'places.address', 'places.city_id')->from('afisha')->join('places')->on('afisha.place_id', '=', 'places.id')->where('afisha.id', '=', $order->afisha_id)->find();
     if (!$afisha) {
         return Config::error();
     }
     $city = DB::select()->from('cities')->where('id', '=', $afisha->city_id)->find();
     $seatStr = array();
     $termoSeatStr = array();
     try {
         $dom = Map::factory()->loadFile($afisha->filename)->getDomInstance();
         $gTag = $dom->getElementsByTagName('g');
         foreach ($gTag as $el) {
             $id = $el->getAttribute('id');
             if (in_array($id, $seats)) {
                 if ($el->parentNode->hasAttribute('data-plase')) {
                     $originalPlace = $el->parentNode->getAttribute('data-plase');
                 } elseif ($el->parentNode->parentNode->hasAttribute('data-plase')) {
                     $originalPlace = $el->parentNode->parentNode->getAttribute('data-plase');
                 }
                 if ($originalPlace) {
                     $place = str_replace('(левая сторона)', '(лев. сторона)', $originalPlace);
                     $place = str_replace('(правая сторона)', '(пр. сторона)', $place);
                     $place = str_replace(',', '<br />', $place);
                     $place = str_replace('ряд', 'ряд:', $place);
                     $seatStr[$id] = str_replace(array('места', 'Места'), 'место', $place);
                     $dataInit = json_decode($el->getAttribute('data-init'));
                     $seatStr[$id] .= $dataInit->seat;
                     //                          For termo print
                     preg_match('#^(.*)?, ряд ([0-9]+)#', $originalPlace, $matches);
                     $termoSeatStr[$id]['block'] = $matches[1];
                     $termoSeatStr[$id]['row'] = $matches[2];
                     $termoSeatStr[$id]['seat'] = $dataInit->seat;
                     $termoSeatStr[$id]['block'] = str_replace('(левая сторона)', '(лев. сторона)', $termoSeatStr[$id]['block']);
                     $termoSeatStr[$id]['block'] = str_replace('(правая сторона)', '(пр. сторона)', $termoSeatStr[$id]['block']);
                 }
             }
         }
     } catch (\Exception $e) {
         die('Ошибка загрузки карты');
     }
     $tickets = array();
     foreach ($seats as $seat) {
         if (User::info()->role_id != 2 && User::get_access_for_controller('afisha_print_unlimit') == 'edit' && strpos($order->printed_seats, $seat) !== false) {
             continue;
         }
         $priceRow = DB::select('price')->from('prices')->join('seats', 'LEFT')->on('prices.id', '=', 'seats.price_id')->where('afisha_id', '=', $order->afisha_id)->where('seats.view_key', '=', $seat)->find();
         $tickets[] = Arr::to_object(array('event_name' => $afisha->name, 'print_name' => $afisha->print_name, 'print_name_small' => $afisha->print_name_small, 'event_date' => date('d', $afisha->event_date) . ' ' . Dates::month(date('m', $afisha->event_date)) . ' ' . date('Y', $afisha->event_date) . ' в ' . $afisha->event_time, 'event_place' => $afisha->place, 'event_just_date' => date('j', $afisha->event_date) . ' ' . Dates::month(date('m', $afisha->event_date)) . ' ' . date('Y', $afisha->event_date), 'event_time' => $afisha->event_time, 'event_address' => $afisha->address, 'place_string' => $seatStr[$seat], 'place_block' => $termoSeatStr[$seat]['block'], 'place_row' => $termoSeatStr[$seat]['row'], 'place_seat' => $termoSeatStr[$seat]['seat'], 'price' => $priceRow->price, 'phone' => $city->phone, 'barcode' => $afisha->id . '-' . $order->id . '-' . $seat));
     }
     //            Update print seats keys
     if (User::info()->role_id != 2 && User::get_access_for_controller('afisha_print_unlimit') == 'edit') {
         $oldSeats = $order->printed_seats;
         $newSeats = array();
         if (strlen($oldSeats)) {
             $oldSeats = explode(',', $oldSeats);
             if (count($oldSeats)) {
                 $newSeats = (array) $oldSeats;
             }
         }
         foreach ($seats as $seat) {
             $newSeats[] = $seat;
         }
         $newSeats = array_filter(array_unique($newSeats));
         $newSeats = implode(',', $newSeats);
         DB::update($this->tablename)->set(array('printed_seats' => $newSeats))->where('id', '=', $order->id)->execute();
     }
     //            Update order status
     $newOrder = DB::select()->from('afisha_orders')->where('id', '=', $order->id)->find();
     $printedAllSeats = true;
     $printedSeats = array_filter(explode(',', $newOrder->printed_seats));
     foreach (array_filter(explode(',', $newOrder->seats_keys)) as $seat) {
         if (!in_array($seat, $printedSeats)) {
             $printedAllSeats = false;
         }
     }
     if (User::info()->role_id != 2 && $printedAllSeats) {
         \Core\Common::update('afisha_orders', array('status' => 'success'))->where('id', '=', (int) $order->id)->execute();
         $prices = DB::select('id')->from('prices')->where('afisha_id', '=', $order->afisha_id)->find_all();
         $pricesArr = array();
         if (count($prices)) {
             foreach ($prices as $key => $value) {
                 $pricesArr[] = $value->id;
             }
             \Core\Common::update('seats', array('status' => 3))->where('view_key', 'IN', array_filter(explode(',', $order->seats_keys)))->where('price_id', 'IN', $pricesArr)->execute();
         }
     }
     if ($printType == 'base') {
         echo View::tpl(array('tickets' => $tickets), 'Afisha_orders/Print');
     } else {
         echo View::tpl(array('tickets' => $tickets), 'Afisha_orders/PrintTermo');
     }
     die;
 }