]> git.agnieray.net Git - galette.git/commitdiff
Migrate dashboard, preferences and charts to a controller class
authorJohan Cwiklinski <johan@x-tnd.be>
Sat, 2 May 2020 08:25:00 +0000 (10:25 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Sat, 2 May 2020 08:25:00 +0000 (10:25 +0200)
Missing print_logo in abstract controller
refs #1354

galette/includes/routes/main.routes.php
galette/includes/routes/management.routes.php
galette/lib/Galette/Controllers/AbstractController.php
galette/lib/Galette/Controllers/GaletteController.php
galette/lib/Galette/Controllers/ImagesController.php

index 143f7a9baeaae4c603d22e04d42409bdf0031786..48d37971dd7f8b6cd2521e6a424082f39889260a 100644 (file)
@@ -66,7 +66,7 @@ $app->get(
     ImagesController::class . ':photo'
 )->setName('photo');
 
-//system information - keep old route with typo for now (0.9.4)
+//system information - keep old route with typo ('s' on 'information') for now (0.9.4)
 $app->get(
     '/system-informations',
     function ($request, $response, $args) {
@@ -79,19 +79,5 @@ $app->get(
 //system information
 $app->get(
     '/system-information',
-    function ($request, $response, $args = []) {
-        $sysinfos = new SysInfos();
-        $sysinfos->grab();
-
-        // display page
-        $this->view->render(
-            $response,
-            'sysinfos.tpl',
-            array(
-                'page_title'    => _T("System information"),
-                'rawinfos'      => $sysinfos->getRawData($this->plugins)
-            )
-        );
-        return $response;
-    }
+    GaletteController::class . ':systemInformation'
 )->setName('sysinfos')->add($authenticate);
index 6cb599dba8ed670675cd2ea1cc40ec977343a448..2ad0bcdb838747abc4c87d65132bd1f886dbe449 100644 (file)
@@ -35,6 +35,8 @@
  * @since     0.8.2dev 2014-11-11
  */
 
+use Galette\Controllers\GaletteController;
+
 use Galette\Core\PrintLogo;
 use Galette\Core\GaletteMail;
 use Galette\Core\Preferences;
@@ -68,340 +70,30 @@ use Galette\Entity\PaymentType;
 //galette's dashboard
 $app->get(
     '/dashboard',
-    function ($request, $response, $args = []) {
-        $news = new News($this->preferences->pref_rss_url);
-
-        $params = [
-            'page_title'        => _T("Dashboard"),
-            'contentcls'        => 'desktop',
-            'news'              => $news->getPosts(),
-            'show_dashboard'    => $_COOKIE['show_galette_dashboard']
-        ];
-
-        $hide_telemetry = true;
-        if ($this->login->isAdmin()) {
-            $telemetry = new \Galette\Util\Telemetry(
-                $this->zdb,
-                $this->preferences,
-                $this->plugins
-            );
-            $params['reguuid'] = $telemetry->getRegistrationUuid();
-            $params['telemetry_sent'] = $telemetry->isSent();
-            $params['registered'] = $telemetry->isRegistered();
-
-            $hide_telemetry = $telemetry->isSent() && $telemetry->isRegistered()
-                || $_COOKIE['hide_galette_telemetry'];
-        }
-        $params['hide_telemetry'] = $hide_telemetry;
-
-        // display page
-        $this->view->render(
-            $response,
-            'desktop.tpl',
-            $params
-        );
-        return $response;
-    }
+    GaletteController::class . ':dashboard'
 )->setName('dashboard')->add($authenticate);
 
 //preferences page
 $app->get(
     '/preferences',
-    function ($request, $response) {
-
-        // flagging required fields
-        $required = array(
-            'pref_nom'              => 1,
-            'pref_lang'             => 1,
-            'pref_numrows'          => 1,
-            'pref_log'              => 1,
-            'pref_statut'           => 1,
-            'pref_etiq_marges_v'    => 1,
-            'pref_etiq_marges_h'    => 1,
-            'pref_etiq_hspace'      => 1,
-            'pref_etiq_vspace'      => 1,
-            'pref_etiq_hsize'       => 1,
-            'pref_etiq_vsize'       => 1,
-            'pref_etiq_cols'        => 1,
-            'pref_etiq_rows'        => 1,
-            'pref_etiq_corps'       => 1,
-            'pref_card_abrev'       => 1,
-            'pref_card_strip'       => 1,
-            'pref_card_marges_v'    => 1,
-            'pref_card_marges_h'    => 1,
-            'pref_card_hspace'      => 1,
-            'pref_card_vspace'      => 1
-        );
-
-        if ($this->login->isSuperAdmin() && GALETTE_MODE !== 'DEMO') {
-            $required['pref_admin_login'] = 1;
-        }
-
-        if ($this->session->entered_preferences) {
-            $pref = $this->session->entered_preferences;
-            $this->session->entered_preferences = null;
-        } else {
-            $prefs_fields = $this->preferences->getFieldsNames();
-            // collect data
-            foreach ($prefs_fields as $fieldname) {
-                $pref[$fieldname] = $this->preferences->$fieldname;
-            }
-        }
-
-        //List available themes
-        $themes = array();
-        $d = dir(GALETTE_THEMES_PATH);
-        while (($entry = $d->read()) !== false) {
-            $full_entry = GALETTE_THEMES_PATH . $entry;
-            if ($entry != '.'
-                && $entry != '..'
-                && is_dir($full_entry)
-                && file_exists($full_entry.'/page.tpl')
-            ) {
-                $themes[] = $entry;
-            }
-        }
-        $d->close();
-
-        $m = new Members();
-        $s = new Status($this->zdb);
-
-        // display page
-        $this->view->render(
-            $response,
-            'preferences.tpl',
-            array(
-                'page_title'            => _T("Settings"),
-                'staff_members'         => $m->getStaffMembersList(true),
-                'time'                  => time(),
-                'pref'                  => $pref,
-                'pref_numrows_options'  => array(
-                    10 => '10',
-                    20 => '20',
-                    50 => '50',
-                    100 => '100'
-                ),
-                'print_logo'            => $this->print_logo,
-                'required'              => $required,
-                'themes'                => $themes,
-                'statuts'               => $s->getList(),
-                'accounts_options'      => array(
-                    Members::ALL_ACCOUNTS       => _T("All accounts"),
-                    Members::ACTIVE_ACCOUNT     => _T("Active accounts"),
-                    Members::INACTIVE_ACCOUNT   => _T("Inactive accounts")
-                )
-            )
-        );
-        return $response;
-    }
+    GaletteController::class . ':preferences'
 )->setName('preferences')->add($authenticate);
 
 //preferences procedure
 $app->post(
     '/preferences',
-    function ($request, $response) {
-        $post = $request->getParsedBody();
-        $error_detected = [];
-        $warning_detected = [];
-
-        // Validation
-        if (isset($post['valid']) && $post['valid'] == '1') {
-            if ($this->preferences->check($post, $this->login)) {
-                if (!$this->preferences->store()) {
-                    $error_detected[] = _T("An SQL error has occurred while storing preferences. Please try again, and contact the administrator if the problem persists.");
-                } else {
-                    $this->flash->addMessage(
-                        'success_detected',
-                        _T("Preferences has been saved.")
-                    );
-                }
-                $warning_detected = array_merge($warning_detected, $this->preferences->checkCardsSizes());
-
-                // picture upload
-                if (GALETTE_MODE !== 'DEMO' &&  isset($_FILES['logo'])) {
-                    if ($_FILES['logo']['error'] === UPLOAD_ERR_OK) {
-                        if ($_FILES['logo']['tmp_name'] !='') {
-                            if (is_uploaded_file($_FILES['logo']['tmp_name'])) {
-                                $res = $this->logo->store($_FILES['logo']);
-                                if ($res < 0) {
-                                    $error_detected[] = $this->logo->getErrorMessage($res);
-                                } else {
-                                    $this->logo = new Logo();
-                                }
-                            }
-                        }
-                    } elseif ($_FILES['logo']['error'] !== UPLOAD_ERR_NO_FILE) {
-                        Analog::log(
-                            $this->logo->getPhpErrorMessage($_FILES['logo']['error']),
-                            Analog::WARNING
-                        );
-                        $error_detected[] = $this->logo->getPhpErrorMessage(
-                            $_FILES['logo']['error']
-                        );
-                    }
-                }
-
-                if (GALETTE_MODE !== 'DEMO' && isset($post['del_logo'])) {
-                    if (!$this->logo->delete()) {
-                        $error_detected[] = _T("Delete failed");
-                    } else {
-                        $this->logo = new Logo(); //get default Logo
-                    }
-                }
-
-                // Card logo upload
-                if (GALETTE_MODE !== 'DEMO' && isset($_FILES['card_logo'])) {
-                    if ($_FILES['card_logo']['error'] === UPLOAD_ERR_OK) {
-                        if ($_FILES['card_logo']['tmp_name'] !='') {
-                            if (is_uploaded_file($_FILES['card_logo']['tmp_name'])) {
-                                $res = $this->print_logo->store($_FILES['card_logo']);
-                                if ($res < 0) {
-                                    $error_detected[] = $this->print_logo->getErrorMessage($res);
-                                } else {
-                                    $this->print_logo = new PrintLogo();
-                                }
-                            }
-                        }
-                    } elseif ($_FILES['card_logo']['error'] !== UPLOAD_ERR_NO_FILE) {
-                        Analog::log(
-                            $this->print_logo->getPhpErrorMessage($_FILES['card_logo']['error']),
-                            Analog::WARNING
-                        );
-                        $error_detected[] = $this->print_logo->getPhpErrorMessage(
-                            $_FILES['card_logo']['error']
-                        );
-                    }
-                }
-
-                if (GALETTE_MODE !== 'DEMO' && isset($post['del_card_logo'])) {
-                    if (!$this->print_logo->delete()) {
-                        $error_detected[] = _T("Delete failed");
-                    } else {
-                        $this->print_logo = new PrintLogo();
-                    }
-                }
-            } else {
-                $error_detected = $this->preferences->getErrors();
-            }
-
-            if (count($error_detected) > 0) {
-                $this->session->entered_preferences = $post;
-                //report errors
-                foreach ($error_detected as $error) {
-                    $this->flash->addMessage(
-                        'error_detected',
-                        $error
-                    );
-                }
-            }
-
-            if (count($warning_detected) > 0) {
-                //report warnings
-                foreach ($warning_detected as $warning) {
-                    $this->flash->addMessage(
-                        'warning_detected',
-                        $warning
-                    );
-                }
-            }
-
-            return $response
-                ->withStatus(301)
-                ->withHeader('Location', $this->router->pathFor('preferences'));
-        }
-    }
+    GaletteController::class . ':storePreferences'
 )->setName('store-preferences')->add($authenticate);
 
 $app->get(
     '/test/email',
-    function ($request, $response) {
-        $sent = false;
-        if (!$this->preferences->pref_mail_method > GaletteMail::METHOD_DISABLED) {
-            $this->flash->addMessage(
-                'error_detected',
-                _T("You asked Galette to send a test email, but email has been disabled in the preferences.")
-            );
-        } else {
-            $get = $request->getQueryParams();
-            $dest = (isset($get['adress']) ? $get['adress'] : $this->preferences->pref_email_newadh);
-            if (GaletteMail::isValidEmail($dest)) {
-                $mail = new GaletteMail($this->preferences);
-                $mail->setSubject(_T('Test message'));
-                $mail->setRecipients(
-                    array(
-                        $dest => _T("Galette admin")
-                    )
-                );
-                $mail->setMessage(_T('Test message.'));
-                $sent = $mail->send();
-
-                if ($sent) {
-                    $this->flash->addMessage(
-                        'success_detected',
-                        str_replace(
-                            '%email',
-                            $dest,
-                            _T("An email has been sent to %email")
-                        )
-                    );
-                } else {
-                    $this->flash->addMessage(
-                        'error_detected',
-                        str_replace(
-                            '%email',
-                            $dest,
-                            _T("No email sent to %email")
-                        )
-                    );
-                }
-            } else {
-                $this->flash->addMessage(
-                    'error_detected',
-                    _T("Invalid email adress!")
-                );
-            }
-        }
-
-        if (!$request->isXhr()) {
-            return $response
-                ->withStatus(301)
-                ->withHeader('Location', $this->router->pathFor('preferences'));
-        } else {
-            return $response->withJson(
-                [
-                    'sent'  => $sent
-                ]
-            );
-        }
-    }
+    GaletteController::class . ':testEmail'
 )->setName('testEmail')->add($authenticate);
 
 //charts
 $app->get(
     '/charts',
-    function ($request, $response) {
-        $charts = new Charts(
-            array(
-                Charts::MEMBERS_STATUS_PIE,
-                Charts::MEMBERS_STATEDUE_PIE,
-                Charts::CONTRIBS_TYPES_PIE,
-                Charts::COMPANIES_OR_NOT,
-                Charts::CONTRIBS_ALLTIME
-            )
-        );
-
-        // display page
-        $this->view->render(
-            $response,
-            'charts.tpl',
-            array(
-                'page_title'        => _T("Charts"),
-                'charts'            => $charts->getCharts(),
-                'require_charts'    => true
-            )
-        );
-        return $response;
-    }
+    GaletteController::class . ':charts'
 )->setName('charts')->add($authenticate);
 
 //plugins
index 1754bd67b591f4ce78ad08fdbf51de23f648f7f6..8527730948804c75eb28077b24ae5ce5f00f8358 100644 (file)
@@ -137,6 +137,7 @@ abstract class AbstractController
         $this->preferences = $container->get('preferences');
         $this->view = $container->get('view');
         $this->logo = $container->get('logo');
+        $this->print_logo = $container->get('print_logo');
         $this->plugins = $container->get('plugins');
         $this->router = $container->get('router');
         $this->history = $container->get('history');
index 5f5109add5b82a936e7739a51b4358eff39a185c..7d6260a5190dfc70982ae35cae88bd2fc8b1a068 100644 (file)
@@ -41,8 +41,11 @@ use Slim\Http\Request;
 use Slim\Http\Response;
 use Galette\Core\SysInfos;
 use Galette\Core\GaletteMail;
-use Galette\IO\Charts;
 use Galette\Core\PluginInstall;
+use Galette\Entity\Status;
+use Galette\IO\News;
+use Galette\IO\Charts;
+use Galette\Repository\Members;
 use Analog\Analog;
 
 /**
@@ -73,4 +76,393 @@ class GaletteController extends AbstractController
     {
         return $this->galetteRedirect($request, $response, $args);
     }
+
+    /**
+     * System information
+     *
+     * @param Request  $request  PSR Request
+     * @param Response $response PSR Response
+     *
+     * @return Response
+     */
+    public function systemInformation(Request $request, Response $response) :Response
+    {
+        $sysinfos = new SysInfos();
+        $sysinfos->grab();
+
+        // display page
+        $this->view->render(
+            $response,
+            'sysinfos.tpl',
+            array(
+                'page_title'    => _T("System information"),
+                'rawinfos'      => $sysinfos->getRawData($this->plugins)
+            )
+        );
+        return $response;
+    }
+
+    /**
+     * Dashboard page
+     *
+     * @param Request  $request  PSR Request
+     * @param Response $response PSR Response
+     *
+     * @return Response
+     */
+    public function dashboard(Request $request, Response $response) :Response
+    {
+        $news = new News($this->preferences->pref_rss_url);
+
+        $params = [
+            'page_title'        => _T("Dashboard"),
+            'contentcls'        => 'desktop',
+            'news'              => $news->getPosts(),
+            'show_dashboard'    => $_COOKIE['show_galette_dashboard']
+        ];
+
+        $hide_telemetry = true;
+        if ($this->login->isAdmin()) {
+            $telemetry = new \Galette\Util\Telemetry(
+                $this->zdb,
+                $this->preferences,
+                $this->plugins
+            );
+            $params['reguuid'] = $telemetry->getRegistrationUuid();
+            $params['telemetry_sent'] = $telemetry->isSent();
+            $params['registered'] = $telemetry->isRegistered();
+
+            $hide_telemetry = $telemetry->isSent() && $telemetry->isRegistered()
+                || $_COOKIE['hide_galette_telemetry'];
+        }
+        $params['hide_telemetry'] = $hide_telemetry;
+
+        // display page
+        $this->view->render(
+            $response,
+            'desktop.tpl',
+            $params
+        );
+        return $response;
+    }
+
+    /**
+     * Preferences page
+     *
+     * @param Request  $request  PSR Request
+     * @param Response $response PSR Response
+     *
+     * @return Response
+     */
+    public function preferences(Request $request, Response $response) :Response
+    {
+        // flagging required fields
+        $required = array(
+            'pref_nom'              => 1,
+            'pref_lang'             => 1,
+            'pref_numrows'          => 1,
+            'pref_log'              => 1,
+            'pref_statut'           => 1,
+            'pref_etiq_marges_v'    => 1,
+            'pref_etiq_marges_h'    => 1,
+            'pref_etiq_hspace'      => 1,
+            'pref_etiq_vspace'      => 1,
+            'pref_etiq_hsize'       => 1,
+            'pref_etiq_vsize'       => 1,
+            'pref_etiq_cols'        => 1,
+            'pref_etiq_rows'        => 1,
+            'pref_etiq_corps'       => 1,
+            'pref_card_abrev'       => 1,
+            'pref_card_strip'       => 1,
+            'pref_card_marges_v'    => 1,
+            'pref_card_marges_h'    => 1,
+            'pref_card_hspace'      => 1,
+            'pref_card_vspace'      => 1
+        );
+
+        if ($this->login->isSuperAdmin() && GALETTE_MODE !== 'DEMO') {
+            $required['pref_admin_login'] = 1;
+        }
+
+        if ($this->session->entered_preferences) {
+            $pref = $this->session->entered_preferences;
+            $this->session->entered_preferences = null;
+        } else {
+            $prefs_fields = $this->preferences->getFieldsNames();
+            // collect data
+            foreach ($prefs_fields as $fieldname) {
+                $pref[$fieldname] = $this->preferences->$fieldname;
+            }
+        }
+
+        //List available themes
+        $themes = array();
+        $d = dir(GALETTE_THEMES_PATH);
+        while (($entry = $d->read()) !== false) {
+            $full_entry = GALETTE_THEMES_PATH . $entry;
+            if ($entry != '.'
+                && $entry != '..'
+                && is_dir($full_entry)
+                && file_exists($full_entry.'/page.tpl')
+            ) {
+                $themes[] = $entry;
+            }
+        }
+        $d->close();
+
+        $m = new Members();
+        $s = new Status($this->zdb);
+
+        // display page
+        $this->view->render(
+            $response,
+            'preferences.tpl',
+            array(
+                'page_title'            => _T("Settings"),
+                'staff_members'         => $m->getStaffMembersList(true),
+                'time'                  => time(),
+                'pref'                  => $pref,
+                'pref_numrows_options'  => array(
+                    10 => '10',
+                    20 => '20',
+                    50 => '50',
+                    100 => '100'
+                ),
+                'print_logo'            => $this->print_logo,
+                'required'              => $required,
+                'themes'                => $themes,
+                'statuts'               => $s->getList(),
+                'accounts_options'      => array(
+                    Members::ALL_ACCOUNTS       => _T("All accounts"),
+                    Members::ACTIVE_ACCOUNT     => _T("Active accounts"),
+                    Members::INACTIVE_ACCOUNT   => _T("Inactive accounts")
+                )
+            )
+        );
+        return $response;
+    }
+
+    /**
+     * Store preferences
+     *
+     * @param Request  $request  PSR Request
+     * @param Response $response PSR Response
+     *
+     * @return Response
+     */
+    public function storePreferences(Request $request, Response $response) :Response
+    {
+        $post = $request->getParsedBody();
+        $error_detected = [];
+        $warning_detected = [];
+
+        // Validation
+        if (isset($post['valid']) && $post['valid'] == '1') {
+            if ($this->preferences->check($post, $this->login)) {
+                if (!$this->preferences->store()) {
+                    $error_detected[] = _T("An SQL error has occurred while storing preferences. Please try again, and contact the administrator if the problem persists.");
+                } else {
+                    $this->flash->addMessage(
+                        'success_detected',
+                        _T("Preferences has been saved.")
+                    );
+                }
+                $warning_detected = array_merge($warning_detected, $this->preferences->checkCardsSizes());
+
+                // picture upload
+                if (GALETTE_MODE !== 'DEMO' &&  isset($_FILES['logo'])) {
+                    if ($_FILES['logo']['error'] === UPLOAD_ERR_OK) {
+                        if ($_FILES['logo']['tmp_name'] !='') {
+                            if (is_uploaded_file($_FILES['logo']['tmp_name'])) {
+                                $res = $this->logo->store($_FILES['logo']);
+                                if ($res < 0) {
+                                    $error_detected[] = $this->logo->getErrorMessage($res);
+                                } else {
+                                    $this->logo = new Logo();
+                                }
+                            }
+                        }
+                    } elseif ($_FILES['logo']['error'] !== UPLOAD_ERR_NO_FILE) {
+                        Analog::log(
+                            $this->logo->getPhpErrorMessage($_FILES['logo']['error']),
+                            Analog::WARNING
+                        );
+                        $error_detected[] = $this->logo->getPhpErrorMessage(
+                            $_FILES['logo']['error']
+                        );
+                    }
+                }
+
+                if (GALETTE_MODE !== 'DEMO' && isset($post['del_logo'])) {
+                    if (!$this->logo->delete()) {
+                        $error_detected[] = _T("Delete failed");
+                    } else {
+                        $this->logo = new Logo(); //get default Logo
+                    }
+                }
+
+                // Card logo upload
+                if (GALETTE_MODE !== 'DEMO' && isset($_FILES['card_logo'])) {
+                    if ($_FILES['card_logo']['error'] === UPLOAD_ERR_OK) {
+                        if ($_FILES['card_logo']['tmp_name'] !='') {
+                            if (is_uploaded_file($_FILES['card_logo']['tmp_name'])) {
+                                $res = $this->print_logo->store($_FILES['card_logo']);
+                                if ($res < 0) {
+                                    $error_detected[] = $this->print_logo->getErrorMessage($res);
+                                } else {
+                                    $this->print_logo = new PrintLogo();
+                                }
+                            }
+                        }
+                    } elseif ($_FILES['card_logo']['error'] !== UPLOAD_ERR_NO_FILE) {
+                        Analog::log(
+                            $this->print_logo->getPhpErrorMessage($_FILES['card_logo']['error']),
+                            Analog::WARNING
+                        );
+                        $error_detected[] = $this->print_logo->getPhpErrorMessage(
+                            $_FILES['card_logo']['error']
+                        );
+                    }
+                }
+
+                if (GALETTE_MODE !== 'DEMO' && isset($post['del_card_logo'])) {
+                    if (!$this->print_logo->delete()) {
+                        $error_detected[] = _T("Delete failed");
+                    } else {
+                        $this->print_logo = new PrintLogo();
+                    }
+                }
+            } else {
+                $error_detected = $this->preferences->getErrors();
+            }
+
+            if (count($error_detected) > 0) {
+                $this->session->entered_preferences = $post;
+                //report errors
+                foreach ($error_detected as $error) {
+                    $this->flash->addMessage(
+                        'error_detected',
+                        $error
+                    );
+                }
+            }
+
+            if (count($warning_detected) > 0) {
+                //report warnings
+                foreach ($warning_detected as $warning) {
+                    $this->flash->addMessage(
+                        'warning_detected',
+                        $warning
+                    );
+                }
+            }
+
+            return $response
+                ->withStatus(301)
+                ->withHeader('Location', $this->router->pathFor('preferences'));
+        }
+    }
+
+    /**
+     * Test mail parameters
+     *
+     * @param Request  $request  PSR Request
+     * @param Response $response PSR Response
+     *
+     * @return Response
+     */
+    public function testEmail(Request $request, Response $response) :Response
+    {
+        $sent = false;
+        if (!$this->preferences->pref_mail_method > GaletteMail::METHOD_DISABLED) {
+            $this->flash->addMessage(
+                'error_detected',
+                _T("You asked Galette to send a test email, but email has been disabled in the preferences.")
+            );
+        } else {
+            $get = $request->getQueryParams();
+            $dest = (isset($get['adress']) ? $get['adress'] : $this->preferences->pref_email_newadh);
+            if (GaletteMail::isValidEmail($dest)) {
+                $mail = new GaletteMail($this->preferences);
+                $mail->setSubject(_T('Test message'));
+                $mail->setRecipients(
+                    array(
+                        $dest => _T("Galette admin")
+                    )
+                );
+                $mail->setMessage(_T('Test message.'));
+                $sent = $mail->send();
+
+                if ($sent) {
+                    $this->flash->addMessage(
+                        'success_detected',
+                        str_replace(
+                            '%email',
+                            $dest,
+                            _T("An email has been sent to %email")
+                        )
+                    );
+                } else {
+                    $this->flash->addMessage(
+                        'error_detected',
+                        str_replace(
+                            '%email',
+                            $dest,
+                            _T("No email sent to %email")
+                        )
+                    );
+                }
+            } else {
+                $this->flash->addMessage(
+                    'error_detected',
+                    _T("Invalid email adress!")
+                );
+            }
+        }
+
+        if (!$request->isXhr()) {
+            return $response
+                ->withStatus(301)
+                ->withHeader('Location', $this->router->pathFor('preferences'));
+        } else {
+            return $response->withJson(
+                [
+                    'sent'  => $sent
+                ]
+            );
+        }
+    }
+
+    /**
+     * Charts page
+     *
+     * @param Request  $request  PSR Request
+     * @param Response $response PSR Response
+     *
+     * @return Response
+     */
+    public function charts(Request $request, Response $response) :Response
+    {
+        $charts = new Charts(
+            array(
+                Charts::MEMBERS_STATUS_PIE,
+                Charts::MEMBERS_STATEDUE_PIE,
+                Charts::CONTRIBS_TYPES_PIE,
+                Charts::COMPANIES_OR_NOT,
+                Charts::CONTRIBS_ALLTIME
+            )
+        );
+
+        // display page
+        $this->view->render(
+            $response,
+            'charts.tpl',
+            array(
+                'page_title'        => _T("Charts"),
+                'charts'            => $charts->getCharts(),
+                'require_charts'    => true
+            )
+        );
+        return $response;
+    }
 }
index 9d87d8b8abb543bd0ab2f38d32b62d4e60693538..eb6286eb13a6e78f90f6e029b7e42b7bf9083f6a 100644 (file)
@@ -105,7 +105,7 @@ class ImagesController extends AbstractController
      */
     public function printLogo(Request $request, Response $response) :Response
     {
-        return $this->sendResponse($response, $this->container->print_logo);
+        return $this->sendResponse($response, $this->print_logo);
     }
 
     /**