xref: /plugin/fontello/admin.php (revision 95357802f68767bcd0367676ca97b384fa2109c6)
11776c5c5Sdh-tools<?php
21776c5c5Sdh-tools
31776c5c5Sdh-toolsuse dokuwiki\Extension\AdminPlugin;
41776c5c5Sdh-tools
51776c5c5Sdh-tools/**
61776c5c5Sdh-tools * Admin component for importing Fontello ZIP packages.
71776c5c5Sdh-tools */
81776c5c5Sdh-toolsclass admin_plugin_fontello extends AdminPlugin
91776c5c5Sdh-tools{
101776c5c5Sdh-tools    /** @var helper_plugin_fontello */
111776c5c5Sdh-tools    protected $helper;
121776c5c5Sdh-tools
131776c5c5Sdh-tools    public function __construct()
141776c5c5Sdh-tools    {
151776c5c5Sdh-tools        $this->helper = $this->loadHelper('fontello');
161776c5c5Sdh-tools    }
171776c5c5Sdh-tools
181776c5c5Sdh-tools    /**
191776c5c5Sdh-tools     * return sort order for position in admin menu
201776c5c5Sdh-tools     *
211776c5c5Sdh-tools     * @return int
221776c5c5Sdh-tools     */
231776c5c5Sdh-tools    public function getMenuSort()
241776c5c5Sdh-tools    {
251776c5c5Sdh-tools        return 300;
261776c5c5Sdh-tools    }
271776c5c5Sdh-tools
281776c5c5Sdh-tools    /**
291776c5c5Sdh-tools     * Handle ZIP uploads.
301776c5c5Sdh-tools     *
311776c5c5Sdh-tools     * @return void
321776c5c5Sdh-tools     */
331776c5c5Sdh-tools    public function handle()
341776c5c5Sdh-tools    {
351776c5c5Sdh-tools        global $ID;
361776c5c5Sdh-tools
371776c5c5Sdh-tools        if (($_POST['fontello_action'] ?? '') === 'save_enabled') {
381776c5c5Sdh-tools            if (!checkSecurityToken()) {
391776c5c5Sdh-tools                msg($this->getLang('err_bad_token'), -1);
401776c5c5Sdh-tools                return;
411776c5c5Sdh-tools            }
421776c5c5Sdh-tools
431776c5c5Sdh-tools            $enabledIcons = $_POST['enabled_icons'] ?? [];
441776c5c5Sdh-tools            if (!is_array($enabledIcons)) $enabledIcons = [];
451776c5c5Sdh-tools
461776c5c5Sdh-tools            try {
471776c5c5Sdh-tools                $this->helper->saveEnabledIconNames($enabledIcons);
481776c5c5Sdh-tools                msg($this->getLang('activation_ok'), 1);
491776c5c5Sdh-tools                send_redirect(wl($ID, ['do' => 'admin', 'page' => 'fontello'], true, '&'));
501776c5c5Sdh-tools            } catch (RuntimeException $exception) {
511776c5c5Sdh-tools                msg(hsc($exception->getMessage()), -1);
521776c5c5Sdh-tools            }
531776c5c5Sdh-tools
541776c5c5Sdh-tools            return;
551776c5c5Sdh-tools        }
561776c5c5Sdh-tools
57*95357802SDaniel Hofer        if (
58*95357802SDaniel Hofer            !isset($_FILES['fontellozip']) ||
59*95357802SDaniel Hofer            ($_FILES['fontellozip']['error'] ?? UPLOAD_ERR_NO_FILE) === UPLOAD_ERR_NO_FILE
60*95357802SDaniel Hofer        ) {
611776c5c5Sdh-tools            return;
621776c5c5Sdh-tools        }
631776c5c5Sdh-tools
641776c5c5Sdh-tools        if (!checkSecurityToken()) {
651776c5c5Sdh-tools            msg($this->getLang('err_bad_token'), -1);
661776c5c5Sdh-tools            return;
671776c5c5Sdh-tools        }
681776c5c5Sdh-tools
691776c5c5Sdh-tools        try {
701776c5c5Sdh-tools            $this->helper->importPackage($_FILES['fontellozip']);
711776c5c5Sdh-tools            msg($this->getLang('upload_ok'), 1);
721776c5c5Sdh-tools            send_redirect(wl($ID, ['do' => 'admin', 'page' => 'fontello'], true, '&'));
731776c5c5Sdh-tools        } catch (RuntimeException $exception) {
741776c5c5Sdh-tools            msg(hsc($exception->getMessage()), -1);
751776c5c5Sdh-tools        }
761776c5c5Sdh-tools    }
771776c5c5Sdh-tools
781776c5c5Sdh-tools    /**
791776c5c5Sdh-tools     * Output the admin page.
801776c5c5Sdh-tools     *
811776c5c5Sdh-tools     * @return void
821776c5c5Sdh-tools     */
831776c5c5Sdh-tools    public function html()
841776c5c5Sdh-tools    {
851776c5c5Sdh-tools        global $lang;
861776c5c5Sdh-tools
871776c5c5Sdh-tools        $package = $this->helper->getPackageInfo();
881776c5c5Sdh-tools
891776c5c5Sdh-tools        echo '<h1>' . hsc($this->getLang('menu')) . '</h1>';
901776c5c5Sdh-tools        echo $this->locale_xhtml('intro');
911776c5c5Sdh-tools
921776c5c5Sdh-tools        echo '<form action="" method="post" enctype="multipart/form-data"><div class="no">';
931776c5c5Sdh-tools        formSecurityToken();
941776c5c5Sdh-tools        echo '<p>';
951776c5c5Sdh-tools        echo '<label for="fontellozip">' . hsc($this->getLang('label_zip')) . '</label><br />';
961776c5c5Sdh-tools        echo '<input type="file" name="fontellozip" id="fontellozip" accept=".zip,application/zip" /> ';
971776c5c5Sdh-tools        echo '<button type="submit">' . hsc($lang['btn_upload']) . '</button>';
981776c5c5Sdh-tools        echo '</p>';
991776c5c5Sdh-tools        echo '</div></form>';
1001776c5c5Sdh-tools
1011776c5c5Sdh-tools        if ($package === null) {
1021776c5c5Sdh-tools            echo '<p>' . hsc($this->getLang('no_package')) . '</p>';
1031776c5c5Sdh-tools            return;
1041776c5c5Sdh-tools        }
1051776c5c5Sdh-tools
1061776c5c5Sdh-tools        echo '<div class="table"><table class="inline"><tbody>';
1071776c5c5Sdh-tools        echo '<tr><th>' . hsc($this->getLang('current_zip')) . '</th><td>' . hsc($package['zip_name']) . '</td></tr>';
1081776c5c5Sdh-tools        echo '<tr><th>' . hsc($this->getLang('current_prefix')) . '</th><td>' . hsc($package['prefix']) . '</td></tr>';
109*95357802SDaniel Hofer        echo '<tr><th>' . hsc($this->getLang('current_count')) . '</th><td>' .
110*95357802SDaniel Hofer            (int) $package['icon_count'] . '</td></tr>';
111*95357802SDaniel Hofer        echo '<tr><th>' . hsc($this->getLang('current_enabled')) . '</th><td>' .
112*95357802SDaniel Hofer            (int) $package['enabled_count'] . '</td></tr>';
1131776c5c5Sdh-tools        echo '<tr><th>' . hsc($this->getLang('current_imported')) . '</th><td>' .
1141776c5c5Sdh-tools            hsc($package['imported_at'] ? $package['imported_at'] : $this->getLang('unknown')) . '</td></tr>';
1151776c5c5Sdh-tools        echo '</tbody></table></div>';
1161776c5c5Sdh-tools
1171776c5c5Sdh-tools        echo '<h2>' . hsc($this->getLang('icons_heading')) . '</h2>';
1181776c5c5Sdh-tools        echo '<form action="" method="post"><div class="no">';
1191776c5c5Sdh-tools        formSecurityToken();
1201776c5c5Sdh-tools        echo '<input type="hidden" name="fontello_action" value="save_enabled" />';
1211776c5c5Sdh-tools        echo '<div class="table"><table class="inline"><thead><tr>';
1221776c5c5Sdh-tools        echo '<th>' . hsc($this->getLang('icon_enabled')) . '</th>';
1231776c5c5Sdh-tools        echo '<th>' . hsc($this->getLang('icon_name')) . '</th>';
1241776c5c5Sdh-tools        echo '<th>' . hsc($this->getLang('icon_class')) . '</th>';
1251776c5c5Sdh-tools        echo '<th>' . hsc($this->getLang('icon_preview')) . '</th>';
1261776c5c5Sdh-tools        echo '</tr></thead><tbody>';
1271776c5c5Sdh-tools
1281776c5c5Sdh-tools        foreach ($package['icons'] as $icon) {
1291776c5c5Sdh-tools            $fieldId = 'fontello-enabled-' . preg_replace('/[^A-Za-z0-9_-]/', '-', $icon['name']);
1301776c5c5Sdh-tools            echo '<tr>';
1311776c5c5Sdh-tools            echo '<td><input type="checkbox" name="enabled_icons[]" id="' . hsc($fieldId) . '" value="' .
1321776c5c5Sdh-tools                hsc($icon['name']) . '"' . (!empty($icon['enabled']) ? ' checked="checked"' : '') . ' /></td>';
1331776c5c5Sdh-tools            echo '<td><label for="' . hsc($fieldId) . '"><code>' . hsc($icon['name']) . '</code></label></td>';
1341776c5c5Sdh-tools            echo '<td><code>' . hsc($icon['class']) . '</code></td>';
1351776c5c5Sdh-tools            echo '<td><span class="fontello-icon ' . hsc($icon['class']) . '" aria-hidden="true"></span></td>';
1361776c5c5Sdh-tools            echo '</tr>';
1371776c5c5Sdh-tools        }
1381776c5c5Sdh-tools
1391776c5c5Sdh-tools        echo '</tbody></table></div>';
1401776c5c5Sdh-tools        echo '<p><button type="submit">' . hsc($this->getLang('save_activation')) . '</button></p>';
1411776c5c5Sdh-tools        echo '</div></form>';
1421776c5c5Sdh-tools    }
1431776c5c5Sdh-tools}
144