예제 #1
0
 function doupload()
 {
     @header('Content-type: text/html; charset=' . WIKI_CHARSET);
     $did = $this->post['did'] ? $this->post['did'] : 0;
     if (!$this->setting['attachment_open']) {
         exit;
     }
     $okfile = '';
     $this->setting['coin_download'] = isset($this->setting['coin_download']) ? $this->setting['coin_download'] : 10;
     $count = count($_FILES['attachment']['name']);
     for ($i = 0; $i < $count; $i++) {
         if (!(bool) $_FILES['attachment']['name'][$i]) {
             continue;
         }
         $size = $_FILES['attachment']['size'][$i] / 1024;
         $name = $_FILES['attachment']['name'][$i];
         $attachment_type = $_ENV['attachment']->get_attachment_type();
         $filetype = strtolower(substr($name, strrpos($name, ".") + 1));
         if ($attachment_type[0] != '*' && !in_array($filetype, $attachment_type)) {
             echo '<script>parent.Attachment.error("' . $name . ': ' . $this->view->lang['attachTypeError'] . '");</script>';
             continue;
         }
         if ($size > $this->setting['attachment_size'] || empty($size)) {
             echo '<script>parent.Attachment.error("' . $name . ': ' . $this->view->lang['attachSizeError2'] . '");</script>';
             continue;
         }
         $destfile = 'data/attachment/' . date('y-m') . '/' . date('Y-m-d') . '_' . util::random(10) . '.attach';
         file::createaccessfile('data/attachment/' . date('y-m') . '/');
         $result = file::uploadfile($_FILES['attachment']['tmp_name'][$i], $destfile, $this->setting['attachment_size'], 0);
         if ($result) {
             $okfile .= $name . '|';
             $coindown = $this->post['coin_download'][$i];
             if (empty($coindown) || !is_numeric($coindown)) {
                 $coindown = 0;
             } else {
                 if (0 > $coindown) {
                     $coindown = 0;
                 } else {
                     if ($this->setting['coin_download'] < $coindown) {
                         $coindown = $this->setting['coin_download'];
                     }
                 }
             }
             $_ENV['attachment']->add_attachment($this->user['uid'], $did, $name, $destfile, $this->post['attachmentdesc'][$i], $filetype, 0, $coindown);
         }
     }
     echo '<script>';
     if ($okfile) {
         echo 'parent.Attachment.addok("' . $okfile . '");';
     }
     echo '</script>';
 }
예제 #2
0
 function dobackup()
 {
     set_time_limit(0);
     $filedir = HDWIKI_ROOT . "/data/db_backup/";
     file::createaccessfile($filedir);
     if (!isset($this->post['backupsubmit']) && !isset($this->get[9])) {
         $sqlfilename = date("Ymd", $this->time) . "_" . util::random(8);
         $tables = $_ENV['db']->showtables();
         file::forcemkdir($filedir);
         $filename = $_ENV['db']->get_sqlfile_list($filedir);
         $this->view->assign('filename', $filename);
         $this->view->assign('filedir', $filedir);
         $this->view->assign('tables', $tables);
         $this->view->assign('sqlfilename', $sqlfilename);
         $this->view->display("admin_dbbackup");
     } else {
         $sqldump = '';
         $type = isset($this->post['type']) ? $this->post['type'] : $this->get[2];
         $sqlfilename = isset($this->post['sqlfilename']) ? $this->post['sqlfilename'] : rawurldecode($this->get[3]);
         $sizelimit = isset($this->post['sizelimit']) ? $this->post['sizelimit'] : intval($this->get[4]);
         $tableid = intval($this->get[5]);
         $startfrom = intval($this->get[6]);
         $volume = intval($this->get[7]) + 1;
         $compression = isset($this->post['compression']) ? $this->post['compression'] : intval($this->get[8]);
         $backupfilename = $filedir . $sqlfilename;
         $backupsubmit = 1;
         $tables = array();
         if (substr(trim(ini_get('memory_limit')), 0, -1) < 32 && substr(trim(ini_get('memory_limit')), 0, -1) > 0) {
             @ini_set('memory_limit', '32M');
         }
         if (!util::is_mem_available($sizelimit * 1024 * 3)) {
             $this->message($sizelimit . "KB" . $this->view->lang['dblimitsizeBig'], 'index.php?admin_db-backup');
         }
         switch ($type) {
             case "full":
                 $tables = $_ENV['db']->showtables();
                 break;
             case "stand":
                 $tables = array(DB_TABLEPRE . "category", DB_TABLEPRE . "doc", DB_TABLEPRE . "edition", DB_TABLEPRE . "user");
                 break;
             case "min":
                 $tables = array(DB_TABLEPRE . "doc", DB_TABLEPRE . "user");
                 break;
             case "custom":
                 if (!(bool) $this->post['tables']) {
                     $tables = $this->cache->getcache('backup_tables', '0');
                 } else {
                     $tables = $this->post['tables'];
                     $this->cache->writecache('backup_tables', $tables);
                 }
                 break;
         }
         if ($sizelimit < 512) {
             $this->message($this->view->lang['dblimitsizeSmall'], 'BACK');
         }
         if (count($tables) == 0) {
             $this->message($this->view->lang['dbChooseOne'], 'BACK');
         }
         if (!file_exists($filedir)) {
             file::forcemkdir($filedir);
         }
         if (!file::iswriteable($filedir)) {
             $this->message($this->view->lang['dbFileNotWrite'], 'index.php?admin_db-backup');
         }
         if (in_array(DB_TABLEPRE . "usergroup", $tables)) {
             $num = array_search(DB_TABLEPRE . "usergroup", $tables);
             $tables[$num] = $tables[0];
             $tables[0] = DB_TABLEPRE . "usergroup";
         }
         if (in_array(DB_TABLEPRE . "user", $tables)) {
             $num = array_search(DB_TABLEPRE . "user", $tables);
             if ($tables[0] == DB_TABLEPRE . "usergroup") {
                 $tables[$num] = $tables[1];
                 $tables[1] = DB_TABLEPRE . "user";
             } else {
                 $tables[$num] = $tables[0];
                 $tables[0] = DB_TABLEPRE . "user";
             }
         }
         $complete = TRUE;
         for (; $complete && $tableid < count($tables) && strlen($sqldump) + 500 < $sizelimit * 1000; $tableid++) {
             $result = $_ENV['db']->sqldumptable($tables[$tableid], $complete, $sizelimit, $startfrom, strlen($sqldump));
             $sqldump .= $result['tabledump'];
             $complete = $result['complete'];
             if ($complete) {
                 $startfrom = 0;
             } else {
                 $startfrom = $result['startfrom'];
             }
         }
         $dumpfile = $backupfilename . "_%s" . '.sql';
         !$complete && $tableid--;
         if (trim($sqldump)) {
             $result = $_ENV['db']->write_to_sql($sqldump, $dumpfile, $volume);
             if (!$result) {
                 $this->message($this->view->lang['dbBackupWriteSqlFiled'], 'BACK');
             } else {
                 $url = "index.php?admin_db-backup-{$type}-" . rawurlencode($sqlfilename) . "-{$sizelimit}-{$tableid}-{$startfrom}-{$volume}-{$compression}-{$backupsubmit}";
                 $this->message("<image src='style/default/loading.gif'><br />" . $this->view->lang['dbBackupNext1'] . $volume . $this->view->lang['dbBackupNext2'] . "<script type=\"text/JavaScript\">setTimeout(\"window.location.replace('{$url}');\", 2000);</script>", '');
             }
         } else {
             $volume--;
             if ($compression && util::is_mem_available($sizelimit * 1024 * 3 * $volume)) {
                 $_ENV['db']->write_to_zip($backupfilename, $dumpfile, $volume);
             }
             $this->cache->removecache('backup_tables');
             $this->header("admin_db-backup");
         }
     }
 }
예제 #3
0
 function upload_attachment($did)
 {
     if (!$this->base->setting['attachment_open']) {
         return false;
     }
     $count = count($_FILES['attachment']['name']);
     for ($i = 0; $i < $count; $i++) {
         if (!(bool) $_FILES['attachment']['name'][$i]) {
             continue;
         }
         $attachment_type = $this->get_attachment_type();
         $filetype = strtolower(substr($_FILES['attachment']['name'][$i], strrpos($_FILES['attachment']['name'][$i], ".") + 1));
         if (!in_array($filetype, $attachment_type)) {
             $message .= $_FILES['attachment']['name'][$i] . $this->base->view->lang['attachTypeError'] . "<br />";
             continue;
         }
         if ($this->base->setting['attachment_size'] < $_FILES['attachment']['size'][$i] / 1024) {
             $message .= $_FILES['attachment']['name'][$i] . $this->base->view->lang['attachSizeError'] . "<br />";
             continue;
         }
         $destfile = 'data/attachment/' . date('y-m') . '/' . date('Y-m-d') . '_' . util::random(10) . '.attach';
         file::createaccessfile('data/attachment/' . date('y-m') . '/');
         $result = file::uploadfile($_FILES['attachment']['tmp_name'][$i], $destfile, $this->base->setting['attachment_size'], 0);
         if ($result) {
             $_ENV['attachment']->add_attachment($this->base->user['uid'], $did, $_FILES['attachment']['name'][$i], $destfile, $this->base->post['attachmentdesc'][$i], $filetype, 0);
         }
     }
     return $message;
 }