public function getIndex()
 {
     $requests = PagePublishRequests::can_moderate(['status' => 'awaiting'], 10);
     if ($requests->isEmpty()) {
         $requests = 'No awaiting requests';
     }
     $requests_table = View::make('coaster::partials.tabs.publish_requests.table', array('show' => ['page' => true, 'status' => false, 'requested_by' => true], 'requests' => $requests))->render();
     $any_requests = config('coaster::admin.publishing') && !PagePublishRequests::can_moderate([], 1)->isEmpty();
     $user_requests = PagePublishRequests::all_requests(0, ['user_id' => Auth::user()->id, 'status' => 'awaiting'], 10);
     if ($user_requests->isEmpty()) {
         $user_requests = 'No awaiting requests';
     }
     $user_requests_table = View::make('coaster::partials.tabs.publish_requests.table', array('show' => ['page' => true, 'status' => true, 'requested_by' => false], 'requests' => $user_requests))->render();
     $any_user_requests = config('coaster::admin.publishing') && !PagePublishRequests::all_requests(0, ['user_id' => Auth::user()->id], 1)->isEmpty();
     $logs_data = AdminLog::with(['user', 'backup'])->orderBy('id', 'desc')->paginate(10);
     $logs = View::make('coaster::partials.logs.table', array('logs' => $logs_data));
     $firstTimer = false;
     if (Install::getInstallState() == 'complete-welcome') {
         Install::setInstallState('complete');
         $firstTimer = true;
     }
     $coasterBlog = 'https://www.coastercms.org/blog/';
     $coasterBlogHttpClient = new Client(['base_uri' => $coasterBlog . 'wp-json/wp/v2/']);
     try {
         $latestPosts = $coasterBlogHttpClient->request('GET', 'posts', ['query' => ['per_page' => 3]]);
         $latestPosts = json_decode($latestPosts->getBody());
     } catch (\Exception $e) {
         $latestPosts = [];
     }
     $posts = collect($latestPosts);
     // Search data
     $numbSearches = PageSearchLog::count();
     if (Auth::action('search.index') && $numbSearches) {
         $search_data = PageSearchLog::orderBy('count', 'DESC')->orderBy('updated_at', 'DESC')->limit(6)->get();
         $numbSearches = $search_data->count();
         $search_view = View::make('coaster::pages.search', array('search_data' => $search_data));
     } else {
         $search_view = '';
     }
     $data = array('firstTimer' => $firstTimer, 'coasterPosts' => $posts, 'coasterBlog' => $coasterBlog, 'logs' => $logs, 'requests' => $requests_table, 'user_requests' => $user_requests_table, 'any_requests' => $any_requests, 'any_user_requests' => $any_user_requests);
     $data['searchLogNumber'] = $numbSearches;
     $data['searchLogs'] = $search_view;
     $data['canViewSettings'] = Auth::action('system');
     $upgrade = new \stdClass();
     $upgrade->from = config('coaster::site.version');
     $upgrade->to = Setting::latestTag();
     $upgrade->required = version_compare(config('coaster::site.version'), $upgrade->to, '<');
     $upgrade->allowed = Auth::action('system.upgrade');
     $data['upgrade'] = $upgrade;
     $this->layoutData['title'] = 'Admin home';
     $this->layoutData['content'] = View::make('coaster::pages.dashboard', $data);
 }
 public static function lookup($keywords, $onlyLive = 1, $limit = 100)
 {
     $foundPages = [];
     if (!empty($keywords)) {
         PageSearchLog::add_term($keywords);
         // create array containing, whole term then each individual word (or just whole term if one word)
         $keywordsArray = array_merge([$keywords], explode(' ', $keywords));
         $keywordsArray = count($keywordsArray) == 2 ? [$keywordsArray[0]] : $keywordsArray;
         $numberOfKeywords = count($keywordsArray);
         // load search objects
         $searchObjects = [new Cms($onlyLive), new WordPress($onlyLive, config('coaster::blog.url') ? Setting::blogConnection() : false)];
         event(new Search($searchObjects, $onlyLive));
         // run search functions
         foreach ($keywordsArray as $i => $keyword) {
             $keywordAdditionalWeight = ($numberOfKeywords - $i) * 0.1 + ($i == 0 && $numberOfKeywords > 1 ? 5 : 0);
             foreach ($searchObjects as $searchObject) {
                 $searchObject->run($keyword, $keywordAdditionalWeight);
             }
         }
         // get search results
         $weights = [];
         $pages = [];
         foreach ($searchObjects as $i => $searchObject) {
             $weights = $weights + $searchObject->getWeights();
             $pages = $pages + $searchObject->getPages();
         }
         // order, limit and create page data array
         if ($weights) {
             arsort($weights);
             if (count($weights) > $limit) {
                 $weights = array_slice($weights, 0, 100, true);
             }
             $pageIds = array_keys($weights);
             foreach ($pageIds as $pageId) {
                 if (array_key_exists($pageId, $pages)) {
                     $foundPages[] = $pages[$pageId];
                 }
             }
         }
     }
     return $foundPages;
 }
 /**
  * Bootstrap the application events.
  *
  * @return void
  */
 public function boot()
 {
     $db = false;
     try {
         if (Schema::hasTable('settings')) {
             $db = true;
         }
     } catch (\PDOException $e) {
     }
     $configFile = __DIR__ . '/../../config';
     $useDatabaseSettings = $db;
     event(new LoadConfig($configFile, $useDatabaseSettings));
     Setting::loadAll($configFile, 'coaster', $useDatabaseSettings);
     $overrideConfigValues = ['auth.guards.web.driver' => 'coaster', 'auth.providers.users.model' => User::class, 'croppa.src_dir' => public_path(), 'croppa.crops_dir' => public_path() . '/cache', 'croppa.path' => 'cache/(' . config('coaster::frontend.croppa_handle') . ')$'];
     event(new LoadedConfig($overrideConfigValues));
     foreach ($overrideConfigValues as $attribute => $value) {
         app()->config->set($attribute, $value);
     }
     if (Install::isComplete()) {
         if (!$db) {
             abort(503, 'Database error, settings table could not be found');
         }
     }
 }
Exemple #4
0
 public static function activate($themeName)
 {
     $theme = self::where('theme', '=', $themeName)->first();
     if (!empty($theme)) {
         Setting::where('name', '=', 'frontend.theme')->update(['value' => $theme->id]);
         self::templateIdUpdate($theme->id);
         return 1;
     }
     return 0;
 }
 public function getUpgrade($update = null)
 {
     $run = false;
     $error = '';
     $message = '';
     if (empty($update)) {
         $run = true;
         $message = 'Composer is required to run the upgrade and must be executable from the sites root directory.<br />
         The process can take a minute or so to complete.';
     } elseif (version_compare(config('coaster::site.version'), Setting::latestTag(), '<') && Setting::latestTag() != "not-found") {
         if (!getenv('HOME') && !getenv('COMPOSER_HOME')) {
             putenv("COMPOSER_HOME=" . exec('pwd') . "/.composer");
         }
         $coasterStorage = storage_path(config('coaster::site.storage_path'));
         $logFile = $coasterStorage . '/upgrade.log';
         if (!file_exists($logFile) && is_writable($coasterStorage)) {
             file_put_contents('', $logFile);
         }
         if (is_writable($logFile)) {
             shell_exec('cd ' . base_path() . '; composer -n update 2>' . $logFile . ';');
             $upgradeLog = file_get_contents($logFile);
             if (!empty($upgradeLog) && stripos($upgradeLog, 'Generating autoload files') !== false) {
                 Cache::put('coaster::site.version', Setting::latestTag(), 30);
                 $message = 'Successfully upgraded to version ' . Setting::latestTag();
             } else {
                 $error = 'Upgrade failed, composer might not be installed or there might have been an error: <br /><br />';
                 $error .= '<pre>' . str_replace("\n", "<br />", $upgradeLog) . '</pre>';
             }
         } else {
             $error = 'Can\'t create or write to log file :' . $logFile;
         }
     } else {
         $message = 'Already at the latest version ' . config('coaster::site.version');
     }
     $this->layoutData['content'] = View::make('coaster::pages.system.upgrade', ['message' => $message, 'error' => $error, 'run' => $run]);
 }
 public function installTheme()
 {
     $details = Request::all();
     $error = false;
     if (!empty($details['theme'])) {
         if (!($error = Theme::unzip($details['theme'] . '.zip', false))) {
             $withPageData = !empty($details['page-data']) ? 1 : 0;
             $result = Theme::install($details['theme'], ['withPageData' => $withPageData]);
             if ($result['error']) {
                 $error = $result['response'];
             }
             if (($usedThemeSetting = Setting::where('name', '=', 'frontend.theme')->first()) && ($theme = Theme::where('theme', '=', $details['theme'])->first())) {
                 $usedThemeSetting->value = $theme->id;
                 $usedThemeSetting->save();
             }
         }
     }
     if ($error) {
         FormMessage::add('theme', $error);
         $this->setupTheme();
     } else {
         include __DIR__ . '/../../Http/routes/admin.php';
         Install::setInstallState('complete-welcome');
         $this->layoutData['title'] = 'Install Complete';
         $this->layoutData['content'] = View::make('coaster::pages.install', ['stage' => 'complete']);
     }
 }
 /**
  * @param int $getPosts
  * @param string $where
  * @return \PDOStatement
  */
 public function blogPosts($getPosts = 3, $where = 'post_type = "post" AND post_status = "publish"')
 {
     $prefix = config('coaster::blog.prefix');
     $where = $where ? 'WHERE ' . $where : '';
     $query = "SELECT * FROM {$prefix}posts {$where} ORDER BY post_date DESC LIMIT {$getPosts}";
     try {
         return Setting::blogConnection()->query($query);
     } catch (\Exception $e) {
         return new \PDOStatement();
     }
 }