diff options
Diffstat (limited to 'plugins/GeoIp2/GeoIp2.php')
-rw-r--r-- | plugins/GeoIp2/GeoIp2.php | 64 |
1 files changed, 62 insertions, 2 deletions
diff --git a/plugins/GeoIp2/GeoIp2.php b/plugins/GeoIp2/GeoIp2.php index ffba09bd98..2f1c2e6748 100644 --- a/plugins/GeoIp2/GeoIp2.php +++ b/plugins/GeoIp2/GeoIp2.php @@ -8,7 +8,13 @@ */ namespace Piwik\Plugins\GeoIp2; +use Piwik\CliMulti; +use Piwik\Container\StaticContainer; +use Piwik\Option; +use Piwik\Piwik; +use Piwik\Plugins\Installation\FormDefaultSettings; use Piwik\Plugins\UserCountry\LocationProvider; +use Piwik\Scheduler\Scheduler; /** * @@ -18,8 +24,10 @@ class GeoIp2 extends \Piwik\Plugin public function registerEvents() { return array( - 'AssetManager.getJavaScriptFiles' => 'getJsFiles', - 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', + 'AssetManager.getJavaScriptFiles' => 'getJsFiles', + 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', + 'Installation.defaultSettingsForm.init' => 'installationFormInit', + 'Installation.defaultSettingsForm.submit' => 'installationFormSubmit', ); } @@ -50,4 +58,56 @@ class GeoIp2 extends \Piwik\Plugin $translationKeys[] = "General_Save"; $translationKeys[] = "General_Continue"; } + + /** + * Customize the Installation "default settings" form. + * + * @param FormDefaultSettings $form + */ + public function installationFormInit(FormDefaultSettings $form) + { + $form->addElement('checkbox', 'setup_geoip2', null, + [ + 'content' => '<div class="form-help">' . Piwik::translate('GeoIp2_AutomaticSetupDescription', ['<a rel="noreferrer noopener" href="https://db-ip.com/?refid=mtm">','</a>']) . '</div> ' . Piwik::translate('GeoIp2_AutomaticSetup') + ] + ); + + // default values + $form->addDataSource(new \HTML_QuickForm2_DataSource_Array([ + 'setup_geoip2' => true, + ])); + } + + /** + * Process the submit on the Installation "default settings" form. + * + * @param FormDefaultSettings $form + */ + public function installationFormSubmit(FormDefaultSettings $form) + { + $setupGeoIp2 = (bool) $form->getSubmitValue('setup_geoip2'); + + if ($setupGeoIp2) { + Option::set(GeoIP2AutoUpdater::AUTO_SETUP_OPTION_NAME, true); + GeoIP2AutoUpdater::setUpdaterOptions([ + 'loc' => \Piwik\Plugins\GeoIp2\LocationProvider\GeoIp2::getDbIpLiteUrl(), + 'period' => GeoIP2AutoUpdater::SCHEDULE_PERIOD_MONTHLY + ]); + + $cliMulti = new CliMulti(); + + // directly trigger the update task if possible + // otherwise ensure it will be run soonish as scheduled task + if ($cliMulti->supportsAsync()) { + $phpCli = new CliMulti\CliPhp(); + $command = sprintf('%s %s/console core:run-scheduled-tasks --force "Piwik\Plugins\GeoIp2\GeoIP2AutoUpdater.update" > /dev/null 2>&1 &', + $phpCli->findPhpBinary(), PIWIK_INCLUDE_PATH); + shell_exec($command); + } else { + /** @var Scheduler $scheduler */ + $scheduler = StaticContainer::getContainer()->get('Piwik\Scheduler\Scheduler'); + $scheduler->rescheduleTask(new GeoIP2AutoUpdater()); + } + } + } } |