/** * Drop field table * * @param string $name * @return void */ protected function dropFieldTable($name) { $sql = Table\Fields::sql(); $db = $sql->getDb(); $table = $sql->quoteId(DB_PREFIX . 'field_' . $name); $db->query('DROP TABLE ' . $table); $module = \Phire\Table\Modules::findBy(['folder' => 'phire-fields']); if (isset($module->id)) { $assets = unserialize($module->assets); if (in_array(DB_PREFIX . 'field_' . $name, $assets['tables'])) { unset($assets['tables'][array_search(DB_PREFIX . 'field_' . $name, $assets['tables'])]); } $module->assets = serialize($assets); $module->save(); } }
/** * Method for post update code for Phire or for a module, * usually for database modification or file cleanup * * @return void */ public function runPost() { $i = count($this->previousUpdates) > 0 ? max($this->previousUpdates) + 1 : 1; $method = 'update' . $i; while (method_exists($this, $method)) { $this->{$method}(); $this->previousUpdates[] = $i; $i++; $method = 'update' . $i; } if (null === $this->module) { $updates = Table\Config::findById('updates'); $updates->value = implode('|', $this->previousUpdates); $updates->save(); $updated = Table\Config::findById('updated_on'); $updated->value = date('Y-m-d H:i:s'); $updated->save(); } else { $module = Table\Modules::findBy(['name' => $this->module]); if (isset($module->id)) { $module->updates = implode('|', $this->previousUpdates); $module->updated_on = date('Y-m-d H:i:s'); $module->save(); } } }
/** * Load application modules * * @return Module */ public function registerModules() { if ($this->application->config()['db']) { $modulesPath = MODULES_ABS_PATH; $moduleFolders = []; $modules = Table\Modules::findBy(['active' => 1], ['order' => 'order DESC']); foreach ($modules->rows() as $module) { if (file_exists($modulesPath . '/' . $module->folder . '/src/Module.php')) { include $modulesPath . '/' . $module->folder . '/src/Module.php'; $moduleClass = $module->prefix . 'Module'; } else { $moduleClass = 'Phire\\Module\\Module'; } if (file_exists($modulesPath . '/' . $module->folder . '/config/module.php')) { $moduleConfig = (include $modulesPath . '/' . $module->folder . '/config/module.php'); // Load and register each module if (file_exists(CONTENT_ABS_PATH . '/phire/config/' . $module->name . '.php')) { $moduleConfig = array_merge($moduleConfig[$module->name], include CONTENT_ABS_PATH . '/phire/config/' . $module->name . '.php'); } else { $moduleConfig = $moduleConfig[$module->name]; } if (strpos($modulesPath, 'vendor') !== false) { unset($moduleConfig['prefix']); unset($moduleConfig['src']); } $newModule = new $moduleClass($moduleConfig, $this->application); } else { $newModule = new $moduleClass($this->application); } $this->application->register($module->name, $newModule); $moduleFolders[$module->name] = $module->folder; } // Check module configs for Phire-specific configs foreach ($this->application->modules() as $module => $config) { // Load module assets if (isset($moduleFolders[$module]) && file_exists($modulesPath . '/' . $moduleFolders[$module] . '/data/assets')) { $this->loadAssets($modulesPath . '/' . $moduleFolders[$module] . '/data/assets', strtolower($module)); } } } return $this; }
if (stripos(php_sapi_name(), 'cli') === false || stripos(php_sapi_name(), 'server') !== false) { header('Content-Type: text/html'); echo '<!DOCTYPE html>' . PHP_EOL . '<html><head><title>HTTP 403 (Forbidden)</title>' . '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="robots" content="none" /></head>' . '<body><h1>HTTP 403 (Forbidden)</h1></body></html>'; exit; } require_once __DIR__ . '/../config.php'; set_time_limit(0); try { // Check the app constants if (!defined('BASE_PATH') || !defined('APP_PATH') || !defined('APP_URI') || !defined('DB_INTERFACE') || !defined('DB_NAME')) { throw new \Exception('Error: The config file is not properly configured. Please check the config file or install the system.'); } // Get the autoloader $autoloader = (require APP_ABS_PATH . '/vendor/autoload.php'); $appConfig = (include APP_ABS_PATH . '/config/application.php'); $config = (include MODULES_PATH . '/phire-console-1.0/config/module.php'); $config['phire-console']['services'] = $appConfig['services']; $config['phire-console']['routes'] = $config['phire-console']['cli-routes']; $autoloader->addPsr4($config['phire-console']['prefix'], $config['phire-console']['src']); // Create and run the app as a self-contained console app $app = new Pop\Application($autoloader, $config['phire-console']); $app->register('phire', new Phire\Console\Module\Module($app)); if (!\Phire\Table\Modules::findBy(['name' => 'phire-console'])->active) { $app->trigger('app.route.pre'); throw new \Phire\Exception('The Phire Console module is not active.'); } $app->run(); } catch (Exception $exception) { $phire = new Phire\Console\Module\Module(); $phire->error($exception); }
/** * Process and save seo config * * @param array $exclude * @return void */ public function saveAnalysis(array $exclude = []) { $config = Table\Config::findById('seo_config'); $cfg = isset($config->value) && !empty($config->value) && $config->value != '' ? unserialize($config->value) : []; $analysis = ['tracking' => false, 'sitemap' => false, 'robots' => false, 'caching' => false, 'site-verify' => false, 'content' => ['good' => [], 'bad' => []]]; if (!empty($cfg['tracking']) && $cfg['tracking'] != '') { $analysis['tracking'] = true; } $sitemap = \Phire\Table\Modules::findBy(['name' => 'phire-sitemap']); if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . '/sitemap.xml') || isset($sitemap->id) && $sitemap->active) { $analysis['sitemap'] = true; } if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . '/robots.txt') || isset($cfg['robots']) && !empty($cfg['robots']) && $cfg['robots'] != '') { $analysis['robots'] = true; } $cacheDetect = false; $curl = new Curl('http://' . $_SERVER['HTTP_HOST'] . BASE_PATH); if ($curl->getCode() == 200 && null !== $curl->getHeader('Cache-Control') && null !== $curl->getHeader('Expires') && null !== $curl->getHeader('Last-Modified') && null !== $curl->getHeader('Etag')) { $cacheDetect = true; } $cache = \Phire\Table\Modules::findBy(['name' => 'phire-cache']); if ($cacheDetect || isset($cache->id) && $cache->active) { $analysis['caching'] = true; } $dir = new Dir($_SERVER['DOCUMENT_ROOT'] . BASE_PATH, ['relative' => true, 'filesOnly' => true]); $googleFileDetect = false; foreach ($dir->getFiles() as $file) { if (substr($file, 0, 6) == 'google' && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . '/' . $file), 'google-site-verification') !== false) { $googleFileDetect = true; } } $googleMetaDetect = false; if (isset($cfg['meta'])) { foreach ($cfg['meta'] as $meta) { if ($meta['name'] == 'google-site-verification') { $googleMetaDetect = true; } } } if ($googleFileDetect || $googleMetaDetect) { $analysis['site-verify'] = true; } else { if (function_exists('dns_get_record') && $_SERVER['HTTP_HOST'] != 'localhost') { $dns = dns_get_record($_SERVER['HTTP_HOST'], DNS_TXT); if (count($dns) > 0) { foreach ($dns as $record) { if (isset($record['txt']) && strpos($record['txt'], 'google-site-verification') !== false) { $analysis['site-verify'] = true; } } } } } $fields = ['seo_title' => '', 'description' => '', 'keywords' => '']; $seoTitle = \Phire\Fields\Table\Fields::findBy(['name' => 'seo_title']); $description = \Phire\Fields\Table\Fields::findBy(['name' => 'description']); $keywords = \Phire\Fields\Table\Fields::findBy(['name' => 'keywords']); if (isset($seoTitle->id)) { $fields['seo_title'] = $seoTitle->id; } if (isset($description->id)) { $fields['description'] = $description->id; } if (isset($keywords->id)) { $fields['keywords'] = $keywords->id; } $content = \Phire\Content\Table\Content::findAll(); foreach ($content->rows() as $c) { if (!in_array($c->type_id, $exclude)) { $seoTitle = ''; $metaDesc = ''; $metaKeys = ''; if ($fields['seo_title'] != '') { $seoTitleField = \Phire\Fields\Table\FieldValues::findById([$fields['seo_title'], $c->id, "Phire\\Content\\Model\\Content"]); if (isset($seoTitleField->field_id)) { $seoTitle = json_decode($seoTitleField->value); } } if ($fields['description'] != '') { $descriptionField = \Phire\Fields\Table\FieldValues::findById([$fields['description'], $c->id, "Phire\\Content\\Model\\Content"]); if (isset($descriptionField->field_id)) { $metaDesc = json_decode($descriptionField->value); } } if ($fields['keywords'] != '') { $keywordsField = \Phire\Fields\Table\FieldValues::findById([$fields['keywords'], $c->id, "Phire\\Content\\Model\\Content"]); if (isset($keywordsField->field_id)) { $metaKeys = json_decode($keywordsField->value); } } if (strlen($seoTitle) > 0 && strlen($seoTitle) <= 60 && strlen($metaDesc) > 0 && strlen($metaDesc) <= 160 && strlen($metaKeys) > 0 && strlen($metaKeys) <= 255) { $analysis['content']['good'][$c->id] = ['title' => $c->title, 'uri' => $c->uri]; } else { $analysis['content']['bad'][$c->id] = ['title' => $c->title, 'type_id' => $c->type_id, 'uri' => $c->uri, 'issues' => []]; if (strlen($seoTitle) == 0) { $analysis['content']['bad'][$c->id]['issues'][] = 'No SEO Title'; } else { if (strlen($seoTitle) > 60) { $analysis['content']['bad'][$c->id]['issues'][] = 'SEO Title is too long'; } } if (strlen($metaDesc) == 0) { $analysis['content']['bad'][$c->id]['issues'][] = 'No description meta tag'; } else { if (strlen($metaDesc) > 160) { $analysis['content']['bad'][$c->id]['issues'][] = 'Description meta tag is too long'; } } if (strlen($metaKeys) == 0) { $analysis['content']['bad'][$c->id]['issues'][] = 'No keywords meta tag'; } else { if (strlen($metaKeys) > 255) { $analysis['content']['bad'][$c->id]['issues'][] = 'Keywords meta tag is too long'; } } } } } $config = Table\Config::findById('seo_analysis'); $config->value = serialize($analysis); $config->save(); }