Phalcon Framework 5.6.1

TypeError: implode(): Argument #2 ($array) must be of type ?array, int given

/var/www/studyforyou.info/apps/modules/frontend/controllers/UniversityProfileController.php (178)
#0implode
/var/www/studyforyou.info/apps/modules/frontend/controllers/UniversityProfileController.php (178)
  1. <?php
  2.  
  3. namespace Modules\Frontend\Controllers;
  4.  
  5. use Phalcon\Mvc\View;
  6.  
  7. class UniversityProfileController extends ControllerBase
  8. {
  9. public function indexAction($univer)
  10. {
  11. $this->assets->addCss('frontend/dist/css/university-profile.css' . $this->disableCache());
  12. $this->assets->addJs('frontend/js/university-profile.js' . $this->disableCache());
  13. $this->assets->addJs('frontend/js/rating.js' . $this->disableCache());
  14.  
  15. $lang_code = $this->language;
  16. $languagesModel = new \Languages();
  17. $lang = $languagesModel::findFirstByCode($lang_code)->id;
  18.  
  19. //second param is filters you want use
  20. $translates = $this->setViewTranslates($lang, ['menu', 'header', 'filters', 'footer', 'content', 'tabs']);
  21.  
  22. $university = $this->modelsManager->createBuilder()
  23. ->addFrom('Universities', 'u')
  24. ->columns("
  25. u.id id,
  26. u.original_title original_title,
  27. u.university_logo_id university_logo_id,
  28. utr.title title,
  29. u.is_apply_free is_apply_free,
  30. utr.status status,
  31. u.cost_per_year as cost,
  32. u.is_hostel_available as has_hostel,
  33. u.country_id country_id,
  34. u.city_id city_id,
  35. utr.url_suffix url_suffix,
  36. u.university_url as url,
  37. utr.ratings ratings,
  38. utr.internationality internationality,
  39. utr.for_students for_students,
  40. utr.hostel hostel,
  41. u.founded_at founded_at,
  42. u.students_count students_count,
  43. m.original_url as image_url,
  44. utr.seo_title seo_title,
  45. utr.seo_description seo_description,
  46. utr.seo_keywords seo_keywords,
  47. utr.url_cannonical url_cannonical,
  48. utr.presentation_url presentation_url,
  49. utr.courses_description courses_description,
  50. utr.speciality_description speciality_description
  51. ")
  52. ->leftjoin('UniversityTranslates', 'utr.university_id = u.id AND utr.language_id = :language:', 'utr')
  53. ->leftjoin('Medias', 'm.id = u.banner_image_id', 'm')
  54. ->where("utr.url_suffix = :url_suffix:")
  55. ->andWhere("u.is_published = 1")
  56. ->getQuery()
  57. ->getSingleResult(['url_suffix' => $univer, 'language' => $lang]);
  58.  
  59. $univer_study_levels = \UniversityStudyLevels::findByUniversityId($university->id)->toArray();
  60. $univer_sciences = \UniversityScinces::findByUniversityId($university->id)->toArray();
  61. $univer_langs = \UniversityLanguages::findByUniversityId($university->id)->toArray();
  62.  
  63. $study_levels_ids = $this->getField($univer_study_levels, 'study_level_id');
  64. $sciences_ids = $this->getField($univer_sciences, 'scince_id');
  65. $langs_ids = $this->getField($univer_langs, 'language_id');
  66.  
  67. if ($study_levels_ids && count($study_levels_ids)) {
  68. $study_levels = \FilterTranslates::find(["id IN ({study_levels_ids:array}) AND language_id = :language_id:", "bind" => ["study_levels_ids" => $study_levels_ids, "language_id" => $lang]])->toArray();
  69. }
  70.  
  71. if ($sciences_ids && count($sciences_ids)) {
  72. $sciences = \FilterTranslates::find(["id IN ({sciences_ids:array}) AND language_id = :language_id:", "bind" => ["sciences_ids" => $sciences_ids, "language_id" => $lang]])->toArray();
  73. }
  74.  
  75. if ($langs_ids && count($langs_ids)) {
  76. $study_langs = \FilterTranslates::find([
  77. "id IN ({langs_ids:array}) AND language_id = :lang:",
  78. "bind" => ["langs_ids" => $langs_ids, 'lang' => $lang]])->toArray();
  79. }
  80.  
  81. $country = \CountriesTranslates::findFirst(["country_id = :country_id: AND language_id = :language_id:", "bind" => ["country_id" => $university->country_id, "language_id" => $lang]])->title;
  82. $city = \CitiesTranslates::findFirst(["city_id = :city_id: AND language_id = :language_id:", "bind" => ["city_id" => $university->city_id, "language_id" => $lang]])->title;
  83.  
  84. $status = \FilterTranslates::findFirst(["id = :status: AND language_id = :language_id:", "bind" => ["status" => $university->status, "language_id" => $lang]])->title;
  85.  
  86.  
  87. $universityMedia = [new \stdClass()];
  88. $getUniversityMedia = \UniversityMedias::find(["university_id = :university_id: AND type = 'university'", "bind" => ["university_id" => $university->id]]);
  89. if (count($getUniversityMedia) > 0) {
  90. $universityMedia = $getUniversityMedia;
  91. }
  92.  
  93. $universityHostelMedia = [new \stdClass()];
  94. $getUniversityHostelMedia = \UniversityMedias::find(["university_id = :university_id: AND type = 'hostel'", "bind" => ["university_id" => $university->id]]);
  95. if (count($getUniversityHostelMedia) > 0) {
  96. $universityHostelMedia = $getUniversityHostelMedia;
  97. }
  98.  
  99. $univerLogo = \Medias::findFirst($university->university_logo_id)->large_url;
  100. $logoAlt = \MediaSeo::findFirst(["media_id = :media_id: AND language_id = :language_id:", "bind" => ["media_id" => $university->university_logo_id, "language_id" => $lang]])->alt;
  101.  
  102. $coursesList = $this->modelsManager->createBuilder()
  103. ->addFrom('Courses', 'c')
  104. ->columns("
  105. c.id id, c.country_id country_id, c.city_id city_id, ct.type_id type_id, c.university_id university_id, ct.category_id category_id,
  106. ct.duration duration, c.cost cost, c.registration_fee registration_fee, c.registration_end registration_end, c.study_start study_start,
  107. c.study_hours study_hours, ct.title title, ct.url_suffix as url")
  108. ->leftjoin('CourseTranslates', 'c.id = ct.course_id AND ct.language_id = :lang_id:', 'ct')
  109. ->where("c.university_id = :university_id:")
  110. ->andWhere("c.is_published = 1")
  111. ->getQuery()
  112. ->execute(['university_id' => $university->id, 'lang_id' => $lang]);
  113.  
  114. foreach ($coursesList as $course) {
  115. $courseCountry = \CountriesTranslates::findFirst(["country_id = :country_id: AND language_id = :language_id:", "bind" => ["country_id" => $course->country_id, "language_id" => $lang]])->title;
  116. $courseCity = \CitiesTranslates::findFirst(["city_id = :city_id: AND language_id = :language_id:", "bind" => ["city_id" => $course->city_id, "language_id" => $lang]])->title;
  117. $courseType = \FilterTranslates::findFirst(["id = :type_id: AND language_id = :language_id:", "bind" => ["type_id" => $course->type_id, "language_id" => $lang]])->title;
  118. $courseCategory = \FilterTranslates::findFirst(["id = :category_id: AND language_id = :language_id:", "bind" => ["category_id" => $course->category_id, "language_id" => $lang]])->title;
  119. $courseDuration = \FilterTranslates::findFirst(["id = :duration_id: AND language_id = :language_id:", "bind" => ["duration_id" => $course->duration, "language_id" => $lang]])->title;
  120.  
  121. $langs = \CourseLanguages::findByCourseId($course->id)->toArray();
  122. $courseLangsIds = $this->getField($langs, 'language_id');
  123. if (count($courseLangsIds))
  124. $courseLangs = \FilterTranslates::find([
  125. "id IN ({langs_ids:array}) AND language_id = :lang:",
  126. "bind" => ["langs_ids" => $courseLangsIds, "lang" => $lang]
  127. ])->toArray();
  128.  
  129.  
  130. $coursesInfo[$course->id] = [
  131. 'contry' => $courseCountry,
  132. 'city' => $courseCity,
  133. 'type' => $courseType,
  134. 'category' => $courseCategory,
  135. 'duration' => $courseDuration,
  136. 'langs' => $courseLangs ? implode(', ', $this->getField($courseLangs, 'title')) : '',
  137. ];
  138. }
  139.  
  140. $univerAccomodation = \AccomodationUniversities::findByUniversityId($university->id)->toArray();
  141.  
  142. if (count($univerAccomodation)) {
  143. $univer_accomodation_ids = $this->getField($univerAccomodation, 'accomodation_id');
  144.  
  145. $accomodations = $this->modelsManager->createBuilder()
  146. ->addFrom('Accomodation', 'a')
  147. ->columns("
  148. a.id id, a.cost cost, at.title title, at.url_suffix as url, m.large_url as image, cot.title as country, cit.title as city,
  149. ft.title as status, ms.title as image_title, ms.alt as image_alt")
  150. ->leftjoin('AccomodationTranslates', 'a.id = at.accommodation_id AND at.language_id = :lang_id:', 'at')
  151. ->leftjoin('Medias', 'm.id = a.image_id', 'm')
  152. ->leftjoin('MediaSeo', 'ms.media_id = m.id AND ms.language_id = :lang_id:', 'ms')
  153. ->leftjoin('CountriesTranslates', 'cot.country_id = a.country_id AND cot.language_id = :lang_id:', 'cot')
  154. ->leftjoin('CitiesTranslates', 'cit.city_id = a.city_id AND cit.language_id = :lang_id:', 'cit')
  155. ->leftjoin('FilterTranslates', 'ft.id = at.status_id AND ft.language_id = :lang_id:', 'ft')
  156. ->where("a.id IN ({acc_ids:array})", ['acc_ids' => $univer_accomodation_ids])
  157. ->andWhere("a.is_published = 1")
  158. ->getQuery()
  159. ->execute(['lang_id' => $lang]);
  160. }
  161.  
  162. $univerArticles = \UniversityArticles::findByUniversityId($university->id)->toArray();
  163. $univer_articles_ids = $this->getField($univerArticles, 'article_id');
  164.  
  165. if ($univer_articles_ids && count($univer_articles_ids)) {
  166. $univer_articles = $this->modelsManager->createBuilder()
  167. ->addFrom('Articles', 'a')
  168. ->columns("
  169. a.id id, at.url_suffix url_suffix, at.title title")
  170. ->leftjoin('ArticleTranslates', 'a.id = at.article_id AND at.language_id = :lang_id:', 'at')
  171. ->where("at.article_id IN ({univer_articles_ids:array})", ['univer_articles_ids' => $univer_articles_ids])
  172. ->andWhere("a.is_published = 1")
  173. ->getQuery()
  174. ->execute(['lang_id' => $lang]);
  175. }
  176.  
  177. $univerInfo = [
  178. 'study_levels' => implode(', ', $this->getField($study_levels, 'title')),
  179. 'sciences' => implode(', ', $this->getField($sciences, 'title')),
  180. 'langs' => implode(', ', $this->getField($study_langs, 'title')),
  181. 'country' => $country,
  182. 'city' => $city,
  183. 'status' => $status,
  184. 'logo' => $univerLogo,
  185. 'logoAlt' => $logoAlt,
  186. 'rating' => $this->getUniverRating($university->id),
  187. ];
  188.  
  189. $this->view->setVars([
  190. 'univer' => $university,
  191. 'univerInfo' => $univerInfo,
  192. 'courses' => $coursesList,
  193. 'coursesInfo' => $coursesInfo,
  194. 'specialities' => \Specialities::find(["university_id = :univer_id: AND is_published = 1", "bind" => ["univer_id" => $university->id]]),
  195. 'univerMedias' => $universityMedia,
  196. 'hostelMedias' => $universityHostelMedia,
  197. 'meta' => [
  198. 'title' => $university->seo_title,
  199. 'description' => $university->seo_description,
  200. 'keywords' => $university->seo_keywords,
  201. 'cannonical' => $university->url_cannonical,
  202. ],
  203. 'study_levels' => \FilterTranslates::findManyByGroup('study_level', $lang),
  204. 'study_langs' => \FilterTranslates::findManyByGroup('study_lang', $lang),
  205. 'study_types' => \FilterTranslates::findManyByGroup('study_form', $lang),
  206. 'sorting' => \FilterTranslates::findManyByGroup('sorting', $lang),
  207. 'articles' => $univer_articles,
  208. 'popularUnivers' => $this->getPopularUniversities($lang),
  209. 'relatedUnivers' => $this->getRelatedUniversities($university->country_id, $university->city_id, $university->id, $lang),
  210. 'currentCity' => $city,
  211. 'accomodations' => $accomodations ? : false,
  212. ]);
  213.  
  214. //language titles
  215. $university_translate = \UniversityTranslates::findByUniversityId($university->id);
  216. $this->changeLangViewParams($university_translate);
  217.  
  218. $breadcrumbs = $this->getBaseBreadCrumbs($translates, $lang_code);
  219.  
  220. $breadcrumbs[] = [
  221. 'pos' => '2',
  222. 'title' => $translates['t_content']->university_catalog,
  223. 'url' => '/' . $lang_code . '/universities'
  224. ];
  225.  
  226. $breadcrumbs[] = [
  227. 'pos' => '3',
  228. 'title' => $university->title,
  229. 'url' => '/' . $lang_code . '/universities/' . $university->url_suffix,
  230. 'last' => true
  231. ];
  232.  
  233. $this->view->breadcrumbs = $breadcrumbs;
  234. }
  235.  
  236. public function getSpecialitiesAction()
  237. {
  238.  
  239. $univer = $this->request->get('univer_id');
  240. //$lang = $this->request->get('lang');
  241. $lang = $this->language;
  242. $langId = \Languages::findFirstByCode($lang)->id;
  243. $filters = $this->request->get('filters');
  244. $sort = $this->request->get('sort');
  245.  
  246.  
  247. $result = \SpecialityTranslates::getSpecialitiesByUniver($univer, $sort, $langId, $filters);
  248.  
  249. //second param is filters you want use
  250. $this->setViewTranslates($langId, ['content']);
  251.  
  252. $this->view->setRenderLevel(
  253. View::LEVEL_ACTION_VIEW
  254. );
  255.  
  256. $this->view->partial('university-profile/specialities-list', $result);
  257. }
  258.  
  259. public function getRatingAction()
  260. {
  261. $this->view->disable();
  262.  
  263. $univer_id = $this->request->get('id');
  264.  
  265. $rating = $this->getUniverRating($univer_id);
  266.  
  267. $this->response->setJsonContent(
  268. $rating,
  269. JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK
  270. );
  271. $this->response->send();
  272. exit;
  273. }
  274.  
  275. public function setRatingAction()
  276. {
  277. $this->view->disable();
  278.  
  279. $univer_id = $this->request->get('id');
  280. $rating = $this->request->get('rating');
  281.  
  282. $rater = \UniversityRatings::findByRaterIp($_SERVER['REMOTE_ADDR']);
  283. $univer = \UniversityRatings::findByUniversityId($univer_id);
  284.  
  285. if (!count($rater) || !count($univer)) {
  286. $univerRating = new \UniversityRatings();
  287. $univerRating->university_id = $univer_id;
  288. $univerRating->rater_ip = $_SERVER['REMOTE_ADDR'];
  289. $univerRating->rating = $rating;
  290. $univerRating->save();
  291. } else {
  292. $univerRating = false;
  293. }
  294.  
  295.  
  296. $this->response->setJsonContent(
  297. $univerRating,
  298. JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK
  299. );
  300. $this->response->send();
  301. exit;
  302. }
  303.  
  304. public function getUniverRating($id)
  305. {
  306. $result = \UniversityRatings::sum(
  307. [
  308. 'column' => 'rating',
  309. 'conditions' => "university_id = " . $id,
  310. ]
  311. );
  312. $count = \UniversityRatings::count('university_id = ' . $id);
  313. if ($result && $count) {
  314. $rating['star'] = round($result / $count);
  315. $rating['value'] = round($result / $count, 2);
  316. $rating['count'] = $count;
  317. } else {
  318. $rating['star'] = 5;
  319. $rating['value'] = 5;
  320. $rating['count'] = $count;
  321. }
  322. return $rating;
  323. }
  324.  
  325.  
  326. public function checkRatingAction()
  327. {
  328. $this->view->disable();
  329.  
  330. $univer_id = $this->request->get('id');
  331.  
  332. $rater = \UniversityRatings::findByRaterIp($_SERVER['REMOTE_ADDR']);
  333. $univer = \UniversityRatings::findByUniversityId($univer_id);
  334.  
  335. if (!count($rater) || !count($univer)) {
  336. $result = false;
  337. } else {
  338. $result = true;
  339. }
  340.  
  341.  
  342. $this->response->setJsonContent(
  343. $result,
  344. JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK
  345. );
  346. $this->response->send();
  347. exit;
  348. }
  349. }
#1Modules\Frontend\Controllers\UniversityProfileController->indexAction
#2Phalcon\Dispatcher\AbstractDispatcher->callActionMethod
#3Phalcon\Dispatcher\AbstractDispatcher->dispatch
#4Phalcon\Mvc\Application->handle
/var/www/studyforyou.info/public/index.php (58)
  1. <?php
  2. //
  3. use Phalcon\Mvc\Application;
  4. use Phalcon\DI\FactoryDefault;
  5.  
  6.  
  7. (new Phalcon\Support\Debug)->listen();
  8.  
  9.  
  10. require_once __DIR__ . '/../vendor/autoload.php';
  11.  
  12. /**
  13. * The FactoryDefault Dependency Injector automatically register the right services providing a full stack framework
  14. */
  15. $di = new FactoryDefault();
  16.  
  17. $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
  18. $dotenv->load();
  19.  
  20. if($_ENV['ENVIRONMENT'] == 'local'){
  21. ini_set('display_errors', 1);
  22. ini_set('display_startup_errors', 1);
  23. ini_set('error_reporting', E_ALL & ~E_NOTICE);
  24. error_reporting(E_ALL & ~E_NOTICE);
  25. } else {
  26. ini_set('display_errors', 0);
  27. }
  28.  
  29. try {
  30.  
  31.  
  32. /**
  33. * Include services
  34. */
  35. $config = require __DIR__ . "/../apps/config/config.php";
  36.  
  37.  
  38. require_once __DIR__ . '/../apps/config/services.php';
  39.  
  40. /**
  41. * Registering a router
  42. */
  43.  
  44. require_once __DIR__ . "/../apps/config/routers.php";
  45.  
  46.  
  47. /**
  48. * Handle the request
  49. */
  50. $application = new Application($di);
  51.  
  52.  
  53. /**
  54. * Include modules
  55. */
  56. require_once __DIR__ . '/../apps/config/modules.php';
  57.  
  58. $application->handle($_SERVER['REQUEST_URI'])->send();
  59.  
  60.  
  61. } catch (\Exception $e) {
  62. echo $e->getMessage();
  63. } catch (PDOException $e) {
  64. echo $e->getMessage();
  65. }
  66.