Newscoop\NewscoopBundle\Controller\SystemPrefController::indexAction PHP Метод

indexAction() публичный Метод

public indexAction ( Request $request )
$request Symfony\Component\HttpFoundation\Request
    public function indexAction(Request $request)
    {
        $em = $this->container->get('em');
        $preferencesService = $this->container->get('system_preferences_service');
        $schedulerService = $this->container->get('newscoop.scheduler');
        $locations = $em->getRepository('Newscoop\\NewscoopBundle\\Entity\\CityLocations')->createQueryBuilder('a')->select('count(a)')->getQuery()->getOneOrNullResult();
        $cities = $em->getRepository('Newscoop\\NewscoopBundle\\Entity\\CityNames')->createQueryBuilder('a')->select('count(a)')->getQuery()->getOneOrNullResult();
        $jobs = $em->getRepository('Newscoop\\Entity\\CronJob')->createQueryBuilder('j')->getQuery()->getArrayResult();
        foreach ($jobs as $key => $job) {
            $jobs[$key]['nextRun'] = $schedulerService->getNextRunDate($job['schedule']);
            $jobs[$key]['prevRun'] = $schedulerService->getPreviousRunDate($job['schedule']);
        }
        $hasManagePermission = false;
        // TODO: 4.5 check for permissions from acl
        if (true) {
            $hasManagePermission = true;
        }
        $max_upload_filesize = $preferencesService->MaxUploadFileSize;
        if (empty($max_upload_filesize) || $this->convertToBytes($max_upload_filesize) == 0) {
            $preferencesService->MaxUploadFileSize = ini_get('upload_max_filesize');
        }
        $currentUser = $this->get('user')->getCurrentUser();
        $translator = $this->get('translator');
        $sp_session_lifetime = 0 + $preferencesService->SiteSessionLifeTime;
        $php_ini_max_seconds = 0;
        $php_ini_gc_works = ini_get('session.gc_probability');
        if (!empty($php_ini_gc_works)) {
            $php_ini_max_seconds = 0 + ini_get('session.gc_maxlifetime');
            if (!empty($php_ini_max_seconds)) {
                if ($sp_session_lifetime > $php_ini_max_seconds) {
                    $sp_session_lifetime = $php_ini_max_seconds;
                }
            }
        }
        $upload_min_filesize = $this->formatBytes(min($this->convertToBytes(ini_get('post_max_size')), $this->convertToBytes(ini_get('upload_max_filesize'))), 0);
        $mysql_client_command_path = $preferencesService->MysqlClientCommandPath;
        if (!$locations || !$cities) {
            $mysql_client_command_path_def = '/usr/bin/mysql';
            if (empty($mysql_client_command_path) && file_exists($mysql_client_command_path_def)) {
                $mysql_client_command_path = $mysql_client_command_path_def;
            }
        }
        $geo_preferred_lang = $preferencesService->GeoSearchPreferredLanguage;
        if (empty($geo_preferred_lang)) {
            $geo_preferred_lang = 'en';
        }
        $default_marker_source = $preferencesService->MapMarkerSourceDefault;
        $marker_icons = \Geo_Preferences::GetIconsFiles();
        if (0 < count($marker_icons)) {
            $default_marker_source = array();
            foreach ($marker_icons as $one_icon) {
                $default_marker_source[$one_icon] = $one_icon;
            }
        }
        $form = $this->container->get('form.factory')->create(new PreferencesType(), array('siteonline' => $preferencesService->SiteOnline, 'title' => $preferencesService->SiteTitle, 'meta_keywords' => $preferencesService->SiteMetaKeywords, 'meta_description' => $preferencesService->SiteMetaDescription, 'timezone' => $preferencesService->TimeZone, 'cache_engine' => $preferencesService->DBCacheEngine, 'cache_engine_host' => $preferencesService->DBCacheEngineHost, 'cache_engine_port' => $preferencesService->DBCacheEnginePort, 'cache_template' => $preferencesService->TemplateCacheHandler, 'cache_image' => $preferencesService->ImagecacheLifetime, 'allow_recovery' => $preferencesService->PasswordRecovery, 'secret_key' => $preferencesService->SiteSecretKey, 'session_lifetime' => $sp_session_lifetime, 'separator' => $preferencesService->KeywordSeparator, 'captcha' => $preferencesService->LoginFailedAttemptsNum, 'max_upload_size' => $preferencesService->MaxUploadFileSize, 'automatic_collection' => $preferencesService->CollectStatistics, 'smtp_host' => $preferencesService->SMTPHost, 'smtp_port' => $preferencesService->SMTPPort, 'email_from' => $preferencesService->EmailFromAddress, 'mediaRichTextCaptions' => $preferencesService->MediaRichTextCaptions, 'mediaCaptionLength' => $preferencesService->MediaCaptionLength, 'image_ratio' => $preferencesService->EditorImageRatio, 'image_width' => (int) $preferencesService->EditorImageResizeWidth, 'image_height' => (int) $preferencesService->EditorImageResizeHeight, 'zoom' => $preferencesService->EditorImageZoom, 'use_replication_host' => $preferencesService->DBReplicationHost, 'use_replication_user' => $preferencesService->DBReplicationUser, 'use_replication_password' => $preferencesService->DBReplicationPass, 'use_replication' => $preferencesService->UseDBReplication, 'use_replication_port' => $preferencesService->DBReplicationPort, 'template_filter' => $preferencesService->TemplateFilter, 'mysql_client_command_path' => $mysql_client_command_path, 'center_latitude_default' => (double) $preferencesService->MapCenterLatitudeDefault, 'center_longitude_default' => (double) $preferencesService->MapCenterLongitudeDefault, 'map_display_resolution_default' => (int) $preferencesService->MapDisplayResolutionDefault, 'map_view_width_default' => $preferencesService->MapViewWidthDefault, 'map_view_height_default' => $preferencesService->MapViewHeightDefault, 'map_auto_focus_default' => $preferencesService->MapAutoFocusDefault == '0' ? false : true, 'map_auto_focus_max_zoom' => $preferencesService->MapAutoFocusMaxZoom, 'map_auto_focus_border' => $preferencesService->MapAutoFocusBorder, 'map_auto_cSS_file' => $preferencesService->MapAutoCSSFile, 'map_provider_available_google_v3' => $preferencesService->MapProviderAvailableGoogleV3 == '0' ? false : true, 'map_provider_available_map_quest' => $preferencesService->MapProviderAvailableMapQuest == '0' ? false : true, 'map_provider_available_oSM' => $preferencesService->MapProviderAvailableOSM == '0' ? false : true, 'map_provider_default' => $preferencesService->MapProviderDefault, 'geo_search_local_geonames' => $preferencesService->GeoSearchLocalGeonames == '0' ? false : true, 'geo_search_mapquest_nominatim' => $preferencesService->GeoSearchMapquestNominatim == '0' ? false : true, 'geo_search_preferred_language' => $geo_preferred_lang, 'map_marker_directory' => $preferencesService->MapMarkerDirectory, 'map_popup_width_min' => $preferencesService->MapPopupWidthMin, 'map_popup_height_min' => $preferencesService->MapPopupHeightMin, 'map_video_width_you_tube' => $preferencesService->MapVideoWidthYouTube, 'map_video_height_you_tube' => $preferencesService->MapVideoHeightYouTube, 'map_video_width_vimeo' => $preferencesService->MapVideoWidthVimeo, 'map_video_height_vimeo' => $preferencesService->MapVideoHeightVimeo, 'map_video_width_flash' => $preferencesService->MapVideoWidthFlash, 'map_video_height_flash' => $preferencesService->MapVideoHeightFlash, 'geo_flash_server' => $preferencesService->FlashServer, 'geo_flash_directory' => $preferencesService->FlashDirectory, 'facebook_appid' => $preferencesService->facebook_appid, 'facebook_appsecret' => $preferencesService->facebook_appsecret, 'recaptchaPublicKey' => $preferencesService->RecaptchaPublicKey, 'recaptchaPrivateKey' => $preferencesService->RecaptchaPrivateKey, 'recaptchaSecure' => $preferencesService->RecaptchaSecure, 'userGarbageActive' => $preferencesService->userGarbageActive ?: 'N', 'userGarbageDays' => $preferencesService->userGarbageDays ?: 90, 'smartyUseProtocol' => $preferencesService->SmartyUseProtocol, 'cronJobNotificationEmail' => $preferencesService->CronJobsNotificationEmail, 'cronJobSmtpSender' => $preferencesService->CronJobsSenderEmail, 'cronJobSmtpSenderName' => $preferencesService->CronJobsSenderName), array('cacheService' => $this->container->get('newscoop.cache')));
        if ($request->isMethod('POST')) {
            $form->bind($request);
            if ($form->isValid()) {
                if (!$currentUser->hasPermission('ChangeSystemPreferences')) {
                    camp_html_display_error($translator->trans('newscoop.preferences.error.noaccess', array(), 'system_pref'));
                    exit;
                }
                $data = $form->getData();
                $geoLocation = array('map_display_resolution_default' => $data['map_display_resolution_default'], 'map_view_width_default' => $hasManagePermission ? $data['map_view_width_default'] : $preferencesService->MapViewWidthDefault, 'map_view_height_default' => $hasManagePermission ? $data['map_view_height_default'] : $preferencesService->MapViewHeightDefault, 'map_auto_cSS_file' => strip_tags($data['map_auto_cSS_file']), 'map_auto_focus_default' => $data['map_auto_focus_default'] ? '1' : '0', 'map_auto_focus_max_zoom' => $data['map_auto_focus_max_zoom'], 'map_auto_focus_border' => $data['map_auto_focus_border'], 'map_provider_available_google_v3' => $data['map_provider_available_google_v3'] ? '1' : '0', 'map_provider_available_map_quest' => $data['map_provider_available_map_quest'] ? '1' : '0', 'map_provider_available_oSM' => $data['map_provider_available_oSM'] ? '1' : '0', 'map_provider_default' => $data['map_provider_default'], 'geo_search_local_geonames' => $data['geo_search_local_geonames'] ? '1' : '0', 'geo_search_mapquest_nominatim' => $data['geo_search_mapquest_nominatim'] ? '1' : '0', 'geo_search_preferred_language' => $data['geo_search_preferred_language'], 'map_marker_directory' => $hasManagePermission ? strip_tags($data['map_marker_directory']) : $preferencesService->MapMarkerDirectory, 'map_marker_source_default' => strip_tags($data['map_marker_source_default']), 'map_popup_width_min' => $hasManagePermission ? $data['map_popup_width_min'] : $preferencesService->MapPopupWidthMin, 'map_popup_height_min' => $hasManagePermission ? $data['map_popup_height_min'] : $preferencesService->MapPopupHeightMin, 'map_video_width_you_tube' => $hasManagePermission ? $data['map_video_width_you_tube'] : $preferencesService->MapVideoWidthYouTube, 'map_video_height_you_tube' => $hasManagePermission ? $data['map_video_height_you_tube'] : $preferencesService->MapVideoHeightYouTube, 'map_video_width_vimeo' => $hasManagePermission ? $data['map_video_width_vimeo'] : $preferencesService->MapVideoWidthVimeo, 'map_video_height_vimeo' => $hasManagePermission ? $data['map_video_height_vimeo'] : $preferencesService->MapVideoHeightVimeo, 'map_video_width_flash' => $hasManagePermission ? $data['map_video_width_flash'] : $preferencesService->MapVideoWidthFlash, 'map_video_height_flash' => $hasManagePermission ? $data['map_video_height_flash'] : $preferencesService->MapVideoHeightFlash, 'flash_server' => $hasManagePermission ? strip_tags($data['geo_flash_server']) : $preferencesService->FlashServer, 'flash_directory' => $hasManagePermission ? strip_tags($data['geo_flash_directory']) : $preferencesService->FlashDirectory);
                // Max Upload File Size
                $uploadSettings = $this->maxUpload($data['max_upload_size'], $translator);
                if ($uploadSettings instanceof RedirectResponse) {
                    return $uploadSettings;
                }
                //geolocation
                $geolocationSettings = $this->geolocation($data['center_latitude_default'], $data['center_longitude_default'], $geoLocation, $translator);
                if ($geolocationSettings instanceof RedirectResponse) {
                    return $geolocationSettings;
                }
                if ($hasManagePermission) {
                    // DB Caching
                    $databaseCacheSettings = $this->databaseCache($data['cache_engine'], $data['cache_engine_host'], $data['cache_engine_port']);
                    if ($databaseCacheSettings instanceof RedirectResponse) {
                        return $databaseCacheSettings;
                    }
                    // Template Caching
                    $templateCacheSettings = $this->templateCache($data['cache_template'], $translator);
                    if ($templateCacheSettings instanceof RedirectResponse) {
                        return $templateCacheSettings;
                    }
                    $replicationSettings = $this->useReplication($data['use_replication_user'], $data['use_replication_host'], $data['use_replication_password'], $data['use_replication'], $data['use_replication_port'], $translator);
                    if ($replicationSettings instanceof RedirectResponse) {
                        return $replicationSettings;
                    }
                    // Statistics collecting
                    $this->collectStats($data['automatic_collection']);
                    // SMTP Host/Port
                    $this->smtpConfiguration($data['smtp_host'], $data['smtp_port']);
                    // Image resizing for WYSIWYG editor
                    $this->imageResizing($data['image_ratio'], $data['image_width'], $data['image_height'], $data['zoom']);
                    // Rich text captions, set default
                    $preferencesService->set('MediaRichTextCaptions', $data['mediaRichTextCaptions']);
                    if ($data['mediaRichTextCaptions'] == 'Y') {
                        $preferencesService->set('MediaCaptionLength', $data['mediaCaptionLength']);
                    } else {
                        // Override and set to 255 chars max
                        $preferencesService->set('MediaCaptionLength', 255);
                    }
                    // template filter
                    $this->templateFilter($data['template_filter']);
                    // users garbage settings
                    $preferencesService->set('userGarbageActive', $data['userGarbageActive']);
                    $preferencesService->set('userGarbageDays', $data['userGarbageDays']);
                    // smarty use protocol settings
                    $preferencesService->set('SmartyUseProtocol', $data['smartyUseProtocol']);
                    // cron jobs settings
                    $preferencesService->set('CronJobsNotificationEmail', $data['cronJobNotificationEmail']);
                    $preferencesService->set('CronJobsSenderEmail', $data['cronJobSmtpSender']);
                    $preferencesService->set('CronJobsSenderName', $data['cronJobSmtpSenderName']);
                }
                // General Settings
                $this->generalSettings($data['siteonline'], $data['title'], $data['meta_keywords'], $data['meta_description'], $data['timezone'], $data['cache_image'], $data['allow_recovery'], $data['email_from'], $data['session_lifetime'], $data['separator'], $data['captcha'], $data['mysql_client_command_path']);
                //Facebook
                $this->facebook($data['facebook_appid'], $data['facebook_appsecret']);
                //ReCaptcha
                $this->recaptcha($data['recaptchaPublicKey'], $data['recaptchaPrivateKey'], $data['recaptchaSecure']);
                $this->get('session')->getFlashBag()->add('success', $translator->trans('newscoop.preferences.success.saved', array(), 'system_pref'));
                return $this->redirect($this->generateUrl('newscoop_newscoop_systempref_index'));
            }
        }
        return array('form' => $form->createView(), 'php_ini_max_seconds' => $php_ini_max_seconds, 'upload_min_filesize' => $upload_min_filesize, 'hasManagePermission' => $hasManagePermission, 'mysql_client_command_path' => $mysql_client_command_path, 'map_marker_source_default' => $default_marker_source, 'map_marker_source_selected' => $preferencesService->MapMarkerSourceDefault, 'jobs' => $jobs);
    }