[ Index ]
 

Code source de XOOPS 2.0.17.1

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/htdocs/modules/system/admin/tplsets/ -> main.php (source)

   1  <?php
   2  // $Id: main.php 924 2007-08-04 10:09:15Z dugris $
   3  //  ------------------------------------------------------------------------ //
   4  //                XOOPS - PHP Content Management System                      //
   5  //                    Copyright (c) 2000 XOOPS.org                           //
   6  //                       <http://www.xoops.org/>                             //
   7  //  ------------------------------------------------------------------------ //
   8  //  This program is free software; you can redistribute it and/or modify     //
   9  //  it under the terms of the GNU General Public License as published by     //
  10  //  the Free Software Foundation; either version 2 of the License, or        //
  11  //  (at your option) any later version.                                      //
  12  //                                                                           //
  13  //  You may not change or alter any portion of this comment or credits       //
  14  //  of supporting developers from this source code or any supporting         //
  15  //  source code which is considered copyrighted (c) material of the          //
  16  //  original comment or credit authors.                                      //
  17  //                                                                           //
  18  //  This program is distributed in the hope that it will be useful,          //
  19  //  but WITHOUT ANY WARRANTY; without even the implied warranty of           //
  20  //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            //
  21  //  GNU General Public License for more details.                             //
  22  //                                                                           //
  23  //  You should have received a copy of the GNU General Public License        //
  24  //  along with this program; if not, write to the Free Software              //
  25  //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA //
  26  //  ------------------------------------------------------------------------ //
  27  // Author: Kazumi Ono (AKA onokazu)                                          //
  28  // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ //
  29  // Project: The XOOPS Project                                                //
  30  // ------------------------------------------------------------------------- //
  31  
  32  if ( !is_object($xoopsUser) || !is_object($xoopsModule) || !$xoopsUser->isAdmin($xoopsModule->mid()) ) {
  33      exit("Access Denied");
  34  } else {
  35      $op = 'list';
  36      if (isset($_POST)) {
  37          foreach ( $_POST as $k => $v ) {
  38              ${$k} = $v;
  39          }
  40      }
  41      if (isset($_GET['op'])) {
  42          $op = trim($_GET['op']);
  43          $id = $moddir = $file = $type = $tplset = null;
  44          if (isset($_GET['id'])) {
  45              $id = intval($_GET['id']);
  46          }
  47          if (isset($_GET['moddir'])) {
  48              $moddir = trim($_GET['moddir']);
  49          }
  50          if (isset($_GET['file'])) {
  51              $file = trim($_GET['file']);
  52          }
  53          if (isset($_GET['type'])) {
  54              $type = trim($_GET['type']);
  55          }
  56          if (isset($_GET['tplset'])) {
  57              $tplset = trim($_GET['tplset']);
  58          }
  59      }
  60  
  61      if ($op == 'edittpl_go') {
  62          if (isset($previewtpl)) {
  63              $op = 'previewtpl';
  64          }
  65      }
  66  
  67      switch ($op) {
  68      case 'list':
  69          $tplset_handler =& xoops_gethandler('tplset');
  70          $tplsets =& $tplset_handler->getObjects();
  71          xoops_cp_header();
  72          echo '<h4 style="text-align:left">'._MD_TPLMAIN.'</h4>';
  73          $installed = array();
  74          $tpltpl_handler =& xoops_gethandler('tplfile');
  75          $installed_mods = $tpltpl_handler->getModuleTplCount('default');
  76          $tcount = count($tplsets);
  77          echo '<table width="100%" cellspacing="1" class="outer"><tr align="center"><th width="25%">'._MD_THMSETNAME.'</th><th>'._MD_CREATED.'</th><th>'._MD_TEMPLATES.'</th><th>'._MD_ACTION.'</th><th>&nbsp;</th></tr>';
  78          $class = 'even';
  79          for ($i = 0; $i < $tcount; $i++) {
  80              $tplsetname = $tplsets[$i]->getVar('tplset_name');
  81              $installed_themes[] = $tplsetname;
  82              $class = ($class == 'even') ? 'odd' : 'even';
  83              echo '<tr class="'.$class.'" align="center"><td class="head">'.$tplsetname.'<br /><br /><span style="font-weight:normal;">'.$tplsets[$i]->getVar('tplset_desc').'</span></td><td>'.formatTimestamp($tplsets[$i]->getVar('tplset_created'), 's').'</td><td align="left"><ul>';
  84              $tplstats = $tpltpl_handler->getModuleTplCount($tplsetname);
  85              if (count($tplstats) > 0) {
  86                  $module_handler =& xoops_gethandler('module');
  87                  echo '<ul>';
  88                  foreach ($tplstats as $moddir => $filecount) {
  89                      $module =& $module_handler->getByDirname($moddir);
  90                      if (is_object($module)) {
  91                          if ($installed_mods[$moddir] > $filecount) {
  92                              $filecount = '<span style="color:#ff0000;">'.$filecount.'</span>';
  93                          }
  94                      echo '<li>'.$module->getVar('name').' [<a href="admin.php?fct=tplsets&amp;op=listtpl&amp;tplset='.$tplsetname.'&amp;moddir='.$moddir.'">'._LIST.'</a> (<b>'.$filecount.'</b>)]</li>';
  95                      }
  96                      unset($module);
  97                  }
  98                  $not_installed = array_diff(array_keys($installed_mods), array_keys($tplstats));
  99              } else {
 100                  $not_installed =& array_keys($installed_mods);
 101              }
 102              foreach ($not_installed as $ni) {
 103                  $module =& $module_handler->getByDirname($ni);
 104                  echo '<li>'.$module->getVar('name').' [<a href="admin.php?fct=tplsets&amp;op=listtpl&amp;tplset='.$tplsetname.'&amp;moddir='.$ni.'">'._LIST.'</a> (<span style="color:#ff0000; font-weight: bold;">0</span>)] [<a href="admin.php?fct=tplsets&amp;op=generatemod&amp;tplset='.$tplsetname.'&amp;moddir='.$ni.'">'._MD_GENERATE.'</a>]</li>';
 105              }
 106              echo '</ul></td><td>';
 107              echo '[<a href="admin.php?fct=tplsets&amp;op=download&amp;method=tar&amp;tplset='.$tplsetname.'">'._MD_DOWNLOAD.'</a>]<br />[<a href="admin.php?fct=tplsets&amp;op=clone&amp;tplset='.$tplsetname.'">'._CLONE.'</a>]';
 108              if ($tplsetname != 'default' && $tplsetname != $xoopsConfig['template_set']) {
 109                  echo '<br />[<a href="admin.php?fct=tplsets&amp;op=delete&amp;tplset='.$tplsetname.'">'._DELETE.'</a>]';
 110              }
 111              echo '</td>';
 112              if ($tplsetname == $xoopsConfig['template_set']) {
 113                  echo '<td><img src="'.XOOPS_URL.'/modules/system/images/check.gif" alt="'._MD_DEFAULTTHEME.'" /></td>';
 114              } else {
 115                  echo '<td>&nbsp;</td>';
 116              }
 117              echo '</tr>';
 118          }
 119          echo '</table><br />';
 120  
 121          include_once  XOOPS_ROOT_PATH.'/class/xoopsformloader.php';
 122          $form = new XoopsThemeForm(_MD_UPLOADTAR, 'tplupload_form', 'admin.php', 'post', true);
 123          $form->setExtra('enctype="multipart/form-data"');
 124          $form->addElement(new XoopsFormFile(_MD_CHOOSETAR.'<br /><span style="color:#ff0000;">'._MD_ONLYTAR.'</span>', 'tpl_upload', 1000000));
 125          $form->addElement(new XoopsFormText(_MD_NTHEMENAME.'<br /><span style="font-weight:normal;">'._MD_ENTERTH.'</span>', 'tplset_name', 20, 50));
 126          $form->addElement(new XoopsFormHidden('op', 'uploadtar_go'));
 127          $form->addElement(new XoopsFormHidden('fct', 'tplsets'));
 128          $form->addElement(new XoopsFormButton('', 'upload_button', _MD_UPLOAD, 'submit'));
 129          $form->display();
 130          xoops_cp_footer();
 131          break;
 132      case 'listtpl':
 133          $tplset = trim($_GET['tplset']);
 134          if ($tplset == '') {
 135              redirect_header('admin.php?fct=tplsets',1);
 136          }
 137          if ($moddir == '') {
 138              redirect_header('admin.php?fct=tplsets',1);
 139          }
 140          xoops_cp_header();
 141          $module_handler =& xoops_gethandler('module');
 142          $module =& $module_handler->getByDirname($moddir);
 143          $modname = $module->getVar('name');
 144          echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'.$tplset.'<br /><br />';
 145  
 146          echo '<h4>'.$modname.'</h4><form action="admin.php" method="post" enctype="multipart/form-data"><table width="100%" class="outer" cellspacing="1"><tr><th width="40%">'._MD_FILENAME.'</th><th>'._MD_LASTMOD.'</th>';
 147          if ($tplset != 'default') {
 148              echo '<th>'._MD_LASTIMP.'</th><th colspan="2">'._MD_ACTION.'</th></tr>';
 149          } else {
 150              echo '<th>'._MD_ACTION.'</th></tr>';
 151          }
 152          $tpltpl_handler =& xoops_gethandler('tplfile');
 153          // get files that are already installed
 154          $templates =& $tpltpl_handler->find($tplset, 'module', null, $moddir);
 155          $inst_files = array();
 156          $tcount = count($templates);
 157          for ($i = 0; $i < $tcount; $i++) {
 158              if ($i % 2 == 0) {
 159                  $class = 'even';
 160              } else {
 161                  $class = 'odd';
 162              }
 163              $last_modified = $templates[$i]->getVar('tpl_lastmodified');
 164              $last_imported = $templates[$i]->getVar('tpl_lastimported');
 165              $last_imported_f = ($last_imported > 0) ? formatTimestamp($last_imported, 'l') : '';
 166              echo  '<tr class="'.$class.'"><td class="head">'.$templates[$i]->getVar('tpl_file').'<br /><br /><span style="font-weight:normal;">'.$templates[$i]->getVar('tpl_desc').'</span></td><td>'.formatTimestamp($last_modified, 'l').'</td>';
 167              $filename = $templates[$i]->getVar('tpl_file');
 168              if ($tplset != 'default') {
 169                  $physical_file = XOOPS_THEME_PATH.'/'.$tplset.'/templates/'.$moddir.'/'.$filename;
 170                  if (file_exists($physical_file)) {
 171                      $mtime = filemtime($physical_file);
 172                      if ($last_imported < $mtime) {
 173                          if ($mtime > $last_modified) {
 174                              $bg = '#ff9999';
 175                          } elseif($mtime > $last_imported) {
 176                              $bg = '#99ff99';
 177                          }
 178                          echo '<td style="background-color:'.$bg.';">'.$last_imported_f.' [<a href="admin.php?fct=tplsets&amp;tplset='.$tplset.'&amp;moddir='.$moddir.'&amp;op=importtpl&amp;id='.$templates[$i]->getVar('tpl_id').'">'._MD_IMPORT.'</a>]';
 179                      } else {
 180                          echo '<td>'.$last_imported_f;
 181                      }
 182                  } else {
 183                      echo '<td>'.$last_imported_f;
 184                  }
 185                  echo '</td><td>[<a href="admin.php?fct=tplsets&amp;op=edittpl&amp;id='.$templates[$i]->getVar('tpl_id').'">'._EDIT.'</a>] [<a href="admin.php?fct=tplsets&amp;op=deletetpl&amp;id='.$templates[$i]->getVar('tpl_id').'">'._DELETE.'</a>] [<a href="admin.php?fct=tplsets&amp;op=downloadtpl&amp;id='.$templates[$i]->getVar('tpl_id').'">'._MD_DOWNLOAD.'</a>]</td><td align="right"><input type="file" name="'.$filename.'" id="'.$filename.'" /><input type="hidden" name="xoops_upload_file[]" id="xoops_upload_file[]" value="'.$filename.'" /><input type="hidden" name="old_template['.$filename.']" value="'.$templates[$i]->getVar('tpl_id').'" /></td>';
 186              } else {
 187                  echo '<td>[<a href="admin.php?fct=tplsets&amp;op=edittpl&amp;id='.$templates[$i]->getVar('tpl_id').'">'._MD_VIEW.'</a>] [<a href="admin.php?fct=tplsets&amp;op=downloadtpl&amp;id='.$templates[$i]->getVar('tpl_id').'">'._MD_DOWNLOAD.'</a>]</td>';
 188              }
 189              echo '</tr>'."\n";
 190              $inst_files[] = $filename;
 191          }
 192          if ($tplset != 'default') {
 193              include_once XOOPS_ROOT_PATH.'/class/xoopslists.php';
 194              // get difference between already installed files and the files under modules directory. which will be recognized as files that are not installed
 195              $notinst_files = array_diff(XoopsLists::getFileListAsArray(XOOPS_ROOT_PATH.'/modules/'.$moddir.'/templates/'), $inst_files);
 196              foreach ($notinst_files as $nfile) {
 197                  if ($nfile != 'index.html') {
 198                      echo  '<tr><td style="background-color:#FFFF99; padding: 5px;">'.$nfile.'</td><td style="background-color:#FFFF99; padding: 5px;">&nbsp;</td><td style="background-color:#FFFF99; padding: 5px;">';
 199                      $physical_file = XOOPS_THEME_PATH.'/'.$tplset.'/templates/'.$moddir.'/'.$nfile;
 200                      if (file_exists($physical_file)) {
 201                          echo '[<a href="admin.php?fct=tplsets&amp;moddir='.$moddir.'&amp;tplset='.$tplset.'&amp;op=importtpl&amp;file='.urlencode($nfile).'">'._MD_IMPORT.'</a>]';
 202                      } else {
 203                          echo '&nbsp;';
 204                      }
 205                      echo '</td><td style="background-color:#FFFF99; padding: 5px;">[<a href="admin.php?fct=tplsets&amp;moddir='.$moddir.'&amp;tplset='.$tplset.'&amp;op=generatetpl&amp;type=module&amp;file='.urlencode($nfile).'">'._MD_GENERATE.'</a>]</td><td style="background-color:#FFFF99; padding: 5px; text-align:right;"><input type="file" name="'.$nfile.'" id="'.$nfile.'" /><input type="hidden" name="xoops_upload_file[]" id="xoops_upload_file[]" value="'.$nfile.'" /></td></tr>'."\n";
 206                  }
 207              }
 208          }
 209          echo '</table><br /><table width="100%" class="outer" cellspacing="1"><tr><th width="40%">'._MD_FILENAME.'</th><th>'._MD_LASTMOD.'</th>';
 210          if ($tplset != 'default') {
 211              echo '<th>'._MD_LASTIMP.'</th><th colspan="2">'._MD_ACTION.'</th></tr>';
 212          } else {
 213              echo '<th>'._MD_ACTION.'</th></tr>';
 214          }
 215          $btemplates =& $tpltpl_handler->find($tplset, 'block', null, $moddir);
 216          $binst_files = array();
 217          $btcount = count($btemplates);
 218          for ($j = 0; $j < $btcount; $j++) {
 219              $last_imported = $btemplates[$j]->getVar('tpl_lastimported');
 220              $last_imported_f = ($last_imported > 0) ? formatTimestamp($last_imported, 'l') : '';
 221              $last_modified = $btemplates[$j]->getVar('tpl_lastmodified');
 222              if ($j % 2 == 0) {
 223                  $class = 'even';
 224              } else {
 225                  $class = 'odd';
 226              }
 227              echo  '<tr class="'.$class.'"><td class="head"><span style="font-weight:bold;">'.$btemplates[$j]->getVar('tpl_file').'</span><br /><br /><span style="font-weight:normal;">'.$btemplates[$j]->getVar('tpl_desc').'</span></td><td>'.formatTimestamp($last_modified, 'l').'</td>';
 228              $filename = $btemplates[$j]->getVar('tpl_file');
 229              $physical_file = XOOPS_THEME_PATH.'/'.$tplset.'/templates/'.$moddir.'/blocks/'.$filename;
 230              if ($tplset != 'default') {
 231                  if (file_exists($physical_file)) {
 232                      $mtime = filemtime($physical_file);
 233                      if ($last_imported < $mtime) {
 234                          if ($mtime > $last_modified) {
 235                              $bg = '#ff9999';
 236                          } elseif($mtime > $last_imported) {
 237                              $bg = '#99ff99';
 238                          }
 239                          echo '<td style="background-color:'.$bg.';">'.$last_imported_f.' [<a href="admin.php?fct=tplsets&amp;tplset='.$tplset.'&amp;op=importtpl&amp;moddir='.$moddir.'&amp;id='.$btemplates[$j]->getVar('tpl_id').'">'._MD_IMPORT.'</a>]';
 240                      } else {
 241                          echo '<td>'.$last_imported_f;
 242                      }
 243                  } else {
 244                      echo '<td>'.$last_imported_f;
 245                  }
 246                  echo '</td><td>[<a href="admin.php?fct=tplsets&amp;op=edittpl&amp;id='.$btemplates[$j]->getVar('tpl_id').'">'._EDIT.'</a>] [<a href="admin.php?fct=tplsets&amp;op=deletetpl&amp;id='.$btemplates[$j]->getVar('tpl_id').'">'._DELETE.'</a>] [<a href="admin.php?fct=tplsets&amp;op=downloadtpl&amp;id='.$btemplates[$j]->getVar('tpl_id').'">'._MD_DOWNLOAD.'</a>]</td><td align="right"><input type="file" name="'.$filename.'" id="'.$filename.'" /><input type="hidden" name="xoops_upload_file[]" id="xoops_upload_file[]" value="'.$filename.'" /><input type="hidden" name="old_template['.$filename.']" value="'.$btemplates[$j]->getVar('tpl_id').'" /></td>';
 247              } else {
 248                  echo '<td>[<a href="admin.php?fct=tplsets&amp;op=edittpl&amp;id='.$btemplates[$j]->getVar('tpl_id').'">'._MD_VIEW.'</a>] [<a href="admin.php?fct=tplsets&amp;op=downloadtpl&amp;id='.$btemplates[$j]->getVar('tpl_id').'">'._MD_DOWNLOAD.'</a>]</td>';
 249              }
 250              echo '</tr>'."\n";
 251              $binst_files[] = $filename;
 252          }
 253          if ($tplset != 'default') {
 254              include_once XOOPS_ROOT_PATH.'/class/xoopslists.php';
 255              $bnotinst_files = array_diff(XoopsLists::getFileListAsArray(XOOPS_ROOT_PATH.'/modules/'.$moddir.'/templates/blocks/'), $binst_files);
 256              foreach ($bnotinst_files as $nfile) {
 257                  if ($nfile != 'index.html') {
 258                      echo  '<tr style="background-color:#FFFF99;"><td style="background-color:#FFFF99; padding: 5px;">'.$nfile.'</td><td style="background-color:#FFFF99; padding: 5px;">&nbsp;</td><td style="background-color:#FFFF99; padding: 5px;">';
 259                      $physical_file = XOOPS_THEME_PATH.'/'.$tplset.'/templates/'.$moddir.'/blocks/'.$nfile;
 260                      if (file_exists($physical_file)) {
 261                          echo '[<a href="admin.php?fct=tplsets&amp;moddir='.$moddir.'&amp;tplset='.$tplset.'&amp;op=importtpl&amp;file='.urlencode($nfile).'">'._MD_IMPORT.'</a>]';
 262                      } else {
 263                          echo '&nbsp;';
 264                      }
 265                      echo '</td><td style="background-color:#FFFF99; padding: 5px;">[<a href="admin.php?fct=tplsets&amp;moddir='.$moddir.'&amp;tplset='.$tplset.'&amp;op=generatetpl&amp;type=block&amp;file='.urlencode($nfile).'">'._MD_GENERATE.'</a>]</td><td style="background-color:#FFFF99; padding: 5px; text-align: right"><input type="file" name="'.$nfile.'" id="'.$nfile.'" /><input type="hidden" name="xoops_upload_file[]" id="xoops_upload_file[]" value="'.$nfile.'" /></td></tr>'."\n";
 266                  }
 267              }
 268          }
 269          echo '</table>';
 270          if ($tplset != 'default') {
 271              echo '<div style="text-align: right; margin-top: 5px;"><input type="hidden" name="fct" value="tplsets" /><input type="hidden" name="op" value="update" />'.$GLOBALS['xoopsSecurity']->getTokenHTML().'<input type="hidden" name="moddir" value="'.$moddir.'" /><input type="hidden" name="tplset" value="'.$tplset.'" /><input type="submit" value="'._MD_UPLOAD.'" /></div></form>';
 272          }
 273          xoops_cp_footer();
 274          break;
 275      case 'edittpl':
 276          if ($id <= 0) {
 277              redirect_header('admin.php?fct=tplsets', 1);
 278          }
 279          $tpltpl_handler =& xoops_gethandler('tplfile');
 280          $tplfile =& $tpltpl_handler->get($id, true);
 281          if (is_object($tplfile)) {
 282              $tplset = $tplfile->getVar('tpl_tplset');
 283              $tform = array('tpl_tplset' => $tplset, 'tpl_id' => $id, 'tpl_file' => $tplfile->getVar('tpl_file'), 'tpl_desc' => $tplfile->getVar('tpl_desc'), 'tpl_lastmodified' => $tplfile->getVar('tpl_lastmodified'), 'tpl_source' => $tplfile->getVar('tpl_source', 'E'), 'tpl_module' => $tplfile->getVar('tpl_module'));
 284              include_once XOOPS_ROOT_PATH.'/modules/system/admin/tplsets/tplform.php';
 285              xoops_cp_header();
 286              echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;<a href="./admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$tplfile->getVar('tpl_module').'&amp;tplset='.$tplset.'">'.$tplset.'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'._MD_EDITTEMPLATE.'<br /><br />';
 287              $form->display();
 288              xoops_cp_footer();
 289              exit();
 290          } else {
 291              $err[] = 'Selected template (ID: $id) does not exist';
 292          }
 293          xoops_cp_header();
 294          xoops_error($err);
 295          echo '<br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
 296          xoops_cp_footer();
 297          break;
 298      case 'edittpl_go':
 299          if ($id <= 0 | !$GLOBALS['xoopsSecurity']->check()) {
 300              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
 301          }
 302          $tpltpl_handler =& xoops_gethandler('tplfile');
 303          $tplfile =& $tpltpl_handler->get($id, true);
 304          $err = array();
 305          if (!is_object($tplfile)) {
 306              $err[] = 'Selected template (ID: $id) does not exist';
 307          } else {
 308              if ($tplfile->getVar('tpl_tplset') != 'default') {
 309                  $tplfile->setVar('tpl_source', $html);
 310                  $tplfile->setVar('tpl_lastmodified', time());
 311  
 312                  if (!$tpltpl_handler->insert($tplfile)) {
 313                      $err[] = 'Could not insert template file to the database.';
 314                  } else {
 315                      include_once  XOOPS_ROOT_PATH.'/class/template.php';
 316                      $xoopsTpl = new XoopsTpl();
 317                      if ($xoopsTpl->is_cached('db:'.$tplfile->getVar('tpl_file'))) {
 318                          if (!$xoopsTpl->clear_cache('db:'.$tplfile->getVar('tpl_file'))) {
 319                          }
 320                      }
 321                      if ($tplfile->getVar('tpl_tplset') == $xoopsConfig['template_set']) {
 322                          xoops_template_touch($id);
 323                      }
 324                  }
 325              } else {
 326                  $err[] = 'Default template files cannot be edited.';
 327              }
 328          }
 329          if (count($err) == 0) {
 330              if (!empty($moddir)) {
 331                  redirect_header('admin.php?fct=tplsets&amp;op=edittpl&amp;id='.$tplfile->getVar('tpl_id'), 2, _MD_AM_DBUPDATED);
 332              } elseif (isset($redirect)) {
 333                  redirect_header('admin.php?fct=tplsets&amp;tplset='.$tplfile->getVar('tpl_tplset').'&amp;op='.trim($redirect), 2, _MD_AM_DBUPDATED);
 334              } else {
 335                  redirect_header('admin.php?fct=tplsets', 2, _MD_AM_DBUPDATED);
 336              }
 337          }
 338          xoops_cp_header();
 339          xoops_error($err);
 340          echo '<br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
 341          xoops_cp_footer();
 342          break;
 343      case 'deletetpl':
 344          xoops_cp_header();
 345          xoops_confirm(array('id' => $id, 'op' => 'deletetpl_go', 'fct' => 'tplsets'), 'admin.php', _MD_RUSUREDELTPL, _YES);
 346          xoops_cp_footer();
 347          break;
 348      case 'deletetpl_go':
 349          if ($id <= 0 | !$GLOBALS['xoopsSecurity']->check()) {
 350              redirect_header('admin.php?fct=tplsets', 1, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
 351          }
 352          $tpltpl_handler =& xoops_gethandler('tplfile');
 353          $tplfile =& $tpltpl_handler->get($id);
 354          $err = array();
 355          if (!is_object($tplfile)) {
 356              $err[] = 'Selected template (ID: $id) does not exist';
 357          } else {
 358              if ($tplfile->getVar('tpl_tplset') != 'default') {
 359                  if (!$tpltpl_handler->delete($tplfile)) {
 360                      $err[] = 'Could not delete '.$tplfile->getVar('tpl_file').' from the database.';
 361                  } else {
 362                      // need to compile default xoops template
 363                      if ($tplfile->getVar('tpl_tplset') == $xoopsConfig['template_set']) {
 364                          $defaulttpl =& $tpltpl_handler->find('default', $tplfile->getVar('tpl_type'), $tplfile->getVar('tpl_refid'), null, $tplfile->getVar('tpl_file'));
 365                          if (count($defaulttpl) > 0) {
 366                              include_once  XOOPS_ROOT_PATH.'/class/template.php';
 367                              xoops_template_touch($defaulttpl[0]->getVar('tpl_id'), true);
 368                          }
 369                      }
 370                  }
 371              } else {
 372                  $err[] = 'Default template files cannot be deleted.';
 373              }
 374          }
 375          if (count($err) == 0) {
 376              redirect_header('admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$tplfile->getVar('tpl_module').'&amp;tplset='.urlencode($tplfile->getVar('tpl_tplset')), 2, _MD_AM_DBUPDATED);
 377          }
 378          xoops_cp_header();
 379          xoops_error($err);
 380          echo '<br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
 381          xoops_cp_footer();
 382          break;
 383      case 'delete':
 384          xoops_cp_header();
 385          xoops_confirm(array('tplset' => $tplset, 'op' => 'delete_go', 'fct' => 'tplsets'), 'admin.php', _MD_RUSUREDELTH, _YES);
 386          xoops_cp_footer();
 387          break;
 388      case 'delete_go':
 389          if (!$GLOBALS['xoopsSecurity']->check()) {
 390              redirect_header('admin.php?fct=tplsets', 1, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
 391          }
 392          $msgs = array();
 393          if ($tplset != 'default' && $tplset != $xoopsConfig['template_set']) {
 394              $tpltpl_handler =& xoops_gethandler('tplfile');
 395              $templates =& $tpltpl_handler->getObjects(new Criteria('tpl_tplset', $tplset));
 396              $tcount = count($templates);
 397              if ($tcount > 0) {
 398                  $msgs[] = 'Deleting template files...';
 399                  for ($i = 0; $i < $tcount; $i++) {
 400                      if (!$tpltpl_handler->delete($templates[$i])) {
 401                          $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not delete template <b>'.$templates[$i]->getVar('tpl_file').'</b>. ID: <b>'.$templates[$i]->getVar('tpl_id').'</b></span>';
 402                      } else {
 403                          $msgs[] = '&nbsp;&nbsp;Template <b>'.$templates[$i]->getVar('tpl_file').'</b> deleted. ID: <b>'.$templates[$i]->getVar('tpl_id').'</b>';
 404                      }
 405                  }
 406              }
 407  /*
 408              $image_handler =& xoops_gethandler('imagesetimg');
 409              $imagefiles =& $image_handler->getObjects(new Criteria('tplset_name', $tplset));
 410              $icount = count($imagefiles);
 411              if ($icount > 0) {
 412                  $msgs[] = 'Deleting image files...';
 413                  for ($i = 0; $i < $icount; $i++) {
 414                      if (!$image_handler->delete($imagefiles[$i])) {
 415                          $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not remove file <b>'.$imagefiles[$i]->getVar('imgsetimg_file').'</b> from the database (ID: <b>'.$imagefiles[$i]->getVar('imgsetimg_id').'</b>)</span>';
 416                      } else {
 417                          $msgs[] = '&nbsp;&nbsp;File <b>'.$imagefiles[$i]->getVar('imgsetimg_file').'</b> deleted from the database (ID: <b>'.$imagefiles[$i]->getVar('imgsetimg_id').'</b>)</span>';
 418                      }
 419                  }
 420              }
 421              $imageset_handler =& xoops_gethandler('imageset');
 422              $imagesets =& $imageset_handler->getObjects(new Criteria('tplset_name', $tplset));
 423              $scount = count($imagesets);
 424              if ($scount > 0) {
 425                  $msgs[] = 'Deleting image set data...';
 426                  for ($i = 0; $i < $scount; $i++) {
 427                      if (!$imageset_handler->unlinktplset($imagesets[$i]->getVar('imgset_id'), $tplset)) {
 428                          $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not remove link between <b>'.$imagesets[$i]->getVar('imgset_name').'</b> (ID: <b>'.$imagesets[$i]->getVar('imgset_id').'</b>) and '.$tplset.' from the database.</span>';
 429                      } else {
 430                          $msgs[] = '&nbsp;&nbsp;Link between <b>'.$imagesets[$i]->getVar('imgset_name').'</b> (ID: <b>'.$imagesets[$i]->getVar('imgset_id').'</b>) and <b>'.$tplset.'</b> removed from the database.</span>';
 431                      }
 432                      if (!$imageset_handler->delete($imagesets[$i])) {
 433                          $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not delete image set <b>'.$imagesets[$i]->getVar('imgset_name').'</b> (ID: <b>'.$imagesets[$i]->getVar('imgset_id').'</b>) from the database.</span>';
 434                      } else {
 435                          $msgs[] = '&nbsp;&nbsp;Image set <b>'.$imagesets[$i]->getVar('imgset_name').'</b> (ID: <b>'.$imagesets[$i]->getVar('imgset_id').'</b>) removed from the database.</span>';
 436                      }
 437                  }
 438              }
 439  */
 440              $tplset_handler =& xoops_gethandler('tplset');
 441              $tplsets =& $tplset_handler->getObjects(new Criteria('tplset_name', $tplset));
 442              if (count($tplsets) > 0 && is_object($tplsets[0])) {
 443                  $msgs[] = 'Deleting template set data...';
 444                  if (!$tplset_handler->delete($tplsets[0])) {
 445                      $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Template set '.$tplset.' could not be deleted.</span>';
 446                  } else {
 447                      $msgs[] = '&nbsp;&nbsp;Template set data removed from the database.';
 448                  }
 449              }
 450          } else {
 451              $msgs[] = '<span style="color:#ff0000;">ERROR: Default template files cannot be deleted</span>';
 452          }
 453          xoops_cp_header();
 454          foreach ($msgs as $msg) {
 455              echo '<code>'.$msg.'</code><br />';
 456          }
 457          echo '<br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
 458          xoops_cp_footer();
 459          break;
 460      case 'clone':
 461          include_once  XOOPS_ROOT_PATH.'/class/xoopsformloader.php';
 462          $form = new XoopsThemeForm(_MD_CLONETHEME, 'template_form', 'admin.php', 'post', true);
 463          $form->addElement(new XoopsFormLabel(_MD_THEMENAME, $tplset));
 464          $form->addElement(new XoopsFormText(_MD_NEWNAME, 'newtheme', 30, 50), true);
 465          $form->addElement(new XoopsFormHidden('tplset', $tplset));
 466          $form->addElement(new XoopsFormHidden('op', 'clone_go'));
 467          $form->addElement(new XoopsFormHidden('fct', 'tplsets'));
 468          $form->addElement(new XoopsFormButton('', 'tpl_button', _SUBMIT, 'submit'));
 469          xoops_cp_header();
 470          echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'._MD_CLONETHEME.'<br /><br />';
 471          $form->display();
 472          xoops_cp_footer();
 473          break;
 474      case 'clone_go':
 475          if (!$GLOBALS['xoopsSecurity']->check()) {
 476              redirect_header('admin.php?fct=tplsets', 1, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
 477          }
 478          $msgs = array();
 479          $tplset = trim($tplset);
 480          $newtheme = trim($newtheme);
 481          $tpltpl_handler =& xoops_gethandler('tplfile');
 482          xoops_cp_header();
 483          if ($tplset == $newtheme) {
 484              xoops_error('Template set name must be a different name.');
 485          } elseif ($tpltpl_handler->getCount(new Criteria('tpl_tplset', $newtheme)) > 0) {
 486              xoops_error('Template set <b>'.$newtheme.'</b> already exists.');
 487          } else {
 488              $tplset_handler =& xoops_gethandler('tplset');
 489              $tplsetobj =& $tplset_handler->create();
 490              $tplsetobj->setVar('tplset_name', $newtheme);
 491              $tplsetobj->setVar('tplset_created', time());
 492              if (!$tplset_handler->insert($tplsetobj)) {
 493                  $msgs[] = '<span style="color:#ff0000;">ERROR: Could not create template set <b>'.$newtheme.'</b>.</span><br />';
 494              } else {
 495                  $tplsetid = $tplsetobj->getVar('tplset_id');
 496                  $templates =& $tpltpl_handler->getObjects(new Criteria('tpl_tplset', $tplset), true);
 497                  $tcount = count($templates);
 498                  if ($tcount > 0) {
 499                      $msgs[] = 'Copying template files...';
 500                      for ($i = 0; $i < $tcount; $i++) {
 501                          $newtpl =& $templates[$i]->xoopsClone();
 502                          $newtpl->setVar('tpl_tplset', $newtheme);
 503                          $newtpl->setVar('tpl_id', 0);
 504                          $newtpl->setVar('tpl_lastimported', 0);
 505                          $newtpl->setVar('tpl_lastmodified', time());
 506                          if (!$tpltpl_handler->insert($newtpl)) {
 507                              $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed copying template <b>'.$templates[$i]->getVar('tpl_file').'</b>. ID: <b>'.$templates[$i]->getVar('tpl_id').'</b></span>';
 508                          } else {
 509                              $msgs[] = '&nbsp;&nbsp;Template <b>'.$templates[$i]->getVar('tpl_file').'</b> copied. ID: <b>'.$newtpl->getVar('tpl_id').'</b>';
 510                          }
 511                          unset($newtpl);
 512                      }
 513  /*
 514                      $imageset_handler =& xoops_gethandler('imageset');
 515                      $orig_imgset =& $imageset_handler->getObjects(new Criteria('tplset_name', $tplset));
 516                      $msgs[] = 'Copying image files...';
 517                      $imgsetcount = count($orig_imgset);
 518                      for ($i = 0; $i < $imgsetcount; $i++) {
 519                          if ($orig_imgset[$i]->getVar('imgset_refid') == 0) {
 520                              $new_imgset =& $orig_imgset[$i]->xoopsClone();
 521                              $new_imgset->setVar('imgset_id', 0);
 522                              $new_imgset->setVar('imgset_name', $newtheme);
 523                              if (!$imageset_handler->insert($new_imgset)) {
 524                                  $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed copying template image set data.</span>';
 525                              } else {
 526                                  $new_imgsetid = $new_imgset->getVar('imgset_id');
 527                                  $msgs[] = '&nbsp;&nbsp;Template image set data copied. (Name: <b>'.$newtheme.'</b> ID: <b>'.$new_imgsetid.'</b>)</span>';
 528                                  $image_handler = xoops_gethandler('imagesetimg');
 529                                  $orig_images =& $image_handler->getByImageset($orig_imgset[$i]->getVar('imgset_id'));
 530                                  $imgcount = count($orig_images);
 531                                  for ($j = 0; $j < $imgcount; $j++) {
 532                                      $new_image =& $orig_images[$j]->xoopsClone();
 533                                      $new_image->setVar('imgsetimg_id', 0);
 534                                      $new_image->setVar('imgsetimg_imgset', $new_imgsetid);
 535                                      if (!$image_handler->insert($new_image)) {
 536                                          $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed copying data for image file <b>'.$orig_images[$j]->getVar('imgsetimg_file').'</b>.</span>';
 537                                      } else {
 538                                          $thisimage = $orig_images[$j]->getVar('imgsetimg_file');
 539                                          $msgs[] = '&nbsp;&nbsp;Data for image file <b>'.$thisimage.'</b> copied.</span>';
 540                                      }
 541                                  }
 542                                  if (!$imageset_handler->linktplset($new_imgsetid, $newtheme)) {
 543                                      $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed creating link between template image set (ID : <b>'.$new_imgsetid.'</b>) and template set <b>'.$newtheme.'</b>.</span>';
 544                                  } else {
 545                                      $msgs[] = '&nbsp;&nbsp;Template image set (ID: <b>'.$new_imgsetid.'</b>) and template set <b>'.$newtheme.'</b> linked.</span>';
 546                                  }
 547                              }
 548                          } else {
 549                              // module image set, so just create another link to the new template set
 550                              if (!$imageset_handler->linktplset($orig_imgset[$i]->getVar('imgset_id'), $newtheme)) {
 551                                  $msgs[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed creating link between module image set  <b>'.$orig_imgset[$i]->getVar('imgset_name').'</b> (ID <b>'.$orig_imgset[$i]->getVar('imgset_id').'</b>) and template set <b>'.$newtheme.'</b>.</span>';
 552                              } else {
 553                                  $msgs[] = '&nbsp;&nbsp;Module image set <b>'.$orig_imgset[$i]->getVar('imgset_name').'</b> (ID <b>'.$orig_imgset[$i]->getVar('imgset_id').'</b>) and template set <b>'.$newtheme.'</b> linked.';
 554                              }
 555                          }
 556                      }
 557  */
 558                      $msgs[] = 'Template set <b>'.htmlspecialchars($newtheme, ENT_QUOTES).'</b> created. (ID: <b>'.$tplsetid.'</b>)<br />';
 559                  } else {
 560                      $msgs[] = '<span style="color:#ff0000;">ERROR: Template files for '.$theme.' do not exist</span>';
 561                  }
 562              }
 563          }
 564          foreach ($msgs as $msg) {
 565              echo '<code>'.$msg.'</code><br />';
 566          }
 567          echo '<br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
 568          xoops_cp_footer();
 569          break;
 570  /*
 571      case 'editimage':
 572          xoops_cp_header();
 573          echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'._MD_EDITSKINIMG.' ('.$tplset.')<br /><br />';
 574          include XOOPS_ROOT_PATH.'/modules/system/admin/tplsets/tplimgform.php';
 575          xoops_cp_footer();
 576          break;
 577      case 'updateimage':
 578  
 579          $tplset = trim($tplset);
 580          $err = array();
 581          if ($tplset != 'default') {
 582              include_once XOOPS_ROOT_PATH.'/class/uploader.php';
 583              $mimetypes = array('image/gif', "image/pjpeg", "image/jpeg", "image/jpeg", "image/jpeg", "image/png", 'image/x-png', "application/x-shockwave-flash", "image/tiff", "image/tiff", 'image/bmp');
 584              if ($tplset == $xoopsConfig['template_set']) {
 585                  //directly upload to cache to reduce one step ;-)
 586                  $uploader = new XoopsMediaUploader(XOOPS_CACHE_PATH, $mimetypes, 500000);
 587              } else {
 588                  $uploader = new XoopsMediaUploader(XOOPS_UPLOAD_PATH, $mimetypes, 500000);
 589              }
 590              $image_handler =& xoops_gethandler('imagesetimg');
 591              foreach ($imgids as $id) {
 592                  if (isset($imgfiles[$id]) && trim($imgfiles[$id]) != '') {
 593                      if ($uploader->fetchMedia('imgfiles', $id)) {
 594                          $image =& $image_handler->get($id);
 595                          $uploader->setTargetFileName($image->getVar('imgsetimg_file'));
 596                          if (!$uploader->upload()) {
 597                              $err[] = $uploader->getErrors();
 598                          } else {
 599                              $fp = @fopen($uploader->getSavedDestination(), 'rb');
 600                              $image->setVar('imgsetimg_body', @fread($fp, filesize($uploader->getSavedDestination())), true);
 601                              @fclose($fp);
 602                              if ($tplset != $xoopsConfig['template_set']) {
 603                                  @unlink($uploader->getSavedDestination());
 604                              }
 605                              if (!$image_handler->insert($image)) {
 606                                  $err[] = 'Could not save '.$image->getVar('imgsetimg_file');
 607                              }
 608                          }
 609                      } else {
 610                          $err[] = $uploader->getErrors();
 611                      }
 612                  } elseif (!empty($imgdelete[$id])) {
 613                      $image =& $image_handler->get($id);
 614                      if (!$image_handler->delete($image)) {
 615                          $err[] = 'Could not remove image file '.$image->getVar('imgsetimg_file');
 616                      } else {
 617                          if ($tplset == $xoopsConfig['template_set']) {
 618                              @unlink(XOOPS_CACHE_PATH.'/'.$image->getVar('imgsetimg_file'));
 619                          }
 620                      }
 621                  }
 622              }
 623          } else {
 624              $err[] = 'Cannot change XOOPS system default theme set images';
 625          }
 626          // delete image set if no more images
 627          $current_imgs =& $image_handler->getByImageset($imgset);
 628          if (count($current_imgs) == 0) {
 629              $imageset_handler =& xoops_gethandler('imageset');
 630              $imgset =& $imageset_handler->get($imgset);
 631              if (!$imageset_handler->delete($imgset)) {
 632                  $err[] = 'Could not remove image set '.$imgset->getVar('imgset_name');
 633              }
 634          }
 635          if (count($err) > 0) {
 636              xoops_cp_header();
 637              xoops_error($err);
 638              xoops_cp_footer();
 639          } else {
 640              redirect_header('admin.php?fct=tplsets&amp;op=editimage&amp;tplset='.$tplset, 2, _MD_AM_DBUPDATED);
 641          }
 642          break;
 643      case 'addimage':
 644          $tplset = trim($tplset);
 645          $err = array();
 646          if ($tplset != 'default') {
 647              include_once XOOPS_ROOT_PATH.'/class/uploader.php';
 648              $mimetypes = array('image/gif', "image/pjpeg", "image/jpeg", "image/jpeg", "image/jpeg", "image/png", 'image/x-png', "application/x-shockwave-flash", "image/tiff", "image/tiff", 'image/bmp');
 649              if ($tplset == $xoopsConfig['template_set']) {
 650                  //directly upload to cache to reduce one step ;-)
 651                  $uploader = new XoopsMediaUploader(XOOPS_CACHE_PATH, $mimetypes, 500000);
 652              } else {
 653                  $uploader = new XoopsMediaUploader(XOOPS_UPLOAD_PATH, $mimetypes, 500000);
 654              }
 655              $image_handler =& xoops_gethandler('imagesetimg');
 656              if ($uploader->fetchMedia('imgfile')) {
 657  
 658                  if (!empty($imgset)) {
 659                      //check if an image with the same name exists
 660                      if ($image_handler->imageExists($uploader->getMediaName(), $imgset)) {
 661                          $err[] = 'Image file '.$uploader->getMediaName().' already exists';
 662                      }
 663                  }
 664                  if (empty($err)) {
 665                      $image =& $image_handler->create();
 666                      if (!$uploader->upload()) {
 667                          $err[] = $uploader->getErrors();
 668                      } else {
 669                          if (!$fp = @fopen($uploader->getSavedDestination(), 'rb')) {
 670                              $err[] = 'Could not read '.$uploader->getSavedFileName();
 671                          } else {
 672                              $image->setVar('imgsetimg_body', @fread($fp, filesize($uploader->getSavedDestination())), true);
 673                              @fclose($fp);
 674                              if ($tplset != $xoopsConfig['template_set']) {
 675                                  @unlink($uploader->getSavedDestination());
 676                              }
 677                              $image->setVar('imgsetimg_file', $uploader->getSavedFileName());
 678                              if (!empty($imgset)) {
 679                                  $image->setVar('imgsetimg_imgset', $imgset);
 680                              } else {
 681                                  $imageset_handler =& xoops_gethandler('imageset');
 682                                  $imgset =& $imageset_handler->create();
 683                                  $imgset->setVar('imgset_name', $tplset);
 684                                  $imgset->setVar('imgset_refid', 0);
 685                                  if (!$imageset_handler->insert($imgset)) {
 686                                      $err[] = 'Could not create image set.';
 687                                  } else {
 688                                      $newimgsetid = $imgset->getVar('imgset_id');
 689                                      $image->setVar('imgsetimg_imgset', $newimgsetid);
 690                                      if (!$imageset_handler->linktplset($newimgsetid, $tplset)) {
 691                                          $err[] = 'Failed linking image set to template set '.$tplset;
 692                                      }
 693                                  }
 694                              }
 695                              if (count($err) == 0) {
 696                                  if (!$image_handler->insert($image)) {
 697                                      $err[] = 'Could not save '.$image->getVar('imgsetimg_file');
 698                                  }
 699                              }
 700                          }
 701                      }
 702                  }
 703              } else {
 704                  $err[] = $uploader->getErrors();
 705              }
 706          }
 707          if (count($err) > 0) {
 708              xoops_cp_header();
 709              xoops_error($err);
 710              xoops_cp_footer();
 711          } else {
 712              redirect_header('admin.php?fct=tplsets&amp;op=editimage&amp;tplset='.$tplset, 2, _MD_AM_DBUPDATED);
 713          }
 714          break;
 715      case 'showimage':
 716          $image_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
 717          if (empty($image_id)) {
 718              header('Content-type: image/gif');
 719              readfile(XOOPS_UPLOAD_PATH.'/blank.gif');
 720              exit();
 721          }
 722          $image_handler =& xoops_gethandler('imagesetimg');
 723          $image =& $image_handler->getObjects(new Criteria('imgsetimg_id', $image_id));
 724          if (count($image) > 0) {
 725              $mimetypes = array('gif' => 'image/gif', "jpe"=>"image/jpeg", "jpeg"=>"image/jpeg", "jpg"=>"image/jpeg", "png"=>"image/png", "swf"=>"application/x-shockwave-flash", "tif"=>"image/tiff", "tiff"=>"image/tiff", "bmp" => 'image/bmp');
 726              $ext = substr(strtolower(strrchr($image[0]->getVar('imgsetimg_file'), '.')), 1);
 727              if (in_array($ext, array_keys($mimetypes))) {
 728                  header('Content-type: '.$mimetypes[$ext]);
 729              }
 730              header('Cache-control: max-age=31536000');
 731              header('Expires: '.gmdate("D, d M Y H:i:s",time()+31536000).'GMT');
 732              header('Content-disposition: filename='.$image[0]->getVar('imgsetimg_file'));
 733              header('Content-Length: '.strlen($image[0]->getVar('imgsetimg_body')));
 734              header('Last-Modified: '.gmdate("D, d M Y H:i:s", time()).'GMT');
 735              echo $image[0]->getVar('imgsetimg_body');
 736          } else {
 737              header('Content-type: image/gif');
 738              readfile(XOOPS_UPLOAD_PATH.'/blank.gif');
 739          }
 740          break;
 741  */
 742      case 'viewdefault':
 743          $tpltpl_handler =& xoops_gethandler('tplfile');
 744          $tplfile =& $tpltpl_handler->get($id);
 745          $default =& $tpltpl_handler->find('default', $tplfile->getVar('tpl_type'), $tplfile->getVar('tpl_refid'), null, $tplfile->getVar('tpl_file'));
 746          echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>";
 747          echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'._LANGCODE.'" lang="'._LANGCODE.'">
 748          <head>
 749          <meta http-equiv="content-type" content="text/html; charset='._CHARSET.'" />
 750          <meta http-equiv="content-language" content="'._LANGCODE.'" />
 751          <title>'.htmlspecialchars($xoopsConfig['sitename']).' Administration</title>
 752          <link rel="stylesheet" type="text/css" media="all" href="'.XOOPS_URL.'/xoops.css" />
 753              <link rel="stylesheet" type="text/css" media="all" href="'.XOOPS_URL.'/modules/system/style.css" />
 754          </head><body>';
 755          if (is_object($default[0])) {
 756              $tpltpl_handler->loadSource($default[0]);
 757              $last_modified = $default[0]->getVar('tpl_lastmodified');
 758              $last_imported = $default[0]->getVar('tpl_lastimported');
 759              if ($default[0]->getVar('tpl_type') == 'block') {
 760                  $path = XOOPS_ROOT_PATH.'/modules/'.$default[0]->getVar('tpl_module').'/blocks/'.$default[0]->getVar('tpl_file');
 761              } else {
 762                  $path = XOOPS_ROOT_PATH.'/modules/'.$default[0]->getVar('tpl_module').'/'.$default[0]->getVar('tpl_file');
 763              }
 764              $colorchange = '';
 765              if (!file_exists($path)) {
 766                  $filemodified_date = _MD_NOFILE;
 767                  $lastimported_date = _MD_NOFILE;
 768              } else {
 769                  $tpl_modified = filemtime($path);
 770                  $filemodified_date = formatTimestamp($tpl_modified, 'l');
 771                  if ($tpl_modified > $last_imported) {
 772                      $colorchange = ' bgcolor="#ffCC99"';
 773                  }
 774                  $lastimported_date = formatTimestamp($last_imported, 'l');
 775              }
 776              include_once  XOOPS_ROOT_PATH.'/class/xoopsformloader.php';
 777              $form = new XoopsThemeForm(_MD_VIEWDEFAULT, 'template_form', 'admin.php');
 778              $form->addElement(new XoopsFormTextArea(_MD_FILEHTML, 'html', $default[0]->getVar('tpl_source'), 25));
 779              $form->display();
 780          } else {
 781              echo 'Selected file does not exist';
 782          }
 783          echo '<div style="text-align:center;">[<a href="#" onclick="javascript:window.close();">'._CLOSE.'</a>]</div></body></html>';
 784          break;
 785      case 'downloadtpl':
 786          $tpltpl_handler =& xoops_gethandler('tplfile');
 787          $tpl =& $tpltpl_handler->get(intval($id), true);
 788          if (is_object($tpl)) {
 789              $output = $tpl->getVar('tpl_source');
 790              strlen($output);
 791              header('Cache-Control: no-cache, must-revalidate');
 792              header('Pragma: no-cache');
 793              header('Content-Type: application/force-download');
 794              if (preg_match("/MSIE 5.5/", $_SERVER['HTTP_USER_AGENT'])) {
 795                  header('Content-Disposition: filename='.$tpl->getVar('tpl_file'));
 796              } else {
 797                  header('Content-Disposition: attachment; filename='.$tpl->getVar('tpl_file'));
 798              }
 799              header('Content-length: '.strlen($output));
 800              echo $output;
 801          }
 802          break;
 803      case 'uploadtpl':
 804          $tpltpl_handler =& xoops_gethandler('tplfile');
 805          $id = intval($_GET['id']);
 806          $tpl =& $tpltpl_handler->get($id);
 807          xoops_cp_header();
 808          echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;<a href="./admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$tpl->getVar('tpl_module').'&amp;tplset='.$tpl->getVar('tpl_tplset').'">'.$tpl->getVar('tpl_tplset').'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'._MD_UPLOAD.'<br /><br />';
 809          if (is_object($tpl)) {
 810              include_once  XOOPS_ROOT_PATH.'/class/xoopsformloader.php';
 811              $form = new XoopsThemeForm(_MD_UPLOAD, 'tplupload_form', 'admin.php', 'post', true);
 812              $form->setExtra('enctype="multipart/form-data"');
 813              $form->addElement(new XoopsFormLabel(_MD_FILENAME, $tpl->getVar('tpl_file').' ('.$tpl->getVar('tpl_tplset').')'));
 814              $form->addElement(new XoopsFormFile(_MD_CHOOSEFILE.'<br /><span style="color:#ff0000;">'._MD_UPWILLREPLACE.'</span>', 'tpl_upload', 200000), true);
 815              $form->addElement(new XoopsFormHidden('tpl_id', $id));
 816              $form->addElement(new XoopsFormHidden('op', 'uploadtpl_go'));
 817              $form->addElement(new XoopsFormHidden('fct', 'tplsets'));
 818              $form->addElement(new XoopsFormButton('', 'upload_button', _MD_UPLOAD, 'submit'));
 819              $form->display();
 820              xoops_cp_footer();
 821              exit();
 822          } else {
 823              echo 'Selected template does not exist';
 824          }
 825          xoops_cp_footer();
 826          break;
 827      case 'uploadtpl_go':
 828          if (!$GLOBALS['xoopsSecurity']->check()) {
 829              redirect_header('admin.php?fct=tplsets', 1, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
 830          }
 831          $tpltpl_handler =& xoops_gethandler('tplfile');
 832          $tpl =& $tpltpl_handler->get($tpl_id);
 833          if (is_object($tpl)) {
 834              include_once  XOOPS_ROOT_PATH.'/class/uploader.php';
 835              $uploader = new XoopsMediaUploader(XOOPS_UPLOAD_PATH, array('text/html', 'application/x-cdf', 'text/plain'), 200000);
 836              $uploader->setPrefix('tmp');
 837              if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
 838                  if (!$uploader->upload()) {
 839                      $err = $uploader->getErrors();
 840                  } else {
 841                      $tpl->setVar('tpl_lastmodified', time());
 842                      $fp = @fopen($uploader->getSavedDestination(), 'r');
 843                      $fsource = @fread($fp, filesize($uploader->getSavedDestination()));
 844                      @fclose($fp);
 845                      $tpl->setVar('tpl_source', $fsource, true);
 846                      @unlink($uploader->getSavedDestination());
 847                      if (!$tpltpl_handler->insert($tpl)) {
 848                          $err = 'Failed inserting data to database';
 849                      } else {
 850                          if ($tpl->getVar('tpl_tplset') == $xoopsConfig['template_set']) {
 851                              include_once  XOOPS_ROOT_PATH.'/class/template.php';
 852                              xoops_template_touch($tpl_id, true);
 853                          }
 854                      }
 855                  }
 856              } else {
 857                  $err = implode('<br />', $uploader->getErrors(false));
 858              }
 859              if (isset($err)) {
 860                  xoops_cp_header(false);
 861                  xoops_error($err);
 862                  xoops_cp_footer();
 863                  exit();
 864              }
 865              redirect_header('admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$tpl->getVar('tpl_module').'&amp;tplset='.urlencode($tpl->getVar('tpl_tplset')), 2, _MD_AM_DBUPDATED);
 866          }
 867          break;
 868      // upload new file
 869      case 'uploadtpl2':
 870          xoops_cp_header();
 871          $tplset = htmlspecialchars($tplset);
 872          $moddir = htmlspecialchars($moddir);
 873          echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;<a href="./admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$moddir.'&amp;tplset='.$tplset.'">'.$tplset.'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'._MD_UPLOAD.'<br /><br />';
 874          include_once  XOOPS_ROOT_PATH.'/class/xoopsformloader.php';
 875          $form = new XoopsThemeForm(_MD_UPLOAD, 'tplupload_form', 'admin.php', 'post', true);
 876          $form->setExtra('enctype="multipart/form-data"');
 877          $form->addElement(new XoopsFormLabel(_MD_FILENAME, $file));
 878          $form->addElement(new XoopsFormFile(_MD_CHOOSEFILE.'<br /><span style="color:#ff0000;">'._MD_UPWILLREPLACE.'</span>', 'tpl_upload', 200000), true);
 879          $form->addElement(new XoopsFormHidden('moddir', $moddir));
 880          $form->addElement(new XoopsFormHidden('tplset', $tplset));
 881          $form->addElement(new XoopsFormHidden('file', $file));
 882          $form->addElement(new XoopsFormHidden('type', $type));
 883          $form->addElement(new XoopsFormHidden('op', 'uploadtpl2_go'));
 884          $form->addElement(new XoopsFormHidden('fct', 'tplsets'));
 885          $form->addElement(new XoopsFormButton('', 'ploadtarupload_button', _MD_UPLOAD, 'submit'));
 886          $form->display();
 887          xoops_cp_footer();
 888          break;
 889      case 'uploadtpl2_go':
 890          if (!$GLOBALS['xoopsSecurity']->check()) {
 891              redirect_header('admin.php?fct=tplsets', 1, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
 892          }
 893          include_once  XOOPS_ROOT_PATH.'/class/uploader.php';
 894          $uploader = new XoopsMediaUploader(XOOPS_UPLOAD_PATH, array('text/html', 'application/x-cdf', 'text/plain'), 200000);
 895          $uploader->setPrefix('tmp');
 896          if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
 897              if (!$uploader->upload()) {
 898                  $err = $uploader->getErrors();
 899              } else {
 900                  $tpltpl_handler =& xoops_gethandler('tplfile');
 901                  $tplfile =& $tpltpl_handler->find('default', $type, null, $moddir, $file);
 902                  if (is_array($tplfile)) {
 903                      $tpl =& $tplfile[0]->xoopsClone();
 904                      $tpl->setVar('tpl_id', 0);
 905                      $tpl->setVar('tpl_tplset', $tplset);
 906                      $tpl->setVar('tpl_lastmodified', time());
 907                      $fp = @fopen($uploader->getSavedDestination(), 'r');
 908                      $fsource = @fread($fp, filesize($uploader->getSavedDestination()));
 909                      @fclose($fp);
 910                      $tpl->setVar('tpl_source', $fsource, true);
 911                      @unlink($uploader->getSavedDestination());
 912                      if (!$tpltpl_handler->insert($tpl)) {
 913                          $err = 'Failed inserting data to database';
 914                      } else {
 915                          if ($tplset == $xoopsConfig['template_set']) {
 916                              include_once  XOOPS_ROOT_PATH.'/class/template.php';
 917                              xoops_template_touch($tpl->getVar('tpl_id'), true);
 918                          }
 919                      }
 920                  } else {
 921                      $err = 'This template file does not need to be installed (PHP files using this template file does not exist)';
 922                  }
 923              }
 924          } else {
 925              $err = implode('<br />', $uploader->getErrors(false));
 926          }
 927          if (isset($err)) {
 928              xoops_cp_header(false);
 929              xoops_error($err);
 930              xoops_cp_footer();
 931              exit();
 932          }
 933          redirect_header('admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$moddir.'&amp;tplset='.urlencode($tplset), 2, _MD_AM_DBUPDATED);
 934          break;
 935      case 'download':
 936          if (isset($tplset)) {
 937              if (false != extension_loaded('zlib')) {
 938                  if (isset($_GET['method']) && $_GET['method'] == 'tar') {
 939                      if (@function_exists('gzencode')) {
 940                          require_once(XOOPS_ROOT_PATH.'/class/tardownloader.php');
 941                          $downloader = new XoopsTarDownloader();
 942                      }
 943                  } else {
 944                      if (@function_exists('gzcompress')) {
 945                          require_once(XOOPS_ROOT_PATH.'/class/zipdownloader.php');
 946                          $downloader = new XoopsZipDownloader();
 947                      }
 948                  }
 949                  $tplset_handler =& xoops_gethandler('tplset');
 950                  $tplsetobj =& $tplset_handler->getByName($tplset);
 951                  $xml = "<"."?xml version=\"1.0\"?".">\r\n<tplset>\r\n  <name>".$tplset."</name>\r\n  <dateCreated>".$tplsetobj->getVar('tplset_created')."</dateCreated>\r\n  <credits>\r\n".$tplsetobj->getVar('tplset_credits')."\r\n  </credits>\r\n  <generator>".XOOPS_VERSION."</generator>\r\n  <templates>";
 952                  $tpltpl_handler =& xoops_gethandler('tplfile');
 953                  $files =& $tpltpl_handler->getObjects(new Criteria('tpl_tplset', $tplset), true);
 954                  $fcount = count($files);
 955                  if ($fcount > 0) {
 956                      for ($i = 0; $i < $fcount; $i++) {
 957                          if ($files[$i]->getVar('tpl_type') == 'block') {
 958                              $path = $tplset.'/templates/'.$files[$i]->getVar('tpl_module').'/blocks/'.$files[$i]->getVar('tpl_file');
 959                              $xml .= "\r\n    <template name=\"".$files[$i]->getVar('tpl_file')."\">\r\n      <module>".$files[$i]->getVar('tpl_module')."</module>\r\n      <type>block</type>\r\n      <lastModified>".$files[$i]->getVar('tpl_lastmodified')."</lastModified>\r\n    </template>";
 960                          } elseif ($files[$i]->getVar('tpl_type') == 'module') {
 961                              $path = $tplset.'/templates/'.$files[$i]->getVar('tpl_module').'/'.$files[$i]->getVar('tpl_file');
 962                              $xml .= "\r\n    <template name=\"".$files[$i]->getVar('tpl_file')."\">\r\n      <module>".$files[$i]->getVar('tpl_module')."</module>\r\n      <type>module</type>\r\n      <lastModified>".$files[$i]->getVar('tpl_lastmodified')."</lastModified>\r\n    </template>";
 963                          }
 964                          $downloader->addFileData($files[$i]->getVar('tpl_source'), $path, $files[$i]->getVar('tpl_lastmodified'));
 965                      }
 966  
 967                      $xml .= "\r\n  </templates>";
 968  /*
 969                      $xml ." "\r\n  <images>";
 970                      $image_handler =& xoops_gethandler('imagesetimg');
 971                      $criteria = new CriteriaCompo(new Criteria('l.tplset_name', $tplset));
 972                      $criteria->add(new Criteria('s.imgset_refid', 0));
 973                      $ifiles =& $image_handler->getObjects($criteria);
 974                      $fcount = count($ifiles);
 975                      for ($i = 0; $i < $fcount; $i++) {
 976                          $dummyimage = XOOPS_CACHE_PATH.'/_dummyimage'.$i.time();
 977                          $fp = @fopen($dummyimage, 'wb');
 978                          @fwrite($fp, $ifiles[$i]->getVar('imgsetimg_body'));
 979                          @fclose($fp);
 980                          $downloader->addBinaryFile($dummyimage, $tplset.'/images/'.$ifiles[$i]->getVar('imgsetimg_file'));
 981                          @unlink($dummyimage);
 982                          $xml .= " \r\n   <image name=\"".$ifiles[$i]->getVar('imgsetimg_file')."\"></image>";
 983                      }
 984  */
 985                  }
 986                  //$xml .= "\r\n  </images>
 987                  $xml .= "\r\n</tplset>";
 988                  $downloader->addFileData($xml, $tplset.'/tplset.xml', time());
 989                  echo $downloader->download($tplset, true);
 990              } else {
 991                  xoops_cp_header();
 992                  xoops_error(_MD_NOZLIB);
 993                  xoops_cp_footer();
 994              }
 995          }
 996          break;
 997      case 'generatetpl':
 998          xoops_cp_header();
 999          xoops_confirm(array('tplset' => $tplset, 'moddir' => $moddir, 'file' => $file, 'type' => $type, 'op' => 'generatetpl_go', 'fct' => 'tplsets'), 'admin.php', _MD_PLZGENERATE, _MD_GENERATE);
1000          xoops_cp_footer();
1001          break;
1002      case 'generatetpl_go':
1003          if (!$GLOBALS['xoopsSecurity']->check()) {
1004              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
1005          }
1006          $tpltpl_handler =& xoops_gethandler('tplfile');
1007          $tplfile =& $tpltpl_handler->find('default', $type, null, $moddir, $file, true);
1008          if (count($tplfile) > 0) {
1009              $newtpl =& $tplfile[0]->xoopsClone();
1010              $newtpl->setVar('tpl_id', 0);
1011              $newtpl->setVar('tpl_tplset', $tplset);
1012              $newtpl->setVar('tpl_lastmodified', time());
1013              $newtpl->setVar('tpl_lastimported', 0);
1014              if (!$tpltpl_handler->insert($newtpl)) {
1015                  $err = 'ERROR: Could not insert template <b>'.$tplfile[0]->getVar('tpl_file').'</b> to the database.';
1016              } else {
1017                  if ($tplset == $xoopsConfig['template_set']) {
1018                      include_once  XOOPS_ROOT_PATH.'/class/template.php';
1019                      xoops_template_touch($newtpl->getVar('tpl_id'));
1020                  }
1021              }
1022          } else {
1023              $err = 'Selected file does not exist)';
1024          }
1025          if (!isset($err)) {
1026              redirect_header('admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$newtpl->getVar('tpl_module').'&amp;tplset='.urlencode($newtpl->getVar('tpl_tplset')), 2, _MD_AM_DBUPDATED);
1027          }
1028          xoops_cp_header();
1029          xoops_error($err);
1030          echo '<br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
1031          xoops_cp_footer();
1032          break;
1033      case 'generatemod':
1034          xoops_cp_header();
1035          xoops_confirm(array('tplset' => $tplset, 'op' => 'generatemod_go', 'fct' => 'tplsets', 'moddir' => $moddir), 'admin.php', _MD_PLZGENERATE, _MD_GENERATE);
1036          xoops_cp_footer();
1037          break;
1038      case 'generatemod_go':
1039          if (!$GLOBALS['xoopsSecurity']->check()) {
1040              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
1041          }
1042          $tpltpl_handler =& xoops_gethandler('tplfile');
1043          xoops_cp_header();
1044          echo '<code>';
1045          $tplfiles =& $tpltpl_handler->find('default', 'module', null, $moddir, null, true);
1046          $fcount = count($tplfiles);
1047          if ($fcount > 0) {
1048              echo 'Installing module template files for template set '.$tplset.'...<br />';
1049              for ($i = 0; $i < $fcount; $i++) {
1050                  $newtpl =& $tplfiles[$i]->xoopsClone();
1051                  $newtpl->setVar('tpl_id', 0);
1052                  $newtpl->setVar('tpl_tplset', $tplset);
1053                  $newtpl->setVar('tpl_lastmodified', time());
1054                  $newtpl->setVar('tpl_lastimported', 0);
1055                  if (!$tpltpl_handler->insert($newtpl)) {
1056                      echo '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not insert template <b>'.$file.'</b> to the database.</span><br />';
1057                  } else {
1058                      if ($tplset == $xoopsConfig['template_set']) {
1059                          include_once  XOOPS_ROOT_PATH.'/class/template.php';
1060                          xoops_template_touch($newtpl->getVar('tpl_id'));
1061                      }
1062                      echo '&nbsp;&nbsp;Template <b>'.$tplfiles[$i]->getVar('tpl_file').'</b> added to the database.<br />';
1063                  }
1064              }
1065              flush();
1066              unset($newtpl);
1067          }
1068          unset($files);
1069          $tplfiles =& $tpltpl_handler->find('default', 'block', null, $moddir, null, true);
1070          $fcount = count($tplfiles);
1071          if ($fcount > 0) {
1072              echo '&nbsp;&nbsp;Installing block template files...<br />';
1073              for ($i = 0; $i < $fcount; $i++) {
1074                  $newtpl =& $tplfiles[$i]->xoopsClone();
1075                  $newtpl->setVar('tpl_id', 0);
1076                  $newtpl->setVar('tpl_tplset', $tplset);
1077                  $newtpl->setVar('tpl_lastmodified', time());
1078                  $newtpl->setVar('tpl_lastimported', 0);
1079                  if (!$tpltpl_handler->insert($newtpl)) {
1080                      echo '&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not insert block template <b>'.$tplfiles[$i]->getVar('tpl_file').'</b> to the database.</span><br />';echo $newtpl->getHtmlErrors();
1081                  } else {
1082                      if ($tplset == $xoopsConfig['template_set']) {
1083                          include_once  XOOPS_ROOT_PATH.'/class/template.php';
1084                          xoops_template_touch($newtpl->getVar('tpl_id'));
1085                      }
1086                      echo '&nbsp;&nbsp;&nbsp;&nbsp;Block template <b>'.$tplfiles[$i]->getVar('tpl_file').'</b> added to the database.<br />';
1087                  }
1088              }
1089              flush();
1090              unset($newtpl);
1091          }
1092          echo '<br />Module template files for template set <b>'.$tplset.'</b> generated and installed.<br /></code><br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
1093          xoops_cp_footer();
1094          break;
1095      case 'uploadtar_go':
1096          if (!$GLOBALS['xoopsSecurity']->check()) {
1097              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
1098          }
1099          include_once  XOOPS_ROOT_PATH.'/class/uploader.php';
1100          $uploader = new XoopsMediaUploader(XOOPS_UPLOAD_PATH, array('application/x-gzip', 'application/gzip', 'application/gzip-compressed', 'application/x-gzip-compressed', 'application/x-tar', 'application/x-tar-compressed', 'application/octet-stream'), 1000000);
1101          $uploader->setPrefix('tmp');
1102          xoops_cp_header();
1103          echo '<code>';
1104          if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
1105              if (!$uploader->upload()) {
1106                  xoops_error($uploader->getErrors());
1107              } else {
1108                  include_once XOOPS_ROOT_PATH.'/class/class.tar.php';
1109                  $tar = new tar();
1110                  $tar->openTar($uploader->getSavedDestination());
1111                  @unlink($uploader->getSavedDestination());
1112                  $themefound = false;
1113                  foreach ($tar->files as $id => $info) {
1114                      $infoarr = explode('/', str_replace("\\", '/', $info['name']));
1115                      if (!isset($tplset_name)) {
1116                          $tplset_name = trim($infoarr[0]);
1117                      } else {
1118                          $tplset_name = trim($tplset_name);
1119                          if ($tplset_name == '') {
1120                              $tplset_name = trim($infoarr[0]);
1121                          }
1122                      }
1123                      if ($tplset_name != '') {
1124                          break;
1125                      }
1126                  }
1127                  if ($tplset_name == '') {
1128                      echo '<span style="color:#ff0000;">ERROR: Template file not found</span><br />';
1129                  } elseif  (preg_match('/['.preg_quote('\/:*?"<>|','/').']/', $tplset_name)) {
1130                      echo '<span style="color:#ff0000;">ERROR: Invalid Template Set Name</span><br />';
1131                  } else {
1132                      $tplset_handler =& xoops_gethandler('tplset');
1133                      if ($tplset_handler->getCount(new Criteria('tplset_name', $tplset_name)) > 0) {
1134                          echo '<span style="color:#ff0000;">ERROR: Template set <b>'.htmlspecialchars($tplset_name, ENT_QUOTES).'</b> already exists.</span><br />';
1135                      } else {
1136                          $tplset =& $tplset_handler->create();
1137                          $tplset->setVar('tplset_name', $tplset_name);
1138                          $tplset->setVar('tplset_created', time());
1139                          if (!$tplset_handler->insert($tplset)) {
1140                              echo '<span style="color:#ff0000;">ERROR: Could not create template set <b>'.htmlspecialchars($tplset_name, ENT_QUOTES).'</b>.</span><br />';
1141                          } else {
1142                              $tplsetid = $tplset->getVar('tplset_id');
1143                              echo 'Template set <b>'.htmlspecialchars($tplset_name, ENT_QUOTES).'</b> created. (ID: <b>'.$tplsetid.'</b>)</span><br />';
1144                              $tpltpl_handler = xoops_gethandler('tplfile');
1145                              $themeimages = array();
1146                              foreach ($tar->files as $id => $info) {
1147                                  $infoarr = explode('/', str_replace("\\", '/', $info['name']));
1148                                  if (isset($infoarr[3]) && trim($infoarr[3]) == 'blocks') {
1149                                      $default =& $tpltpl_handler->find('default', 'block', null, trim($infoarr[2]), trim($infoarr[4]));
1150                                  } elseif ((!isset($infoarr[4]) || trim($infoarr[4]) == '') && $infoarr[1] == 'templates') {
1151                                      $default =& $tpltpl_handler->find('default', 'module', null, trim($infoarr[2]), trim($infoarr[3]));
1152                                  } elseif (isset($infoarr[3]) && trim($infoarr[3]) == 'images') {
1153                                      $infoarr[2] = trim($infoarr[2]);
1154                                      if (preg_match("/(.*)\.(gif|jpg|jpeg|png)$/i", $infoarr[2], $match)) {
1155                                          $themeimages[] = array('name' => $infoarr[2], 'content' => $info['file']);
1156                                      }
1157                                  }
1158                                  if (isset($default) && count($default) > 0) {
1159                                      $newtpl =& $default[0]->xoopsClone();
1160                                      $newtpl->setVar('tpl_id', 0);
1161                                      $newtpl->setVar('tpl_tplset', $tplset_name);
1162                                      $newtpl->setVar('tpl_source', $info['file'], true);
1163                                      $newtpl->setVar('tpl_lastmodified', time());
1164                                      if (!$tpltpl_handler->insert($newtpl)) {
1165                                          echo '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not insert <b>'.$info['name'].'</b> to the database.</span><br />';
1166                                      } else {
1167                                          echo '&nbsp;&nbsp;<b>'.$info['name'].'</b> inserted to the database.<br />';
1168                                      }
1169                                      unset($default);
1170                                  }
1171                                  unset($info);
1172                              }
1173                              $icount = count($themeimages);
1174                              if ($icount > 0) {
1175                                  $imageset_handler =& xoops_gethandler('imageset');
1176                                  $imgset =& $imageset_handler->create();
1177                                  $imgset->setVar('imgset_name', $tplset_name);
1178                                  $imgset->setVar('imgset_refid', 0);
1179                                  if (!$imageset_handler->insert($imgset)) {
1180                                      echo '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not create image set.</span><br />';
1181                                  } else {
1182                                      $newimgsetid = $imgset->getVar('imgset_id');
1183                                      echo '&nbsp;&nbsp;Image set <b>'.htmlspecialchars($tplset_name, ENT_QUOTES).'</b> created. (ID: <b>'.$newimgsetid.'</b>)<br />';
1184                                      if (!$imageset_handler->linktplset($newimgsetid, $tplset_name)) {
1185                                          echo '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed linking image set to template set <b>'.htmlspecialchars($tplset_name, ENT_QUOTES).'</b></span><br />';
1186                                      }
1187                                      $image_handler =& xoops_gethandler('imagesetimg');
1188                                      for ($i = 0; $i < $icount; $i++) {
1189                                          if (isset($themeimages[$i]['name']) && $themeimages[$i]['name'] != '') {
1190                                              $image =& $image_handler->create();
1191                                              $image->setVar('imgsetimg_file', $themeimages[$i]['name']);
1192                                              $image->setVar('imgsetimg_imgset', $newimgsetid);
1193                                              $image->setVar('imgsetimg_body', $themeimages[$i]['content'], true);
1194                                              if (!$image_handler->insert($image)) {
1195                                                  echo '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Failed storing image file data to database.</span><br />';
1196                                              } else {
1197                                                  echo '&nbsp;&nbsp;Image file data stored into database. (ID: <b>'.$image->getVar('imgsetimg_id').'</b>)<br />';
1198                                              }
1199                                          }
1200                                      }
1201                                  }
1202                              }
1203                          }
1204                      }
1205                  }
1206              }
1207          } else {
1208              $err = implode('<br />', $uploader->getErrors(false));
1209              echo $err;
1210          }
1211          echo '</code><br /><a href="admin.php?fct=tplsets">'._MD_AM_BTOTADMIN.'</a>';
1212          xoops_cp_footer();
1213          break;
1214      case 'previewtpl':
1215          if (!$GLOBALS['xoopsSecurity']->check()) {
1216              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
1217          }
1218          require_once  XOOPS_ROOT_PATH.'/class/template.php';
1219          $myts =& MyTextsanitizer::getInstance();
1220          $html = $myts->stripSlashesGPC($html);
1221          $tpltpl_handler =& xoops_gethandler('tplfile');
1222          $tplfile =& $tpltpl_handler->get($id, true);
1223          $xoopsTpl = new XoopsTpl();
1224  
1225          if (is_object($tplfile)) {
1226              $dummylayout = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1227              <html><head><meta http-equiv="content-type" content="text/html; charset='._CHARSET.'" />
1228              <meta http-equiv="content-language" content="'._LANGCODE.'" />
1229              <title>'.$xoopsConfig['sitename'].'</title>
1230              <link rel="stylesheet" type="text/css" media="screen" href="' .XOOPS_URL.'/xoops.css" />
1231              <link rel="stylesheet" type="text/css" media="screen" href="' .getcss($xoopsConfig['theme_set']) .'" />';
1232  
1233              $css =& $tpltpl_handler->find($xoopsConfig['template_set'], 'css', 0, null, null, true);
1234              $csscount = count($css);
1235              for ($i = 0; $i < $csscount; $i++) {
1236                  $dummylayout .= "\n".$css[$i]->getVar('tpl_source');
1237              }
1238              $dummylayout .= "\n".'</style></head><body><div id="xo-canvas"><{$content}></div></body></html>';
1239              if ($tplfile->getVar('tpl_type') == 'block') {
1240                  include_once  XOOPS_ROOT_PATH.'/class/xoopsblock.php';
1241                  $block = new XoopsBlock($tplfile->getVar('tpl_refid'));
1242                  $xoopsTpl->assign('block', $block->buildBlock());
1243              }
1244              $dummytpl = '_dummytpl_'.time().'.html';
1245              $fp = fopen(XOOPS_CACHE_PATH.'/'.$dummytpl, 'w');
1246              fwrite($fp, $html);
1247              fclose($fp);
1248              $xoopsTpl->assign('content', $xoopsTpl->fetch('file:'.XOOPS_CACHE_PATH.'/'.$dummytpl));
1249              $xoopsTpl->clear_compiled_tpl('file:'.XOOPS_CACHE_PATH.'/'.$dummytpl);
1250              unlink(XOOPS_CACHE_PATH.'/'.$dummytpl);
1251              $dummyfile = '_dummy_'.time().'.html';
1252              $fp = fopen(XOOPS_CACHE_PATH.'/'.$dummyfile, 'w');
1253              fwrite($fp, $dummylayout);
1254              fclose($fp);
1255              $tplset= $tplfile->getVar('tpl_tplset');
1256              $tform = array('tpl_tplset' => $tplset, 'tpl_id' => $id, 'tpl_file' => $tplfile->getVar('tpl_file'), 'tpl_desc' => $tplfile->getVar('tpl_desc'), 'tpl_lastmodified' => $tplfile->getVar('tpl_lastmodified'), 'tpl_source' => htmlspecialchars($html, ENT_QUOTES), 'tpl_module' => $moddir);
1257              include_once XOOPS_ROOT_PATH.'/modules/system/admin/tplsets/tplform.php';
1258              xoops_cp_header();
1259              echo '<a href="admin.php?fct=tplsets">'. _MD_TPLMAIN .'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;<a href="./admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$moddir.'&amp;tplset='.urlencode($tplset).'">'.htmlspecialchars($tplset, ENT_QUOTES).'</a>&nbsp;<span style="font-weight:bold;">&raquo;&raquo;</span>&nbsp;'._MD_EDITTEMPLATE.'<br /><br />';
1260              $form->display();
1261              xoops_cp_footer();
1262              echo '<script type="text/javascript">
1263              <!--//
1264              preview_window = openWithSelfMain("", "popup", 680, 450, true);
1265              preview_window.document.clear();
1266              ';
1267              $lines = preg_split("/(\r\n|\r|\n)( *)/", $xoopsTpl->fetch('file:'.XOOPS_CACHE_PATH.'/'.$dummyfile));
1268              $xoopsTpl->clear_compiled_tpl('file:'.XOOPS_CACHE_PATH.'/'.$dummyfile);
1269              unlink(XOOPS_CACHE_PATH.'/'.$dummyfile);
1270              foreach ($lines as $line) {
1271                  echo 'preview_window.document.writeln("'.str_replace('"', '\"', $line).'");';
1272              }
1273              echo '
1274              preview_window.focus();
1275              preview_window.document.close();
1276              //-->
1277              </script>';
1278  
1279          }
1280          break;
1281      case 'update':
1282          if (!$GLOBALS['xoopsSecurity']->check()) {
1283              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
1284          }
1285          include_once  XOOPS_ROOT_PATH.'/class/uploader.php';
1286          $uploader = new XoopsMediaUploader(XOOPS_UPLOAD_PATH, array('text/html', 'application/x-cdf'), 200000);
1287          $uploader->setPrefix('tmp');
1288          $msg = array();
1289          foreach ($_POST['xoops_upload_file'] as $upload_file) {
1290              // '.' is converted to '_' when upload
1291              $upload_file2 = str_replace('.', '_', $upload_file);
1292              if ($uploader->fetchMedia($upload_file2)) {
1293                  if (!$uploader->upload()) {
1294                      $msg[] = $uploader->getErrors();
1295                  } else {
1296                      $tpltpl_handler =& xoops_gethandler('tplfile');
1297                      if (!isset($old_template[$upload_file])) {
1298                          $tplfile =& $tpltpl_handler->find('default', null, null, $moddir, $upload_file);
1299                          if (count($tplfile) > 0) {
1300                              $tpl =& $tplfile[0]->xoopsClone();
1301                              $tpl->setVar('tpl_id', 0);
1302                              $tpl->setVar('tpl_tplset', $tplset);
1303                          } else {
1304                              $msg[] = 'Template file <b>'.$upload_file.'</b> does not need to be installed (PHP files using this template file does not exist)';
1305                              continue;
1306                          }
1307                      } else {
1308                          $tpl =& $tpltpl_handler->get($old_template[$upload_file]);
1309                      }
1310                      $tpl->setVar('tpl_lastmodified', time());
1311                      $fp = @fopen($uploader->getSavedDestination(), 'r');
1312                      $fsource = @fread($fp, filesize($uploader->getSavedDestination()));
1313                      @fclose($fp);
1314                      $tpl->setVar('tpl_source', $fsource, true);
1315                      @unlink($uploader->getSavedDestination());
1316                      if (!$tpltpl_handler->insert($tpl)) {
1317                          $msg[] = 'Failed inserting data for '.$upload_file.' to database';
1318                      } else {
1319                          $msg[] = 'Template file <b>'.$upload_file.'</b> updated.';
1320                          if ($tplset == $xoopsConfig['template_set']) {
1321                              include_once  XOOPS_ROOT_PATH.'/class/template.php';
1322                              if (xoops_template_touch($tpl->getVar('tpl_id'), true)) {
1323                                  $msg[] = 'Template file <b>'.$upload_file.'</b> compiled.';
1324                              }
1325  
1326                          }
1327                      }
1328                  }
1329              } else {
1330                  if ($uploader->getMediaName() == '') {
1331                      continue;
1332                  } else {
1333                      $msg[] = $uploader->getErrors();
1334                  }
1335              }
1336          }
1337          xoops_cp_header();
1338          echo '<code>';
1339          foreach ($msg as $m) {
1340              echo $m.'<br />';
1341          }
1342          echo '</code><br /><a href="admin.php?fct=tplsets&amp;op=listtpl&amp;tplset='.urlencode($tplset).'&amp;moddir='.$moddir.'">'._MD_AM_BTOTADMIN.'</a>';
1343          xoops_cp_footer();
1344          break;
1345      case 'importtpl':
1346          xoops_cp_header();
1347          if (!empty($id)) {
1348              xoops_confirm(array('tplset' => $tplset, 'moddir' => $moddir, 'id' => $id, 'op' => 'importtpl_go', 'fct' => 'tplsets'), 'admin.php', _MD_RUSUREIMPT, _MD_IMPORT);
1349          } elseif (isset($file)) {
1350              xoops_confirm(array('tplset' => $tplset, 'moddir' => $moddir, 'file' => $file, 'op' => 'importtpl_go', 'fct' => 'tplsets'), 'admin.php', _MD_RUSUREIMPT, _MD_IMPORT);
1351          }
1352          xoops_cp_footer();
1353          break;
1354      case 'importtpl_go':
1355          if (!$GLOBALS['xoopsSecurity']->check()) {
1356              redirect_header('admin.php?fct=tplsets', 3, implode('<br />', $GLOBALS['xoopsSecurity']->getErrors()));
1357          }
1358          $tpltpl_handler =& xoops_gethandler('tplfile');
1359          $tplfile = '';
1360          if (!empty($id)) {
1361              $tplfile =& $tpltpl_handler->get($id, true);
1362          } else {
1363              $tplfiles =& $tpltpl_handler->find('default', null, null, null, trim($file), true);
1364              $tplfile = (count($tplfiles) > 0) ? $tplfiles[0] : '';
1365          }
1366          $error = true;
1367          if (is_object($tplfile)) {
1368              switch ($tplfile->getVar('tpl_type')) {
1369                  case 'module':
1370                      $filepath = XOOPS_THEME_PATH.'/'.$tplset.'/templates/'.$tplfile->getVar('tpl_module').'/'.$tplfile->getVar('tpl_file');
1371                      break;
1372                  case 'block':
1373                      $filepath = XOOPS_THEME_PATH.'/'.$tplset.'/templates/'.$tplfile->getVar('tpl_module').'/blocks/'.$tplfile->getVar('tpl_file');
1374                      break;
1375                  default:
1376                      break;
1377              }
1378              if (file_exists($filepath)) {
1379                  if (false != $fp = fopen($filepath, 'r')) {
1380                      $filesource = fread($fp, filesize($filepath));
1381                      fclose($fp);
1382                      $tplfile->setVar('tpl_source', $filesource, true);
1383                      $tplfile->setVar('tpl_tplset', $tplset);
1384                      $tplfile->setVar('tpl_lastmodified', time());
1385                      $tplfile->setVar('tpl_lastimported', time());
1386                      if (!$tpltpl_handler->insert($tplfile)) {
1387                      } else {
1388                          $error = false;
1389                      }
1390                  }
1391              }
1392          }
1393          if (false != $error) {
1394              xoops_cp_header();
1395              xoops_error('Could not import file '.$filepath);
1396              echo '<br /><a href="admin.php?fct=tplsets&amp;op=listtpl&amp;tplset='.urlencode($tplset).'&amp;moddir='.$moddir.'">'._MD_AM_BTOTADMIN.'</a>';
1397              xoops_cp_footer();
1398              exit();
1399          }
1400          redirect_header('admin.php?fct=tplsets&amp;op=listtpl&amp;moddir='.$tplfile->getVar('tpl_module').'&amp;tplset='.urlencode($tplfile->getVar('tpl_tplset')), 2, _MD_AM_DBUPDATED);
1401          break;
1402      default:
1403          break;
1404      }
1405  }
1406  ?>


Généré le : Sun Nov 25 11:44:32 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics