PageRenderTime 56ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/amfphp/services/TicketsDAO.php

https://bitbucket.org/fxrialab/tickets
PHP | 446 lines | 369 code | 50 blank | 27 comment | 25 complexity | 0188165f87929f90d3df6fce33818f9f MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-1.0, GPL-2.0, MIT
  1. <?php
  2. class TicketsDAO {
  3. private $link;
  4. function TicketsDAO() {
  5. $this->link = new Datasource();
  6. }
  7. function addProduct($p) {
  8. //check name
  9. $sql = "SELECT count(id) as _count FROM tickets_product WHERE tickets_id='".$p['tickets_id']."' AND seat_name='".$p['type']."' ";
  10. $result = $this->link->_execute($sql);
  11. $row = $this->link->_nextRow($result);
  12. if($row['_count']>0){
  13. return array('error'=>'Seat Type Unavailable');
  14. }else if($p['price']<5){
  15. return array('error'=>'Minimum Seat Price is $5');
  16. }
  17. else{
  18. $sql = "INSERT tickets_product SET tickets_id='".$p['tickets_id']."', seat_name='".$p['type']."',
  19. seat_qty='".$p['quantity']."', seat_price='".$p['price']."',color='".$p['color']."',
  20. enabled='".($p['enabled']=='true' ? 1: 0)."', handicap='".($p['handicap']=='true' ? 1: 0)."' ";
  21. $this->link->_execute($sql);
  22. $p['id'] = mysql_insert_id();
  23. //insert for ticket children
  24. $sql = "SELECT id FROM tickets WHERE parent_id='".$p['tickets_id']."'";
  25. $result = $this->link->_execute($sql);
  26. while($row = $this->link->_nextRow($result)){
  27. $sql = "INSERT tickets_product SET tickets_id='".$row['id']."', seat_name='".$p['type']."',
  28. seat_qty='".$p['quantity']."', seat_price='".$p['price']."',color='".$p['color']."',
  29. enabled='".($p['enabled']=='true' ? 1: 0)."', handicap='".($p['handicap']=='true' ? 1: 0)."' ";
  30. $this->link->_execute($sql);
  31. }
  32. return $p;
  33. }
  34. }
  35. function updateProduct($p) {
  36. //get seat_name old
  37. $sql = "SELECT * FROM tickets_product WHERE id='".$p['id']."'";
  38. $result = $this->link->_execute($sql);
  39. $row = $this->link->_nextRow($result);
  40. $seat_name_old = $row['seat_name'];
  41. $seat_price_old = $row['seat_price'];
  42. //check name
  43. $sql = "SELECT count(id) as _count FROM tickets_product WHERE tickets_id='".$p['tickets_id']."' AND seat_name='".$p['type']."' AND id<>'".$p['id']."' ";
  44. $result = $this->link->_execute($sql);
  45. $row = $this->link->_nextRow($result);
  46. if($row['_count']>0){
  47. $p['error'] = "Seat Type Unavailable";
  48. $p['type'] = $seat_name_old;
  49. }else if($p['price']<5){
  50. $p['error'] = "Minimum Seat Price is $5";
  51. $p['price'] = $seat_price_old;
  52. }
  53. $listid = $this->getListTicketProductIdOfChildren($p['tickets_id'], $seat_name_old);
  54. $listid[] = $p['id'];
  55. $sql = "UPDATE tickets_product SET seat_name='".$p['type']."',
  56. seat_qty='".$p['quantity']."', seat_price='".$p['price']."',color='".$p['color']."',
  57. enabled='".($p['enabled']=='true' ? 1: 0)."', handicap='".($p['handicap']=='true' ? 1: 0)."'
  58. WHERE id IN (".join(',',$listid).")";
  59. $this->link->_execute($sql);
  60. return $p;
  61. }
  62. function removeProduct($id) {
  63. $sql = "SELECT * FROM tickets_product WHERE id='".$id."'";
  64. $result = $this->link->_execute($sql);
  65. $row = $this->link->_nextRow($result);
  66. $listid = $this->getListTicketProductIdOfChildren($row['tickets_id'], $row['seat_name']);
  67. $listid[] = $id;
  68. $sql = "DELETE FROM tickets_product WHERE id IN (".join(',',$listid).")";
  69. return $this->link->_execute($sql);
  70. }
  71. function getEvent($id) {
  72. $sql = "SELECT * FROM tickets WHERE id='".$id."' LIMIT 1";
  73. $result = $this->link->_execute($sql);
  74. $row = $this->link->_nextRow($result);
  75. if($row !==FALSE) {
  76. $row['title'] = $row['ticevent_name'];
  77. $row['timeBegin '] = $row['ticevent_startdate'];
  78. $row['timeEnd '] = $row['ticevent_enddate'];
  79. $row['ticevent_desc'] = $row['detail'];
  80. $row['seatsxml'] = $row['seatsxml'];
  81. $row['logoUrl'] = $row['ticevent_logoimage'];
  82. //get products
  83. $row['listProducts'] = $this->getProducts($row['id']);
  84. if(count($row['listProducts'])==0){//set default
  85. $arrDefault = array();
  86. $arrDefault[]=array('tickets_id'=>$row['id'],'type'=>"Sample 1",'quantity'=>1,'price'=>20,'handicap'=>'false','color'=>0xED1C24,'enabled'=>'true');
  87. $arrDefault[]=array('tickets_id'=>$row['id'],'type'=>"Sample 2",'quantity'=>1,'price'=>10,'handicap'=>'false','color'=>0x00A651,'enabled'=>'true');
  88. $arrDefault[]=array('tickets_id'=>$row['id'],'type'=>"Handicap 1",'quantity'=>1,'price'=>5,'handicap'=>'true','color'=>0x0054A6,'enabled'=>'true');
  89. $seatsxml = "<seatsxml><products>";
  90. foreach($arrDefault as $p){
  91. $p = $this->addProduct($p);
  92. $seatsxml .= '<product id="'.$p['id'].'" tickets_id="'.$p['tickets_id'].'" type="'.$p['type'].'" quantity="'.$p['quantity'].'" price="'.$p['price'].'" handicap="'.$p['handicap'].'" color="'.$p['color'].'" enabled="'.$p['enabled'].'" />';
  93. }
  94. $seatsxml .= "</products></seatsxml>";
  95. $row['seatsxml'] = $seatsxml;
  96. $row['listProducts'] = $this->getProducts($row['id']);
  97. }
  98. //chartsxml
  99. $row['chartsxml'] = $this->getChart($row['chart_id']);
  100. }
  101. return $row;
  102. }
  103. function getProducts($tickets_id) {
  104. $query = "SELECT * FROM tickets_product WHERE tickets_id='".$tickets_id."' ";
  105. $result = $this->link->_execute($query);
  106. $returnArr = array();
  107. while($row = mysql_fetch_array($result)) {
  108. $row['type'] = $row['seat_name'];
  109. $row['price'] = $row['seat_price'];
  110. $row['quantity'] = $row['seat_qty'];
  111. $returnArr[] = $row;
  112. }
  113. return $returnArr;
  114. }
  115. function getChart($id){
  116. $query = "SELECT chartsxml FROM ticket_seatcharts WHERE id='".$id."' ";
  117. $result = $this->link->_execute($query);
  118. $row = $this->link->_nextRow($result);
  119. if($row) return $row['chartsxml'];
  120. return '';
  121. }
  122. function getProductsAvailableByTicketId($tickets_id) {
  123. $query = "SELECT * FROM tickets_product WHERE tickets_id='".$tickets_id."' AND enabled='1' ";
  124. $result = $this->link->_execute($query);
  125. $returnArr = array();
  126. while($row = mysql_fetch_array($result)) {
  127. $row['type'] = $row['seat_name'];
  128. $row['price'] = $row['seat_price'];
  129. $row['quantity'] = 0;
  130. $row['available'] = $this->remainingTicket($row['id'], $tickets_id);
  131. $returnArr[] = $row;
  132. }
  133. return $returnArr;
  134. }
  135. function saveEvent($e) {
  136. $query = "UPDATE tickets SET seatsxml='".$e['seatsxml']."', chart_id='".$e['chart_id']."', ticevent_seat_chart='".$e['bgImage']."' WHERE id='".$e['id']."' ";
  137. $this->link->_execute($query);
  138. //update again products
  139. if(isset($e['products']) && is_array($e['products'])){
  140. foreach($e['products'] as $p){
  141. $this->updateProduct($p);
  142. }
  143. }
  144. //update seatsxml for children
  145. $chartsxml = $e['seatsxml'];
  146. $sql = "SELECT id FROM tickets WHERE parent_id='".$e['id']."'";
  147. $result = $this->link->_execute($sql);
  148. $listid = array();
  149. while($row=$this->link->_nextRow($result)){
  150. $listid[] = $row['id'];
  151. }
  152. if(count($listid)>0){
  153. //get list product $chartsxml
  154. $xml = simplexml_load_string($chartsxml);
  155. $xmlarray = get_object_vars($xml);
  156. $listp = array();
  157. if(isset($xmlarray['products'])){
  158. foreach ($xmlarray['products'] as $p) {
  159. $p =get_object_vars($p);
  160. $p = $p['@attributes'];
  161. $listp[]=$p;
  162. }
  163. }
  164. foreach($listid as $tickets_id){
  165. $chartsxml_new = $chartsxml;
  166. foreach($listp as $p){
  167. //check p exists
  168. $sql = "SELECT * FROM tickets_product WHERE tickets_id='".$tickets_id."' AND seat_name='".$p['type']."' ";
  169. $result = $this->link->_execute($sql);
  170. if(!($row = $this->link->_nextRow($result))){//insert
  171. $sql = "INSERT INTO tickets_product SET tickets_id='".$tickets_id."',seat_name='".$p['type']."',seat_qty='".$p['quantity']."',
  172. seat_price='".$p['price']."',enabled='".$p['enabled']."',handicap='".$p['handicap']."',color='".$p['color']."' ";
  173. $this->link->_execute($sql);
  174. $id_new = mysql_insert_id();
  175. }else{
  176. $id_new = $row['id'];
  177. $sql = "UPDATE tickets_product SET seat_qty='".$p['quantity']."',
  178. seat_price='".$p['price']."',enabled='".$p['enabled']."',handicap='".$p['handicap']."',color='".$p['color']."'
  179. WHERE id='".$id_new."'";
  180. $this->link->_execute($sql);
  181. }
  182. $id_old = $p['id'];
  183. //update id for product
  184. $old = '/id="'.$id_old.'"/';
  185. $new = 'id="'.$id_new.'"';
  186. $chartsxml_new = preg_replace($old,$new , $chartsxml_new);
  187. //update group_id for seat, shape
  188. $old = '/group_id="'.$id_old.'"/';
  189. $new = 'group_id="'.$id_new.'"';
  190. $chartsxml_new = preg_replace($old,$new , $chartsxml_new);
  191. }
  192. $query = "UPDATE tickets SET seatsxml='".$chartsxml_new."', chart_id='".$e['chart_id']."', ticevent_seat_chart='".$e['bgImage']."' WHERE id='".$tickets_id."' ";
  193. $this->link->_execute($query);
  194. }
  195. }
  196. }
  197. function saveImage($imgdata,$namefile) {
  198. $imgdata = base64_decode($imgdata);
  199. //save image
  200. $des = "../../app/webroot/ticket_images/charts/";
  201. if(!file_exists($des)) {
  202. mkdir($des,0777);
  203. }
  204. $fp = fopen($des.$namefile, "w");
  205. if(!fwrite($fp, $imgdata)) {
  206. fclose($fp);
  207. return false;
  208. }else {
  209. fclose($fp);
  210. return "ticket_images/charts/". $namefile;
  211. }
  212. }
  213. function getRemainingProducts($items) {
  214. for($i=0;$i<count($items);$i++) {
  215. $items[$i]['available'] = $this->remainingTicket($items[$i]['id'], $items[$i]['tickets_id']);
  216. }
  217. return $items;
  218. }
  219. function addToCart($cart) {
  220. //DELETING THE UNPROCESSED TRANSACRTION FROM THE CART TABLE.
  221. $sql="SELECT id,transaction_id FROM ticket_carts WHERE user_id='".$cart['user_id']."' AND pay_status='0'";
  222. $result = $this->link->_execute($sql);
  223. while($row = mysql_fetch_array($result)) {
  224. //delete cart
  225. $sql = "DELETE FROM ticket_carts WHERE id='".$row['id']."'";
  226. $this->link->_execute($sql);
  227. //delete cart detail
  228. $sql = "DELETE FROM ticket_cart_details WHERE cart_id='".$row['id']."'";
  229. $this->link->_execute($sql);
  230. //delete transaction
  231. $sql = "DELETE FROM transaction_ticket WHERE id='".$row['transaction_id']."'";
  232. $this->link->_execute($sql);
  233. }
  234. $sql = "INSERT INTO ticket_carts SET `user_id` = '".$cart['user_id']."', `tickets_id`='".$cart['tickets_id']."', `coupon`='0', `saletax`='0', `ship`='0',
  235. `total_price`='".$cart['total']."', `pay_status`='0', `ssn_id`='".session_id()."'";
  236. $this->link->_execute($sql);
  237. $cart_id = mysql_insert_id();
  238. foreach($cart['items'] as $item) {
  239. if($item['quantity']>0) {
  240. $sql= "INSERT INTO `ticket_cart_details` SET `cart_id`='".$cart_id."', `ticketno`='', `group_id`='".$item['id']."', `group_name`='".$item['type']."',
  241. `price`='".$item['price']."', `qty`='".$item['quantity']."',subTotal='".$item['subTotal']."', `del_method`='print', `user_id`='".$cart['user_id']."'";
  242. $this->link->_execute($sql);
  243. $cart_detail_id = mysql_insert_id();
  244. //insert seat_booked
  245. foreach($item['seats'] as $seat){
  246. $this->addSeatBooked($seat, $cart_id, $cart_detail_id,$cart['tickets_id']);
  247. }
  248. if($cart['noSeat']=='true'){
  249. for($i=0;$i<$item['quantity'];$i++){
  250. $seat = array('section'=>'','row'=>'','number'=>'');
  251. $this->addSeatBooked($seat, $cart_id, $cart_detail_id,$cart['tickets_id']);
  252. }
  253. }
  254. }
  255. }
  256. return $cart_id;
  257. }
  258. function remainingTicket($product_id,$tickets_id) {
  259. $sql = " SELECT seat_qty FROM tickets_product tic WHERE tickets_id ='".$tickets_id."' AND id='".$product_id."' ";
  260. $prod= $this->link->_nextRow($this->link->_execute($sql));
  261. $remain = $prod['seat_qty'];
  262. //get the total no of tickets already sold or of transaction is in progress within the 15 min difference
  263. $sql="SELECT SUM(item.qty) sold FROM ticket_cart_details as item
  264. RIGHT JOIN ticket_carts cart ON (item.cart_id=cart.id)
  265. WHERE cart.tickets_id='".$tickets_id."' AND item.group_id='".$product_id."' AND (cart.pay_status='1' OR ( ADDTIME( cart.tran_time, '0:30:0') >= NOW()) )
  266. GROUP BY item.group_id";
  267. $result=$this->link->_execute($sql);
  268. if( ($row=$this->link->_nextRow($result)) ) {
  269. $remain -= $row['sold'];
  270. }
  271. return $remain;
  272. }
  273. function addSeatBooked($seat,$cart_id,$cart_detail_id,$event_id) {
  274. $ssn = $seat['section'].';'.$seat['row'].';'.$seat['number'];
  275. $sql = "INSERT INTO `ticket_seat_booked` SET `cart_id`='".$cart_id."', `cart_detail_id`='".$cart_detail_id."',
  276. `event_id`='".$event_id."', `seatnumber`='".$seat['section'].$seat['row'].'-'.$seat['number']."', ssn='".$ssn."' ";
  277. mysql_query($sql);
  278. }
  279. function getSeatsBookedByEventId($event_id) {
  280. $sql = "SELECT S.seatnumber,S.event_id FROM ticket_seat_booked as S
  281. RIGHT JOIN ticket_carts cart ON (cart.id = S.cart_id)
  282. WHERE S.event_id='".$event_id."' AND (cart.pay_status='1' OR (ADDTIME( cart.tran_time, '0:30:0') >= NOW()) )";
  283. return $this->link->listResult($this->link->_execute($sql));
  284. }
  285. function getCharts($user_id){
  286. $sql = "SELECT * FROM ticket_seatcharts WHERE user_id='".$user_id."'";
  287. return $this->link->listResult($this->link->_execute($sql));
  288. }
  289. function saveChart($item){
  290. if($item['id']==0){
  291. $sql = "INSERT INTO ticket_seatcharts SET user_id='".$item['user_id']."', name='".$item['name']."', chartsxml='".$item['chartsxml']."' ";
  292. mysql_query($sql);
  293. $item['id'] = mysql_insert_id();
  294. }else{
  295. $sql = "UPDATE ticket_seatcharts SET user_id='".$item['user_id']."', name='".$item['name']."', chartsxml='".$item['chartsxml']."'
  296. WHERE id='".$item['id']."' ";
  297. mysql_query($sql);
  298. }
  299. return $item;
  300. }
  301. function copyChart($event_id,$chart_id){
  302. //get chart
  303. $sql = "SELECT chartsxml,user_id FROM ticket_seatcharts WHERE id='".$chart_id."' LIMIT 1";
  304. $result = $this->link->_execute($sql);
  305. $chart = '';
  306. if(($row =$this->link->_nextRow($result)) ){
  307. $chartsxml = $row['chartsxml'];
  308. //get list product $chartsxml
  309. $xml = simplexml_load_string($chartsxml);
  310. $xmlarray = get_object_vars($xml);
  311. $listp = array();
  312. if(isset($xmlarray['products'])){
  313. foreach ($xmlarray['products'] as $p) {
  314. $p =get_object_vars($p);
  315. $p = $p['@attributes'];
  316. $listp[] = $p;
  317. }
  318. }
  319. //get list event_id
  320. $sql = "SELECT id FROM tickets WHERE id='".$event_id."' OR parent_id='".$event_id."'";
  321. $result = $this->link->_execute($sql);
  322. $listid = array();
  323. while($row=$this->link->_nextRow($result)){
  324. $listid[] = $row['id'];
  325. }
  326. foreach($listid as $tickets_id){
  327. $chartsxml_new = $chartsxml;
  328. //delete product old
  329. $sql = "DELETE FROM tickets_product WHERE tickets_id='".$tickets_id."' ";
  330. $this->link->_execute($sql);
  331. foreach($listp as $p){
  332. $id_old = $p['id'];
  333. $sql = "INSERT INTO tickets_product SET tickets_id='".$tickets_id."',seat_name='".$p['type']."',seat_qty='".$p['quantity']."',
  334. seat_price='".$p['price']."',enabled='".$p['enabled']."',handicap='".$p['handicap']."',color='".$p['color']."' ";
  335. $this->link->_execute($sql);
  336. $id_new = mysql_insert_id();
  337. //update id for product
  338. $old = '/id="'.$id_old.'"/';
  339. $new = 'id="'.$id_new.'"';
  340. $chartsxml_new = preg_replace($old,$new , $chartsxml_new);
  341. //update group_id for seat, shape
  342. $old = '/group_id="'.$id_old.'"/';
  343. $new = 'group_id="'.$id_new.'"';
  344. $chartsxml_new = preg_replace($old,$new , $chartsxml_new);
  345. }
  346. $sql = "UPDATE tickets SET seatsxml='".$chartsxml_new."' WHERE id='".$tickets_id."' ";
  347. $this->link->_execute($sql);
  348. if($tickets_id==$event_id){
  349. //update chart
  350. $chart = $chartsxml_new;
  351. $sql = "UPDATE ticket_seatcharts SET chartsxml='".$chart."' WHERE id='".$chart_id."' ";
  352. $this->link->_execute($sql);
  353. }
  354. }
  355. }
  356. return array('chart_id'=>$chart_id,'chartsxml'=>$chart);
  357. }
  358. function createUser($user){
  359. $sql = "SELECT id FROM users WHERE username='".$user['username']."' ";
  360. $result=$this->link->_execute($sql);
  361. if( ($row=$this->link->_nextRow($result)) ) {
  362. return -1;
  363. }else{
  364. $sql ="INSERT INTO users SET username='".$user['username']."',password='".$user['password']."',user_group_master_id=1,is_validate='1',user_status='1'";
  365. mysql_query($sql);
  366. $user_id = mysql_insert_id();
  367. $fname = addslashes(strtolower($user['first_name']));
  368. $lname = addslashes(strtolower($user['last_name']));
  369. $email = $user['email'];
  370. //$dob = date('Y-m-d',strtotime($user['dob']));
  371. $sql ="INSERT INTO user_details SET user_id='".$user_id."',first_name='".$fname."',last_name='".$lname."',email='".$email."', dob='".$dob."', gender='".$user['gender']."' ";
  372. mysql_query($sql);
  373. return $user_id;
  374. }
  375. }
  376. function getUserId($user){
  377. $sql = "SELECT id FROM users WHERE username='".$user['username']."' AND password='".$user['password']."' AND user_status='1' ";
  378. $result=$this->link->_execute($sql);
  379. if( ($row=$this->link->_nextRow($result)) ) {
  380. return $row['id'];
  381. }
  382. return -1;
  383. }
  384. function getListTicketProductIdOfChildren($parent_id,$seat_name){//private
  385. $sql = "SELECT P.id FROM tickets_product as P
  386. RIGHT JOIN tickets as T ON (T.id=P.tickets_id)
  387. WHERE T.parent_id='".$parent_id."' AND seat_name='".$seat_name."'";
  388. $result = $this->link->_execute($sql);
  389. $listid = array();
  390. while($row=mysql_fetch_array($result)){
  391. $listid[] = $row['id'];
  392. }
  393. return $listid;
  394. }
  395. }
  396. ?>