PageRenderTime 159ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Aggregator/DealsBundle/Controller/PublicController.php

https://bitbucket.org/rami_mikhail/deal-aggregator
PHP | 433 lines | 376 code | 45 blank | 12 comment | 27 complexity | f7a01b0f644f75aaa1751bcfef353916 MD5 | raw file
Possible License(s): BSD-3-Clause, BSD-2-Clause, LGPL-2.0, MIT, Apache-2.0, LGPL-2.1, LGPL-3.0
  1. <?php
  2. /*
  3. * To change this template, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. namespace Aggregator\DealsBundle\Controller;
  7. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Aggregator\DealsBundle\Entity\link;
  10. use Aggregator\DealsBundle\Entity\City;
  11. use Aggregator\DealsBundle\Entity\Feed;
  12. use Aggregator\DealsBundle\Entity\Category;
  13. use Aggregator\DealsBundle\Form\linkType;
  14. use Symfony\Component\HttpFoundation\File\UploadedFile;
  15. class publicController extends Controller {
  16. public function indexAction($id = 20) {
  17. $user = array();
  18. $securityContext = $this->get('security.context');
  19. if ($securityContext->getToken() != null) {
  20. $user = $securityContext->getToken()->getUser()->getFullName();
  21. }
  22. $em = $this->getDoctrine()->getEntityManager();
  23. $data = array();
  24. $count = $em->getConnection()->fetchAssoc('select count(*) as count from link');
  25. $counter = $count['count'];
  26. $allEntities = $em->getRepository('AggregatorDealsBundle:link')->findAll();
  27. $entities = $em->getRepository('AggregatorDealsBundle:link')->findBy($data, null, 10, 10 * $id);
  28. $cities = $em->getRepository('AggregatorDealsBundle:City')->findAll();
  29. $feed = $em->getRepository('AggregatorDealsBundle:Feed')->findAll();
  30. $categories = $em->getRepository('AggregatorDealsBundle:Category')->findAll();
  31. $two = array();
  32. $three = array();
  33. $four = array();
  34. foreach ($allEntities as $fee) {
  35. $data[] = $fee->getFeed();
  36. $name = $fee->getFeed();
  37. if (!isset($four["$name"])) {
  38. $four["$name"] = 0;
  39. }
  40. if (in_array($name, $data)) {
  41. $four["$name"] = $four["$name"] + 1;
  42. }
  43. }
  44. foreach ($allEntities as $fee) {
  45. $data[] = $fee->getCity();
  46. $name = $fee->getCity();
  47. if (!isset($two["$name"])) {
  48. $two["$name"] = 0;
  49. }
  50. if (in_array($name, $data)) {
  51. $two["$name"] = $two["$name"] + 1;
  52. }
  53. }
  54. $data = array();
  55. foreach ($allEntities as $fee) {
  56. $data[] = $fee->getCategory();
  57. $name = $fee->getCategory();
  58. if (!isset($three["$name"])) {
  59. $three["$name"] = 0;
  60. }
  61. if (in_array($name, $data)) {
  62. $three["$name"] = $three["$name"] + 1;
  63. }
  64. }
  65. return $this->render('AggregatorDealsBundle:Public:index.html.twig', array('entities' => $entities,
  66. 'cities' => $cities,
  67. 'feeds' => $feed,
  68. 'counters' => $two,
  69. 'counter_four' => $four,
  70. 'categories' => $categories,
  71. 'counter_two' => $three,
  72. 'counter' => $counter,
  73. 'user' => $user));
  74. }
  75. public function limitAction($id) {
  76. echo($id);
  77. $em = $this->getDoctrine()->getEntityManager();
  78. $data = array();
  79. $count = $em->getConnection()->fetchAssoc('select count(*) as count from link');
  80. echo($count['count']);
  81. $entities = $em->getRepository('AggregatorDealsBundle:link')->findBy($data, null, 10, 10 * $id);
  82. foreach ($entities as $entity) {
  83. echo($entity->getTitle());
  84. }
  85. return $this->render('AggregatorDealsBundle:Public:limit.html.twig');
  86. }
  87. public function jsonAction() {
  88. $user = array();
  89. $securityContext = $this->get('security.context');
  90. if ($securityContext->getToken() != null) {
  91. $user = $securityContext->getToken()->getUser()->getFullName();
  92. }
  93. $em = $this->getDoctrine()->getEntityManager();
  94. $data = array();
  95. $count = $em->getConnection()->fetchAssoc('select count(*) as count from link');
  96. $counter = $count['count'];
  97. $allEntities = $em->getRepository('AggregatorDealsBundle:link')->findAll();
  98. foreach ($allEntities as $linker) {
  99. $data[] = array('title' => $linker->getTitle(),
  100. 'image' => $linker->getImage(),
  101. 'link' => $linker->getLink(),
  102. 'regularprice' => $linker->getRegularprice(),
  103. 'price' => $linker->getPrice(),
  104. 'logo' => $linker->getFeed()->getLogo());
  105. }
  106. $data = array('items' => $data, 'numRows' => count($data));
  107. return new Response(json_encode($data));
  108. }
  109. public function cordAction() {
  110. $user = array();
  111. $securityContext = $this->get('security.context');
  112. if ($securityContext->getToken() != null) {
  113. $user = $securityContext->getToken()->getUser()->getFullName();
  114. }
  115. $em = $this->getDoctrine()->getEntityManager();
  116. $data = array();
  117. $allEntities = $em->getRepository('AggregatorDealsBundle:link')->findAll();
  118. foreach ($allEntities as $linker) {
  119. if ($linker->getLatitude() != null) {
  120. $data[] = array(
  121. 'title' => $linker->getTitle(),
  122. 'lat' => $linker->getLatitude(),
  123. 'lon' => $linker->getLongitude());
  124. }
  125. }
  126. $data = array('items' => $data, 'numRows' => count($data));
  127. return new Response(json_encode($data));
  128. }
  129. public function dojoAction() {
  130. $test = array();
  131. return $this->render('AggregatorDealsBundle:Public:dojo.html.twig', array('test' => $test));
  132. }
  133. public function meAction($id) {
  134. echo($id);
  135. $test = $this->get('fkr_simple_pie.rss');
  136. $test->set_feed_url('http://feeds.feedburner.com/groupongreater-toronto-area');
  137. //$test->set_feed_url('http://www.dealfind.com/rss/toronto.rss');
  138. // Run SimplePie.
  139. $test->init();
  140. $test->handle_content_type();
  141. $tags = $test->get_channel_tags();
  142. $data = $test->get_items();
  143. foreach ($data as $dat) {
  144. echo("THIS IS TITLE " . $dat->get_title());
  145. echo("THIS IS CONTENT ");
  146. print_r($dat->get_description());
  147. echo("THIS IS LINKS ");
  148. print_r($dat->get_links());
  149. $image = $this->scrapeImage($dat->get_description());
  150. print_r("THIS IS IMAGE ");
  151. print_r($image);
  152. //print_r($dat->get_image_url());
  153. }
  154. return $this->render('AggregatorDealsBundle:Public:me.html.twig', array('rss' => $data));
  155. }
  156. public function findAction() {
  157. $em = $this->getDoctrine()->getEntityManager();
  158. $searchForm = $this->createSearchForm();
  159. $request = $this->getRequest();
  160. $searchForm->bindRequest($request);
  161. $data = $request->get('form');
  162. if (!empty($data['search'])) {
  163. $query = $em->createQuery('SELECT p FROM AggregatorDealsBundle:link
  164. p WHERE p.title like :title
  165. ORDER BY p.title ASC')
  166. ->setParameter('title', '%' . $data['search'] . '%');
  167. $entity = $query->getResult();
  168. }
  169. $response = $this->render('AggregatorDealsBundle:Public:search.html.twig', array('items' => $entity,
  170. 'search_form' => $searchForm->createView(),
  171. )
  172. );
  173. return $response;
  174. }
  175. public function findByCatAction() {
  176. $em = $this->getDoctrine()->getEntityManager();
  177. $searchForm = $this->createSearchForm();
  178. $request = $this->getRequest();
  179. $searchForm->bindRequest($request);
  180. $data = $request->get('form');
  181. if (!empty($data['search'])) {
  182. $query = $em->createQuery('SELECT p FROM AggregatorDealsBundle:link p
  183. join p.category c where c.name = :category
  184. ORDER BY c.name ASC')
  185. ->setParameter('category', $data['search']);
  186. $entity = $query->getResult();
  187. }
  188. $response = $this->render('AggregatorDealsBundle:Public:search.html.twig', array('items' => $entity,
  189. 'search_form' => $searchForm->createView(),
  190. )
  191. );
  192. return $response;
  193. }
  194. public function findBySiteAction() {
  195. $em = $this->getDoctrine()->getEntityManager();
  196. $searchForm = $this->createSearchForm();
  197. $request = $this->getRequest();
  198. $searchForm->bindRequest($request);
  199. $data = $request->get('form');
  200. if (!empty($data['search'])) {
  201. $query = $em->createQuery('SELECT p FROM AggregatorDealsBundle:link p
  202. join p.feed f where f.name like :feed
  203. ORDER BY f.name ASC')
  204. ->setParameter('feed', '%' . $data['search'] . '%');
  205. $entity = $query->getResult();
  206. }
  207. $response = $this->render('AggregatorDealsBundle:Public:search.html.twig', array('items' => $entity,
  208. 'search_form' => $searchForm->createView(),
  209. )
  210. );
  211. return $response;
  212. }
  213. public function findByCityAction() {
  214. $em = $this->getDoctrine()->getEntityManager();
  215. $searchForm = $this->createSearchForm();
  216. $request = $this->getRequest();
  217. $searchForm->bindRequest($request);
  218. $data = $request->get('form');
  219. if (!empty($data['city'])) {
  220. $query = $em->createQuery('SELECT p FROM AggregatorDealsBundle:link p
  221. left join p.city c
  222. left join p.category m
  223. where c.name like :city
  224. ORDER BY c.name,m.name ASC')
  225. ->setParameter('city', '%' . $data['city'] . '%');
  226. $entity = $query->getResult();
  227. }
  228. $response = $this->render('AggregatorDealsBundle:Public:search.html.twig', array('items' => $entity,
  229. 'search_form' => $searchForm->createView(),
  230. )
  231. );
  232. return $response;
  233. }
  234. public function findByFilterAction() {
  235. $em = $this->getDoctrine()->getEntityManager();
  236. $searchForm = $this->createFilterForm();
  237. $user = array();
  238. $securityContext = $this->get('security.context');
  239. if ($securityContext->getToken() != null) {
  240. $user = $securityContext->getToken()->getUser()->getFullName();
  241. }
  242. $em = $this->getDoctrine()->getEntityManager();
  243. $data = array();
  244. $count = $em->getConnection()->fetchAssoc('select count(*) as count from link');
  245. $counter = $count['count'];
  246. $allEntities = $em->getRepository('AggregatorDealsBundle:link')->findAll();
  247. $entities = $em->getRepository('AggregatorDealsBundle:link')->findBy($data, null, 10, 10 * $id);
  248. $cities = $em->getRepository('AggregatorDealsBundle:City')->findAll();
  249. $feed = $em->getRepository('AggregatorDealsBundle:Feed')->findAll();
  250. $categories = $em->getRepository('AggregatorDealsBundle:Category')->findAll();
  251. $two = array();
  252. $three = array();
  253. $four = array();
  254. foreach ($allEntities as $fee) {
  255. $data[] = $fee->getFeed();
  256. $name = $fee->getFeed();
  257. if (!isset($four["$name"])) {
  258. $four["$name"] = 0;
  259. }
  260. if (in_array($name, $data)) {
  261. $four["$name"] = $four["$name"] + 1;
  262. }
  263. }
  264. foreach ($allEntities as $fee) {
  265. $data[] = $fee->getCity();
  266. $name = $fee->getCity();
  267. if (!isset($two["$name"])) {
  268. $two["$name"] = 0;
  269. }
  270. if (in_array($name, $data)) {
  271. $two["$name"] = $two["$name"] + 1;
  272. }
  273. }
  274. $data = array();
  275. foreach ($allEntities as $fee) {
  276. $data[] = $fee->getCategory();
  277. $name = $fee->getCategory();
  278. if (!isset($three["$name"])) {
  279. $three["$name"] = 0;
  280. }
  281. if (in_array($name, $data)) {
  282. $three["$name"] = $three["$name"] + 1;
  283. }
  284. }
  285. $request = $this->getRequest();
  286. $searchForm->bindRequest($request);
  287. $data = $request->get('form');
  288. if (!empty($data['city'])) {
  289. $query = $em->createQuery('SELECT p FROM AggregatorDealsBundle:link p
  290. left join p.city c
  291. left join p.feed f
  292. left join p.category x
  293. where c.name like :city
  294. and f.name like :feed
  295. and x.name like :category
  296. ORDER BY x.name ASC')
  297. ->setParameter('city', '%' . $data['city'] . '%')
  298. ->setParameter('feed', '%' . $data['feed'] . '%')
  299. ->setParameter('category', '%' . $data['category'] . '%');
  300. $entity = $query->getResult();
  301. }
  302. $response = $this->render('AggregatorDealsBundle:Public:index.html.twig', array('entities' => $entity,
  303. 'cities' => $cities,
  304. 'feeds' => $feed,
  305. 'counters' => $two,
  306. 'counter_four' => $four,
  307. 'categories' => $categories,
  308. 'counter_two' => $three,
  309. 'counter' => $counter,
  310. 'user' => $user,
  311. 'search_form' => $searchForm->createView(),
  312. )
  313. );
  314. return $response;
  315. }
  316. public function uploadAction() {
  317. $uploadForm = $this->createUploadForm();
  318. $request = $this->getRequest();
  319. $uploadForm->bindRequest($request);
  320. $data = $request->get('form');
  321. print_r($_FILES);
  322. $result = move_uploaded_file($_FILES['form']['tmp_name']['file'], 'uploads/' . $_FILES['form']['name']['file']);
  323. echo("this is result " . $result);
  324. $entity = array();
  325. $response = $this->render('AggregatorDealsBundle:Public:upload.html.twig', array('items' => $entity,
  326. 'upload_form' => $uploadForm->createView(),
  327. )
  328. );
  329. return $response;
  330. }
  331. private function createSearchForm() {
  332. return $this->createFormBuilder()
  333. ->add('search', 'search')
  334. ->getForm()
  335. ;
  336. }
  337. private function createFilterForm() {
  338. return $this->createFormBuilder()
  339. ->add('city', 'text')
  340. ->add('category', 'text')
  341. ->add('feed', 'text')
  342. ->getForm()
  343. ;
  344. }
  345. private function createUploadForm() {
  346. return $this->createFormBuilder()
  347. ->add('file', 'file')
  348. ->getForm()
  349. ;
  350. }
  351. private function scrapeImage($text) {
  352. $pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
  353. preg_match_all($pattern, $text, $link);
  354. return $link;
  355. }
  356. public function parseGrouponAction() {
  357. $url = "http://api.groupon.com/v2/deals?client_id=a663679ed3c8b01097634333fa743cf3a721f4fe";
  358. $ch = curl_init();
  359. // Set request url
  360. curl_setopt($ch, CURLOPT_URL, $url);
  361. // TRUE to include the header in the output.
  362. curl_setopt($ch, CURLOPT_HEADER, false);
  363. // A custom request method to use instead of "GET" or "HEAD" when doing a HTTP request.
  364. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  365. //curl_setopt($ch, CURLOPT_GET, $feed);
  366. $data = curl_exec($ch);
  367. $data = json_decode($data);
  368. //print_r($data);
  369. foreach ($data->deals as $dat) {
  370. foreach ($dat as $test) {
  371. foreach ($test as $t) {
  372. echo($t->title);
  373. echo($t->price->formattedAmount);
  374. echo($t->value->formattedAmount);
  375. print_r($t->tags);
  376. print_r($t->locationNote);
  377. echo("<br>");
  378. }
  379. print_r($test->tags);
  380. print_r($test->locationNote);
  381. }
  382. print_r($dat->tags);
  383. print_r($dat->locationNote);
  384. }
  385. return $this->render('AggregatorDealsBundle:Public:me.html.twig', array('rss' => $data));
  386. }
  387. }
  388. ?>