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'); } } }
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(); } }