null, ])); try { DbHelper::dropDatabase($name); } catch (\Exception $e) { print $e->getMessage() . "\n" . $e->getTraceAsString() . "\n"; } DbHelper::createDatabase($name); DbHelper::disconnectDatabase(); print "created database $name...\n"; } function updateDatabase() { Cache::deleteTrackerCache(); Option::clearCache(); $updater = new Updater(); $componentsWithUpdateFile = $updater->getComponentUpdates(); if (empty($componentsWithUpdateFile)) { return false; } $result = $updater->updateComponents($componentsWithUpdateFile); if (!empty($result['coreError']) || !empty($result['warnings']) || !empty($result['errors']) ) { throw new \Exception("Failed to update database (errors or warnings found): " . print_r($result, true)); } return $result; } function createSuperUser() { $passwordHelper = new Password(); $login = 'superUserLogin'; $password = $passwordHelper->hash(UsersManager::getPasswordHash('superUserPass')); $model = new \Piwik\Plugins\UsersManager\Model(); $user = $model->getUser($login); if (empty($user)) { $model->addUser($login, $password, 'hello@example.org', Date::now()->getDatetime()); } else { $model->updateUser($login, $password, 'hello@example.org'); } $setSuperUser = empty($user) || !empty($user['superuser_access']); $model->setSuperUserAccess($login, $setSuperUser); return $model->getUser($login); } function createWebsite($dateTime) { $siteName = 'Test Site Subdir'; $idSite = SitesManagerAPI::getInstance()->addSite( $siteName, "http://piwik.net/", $ecommerce = 1, $siteSearch = null, $searchKeywordParameters = null, $searchCategoryParameters = null, $ips = null, $excludedQueryParameters = null, $timezone = null, $currency = null, $group = null, $startDate = null, $excludedUserAgents = null, $keepURLFragments = null, $type = null, $settings = null, $excludeUnknownUrls = 0 ); // Manually set the website creation date to a day earlier than the earliest day we record stats for Db::get()->update(Common::prefixTable("site"), array('ts_created' => Date::factory($dateTime)->subDay(1)->getDatetime()), "idsite = $idSite" ); // Clear the memory Website cache Site::clearCache(); Cache::deleteCacheWebsiteAttributes($idSite); return $idSite; } $_SERVER['HTTP_HOST'] = $host; $_SERVER['SERVER_NAME'] = $host; $dbConfig['dbname'] = 'latest_stable'; file_put_contents(PIWIK_INCLUDE_PATH . "/config/config.ini.php", ''); @mkdir(PIWIK_INCLUDE_PATH . '/tmp'); $environment = new Environment($environment = null); $environment->init(); // create database createFreshDatabase($dbConfig, $dbConfig['dbname']); // setup config $config = Config::getInstance(); $config->database = $dbConfig; $config->General['trusted_hosts'] = [ $host, 'localhost', '127.0.0.1', ]; $config->Cache['backend'] = 'file'; $config->forceSave(); print "setup config\n"; // setup db tables Db::createDatabaseObject(); DbHelper::createTables(); print "setup tables\n"; // setup plugins $pluginsManager = \Piwik\Plugin\Manager::getInstance(); $pluginsManager->loadActivatedPlugins(); $pluginsManager->installLoadedPlugins(); foreach($pluginsManager->getLoadedPlugins() as $plugin) { $name = $plugin->getPluginName(); if (!$pluginsManager->isPluginActivated($name)) { $pluginsManager->activatePlugin($name); } } $pluginsManager->loadPluginTranslations(); print "setup plugins\n"; // update (required after loading plugins first time) $updated = updateDatabase(); if (empty($updated)) { echo "did not update\n"; } else { echo "updated db\n"; } // create root user Access::getInstance()->setSuperUserAccess(); createSuperUser(); APILanguageManager::getInstance()->setLanguageForUser('superUserLogin', 'en'); print "created root user\n"; // create website createWebsite('2017-01-01 00:00:00'); print "created website\n"; // copy custom release channel copy(PIWIK_INCLUDE_PATH . '/../tests/PHPUnit/Fixtures/LatestStableInstall/GitCommitReleaseChannel.php', PIWIK_INCLUDE_PATH . '/plugins/CoreUpdater/ReleaseChannel/GitCommitReleaseChannel.php'); $settings = StaticContainer::get(CoreUpdater\SystemSettings::class); $settings->releaseChannel->setValue('git_commit'); $settings->releaseChannel->save(); print "set release channel\n"; // print token auth (on last line so it can be easily parsed) print Piwik::requestTemporarySystemAuthToken('InstallerUITests', 24);