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