diff options
Diffstat (limited to 'inc')
37 files changed, 546 insertions, 195 deletions
diff --git a/inc/TarLib.class.php b/inc/TarLib.class.php index 126604cd1..e04c47cb8 100644 --- a/inc/TarLib.class.php +++ b/inc/TarLib.class.php @@ -13,7 +13,6 @@ * @author Christopher Smith <chris@jalakai.co.uk> */ - /** * Those constants represent the compression method to use. * COMPRESS_GZIP is used for the GZIP compression; COMPRESS_BZIP for @@ -68,15 +67,15 @@ class TarLib { var $_result; var $_initerror; - const COMPRESS_GZIP = 1; - const COMPRESS_BZIP = 2; - const COMPRESS_AUTO = 3; - const COMPRESS_NONE = 0; - const TARLIB_VERSION = '1.2'; - const FULL_ARCHIVE = -1; - const ARCHIVE_DYNAMIC = 0; + const COMPRESS_GZIP = 1; + const COMPRESS_BZIP = 2; + const COMPRESS_AUTO = 3; + const COMPRESS_NONE = 0; + const TARLIB_VERSION = '1.2'; + const FULL_ARCHIVE = -1; + const ARCHIVE_DYNAMIC = 0; const ARCHIVE_RENAMECOMP = 5; - const COMPRESS_DETECT = -1; + const COMPRESS_DETECT = -1; /** * constructor, initialize the class @@ -108,21 +107,21 @@ class TarLib { * represent the GZIP or BZIP compression level. 1 produce fast compression, * and 9 produce smaller files. See the RFC 1952 for more infos. */ - function __construct($p_filen = TarLib::ARCHIVE_DYNAMIC , $p_comptype = TarLib::COMPRESS_AUTO, $p_complevel = 9) { + function __construct($p_filen = TarLib::ARCHIVE_DYNAMIC, $p_comptype = TarLib::COMPRESS_AUTO, $p_complevel = 9) { $this->_initerror = 0; - $this->_nomf = $p_filen; - $flag=0; - if($p_comptype && $p_comptype % 5 == 0){ + $this->_nomf = $p_filen; + $flag = 0; + if($p_comptype && $p_comptype % 5 == 0) { $p_comptype /= TarLib::ARCHIVE_RENAMECOMP; - $flag=1; + $flag = 1; } if($p_complevel > 0 && $p_complevel <= 9) $this->_compzlevel = $p_complevel; - else $p_complevel = 9; + else $this->_compzlevel = 9; if($p_comptype == TarLib::COMPRESS_DETECT) { - if(strtolower(substr($p_filen,-3)) == '.gz') $p_comptype = TarLib::COMPRESS_GZIP; - elseif(strtolower(substr($p_filen,-4)) == '.bz2') $p_comptype = TarLib::COMPRESS_BZIP; + if(strtolower(substr($p_filen, -3)) == '.gz') $p_comptype = TarLib::COMPRESS_GZIP; + elseif(strtolower(substr($p_filen, -4)) == '.bz2') $p_comptype = TarLib::COMPRESS_BZIP; else $p_comptype = TarLib::COMPRESS_NONE; } @@ -152,7 +151,7 @@ class TarLib { if($this->_initerror < 0) $this->_comptype = TarLib::COMPRESS_NONE; - if($flag) $this->_nomf.= '.'.$this->getCompression(1); + if($flag) $this->_nomf .= '.'.$this->getCompression(1); $this->_result = true; } @@ -162,9 +161,9 @@ class TarLib { * This function does exactly the same as TarLib (constructor), except it * returns a status code. */ - function setArchive($p_name='', $p_comp = TarLib::COMPRESS_AUTO, $p_level=9) { + function setArchive($p_name = '', $p_comp = TarLib::COMPRESS_AUTO, $p_level = 9) { $this->_CompTar(); - $this->TarLib($p_name, $p_comp, $p_level); + $this->__construct($p_name, $p_comp, $p_level); return $this->_result; } @@ -186,7 +185,7 @@ class TarLib { * MaxgTar Constants */ function getCompression($ext = false) { - $exts = Array('tar','tar.gz','tar.bz2'); + $exts = Array('tar', 'tar.gz', 'tar.bz2'); if($ext) return $exts[$this->_comptype]; return $this->_comptype; } @@ -263,8 +262,10 @@ class TarLib { if(!$archive && !$this->_memdat) return -10; if(!$name) $name = utf8_basename($this->_nomf); - if($archive){ if(!file_exists($archive)) return -11; } - else $decoded = $this->getDynamicArchive(); + if($archive) { + if(!file_exists($archive)) return -11; + } + $decoded = $this->getDynamicArchive(); if($headers) { header('Content-Type: application/x-gtar'); @@ -274,10 +275,10 @@ class TarLib { } if($archive) { - $fp = @fopen($archive,'rb'); + $fp = @fopen($archive, 'rb'); if(!$fp) return -4; - while(!feof($fp)) echo fread($fp,2048); + while(!feof($fp)) echo fread($fp, 2048); } else { echo $decoded; } @@ -311,10 +312,10 @@ class TarLib { * permission in octal mode (prefixed with a 0) that will be given on each * extracted file. */ - function Extract($p_what = TarLib::FULL_ARCHIVE, $p_to = '.', $p_remdir='', $p_mode = 0755) { + function Extract($p_what = TarLib::FULL_ARCHIVE, $p_to = '.', $p_remdir = '', $p_mode = 0755) { if(!$this->_OpenRead()) return -4; // if(!@is_dir($p_to)) if(!@mkdir($p_to, 0777)) return -8; --CS - if(!@is_dir($p_to)) if(!$this->_dirApp($p_to)) return -8; //--CS (route through correct dir fn) + if(!@is_dir($p_to)) if(!$this->_dirApp($p_to)) return -8; //--CS (route through correct dir fn) $ok = $this->_extractList($p_to, $p_what, $p_remdir, $p_mode); $this->_CompTar(); @@ -327,21 +328,20 @@ class TarLib { * * This function will attempt to create a new archive with global headers * then add the given files into. If the archive is a real file, the - * contents are written directly into the file, if it is a dynamic archive + * contents are written directly into the file. If it is a dynamic archive, * contents are only stored in memory. This function should not be used to * add files to an existing archive, you should use Add() instead. * - * The FileList actually supports three different modes : + * The FileList actually supports three different modes: * * - You can pass a string containing filenames separated by pipes '|'. - * In this case the file are read from the webserver filesystem and the - * root folder is the folder where the script using the MaxgTar is called. + * In this case thes file are read from the filesystem and the root folder + * is the folder running script located. NOT RECOMMENDED * - * - You can also give a unidimensional indexed array containing the - * filenames. The behaviour for the content reading is the same that a - * '|'ed string. + * - You can also give an indexed array containing the filenames. The + * behaviour for the content reading is the same as above. * - * - The more useful usage is to pass bidimensional arrays, where the + * - You can pass an array of arrays. For each file use an array where the * first element contains the filename and the second contains the file * contents. You can even add empty folders to the package if the filename * has a leading '/'. Once again, have a look at the exemples to understand @@ -357,15 +357,15 @@ class TarLib { * to the file you store. Note also that the RemovePath is applied before the * AddPath is added, so it HAS a sense to use both parameters together. */ - function Create($p_filelist,$p_add='',$p_rem='') { + function Create($p_filelist, $p_add = '', $p_rem = '') { if(!$fl = $this->_fetchFilelist($p_filelist)) return -5; if(!$this->_OpenWrite()) return -6; - $ok = $this->_addFileList($fl,$p_add,$p_rem); + $ok = $this->_addFileList($fl, $p_add, $p_rem); - if($ok){ + if($ok) { $this->_writeFooter(); - }else{ + } else { $this->_CompTar(); @unlink($this->_nomf); } @@ -376,18 +376,26 @@ class TarLib { /** * Add files to an existing package. * - * This function does exactly the same than Create() exept it - * will append the given files at the end of the archive. Please not the is - * safe to call Add() on a newly created archive whereas the - * contrary will fail ! + * This function does exactly the same as Create() exept it + * will append the given files at the end of the archive. + * + * Note: This is only supported for dynamic in memory files and uncompressed + * tar files * * This function returns a status code, you can use TarErrorStr() on * it to get the human-readable description of the error. */ function Add($p_filelist, $p_add = '', $p_rem = '') { - if (($this->_nomf != TarLib::ARCHIVE_DYNAMIC && @is_file($this->_nomf)) || - ($this->_nomf == TarLib::ARCHIVE_DYNAMIC && !$this->_memdat)){ - return $this->Create($p_filelist, $p_add, $p_rem); + if($this->_nomf !== TarLib::ARCHIVE_DYNAMIC && + $this->_comptype !== TarLib::COMPRESS_NONE + ) { + return -12; + } + + if(($this->_nomf !== TarLib::ARCHIVE_DYNAMIC && !$this->_fp) || + ($this->_nomf === TarLib::ARCHIVE_DYNAMIC && !$this->_memdat) + ) { + return $this->Create($p_filelist, $p_add, $p_rem); } if(!$fl = $this->_fetchFilelist($p_filelist)) return -5; @@ -419,15 +427,15 @@ class TarLib { $result = Array(); - while ($dat = $this->_read(512)) { + while($dat = $this->_read(512)) { $dat = $this->_readHeader($dat); if(!is_array($dat)) continue; - $this->_seek(ceil($dat['size']/512)*512,1); + $this->_seek(ceil($dat['size'] / 512) * 512, 1); $result[] = $dat; } - return $result; + return $result; } /** @@ -439,35 +447,48 @@ class TarLib { */ function TarErrorStr($i) { $ecodes = Array( - 1 => true, - 0 => "Undocumented error", - -1 => "Can't use COMPRESS_GZIP compression : ZLIB extensions are not loaded !", - -2 => "Can't use COMPRESS_BZIP compression : BZ2 extensions are not loaded !", - -3 => "You must set a archive file to read the contents !", - -4 => "Can't open the archive file for read !", - -5 => "Invalide file list !", - -6 => "Can't open the archive in write mode !", - -7 => "There is no ARCHIVE_DYNAMIC to write !", - -8 => "Can't create the directory to extract files !", - -9 => "Please pass a archive name to send if you made created an ARCHIVE_DYNAMIC !", - -10 => "You didn't pass an archive filename and there is no stored ARCHIVE_DYNAMIC !", - -11 => "Given archive doesn't exist !" - ); + 1 => true, + 0 => "Undocumented error", + -1 => "Can't use COMPRESS_GZIP compression : ZLIB extensions are not loaded !", + -2 => "Can't use COMPRESS_BZIP compression : BZ2 extensions are not loaded !", + -3 => "You must set a archive file to read the contents !", + -4 => "Can't open the archive file for read !", + -5 => "Invalide file list !", + -6 => "Can't open the archive in write mode !", + -7 => "There is no ARCHIVE_DYNAMIC to write !", + -8 => "Can't create the directory to extract files !", + -9 => "Please pass a archive name to send if you made created an ARCHIVE_DYNAMIC !", + -10 => "You didn't pass an archive filename and there is no stored ARCHIVE_DYNAMIC !", + -11 => "Given archive doesn't exist !", + -12 => "Appending not supported for compressed files" + ); return isset($ecodes[$i]) ? $ecodes[$i] : $ecodes[0]; } - function _seek($p_flen, $tell=0) { + /** + * Seek in the data stream + * + * @todo probably broken for bzip tars + * @param int $p_flen seek to this position + * @param bool $tell seek from current position? + */ + function _seek($p_flen, $tell = false) { if($this->_nomf === TarLib::ARCHIVE_DYNAMIC) - $this->_memdat=substr($this->_memdat,0,($tell ? strlen($this->_memdat) : 0) + $p_flen); + $this->_memdat = substr($this->_memdat, 0, ($tell ? strlen($this->_memdat) : 0) + $p_flen); elseif($this->_comptype == TarLib::COMPRESS_GZIP) - @gzseek($this->_fp, ($tell ? @gztell($this->_fp) : 0)+$p_flen); + @gzseek($this->_fp, ($tell ? @gztell($this->_fp) : 0) + $p_flen); elseif($this->_comptype == TarLib::COMPRESS_BZIP) - @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0)+$p_flen); + @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0) + $p_flen); else - @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0)+$p_flen); + @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0) + $p_flen); } + /** + * Open the archive for reading + * + * @return bool true if succesfull + */ function _OpenRead() { if($this->_comptype == TarLib::COMPRESS_GZIP) $this->_fp = @gzopen($this->_nomf, 'rb'); @@ -479,6 +500,12 @@ class TarLib { return ($this->_fp ? true : false); } + /** + * Open the archive for writing + * + * @param string $add filemode + * @return bool true on success + */ function _OpenWrite($add = 'w') { if($this->_nomf === TarLib::ARCHIVE_DYNAMIC) return true; @@ -492,6 +519,9 @@ class TarLib { return ($this->_fp ? true : false); } + /** + * Closes the open file pointer + */ function _CompTar() { if($this->_nomf === TarLib::ARCHIVE_DYNAMIC || !$this->_fp) return; @@ -500,27 +530,46 @@ class TarLib { else @fclose($this->_fp); } + /** + * Read from the open file pointer + * + * @param int $p_len bytes to read + * @return string + */ function _read($p_len) { if($this->_comptype == TarLib::COMPRESS_GZIP) - return @gzread($this->_fp,$p_len); + return @gzread($this->_fp, $p_len); elseif($this->_comptype == TarLib::COMPRESS_BZIP) - return @bzread($this->_fp,$p_len); + return @bzread($this->_fp, $p_len); else - return @fread($this->_fp,$p_len); + return @fread($this->_fp, $p_len); } + /** + * Write to the open filepointer or memory + * + * @param string $p_data + * @return int + */ function _write($p_data) { - if($this->_nomf === TarLib::ARCHIVE_DYNAMIC) $this->_memdat .= $p_data; - elseif($this->_comptype == TarLib::COMPRESS_GZIP) - return @gzwrite($this->_fp,$p_data); - - elseif($this->_comptype == TarLib::COMPRESS_BZIP) - return @bzwrite($this->_fp,$p_data); - - else - return @fwrite($this->_fp,$p_data); + if($this->_nomf === TarLib::ARCHIVE_DYNAMIC) { + $this->_memdat .= $p_data; + return strlen($p_data); + } elseif($this->_comptype == TarLib::COMPRESS_GZIP) { + return @gzwrite($this->_fp, $p_data); + } elseif($this->_comptype == TarLib::COMPRESS_BZIP) { + return @bzwrite($this->_fp, $p_data); + } else { + return @fwrite($this->_fp, $p_data); + } } + /** + * Compress given data according to the set compression method + * + * @param $p_dat + * @return string + */ function _encode($p_dat) { if($this->_comptype == TarLib::COMPRESS_GZIP) return gzencode($p_dat, $this->_compzlevel); @@ -529,55 +578,77 @@ class TarLib { else return $p_dat; } + /** + * Decode the given tar file header + * + * @param $p_dat + * @return array|bool + */ function _readHeader($p_dat) { - if (!$p_dat || strlen($p_dat) != 512) return false; + if(!$p_dat || strlen($p_dat) != 512) return false; - for ($i=0, $chks=0; $i<148; $i++) + for($i = 0, $chks = 0; $i < 148; $i++) $chks += ord($p_dat[$i]); - for ($i=156,$chks+=256; $i<512; $i++) + for($i = 156, $chks += 256; $i < 512; $i++) $chks += ord($p_dat[$i]); $headers = @unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $p_dat); if(!$headers) return false; $return['checksum'] = OctDec(trim($headers['checksum'])); - if ($return['checksum'] != $chks) return false; + if($return['checksum'] != $chks) return false; $return['filename'] = trim($headers['filename']); - $return['mode'] = OctDec(trim($headers['mode'])); - $return['uid'] = OctDec(trim($headers['uid'])); - $return['gid'] = OctDec(trim($headers['gid'])); - $return['size'] = OctDec(trim($headers['size'])); - $return['mtime'] = OctDec(trim($headers['mtime'])); + $return['mode'] = OctDec(trim($headers['mode'])); + $return['uid'] = OctDec(trim($headers['uid'])); + $return['gid'] = OctDec(trim($headers['gid'])); + $return['size'] = OctDec(trim($headers['size'])); + $return['mtime'] = OctDec(trim($headers['mtime'])); $return['typeflag'] = $headers['typeflag']; - $return['link'] = trim($headers['link']); - $return['uname'] = trim($headers['uname']); - $return['gname'] = trim($headers['gname']); + $return['link'] = trim($headers['link']); + $return['uname'] = trim($headers['uname']); + $return['gname'] = trim($headers['gname']); return $return; } + /** + * Builds a normalized file list + * + * @todo remove string support, use saner format + * + * @param $p_filelist + * @return array|bool + */ function _fetchFilelist($p_filelist) { if(!$p_filelist || (is_array($p_filelist) && !@count($p_filelist))) return false; if(is_string($p_filelist)) { - $p_filelist = explode('|',$p_filelist); + $p_filelist = explode('|', $p_filelist); if(!is_array($p_filelist)) $p_filelist = Array($p_filelist); } return $p_filelist; } + /** + * Adds files given as file list + * + * @param array $p_fl + * @param string $p_addir + * @param string $p_remdir + * @return bool + */ function _addFileList($p_fl, $p_addir, $p_remdir) { foreach($p_fl as $file) { - if(($file == $this->_nomf && $this->_nomf != TarLib::ARCHIVE_DYNAMIC) || !$file || (!file_exists($file) && !is_array($file))) + if(($file == $this->_nomf && $this->_nomf !== TarLib::ARCHIVE_DYNAMIC) || !$file || (!is_array($file) && !file_exists($file))) continue; - if (!$this->_addFile($file, $p_addir, $p_remdir)) + if(!$this->_addFile($file, $p_addir, $p_remdir)) continue; - if (@is_dir($file)) { + if(@is_dir($file)) { $d = @opendir($file); if(!$d) continue; @@ -592,26 +663,36 @@ class TarLib { } closedir($d); - unset($tmplist,$f); + unset($tmplist, $f); } } return true; } + /** + * Adds a single file + * + * @param array|string $p_fn + * @param string $p_addir + * @param string $p_remdir + * @return bool + */ function _addFile($p_fn, $p_addir = '', $p_remdir = '') { + $data = false; if(is_array($p_fn)) list($p_fn, $data) = $p_fn; $sname = $p_fn; if($p_remdir) { - if(substr($p_remdir,-1) != '/') $p_remdir .= "/"; + if(substr($p_remdir, -1) != '/') $p_remdir .= "/"; if(substr($sname, 0, strlen($p_remdir)) == $p_remdir) $sname = substr($sname, strlen($p_remdir)); } - if($p_addir) $sname = $p_addir.(substr($p_addir,-1) == '/' ? '' : "/").$sname; + if($p_addir) $sname = $p_addir.(substr($p_addir, -1) == '/' ? '' : "/").$sname; - if(strlen($sname) > 99) return; + // FIXME ustar should support up 256 chars + if(strlen($sname) > 99) return false; if(@is_dir($p_fn)) { if(!$this->_writeFileHeader($p_fn, $sname)) return false; @@ -625,14 +706,14 @@ class TarLib { if(!$data) { while(!feof($fp)) { - $packed = pack("a512", fread($fp,512)); + $packed = pack("a512", fread($fp, 512)); $this->_write($packed); } fclose($fp); } else { $len = strlen($data); - for($s = 0; $s < $len; $s += 512){ - $this->_write(pack("a512",substr($data,$s,512))); + for($s = 0; $s < $len; $s += 512) { + $this->_write(pack("a512", substr($data, $s, 512))); } } } @@ -640,53 +721,70 @@ class TarLib { return true; } - function _writeFileHeader($p_file, $p_sname, $p_data=false) { + /** + * Write the header for a file in the TAR archive + * + * @param string $p_file + * @param string $p_sname + * @param bool $p_data + * @return bool + */ + function _writeFileHeader($p_file, $p_sname, $p_data = false) { if(!$p_data) { - if (!$p_sname) $p_sname = $p_file; + if(!$p_sname) $p_sname = $p_file; $p_sname = $this->_pathTrans($p_sname); $h_info = stat($p_file); - $h[0] = sprintf("%6s ", DecOct($h_info[4])); - $h[] = sprintf("%6s ", DecOct($h_info[5])); - $h[] = sprintf("%6s ", DecOct(fileperms($p_file))); + $h[0] = sprintf("%6s ", DecOct($h_info[4])); + $h[] = sprintf("%6s ", DecOct($h_info[5])); + $h[] = sprintf("%6s ", DecOct(fileperms($p_file))); clearstatcache(); $h[] = sprintf("%11s ", DecOct(filesize($p_file))); $h[] = sprintf("%11s", DecOct(filemtime($p_file))); $dir = @is_dir($p_file) ? '5' : ''; } else { - $dir = ''; + $dir = ''; $p_data = sprintf("%11s ", DecOct($p_data)); - $time = sprintf("%11s ", DecOct(time())); - $h = Array(" 0 "," 0 "," 40777 ",$p_data,$time); + $time = sprintf("%11s ", DecOct(time())); + $h = Array(" 0 ", " 0 ", " 40777 ", $p_data, $time); } $data_first = pack("a100a8a8a8a12A12", $p_sname, $h[2], $h[0], $h[1], $h[3], $h[4]); - $data_last = pack("a1a100a6a2a32a32a8a8a155a12", $dir, '', '', '', '', '', '', '', '', ""); + $data_last = pack("a1a100a6a2a32a32a8a8a155a12", $dir, '', '', '', '', '', '', '', '', ""); - for ($i=0,$chks=0; $i<148; $i++) + for($i = 0, $chks = 0; $i < 148; $i++) $chks += ord($data_first[$i]); - for ($i=156, $chks+=256, $j=0; $i<512; $i++, $j++) + for($i = 156, $chks += 256, $j = 0; $i < 512; $i++, $j++) $chks += ord($data_last[$j]); $this->_write($data_first); - $chks = pack("a8",sprintf("%6s ", DecOct($chks))); + $chks = pack("a8", sprintf("%6s ", DecOct($chks))); $this->_write($chks.$data_last); return true; } - function _append($p_filelist, $p_addir="", $p_remdir="") { + /** + * Append the given files to the already open archive + * + * @param array $p_filelist + * @param string $p_addir + * @param string $p_remdir + * @return bool|int + */ + function _append($p_filelist, $p_addir = "", $p_remdir = "") { if(!$this->_fp) if(!$this->_OpenWrite('a')) return -6; - if($this->_nomf == TarLib::ARCHIVE_DYNAMIC) { - $s = strlen($this->_memdat); - $this->_memdat = substr($this->_memdat,0,-512); + if($this->_nomf === TarLib::ARCHIVE_DYNAMIC) { + $this->_memdat = substr($this->_memdat, 0, -512 * 2); // remove footer } else { + clearstatcache(); $s = filesize($this->_nomf); - $this->_seek($s-512); + + $this->_seek($s - (512 * 2)); // remove footer } $ok = $this->_addFileList($p_filelist, $p_addir, $p_remdir); @@ -695,48 +793,70 @@ class TarLib { return $ok; } + /** + * Cleans up a path and removes relative parts + * + * @param string $p_dir + * @return string + */ function _pathTrans($p_dir) { - if ($p_dir) { + $r = ''; + if($p_dir) { $subf = explode("/", $p_dir); - $r=''; - for ($i=count($subf)-1; $i>=0; $i--) { - if ($subf[$i] == ".") { + for($i = count($subf) - 1; $i >= 0; $i--) { + if($subf[$i] == ".") { # do nothing - } elseif ($subf[$i] == "..") { + } elseif($subf[$i] == "..") { $i--; - } elseif (!$subf[$i] && $i!=count($subf)-1 && $i) { + } elseif(!$subf[$i] && $i != count($subf) - 1 && $i) { # do nothing } else { - $r = $subf[$i].($i!=(count($subf)-1) ? "/".$r : ""); + $r = $subf[$i].($i != (count($subf) - 1) ? "/".$r : ""); } } } return $r; } + /** + * Add the closing footer to the archive + * + * Physically, an archive consists of a series of file entries terminated by an end-of-archive entry, which + * consists of two 512 blocks of zero bytes + * + * @link http://www.gnu.org/software/tar/manual/html_chapter/tar_8.html#SEC134 + */ function _writeFooter() { $this->_write(pack("a512", "")); + $this->_write(pack("a512", "")); } + /** + * @param $p_to + * @param $p_files + * @param $p_remdir + * @param int $p_mode + * @return array|bool|int|string + */ function _extractList($p_to, $p_files, $p_remdir, $p_mode = 0755) { - if (!$p_to || ($p_to[0]!="/"&&substr($p_to,0,3)!="../"&&substr($p_to,1,3)!=":\\"&&substr($p_to,1,2)!=":/")) /*" // <- PHP Coder bug */ + if(!$p_to || ($p_to[0] != "/" && substr($p_to, 0, 3) != "../" && substr($p_to, 1, 3) != ":\\" && substr($p_to, 1, 2) != ":/")) /*" // <- PHP Coder bug */ $p_to = "./$p_to"; - if ($p_remdir && substr($p_remdir,-1)!='/') $p_remdir .= '/'; + if($p_remdir && substr($p_remdir, -1) != '/') $p_remdir .= '/'; $p_remdirs = strlen($p_remdir); while($dat = $this->_read(512)) { $headers = $this->_readHeader($dat); if(!$headers['filename']) continue; - if($p_files == -1 || $p_files[0] == -1){ + if($p_files == -1 || $p_files[0] == -1) { $extract = true; } else { $extract = false; foreach($p_files as $f) { - if(substr($f,-1) == "/") { - if((strlen($headers['filename']) > strlen($f)) && (substr($headers['filename'],0,strlen($f))==$f)) { + if(substr($f, -1) == "/") { + if((strlen($headers['filename']) > strlen($f)) && (substr($headers['filename'], 0, strlen($f)) == $f)) { $extract = true; break; } @@ -747,15 +867,15 @@ class TarLib { } } - if ($extract) { + if($extract) { $det[] = $headers; - if ($p_remdir && substr($headers['filename'],0,$p_remdirs)==$p_remdir) - $headers['filename'] = substr($headers['filename'],$p_remdirs); + if($p_remdir && substr($headers['filename'], 0, $p_remdirs) == $p_remdir) + $headers['filename'] = substr($headers['filename'], $p_remdirs); - if($headers['filename'].'/' == $p_remdir && $headers['typeflag']=='5') continue; + if($headers['filename'].'/' == $p_remdir && $headers['typeflag'] == '5') continue; - if ($p_to != "./" && $p_to != "/") { - while($p_to{-1}=="/") $p_to = substr($p_to,0,-1); + if($p_to != "./" && $p_to != "/") { + while($p_to{-1} == "/") $p_to = substr($p_to, 0, -1); if($headers['filename']{0} == "/") $headers['filename'] = $p_to.$headers['filename']; @@ -763,29 +883,35 @@ class TarLib { $headers['filename'] = $p_to."/".$headers['filename']; } - $ok = $this->_dirApp($headers['typeflag']=="5" ? $headers['filename'] : dirname($headers['filename'])); + $ok = $this->_dirApp($headers['typeflag'] == "5" ? $headers['filename'] : dirname($headers['filename'])); if($ok < 0) return $ok; - if (!$headers['typeflag']) { - if (!$fp = @fopen($headers['filename'], "wb")) return -6; - $n = floor($headers['size']/512); + if(!$headers['typeflag']) { + if(!$fp = @fopen($headers['filename'], "wb")) return -6; + $n = floor($headers['size'] / 512); - for ($i=0; $i<$n; $i++){ - fwrite($fp, $this->_read(512),512); + for($i = 0; $i < $n; $i++) { + fwrite($fp, $this->_read(512), 512); } - if (($headers['size'] % 512) != 0) fwrite($fp, $this->_read(512), $headers['size'] % 512); + if(($headers['size'] % 512) != 0) fwrite($fp, $this->_read(512), $headers['size'] % 512); fclose($fp); touch($headers['filename'], $headers['mtime']); chmod($headers['filename'], $p_mode); } else { - $this->_seek(ceil($headers['size']/512)*512,1); + $this->_seek(ceil($headers['size'] / 512) * 512, 1); } - }else $this->_seek(ceil($headers['size']/512)*512,1); + } else $this->_seek(ceil($headers['size'] / 512) * 512, 1); } return $det; } + /** + * Create a directory hierarchy in filesystem + * + * @param string $d + * @return bool + */ function _dirApp($d) { // map to dokuwiki function (its more robust) return io_mkdir_p($d); diff --git a/inc/auth.php b/inc/auth.php index 99adfa791..1c8a8f5f5 100644 --- a/inc/auth.php +++ b/inc/auth.php @@ -299,7 +299,7 @@ function auth_createToken() { * * This is neither unique nor unfakable - still it adds some * security. Using the first part of the IP makes sure - * proxy farms like AOLs are stil okay. + * proxy farms like AOLs are still okay. * * @author Andreas Gohr <andi@splitbrain.org> * @@ -313,6 +313,7 @@ function auth_browseruid() { $uid .= $_SERVER['HTTP_ACCEPT_LANGUAGE']; $uid .= $_SERVER['HTTP_ACCEPT_CHARSET']; $uid .= substr($ip, 0, strpos($ip, '.')); + $uid = strtolower($uid); return md5($uid); } diff --git a/inc/html.php b/inc/html.php index da89d60ed..f4e6af663 100644 --- a/inc/html.php +++ b/inc/html.php @@ -464,6 +464,7 @@ function html_revisions($first=0, $media_id = false){ else $exists = @file_exists(mediaFN($id)); $display_name = (!$media_id && useHeading('navigation')) ? hsc(p_get_first_heading($id)) : $id; + if (!$display_name) $display_name = $id; if($exists && $first==0){ if (!$media_id && isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) @@ -862,7 +863,8 @@ function html_list_index($item){ $ret .= $base; $ret .= '</strong></a>'; }else{ - $ret .= html_wikilink(':'.$item['id']); + // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605 + $ret .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id'])); } return $ret; } diff --git a/inc/lang/en/preview.txt b/inc/lang/en/preview.txt index 16c96c5d7..5ca69694d 100644 --- a/inc/lang/en/preview.txt +++ b/inc/lang/en/preview.txt @@ -1,4 +1,4 @@ ====== Preview ====== -This is a preview of how your text will look like. Remember: It is **not saved** yet! +This is a preview of what your text will look like. Remember: It is **not saved** yet! diff --git a/inc/lang/eo/lang.php b/inc/lang/eo/lang.php index bfdb39011..5a0b0245f 100644 --- a/inc/lang/eo/lang.php +++ b/inc/lang/eo/lang.php @@ -95,6 +95,7 @@ $lang['searchmedia_in'] = 'Serĉi en %s'; $lang['txt_upload'] = 'Elektu dosieron por alŝuti'; $lang['txt_filename'] = 'Alŝuti kiel (laŭvole)'; $lang['txt_overwrt'] = 'Anstataŭigi ekzistantan dosieron'; +$lang['maxuploadsize'] = 'Alŝuto maks. %s po dosiero.'; $lang['lockedby'] = 'Nune ŝlosita de'; $lang['lockexpire'] = 'Ŝlosado ĉesos en'; $lang['js']['willexpire'] = 'Vi povos redakti ĉi tiun paĝon post unu minuto.\nSe vi volas nuligi tempokontrolon de la ŝlosado, premu la butonon "Antaŭrigardi".'; @@ -193,6 +194,7 @@ $lang['user_tools'] = 'Uzantaj iloj'; $lang['site_tools'] = 'Retejaj iloj'; $lang['page_tools'] = 'Paĝaj iloj'; $lang['skip_to_content'] = 'al la enhavo'; +$lang['sidebar'] = 'Flanka strio'; $lang['mail_newpage'] = 'paĝo aldonita:'; $lang['mail_changed'] = 'paĝo modifita:'; $lang['mail_subscribe_list'] = 'ŝanĝitaj paĝoj en nomspaco:'; @@ -263,6 +265,7 @@ $lang['subscr_style_digest'] = 'resuma retpoŝtaĵo de ŝanĝoj por ĉiu paĝo $lang['subscr_style_list'] = 'listo de ŝanĝitaj paĝoj ekde la lasta retpoŝtaĵo (je %.2f tagoj)'; $lang['authmodfailed'] = 'Malbona agordo por identigi la uzanton. Bonvolu informi la administranton de la vikio.'; $lang['authtempfail'] = 'La identigo de via uzantonomo estas intertempe maldisponebla. Se tiu ĉi situacio daŭros, bonvolu informi la adminstranton de la vikio.'; +$lang['authpwdexpire'] = 'Via pasvorto malvalidos post %d tagoj, prefere ŝanĝu ĝin baldaũ.'; $lang['i_chooselang'] = 'Elektu vian lingvon'; $lang['i_installer'] = 'Instalilo de DokuWiki'; $lang['i_wikiname'] = 'Nomo de la vikio'; @@ -318,3 +321,4 @@ $lang['media_perm_read'] = 'Bedaûrinde viaj rajtoj ne sufiĉas por legi d $lang['media_perm_upload'] = 'Bedaûrinde viaj rajtoj ne sufiĉas por alŝuti dosierojn.'; $lang['media_update'] = 'Alŝuti novan version'; $lang['media_restore'] = 'Restarigi ĉi tiun version'; +$lang['plugin_install_err'] = 'Kromaĵo instalita malĝuste. Renomu la kromaĵan dosierujon \'%s\' al \'%s\'.'; diff --git a/inc/lang/eo/mailwrap.html b/inc/lang/eo/mailwrap.html new file mode 100644 index 000000000..9e92a00f7 --- /dev/null +++ b/inc/lang/eo/mailwrap.html @@ -0,0 +1,13 @@ +<html> +<head> +<title>@TITLE@</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<body> + +@HTMLBODY@ + +<br /><hr /> +<small>Tiu retpoŝtaĵo venas de DokuWiki ĉe @DOKUWIKIURL@.</small> +</body> +</html>
\ No newline at end of file diff --git a/inc/lang/eo/resetpwd.txt b/inc/lang/eo/resetpwd.txt new file mode 100644 index 000000000..442a7ac4e --- /dev/null +++ b/inc/lang/eo/resetpwd.txt @@ -0,0 +1,4 @@ +====== Difini novan pasvorton ====== + + +Bonvolu indiki novan pasvorton por via konto en tiu ĉi vikio.
\ No newline at end of file diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php index 95b1af43e..4c15877e3 100644 --- a/inc/lang/es/lang.php +++ b/inc/lang/es/lang.php @@ -27,6 +27,7 @@ * @author Oscar Ciudad <oscar@jacho.net> * @author Ruben Figols <ruben.figols@gmail.com> * @author Gerardo Zamudio <gerardo@gerardozamudio.net> + * @author Mercè López mercelz@gmail.com */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; diff --git a/inc/lang/es/subscr_single.txt b/inc/lang/es/subscr_single.txt index e2a54c79f..abddeeb21 100644 --- a/inc/lang/es/subscr_single.txt +++ b/inc/lang/es/subscr_single.txt @@ -1,7 +1,7 @@ Hola! La página @PAGE@ en @TITLE@ wiki ha cambiado. -Estos son los cambioss: +Estos son los cambios: -------------------------------------------------------- @DIFF@ @@ -9,7 +9,7 @@ Estos son los cambioss: Fecha : @DATE@ Usuario : @USER@ -Resúmen de edición: @SUMMARY@ +Resumen de edición: @SUMMARY@ Revisión Anterior: @OLDPAGE@ Nueva Revisión: @NEWPAGE@ diff --git a/inc/lang/eu/lang.php b/inc/lang/eu/lang.php index f7a517fe4..59d9d86fb 100644 --- a/inc/lang/eu/lang.php +++ b/inc/lang/eu/lang.php @@ -5,6 +5,7 @@ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Xabi Ezpeleta <xezpeleta@mendikute.com> * @author Inko Illarramendi <inko.i.a@gmail.com> + * @author Zigor Astarbe <astarbe@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -40,11 +41,14 @@ $lang['btn_backtomedia'] = 'Atzera Multimedia Fitxategiaren Aukeraketara'; $lang['btn_subscribe'] = 'Harpidetu Orri Aldaketetara'; $lang['btn_profile'] = 'Eguneratu Profila '; $lang['btn_reset'] = 'Aldaketak Desegin'; +$lang['btn_resendpwd'] = 'Pasahitza berria ezarri'; $lang['btn_draft'] = 'Editatu zirriborroa'; $lang['btn_recover'] = 'Berreskuratu zirriborroa'; $lang['btn_draftdel'] = 'Ezabatu zirriborroa'; $lang['btn_revert'] = 'Berrezarri'; $lang['btn_register'] = 'Erregistratu'; +$lang['btn_apply'] = 'Baieztatu'; +$lang['btn_media'] = 'Media Kudeatzailea'; $lang['loggedinas'] = 'Erabiltzailea'; $lang['user'] = 'Erabiltzailea'; $lang['pass'] = 'Pasahitza'; @@ -74,6 +78,7 @@ $lang['profnoempty'] = 'Izen edota e-posta hutsa ez dago onartua.'; $lang['profchanged'] = 'Erabiltzaile profila arrakastaz eguneratua.'; $lang['pwdforget'] = 'Pasahitza ahaztu duzu? Eskuratu berri bat'; $lang['resendna'] = 'Wiki honek ez du pasahitz berbidalketa onartzen.'; +$lang['resendpwd'] = '-entzat pasahitza berria ezarri'; $lang['resendpwdmissing'] = 'Barkatu, eremu guztiak bete behar dituzu.'; $lang['resendpwdnouser'] = 'Barkatu, ez dugu erabiltzaile hori datu-basean aurkitzen'; $lang['resendpwdbadauth'] = 'Barkatu, kautotze kodea ez da baliozkoa. Ziurtatu baieztapen esteka osoa erabili duzula.'; @@ -88,7 +93,7 @@ $lang['txt_filename'] = 'Idatzi wikiname-a (aukerazkoa)'; $lang['txt_overwrt'] = 'Oraingo fitxategiaren gainean idatzi'; $lang['lockedby'] = 'Momentu honetan blokeatzen:'; $lang['lockexpire'] = 'Blokeaketa iraungitzen da:'; -$lang['js']['willexpire'] = 'Zure blokeaketa orri hau aldatzeko minutu batean iraungitzen da.\nGatazkak saihesteko, aurreikusi botoia erabili blokeaketa denboragailua berrabiarazteko.'; +$lang['js']['willexpire'] = 'Zure blokeaketa orri hau aldatzeko minutu batean iraungitzen da.\nGatazkak saihesteko, aurreikusi botoia erabili blokeaketa denboragailua berrabiarazteko.'; $lang['js']['notsavedyet'] = 'Gorde gabeko aldaketak galdu egingo dira. Benetan jarraitu nahi duzu?'; $lang['js']['searchmedia'] = 'Bilatu fitxategiak'; @@ -120,6 +125,15 @@ Esteka kopiatu eta itsatsi dezakezu dena den.'; $lang['js']['linkwiz'] = 'Estekatze Laguntzailea'; $lang['js']['linkto'] = 'Estekatu hona:'; $lang['js']['del_confirm'] = 'Benetan ezabatu aukeratutako fitxategia(k)?'; +$lang['js']['restore_confirm'] = 'Benetan bertsio hau berrezarri?'; +$lang['js']['media_diff'] = 'Diferentziak ikusi:'; +$lang['js']['media_diff_both'] = 'Ondoz ondo'; +$lang['js']['media_select'] = 'Fitxategiak hautatu'; +$lang['js']['media_upload_btn'] = 'Igo'; +$lang['js']['media_done_btn'] = 'Egina'; +$lang['js']['media_drop'] = 'Fitxategiak igotzeko hona bota'; +$lang['js']['media_cancel'] = 'ezabatu'; +$lang['js']['media_overwrt'] = 'Dauden fitxategiak berridatzi'; $lang['rssfailed'] = 'Errorea gertatu da feed hau irakurtzean:'; $lang['nothingfound'] = 'Ez da ezer aurkitu.'; $lang['mediaselect'] = 'Aukeratu Multimedia fitxategia'; @@ -169,11 +183,21 @@ $lang['external_edit'] = 'kanpoko aldaketa'; $lang['summary'] = 'Aldatu laburpena'; $lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> beharrezkoa da eduki hau bistaratzeko.'; $lang['download'] = 'Deskarga Snippet-a'; +$lang['tools'] = 'Tresnak'; +$lang['user_tools'] = 'Erabiltzaile Tresnak'; +$lang['site_tools'] = 'Gune Tresnak'; +$lang['page_tools'] = 'Orri Tresnak'; +$lang['skip_to_content'] = 'edukira sahiestu'; +$lang['sidebar'] = 'Alboko-barra'; $lang['mail_newpage'] = '[DokuWiki] gehitutako orria:'; $lang['mail_changed'] = '[DokuWiki] aldatutako orria:'; $lang['mail_subscribe_list'] = 'izen-espazioan aldatutako orriak:'; $lang['mail_new_user'] = 'erabiltzaile berria:'; $lang['mail_upload'] = 'fitxategia igota:'; +$lang['changes_type'] = '-ren aldaketak ikusi'; +$lang['pages_changes'] = 'Orriak'; +$lang['media_changes'] = 'Media fitxategiak'; +$lang['both_changes'] = 'Bai orriak nahiz media fitxategiak'; $lang['qb_bold'] = 'Letra beltzez'; $lang['qb_italic'] = 'Letra italiarrez'; $lang['qb_underl'] = 'Azpimarratua'; @@ -214,6 +238,9 @@ $lang['img_copyr'] = 'Copyright'; $lang['img_format'] = 'Formatua'; $lang['img_camera'] = 'Kamera'; $lang['img_keywords'] = 'Hitz-gakoak'; +$lang['img_width'] = 'Zabalera'; +$lang['img_height'] = 'Altuera'; +$lang['img_manager'] = 'Media kudeatzailean ikusi'; $lang['subscr_subscribe_success'] = '%s gehitua %s-ren harpidetza zerrendara'; $lang['subscr_subscribe_error'] = 'Errorea %s gehitzen %s-ren harpidetza zerrendara'; $lang['subscr_subscribe_noaddress'] = 'Ez dago helbiderik zure login-arekin lotuta, ezin zara harpidetza zerrendara gehitua izan.'; @@ -232,6 +259,7 @@ $lang['subscr_style_digest'] = 'e-posta laburbildua orri bakoitzeko aldaketent $lang['subscr_style_list'] = 'aldatutako orrien zerrenda azken e-postatik (%.2f egunero)'; $lang['authmodfailed'] = 'Erabiltzaile kautotzearen konfigurazioa okerra da. Mesedez, eman honen berri Wiki administratzaileari'; $lang['authtempfail'] = 'Erabiltzaile kautotzea denboraldi batez ez dago erabilgarri. Egoerak hala jarraitzen badu, mesedez, eman honen berri Wiki administratzaileari'; +$lang['authpwdexpire'] = 'Zure pasahitza %d egun barru iraungiko da, laster aldatu beharko zenuke.'; $lang['i_chooselang'] = 'Hautatu zure hizkuntza'; $lang['i_installer'] = 'DokuWiki instalatzailea'; $lang['i_wikiname'] = 'Wiki Izena'; @@ -263,3 +291,19 @@ $lang['hours'] = 'duela %d ordu'; $lang['minutes'] = 'duela %d minutu'; $lang['seconds'] = 'duela %d segundu'; $lang['wordblock'] = 'Zure aldaketa ez da aldatua izan blokeatutako testua (spam) daukalako.'; +$lang['media_uploadtab'] = 'Igo'; +$lang['media_searchtab'] = 'Bilatu'; +$lang['media_file'] = 'Fitxategia'; +$lang['media_viewtab'] = 'Begiratu'; +$lang['media_edittab'] = 'Editatu'; +$lang['media_historytab'] = 'Historia'; +$lang['media_sort_name'] = 'Izena'; +$lang['media_sort_date'] = 'Data'; +$lang['media_files'] = '%s -n fitxategiak'; +$lang['media_upload'] = 'Igo %s -ra'; +$lang['media_search'] = 'Bilatu %s -n'; +$lang['media_view'] = '%s'; +$lang['media_viewold'] = '%s -n %s'; +$lang['media_edit'] = '%s editatu'; +$lang['media_update'] = 'Bertsio berria igo'; +$lang['media_restore'] = 'Bertsio hau berrezarri'; diff --git a/inc/lang/eu/mailwrap.html b/inc/lang/eu/mailwrap.html new file mode 100644 index 000000000..0cf92c28b --- /dev/null +++ b/inc/lang/eu/mailwrap.html @@ -0,0 +1,13 @@ +<html> +<head> +<title>@TITLE@</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<body> + +@HTMLBODY@ + +<br /><hr /> +<small>Mezu elektroniko hau DokuWiki-k sortua da @DOKUWIKIURL@.</small> +</body> +</html>
\ No newline at end of file diff --git a/inc/lang/eu/resetpwd.txt b/inc/lang/eu/resetpwd.txt new file mode 100644 index 000000000..9bb6e3ae8 --- /dev/null +++ b/inc/lang/eu/resetpwd.txt @@ -0,0 +1,3 @@ + ====== Pasahitza berria ezarri ====== + +Mesedez wiki honetako zure pasahitza berria sartu.
\ No newline at end of file diff --git a/inc/lang/fa/lang.php b/inc/lang/fa/lang.php index 33a89a631..fdcdeb1bc 100644 --- a/inc/lang/fa/lang.php +++ b/inc/lang/fa/lang.php @@ -13,6 +13,7 @@ * @author Omid Mottaghi <omidmr@gmail.com> * @author Mohammad Reza Shoaei <shoaei@gmail.com> * @author Milad DZand <M.DastanZand@gmail.com> + * @author AmirH Hassaneini <mytechmix@gmail.com> */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'rtl'; @@ -198,6 +199,7 @@ $lang['user_tools'] = 'ابزار کاربر'; $lang['site_tools'] = 'ابزار سایت'; $lang['page_tools'] = 'ابزار صفحه'; $lang['skip_to_content'] = 'پرش به محتوا'; +$lang['sidebar'] = 'نوار کناری'; $lang['mail_newpage'] = 'صفحه اضافه شد:'; $lang['mail_changed'] = 'صفحه تغییر داده شد:'; $lang['mail_subscribe_list'] = 'صفحات تغییر داده شده در فضاینام'; diff --git a/inc/lang/fr/mailtext.txt b/inc/lang/fr/mailtext.txt index add3b2779..3c2d53292 100644 --- a/inc/lang/fr/mailtext.txt +++ b/inc/lang/fr/mailtext.txt @@ -7,7 +7,6 @@ Adresse IP : @IPADDRESS@ Nom d'hôte : @HOSTNAME@ Ancienne révision : @OLDPAGE@ Nouvelle révision : @NEWPAGE@ -Différences : @OLDPAGE@&do=diff Résumé : @SUMMARY@ Utilisateur : @USER@ diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php index 866492219..a415f2a2c 100644 --- a/inc/lang/it/lang.php +++ b/inc/lang/it/lang.php @@ -14,6 +14,7 @@ * @author Osman Tekin <osman.tekin93@hotmail.it> * @author Jacopo Corbetta <jacopo.corbetta@gmail.com> * @author Matteo Pasotti <matteo@xquiet.eu> + * @author snarchio@gmail.com */ $lang['encoding'] = 'utf-8'; $lang['direction'] = 'ltr'; @@ -177,6 +178,7 @@ $lang['diff'] = 'differenze con la versione attuale'; $lang['diff2'] = 'differenze tra le versioni selezionate'; $lang['difflink'] = 'Link a questa pagina di confronto'; $lang['diff_type'] = 'Guarda le differenze:'; +$lang['diff_inline'] = 'In linea'; $lang['diff_side'] = 'Fianco a Fianco'; $lang['line'] = 'Linea'; $lang['breadcrumb'] = 'Traccia'; @@ -195,6 +197,7 @@ $lang['user_tools'] = 'Strumenti Utente'; $lang['site_tools'] = 'Strumenti Sito'; $lang['page_tools'] = 'Strumenti Pagina'; $lang['skip_to_content'] = 'salta al contenuto'; +$lang['sidebar'] = 'Barra laterale'; $lang['mail_newpage'] = 'pagina aggiunta:'; $lang['mail_changed'] = 'pagina modificata:'; $lang['mail_subscribe_list'] = 'pagine modificate nella categoria:'; @@ -298,16 +301,21 @@ $lang['hours'] = '%d ore fa'; $lang['minutes'] = '%d minuti fa'; $lang['seconds'] = '%d secondi fa'; $lang['wordblock'] = 'La modifica non è stata salvata perché contiene testo bloccato (spam).'; +$lang['media_uploadtab'] = 'Upload'; $lang['media_searchtab'] = 'Cerca'; +$lang['media_file'] = 'File'; $lang['media_viewtab'] = 'Guarda'; $lang['media_edittab'] = 'Modifica'; $lang['media_historytab'] = 'Storia'; +$lang['media_list_thumbs'] = 'Miniatura'; $lang['media_list_rows'] = 'Righe'; $lang['media_sort_name'] = 'Nome'; $lang['media_sort_date'] = 'Data'; $lang['media_namespaces'] = 'Scegli il namespace'; $lang['media_files'] = 'File in %s'; +$lang['media_upload'] = 'Upload al %s'; $lang['media_search'] = 'Cerca in %s'; +$lang['media_view'] = '%s'; $lang['media_edit'] = 'Modifica %s'; $lang['media_history'] = 'Storia di %s'; $lang['media_perm_read'] = 'Spiacente, non hai abbastanza privilegi per leggere i files.'; diff --git a/inc/lang/kk/lang.php b/inc/lang/kk/lang.php index 3ff5ae455..37b0f462b 100644 --- a/inc/lang/kk/lang.php +++ b/inc/lang/kk/lang.php @@ -38,11 +38,13 @@ $lang['btn_backtomedia'] = 'Медиафайлды таңдауға қай $lang['btn_subscribe'] = 'Жазылуларды басқару'; $lang['btn_profile'] = 'Профильді жаңарту'; $lang['btn_reset'] = 'Түсіру'; +$lang['btn_resendpwd'] = 'Шартты белгінi Өзгерту'; $lang['btn_draft'] = 'Шимайды өңдеу'; $lang['btn_recover'] = 'Шимайды қайтару'; $lang['btn_draftdel'] = 'Шимайды өшіру'; $lang['btn_revert'] = 'Қалпына келтіру'; $lang['btn_register'] = 'Тіркеу'; +$lang['btn_apply'] = 'Қолдану/Енгізу'; $lang['loggedinas'] = 'түпнұсқамен кірген'; $lang['user'] = 'Түпнұсқа'; $lang['pass'] = 'Құпиясөз'; @@ -86,7 +88,7 @@ $lang['txt_filename'] = 'Келесідей еңгізу (қалауы $lang['txt_overwrt'] = 'Бар файлды қайта жазу'; $lang['lockedby'] = 'Осы уақытта тойтарылған'; $lang['lockexpire'] = 'Тойтару келесі уақытта бітеді'; -$lang['js']['willexpire'] = 'Бұл бетті түзеу тойтаруыңыз бір минутта бітеді. Қақтығыс болмау және тойтару таймерді түсіру үшін қарап шығу пернені басыңыз.'; +$lang['js']['willexpire'] = 'Бұл бетті түзеу тойтаруыңыз бір минутта бітеді. Қақтығыс болмау және тойтару таймерді түсіру үшін қарап шығу пернені басыңыз.'; $lang['js']['notsavedyet'] = 'Сақталмаған өзгерістер жоғалатын болады.'; $lang['js']['searchmedia'] = 'Файлдарды іздеу'; $lang['js']['keepopen'] = 'Таңдаған соң терезе жаппаңыз'; @@ -112,3 +114,17 @@ $lang['js']['medialeft'] = 'Сүретті сол жаққа тегіст $lang['js']['mediaright'] = 'Сүретті оң жаққа тегістеу'; $lang['js']['mediacenter'] = 'Сүретті ортаға тегістеу'; $lang['js']['medianoalign'] = 'Тегістеусіз'; +$lang['js']['linkwiz'] = 'Сілтеме көмекшіci'; +$lang['js']['media_diff'] = 'Өзгеліктердi Көрсету'; +$lang['js']['media_select'] = 'Файлды тандау'; +$lang['mediaselect'] = 'Медиа файлдар'; +$lang['mediaroot'] = 'root'; +$lang['yours'] = 'Сендердің болжамыңыз'; +$lang['created'] = 'ЖасалFан'; +$lang['mail_new_user'] = 'Жаңа пайдаланушы'; +$lang['qb_chars'] = 'Арнайы белгiлер'; +$lang['img_backto'] = 'Қайта оралу'; +$lang['img_format'] = 'Формат'; +$lang['img_camera'] = 'Камера'; +$lang['i_chooselang'] = 'Тіл таңдау'; +$lang['i_retry'] = 'Қайталау'; diff --git a/inc/lang/ko/install.html b/inc/lang/ko/install.html index f73b91294..aeeac870f 100644 --- a/inc/lang/ko/install.html +++ b/inc/lang/ko/install.html @@ -6,7 +6,7 @@ 현재 설치 과정 중에는 디렉토리 권한 설정이 불가능합니다. 보통 직접 쉘 명령어를 사용하거나, 호스팅을 사용한다면 FTP나 호스팅 제어판(예를 들어 CPanel)을 사용해서 설정해야 합니다.</p> <p>현재 설치 과정중에 관리자로 로그인 후 DokuWiki의 관리 메뉴(플러그인 설치, 사용자 관리, 위키 문서 접근 권한 관리, 옵션 설정)를 가능하게 <acronym title="접근 제어 목록">ACL</acronym>에 대한 환경 설정을 수행합니다. -이 것은 DokuWiki가 동작하는데 필요한 사항은 아니지만, 어쨌든 더 쉽게 관리자가 관리할 수 있도록 해줍니다.</p> +DokuWiki가 동작하는데 필요한 사항은 아니지만, 어쨌든 더 쉽게 관리자가 관리할 수 있도록 해줍니다.</p> <p>숙련된 사용자나 특별한 설치 과정이 필요한 경우에 다음 링크를 참고하기 바랍니다: <a href="http://dokuwiki.org/ko:install">설치 과정 (한국어)</a> diff --git a/inc/lang/ko/lang.php b/inc/lang/ko/lang.php index 64507fa81..89d045503 100644 --- a/inc/lang/ko/lang.php +++ b/inc/lang/ko/lang.php @@ -7,7 +7,7 @@ * @author jk Lee * @author dongnak@gmail.com * @author Song Younghwan <purluno@gmail.com> - * @author Seung-Chul Yoo <dryoo@live.com> + * @author Seung-Chul Yoo <dryoo@live.com> * @author erial2@gmail.com * @author Myeongjin <aranet100@gmail.com> */ @@ -37,13 +37,13 @@ $lang['btn_secedit'] = '편집'; $lang['btn_login'] = '로그인'; $lang['btn_logout'] = '로그아웃'; $lang['btn_admin'] = '관리'; -$lang['btn_update'] = '변경'; +$lang['btn_update'] = '바꾸기'; $lang['btn_delete'] = '삭제'; $lang['btn_back'] = '뒤로'; $lang['btn_backlink'] = '가리키는 링크'; $lang['btn_backtomedia'] = '미디어 파일 선택으로 돌아가기'; $lang['btn_subscribe'] = '구독 관리'; -$lang['btn_profile'] = '개인 정보 변경'; +$lang['btn_profile'] = '개인 정보 바꾸기'; $lang['btn_reset'] = '초기화'; $lang['btn_resendpwd'] = '새 비밀번호 설정'; $lang['btn_draft'] = '문서 초안 편집'; @@ -66,7 +66,7 @@ $lang['profile'] = '개인 정보'; $lang['badlogin'] = '잘못된 사용자 이름이거나 비밀번호입니다.'; $lang['minoredit'] = '사소한 바뀜'; $lang['draftdate'] = '문서 초안 자동 저장 시간'; -$lang['nosecedit'] = '문서가 수정되어 세션 정보의 유효 시간이 지나 문서 전부를 다시 읽습니다.'; +$lang['nosecedit'] = '한동안 문서가 바뀌어 세션 정보의 유효 시간이 지나 문서 전부를 다시 읽습니다.'; $lang['regmissing'] = '모든 항목을 입력해야 합니다.'; $lang['reguexists'] = '같은 이름을 사용하는 사용자가 있습니다.'; $lang['regsuccess'] = '사용자를 만들었으며 비밀번호는 이메일로 보냈습니다.'; @@ -219,7 +219,7 @@ $lang['qb_hplus'] = '상위 문단 제목'; $lang['qb_hminus'] = '하위 문단 제목'; $lang['qb_hequal'] = '동급 문단 제목'; $lang['qb_link'] = '내부 링크'; -$lang['qb_extlink'] = '외부 링크'; +$lang['qb_extlink'] = '바깥 링크'; $lang['qb_hr'] = '가로줄'; $lang['qb_ol'] = '순서 있는 목록'; $lang['qb_ul'] = '순서 없는 목록'; @@ -296,7 +296,7 @@ $lang['days'] = '%d일 전'; $lang['hours'] = '%d시간 전'; $lang['minutes'] = '%d분 전'; $lang['seconds'] = '%d초 전'; -$lang['wordblock'] = '스팸 문구를 포함하고 있어서 저장되지 않았습니다.'; +$lang['wordblock'] = '스팸 문구를 포함하고 있어서 저장하지 않았습니다.'; $lang['media_uploadtab'] = '올리기'; $lang['media_searchtab'] = '찾기'; $lang['media_file'] = '파일'; @@ -313,8 +313,8 @@ $lang['media_upload'] = '%s에 올리기'; $lang['media_search'] = '%s 찾기'; $lang['media_view'] = '%s'; $lang['media_viewold'] = '%s의 %s'; -$lang['media_edit'] = '%s 수정'; -$lang['media_history'] = '%s 변경 내력'; +$lang['media_edit'] = '%s 편집'; +$lang['media_history'] = '%s 바뀜 내역'; $lang['media_meta_edited'] = '메타데이터가 수정됨'; $lang['media_perm_read'] = '이 파일을 읽을 권한이 없습니다.'; $lang['media_perm_upload'] = '파일을 올릴 권한이 없습니다.'; diff --git a/inc/lang/ko/mailtext.txt b/inc/lang/ko/mailtext.txt index 219fe6e0b..01bada9ba 100644 --- a/inc/lang/ko/mailtext.txt +++ b/inc/lang/ko/mailtext.txt @@ -1,4 +1,4 @@ -DokuWiki 문서가 추가 또는 변경되었습니다. 자세한 정보는 다음과 같습니다: +DokuWiki 문서가 추가 또는 바뀌었습니다. 자세한 정보는 다음과 같습니다: 날짜 : @DATE@ 브라우저 : @BROWSER@ diff --git a/inc/lang/ko/preview.txt b/inc/lang/ko/preview.txt index 6563874ee..1b7710e2f 100644 --- a/inc/lang/ko/preview.txt +++ b/inc/lang/ko/preview.txt @@ -1,3 +1,3 @@ ====== 미리 보기 ====== -이것은 입력한 내용이 어떻게 보일지 미리 보여줍니다. 아직 **저장되지 않았다**는 점을 기억해두십시오!
\ No newline at end of file +입력한 내용이 어떻게 보일지 미리 보여줍니다. 아직 **저장되지 않았다**는 점을 기억해두십시오!
\ No newline at end of file diff --git a/inc/lang/ko/showrev.txt b/inc/lang/ko/showrev.txt index 084d82737..f6930044b 100644 --- a/inc/lang/ko/showrev.txt +++ b/inc/lang/ko/showrev.txt @@ -1,2 +1,2 @@ -**이것은 문서의 이전 버전입니다!** +**문서의 이전 버전입니다!** ---- diff --git a/inc/lang/ko/updateprofile.txt b/inc/lang/ko/updateprofile.txt index ebf19d8ab..379981cb3 100644 --- a/inc/lang/ko/updateprofile.txt +++ b/inc/lang/ko/updateprofile.txt @@ -1,3 +1,3 @@ -====== 개인 정보 수정 ====== +====== 개인 정보 바꾸기 ====== 바꾸고 싶은 항목을 입력하기 바랍니다. 사용자 이름은 바꿀 수 없습니다.
\ No newline at end of file diff --git a/inc/lang/lv/lang.php b/inc/lang/lv/lang.php index cc17b17fe..19a7b7cce 100644 --- a/inc/lang/lv/lang.php +++ b/inc/lang/lv/lang.php @@ -39,6 +39,7 @@ $lang['btn_backtomedia'] = 'Atpakaļ uz mēdiju failu izvēli'; $lang['btn_subscribe'] = 'Abonēt izmaiņu paziņojumus'; $lang['btn_profile'] = 'Labot savu profilu'; $lang['btn_reset'] = 'Atsaukt izmaiņas'; +$lang['btn_resendpwd'] = 'Uzstādīt jaunu paroli'; $lang['btn_draft'] = 'Labot melnrakstu'; $lang['btn_recover'] = 'Atjaunot melnrakstu'; $lang['btn_draftdel'] = 'Dzēst melnrakstu'; @@ -75,6 +76,7 @@ $lang['profnoempty'] = 'Bez vārda vai e-pasta adreses nevar.'; $lang['profchanged'] = 'Profils veiksmīgi izlabots.'; $lang['pwdforget'] = 'Aizmirsi paroli? Saņem jaunu'; $lang['resendna'] = 'Paroļu izsūtīšanu nepiedāvāju.'; +$lang['resendpwd'] = 'Uzstādīt jaunu paroli lietotājam'; $lang['resendpwdmissing'] = 'Atvaino, jāizpilda visas ailes.'; $lang['resendpwdnouser'] = 'Atvaino, tāda lietotāja nav.'; $lang['resendpwdbadauth'] = 'Atvaino, šis autorizācijas kods nav derīgs. Pārliecinies, ka lietoji pilnu apstiprināšanas adresi.'; @@ -87,6 +89,7 @@ $lang['searchmedia_in'] = 'Meklēt iekš %s'; $lang['txt_upload'] = 'Norādi augšupielādējamo failu'; $lang['txt_filename'] = 'Ievadi vikivārdu (nav obligāts)'; $lang['txt_overwrt'] = 'Aizstāt esošo failu'; +$lang['maxuploadsize'] = 'Augšuplādējamā faila ierobežojums: %s.'; $lang['lockedby'] = 'Patlaban bloķējis '; $lang['lockexpire'] = 'Bloķējums beigsies '; $lang['js']['willexpire'] = 'Tavs bloķējums uz šo lapu pēc minūtes beigsies.\nLai izvairītos no konflikta, nospied Iepriekšapskata pogu\n un bloķējuma laiku sāks skaitīt no jauna.'; @@ -129,6 +132,7 @@ $lang['js']['media_select'] = 'Norādīt failus...'; $lang['js']['media_upload_btn'] = 'Augšuplādēt'; $lang['js']['media_done_btn'] = 'Gatavs'; $lang['js']['media_drop'] = 'Nomet te augšuplādējamos failus'; +$lang['js']['media_cancel'] = 'atlikt'; $lang['js']['media_overwrt'] = 'Rakstīt pāri esošajiem failiem'; $lang['rssfailed'] = 'Kļūda saņemot saturu no '; $lang['nothingfound'] = 'Nekas nav atrasts.'; @@ -179,6 +183,12 @@ $lang['external_edit'] = 'ārpussistēmas labojums'; $lang['summary'] = 'Anotācija'; $lang['noflash'] = 'Lai attēlotu lapas saturu, vajag <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.'; $lang['download'] = 'Lejuplādēt «kodiņu»((snippet))'; +$lang['tools'] = 'Rīki'; +$lang['user_tools'] = 'Lietotāja rīki'; +$lang['site_tools'] = 'Vietnes rīki'; +$lang['page_tools'] = 'Lapas rīki'; +$lang['skip_to_content'] = 'uz rakstu'; +$lang['sidebar'] = 'Izvēlne'; $lang['mail_newpage'] = 'lapa pievienota:'; $lang['mail_changed'] = 'lapa mainīta:'; $lang['mail_subscribe_list'] = 'Nodaļā mainītās lapas:'; @@ -249,6 +259,7 @@ $lang['subscr_style_digest'] = 'kopsavilkumu par katru lapu (reizi %.2f dienā $lang['subscr_style_list'] = 'kopš pēdējās vēstules notikušo labojumu sarakstu (reizi %.2f dienās)'; $lang['authmodfailed'] = 'Aplami konfigurēta lietotāju autentifikācija. Lūdzu ziņo Wiki administratoram.'; $lang['authtempfail'] = 'Lietotāju autentifikācija pašlaik nedarbojas. Ja tas turpinās ilgstoši, lūduz ziņo Wiki administratoram.'; +$lang['authpwdexpire'] = 'Tavai parolei pēc %d dienām biegsies termiņš, tā drīzumā jānomaina.'; $lang['i_chooselang'] = 'Izvēlies valodu'; $lang['i_installer'] = 'DokuWiki instalētājs'; $lang['i_wikiname'] = 'Wiki vārds'; diff --git a/inc/lang/lv/mailwrap.html b/inc/lang/lv/mailwrap.html new file mode 100644 index 000000000..34b723901 --- /dev/null +++ b/inc/lang/lv/mailwrap.html @@ -0,0 +1,13 @@ +<html> +<head> +<title>@TITLE@</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<body> + +@HTMLBODY@ + +<br /><hr /> +<small>Šo vēstuli nosūtījusi programma DokuWiki no vietnes @DOKUWIKIURL@.</small> +</body> +</html>
\ No newline at end of file diff --git a/inc/lang/lv/resetpwd.txt b/inc/lang/lv/resetpwd.txt new file mode 100644 index 000000000..757f34cff --- /dev/null +++ b/inc/lang/lv/resetpwd.txt @@ -0,0 +1,3 @@ +====== Uzstādīt jaunu paroli ====== + +Lūdzu izvēlies savam kontam jaunu paroli.
\ No newline at end of file diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php index d6dc8f96b..b3d56bae7 100644 --- a/inc/lang/pt-br/lang.php +++ b/inc/lang/pt-br/lang.php @@ -54,11 +54,14 @@ $lang['btn_backtomedia'] = 'Voltar à seleção do arquivo de mídia'; $lang['btn_subscribe'] = 'Monitorar alterações'; $lang['btn_profile'] = 'Atualizar o perfil'; $lang['btn_reset'] = 'Limpar'; +$lang['btn_resendpwd'] = 'Definir a nova senha'; $lang['btn_draft'] = 'Editar o rascunho'; $lang['btn_recover'] = 'Recuperar o rascunho'; $lang['btn_draftdel'] = 'Excluir o rascunho'; $lang['btn_revert'] = 'Restaurar'; $lang['btn_register'] = 'Cadastre-se'; +$lang['btn_apply'] = 'Aplicar'; +$lang['btn_media'] = 'Gerenciador de mídias'; $lang['loggedinas'] = 'Identificado(a) como'; $lang['user'] = 'Nome de usuário'; $lang['pass'] = 'Senha'; @@ -88,6 +91,7 @@ $lang['profnoempty'] = 'Não são permitidos nomes ou endereços de e- $lang['profchanged'] = 'O perfil do usuário foi atualizado com sucesso.'; $lang['pwdforget'] = 'Esqueceu sua senha? Solicite outra'; $lang['resendna'] = 'Esse wiki não tem suporte para o reenvio de senhas.'; +$lang['resendpwd'] = 'Definir a nova senha para'; $lang['resendpwdmissing'] = 'Desculpe, você deve preencher todos os campos.'; $lang['resendpwdnouser'] = 'Desculpe, não foi possível encontrar esse usuário no nosso banco de dados.'; $lang['resendpwdbadauth'] = 'Desculpe, esse código de autorização é inválido. Certifique-se de que você usou o link de confirmação inteiro.'; @@ -100,6 +104,7 @@ $lang['searchmedia_in'] = 'Buscar em %s'; $lang['txt_upload'] = 'Selecione o arquivo a ser enviado'; $lang['txt_filename'] = 'Enviar como (opcional)'; $lang['txt_overwrt'] = 'Substituir o arquivo existente'; +$lang['maxuploadsize'] = 'Tamanho máximo de %s por arquivo.'; $lang['lockedby'] = 'Atualmente bloqueada por'; $lang['lockexpire'] = 'O bloqueio expira em'; $lang['js']['willexpire'] = 'O seu bloqueio de edição deste página irá expirar em um minuto.\nPara evitar conflitos de edição, clique no botão de visualização para reiniciar o temporizador de bloqueio.'; @@ -134,6 +139,17 @@ Entretanto, você ainda pode copiar e colar o atalho.'; $lang['js']['linkwiz'] = 'Link Wizard'; $lang['js']['linkto'] = 'Link para:'; $lang['js']['del_confirm'] = 'Deseja realmente excluir o(s) item(ns) selecionado(s)?'; +$lang['js']['restore_confirm'] = 'Deseja realmente restaurar essa versão?'; +$lang['js']['media_diff'] = 'Ver as diferenças:'; +$lang['js']['media_diff_both'] = 'Lado a lado'; +$lang['js']['media_diff_opacity'] = 'Sobreposição'; +$lang['js']['media_diff_portions'] = 'Deslizamento'; +$lang['js']['media_select'] = 'Selecione os arquivos...'; +$lang['js']['media_upload_btn'] = 'Enviar'; +$lang['js']['media_done_btn'] = 'Concluído'; +$lang['js']['media_drop'] = 'Arraste os arquivos até aqui para enviar'; +$lang['js']['media_cancel'] = 'remover'; +$lang['js']['media_overwrt'] = 'Sobrescrever arquivos existentes'; $lang['rssfailed'] = 'Ocorreu um erro durante a atualização dessa fonte: '; $lang['nothingfound'] = 'Não foi encontrado nada.'; $lang['mediaselect'] = 'Arquivos de mídia'; @@ -178,16 +194,26 @@ $lang['lastmod'] = 'Última modificação'; $lang['by'] = 'por'; $lang['deleted'] = 'removida'; $lang['created'] = 'criada'; -$lang['restored'] = 'revisão anterior restaurada'; +$lang['restored'] = 'a revisão anterior foi restaurada (%s)'; $lang['external_edit'] = 'edição externa'; $lang['summary'] = 'Resumo da edição'; $lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">plug-in Adobe Flash</a> é necessário para exibir este conteúdo.'; -$lang['download'] = 'Download Snippet'; +$lang['download'] = 'Baixar o snippet'; +$lang['tools'] = 'Ferramentas'; +$lang['user_tools'] = 'Ferramentas do usuário'; +$lang['site_tools'] = 'Ferramentas do site'; +$lang['page_tools'] = 'Ferramentas da página'; +$lang['skip_to_content'] = 'ir para o conteúdo'; +$lang['sidebar'] = 'Barra lateral'; $lang['mail_newpage'] = 'página adicionada:'; $lang['mail_changed'] = 'página modificada:'; $lang['mail_subscribe_list'] = 'páginas alteradas no espaço de nomes:'; $lang['mail_new_user'] = 'novo usuário:'; $lang['mail_upload'] = 'arquivo enviado:'; +$lang['changes_type'] = 'Ver as mudanças de'; +$lang['pages_changes'] = 'Páginas'; +$lang['media_changes'] = 'Arquivos de mídia'; +$lang['both_changes'] = 'Páginas e arquivos de mídia'; $lang['qb_bold'] = 'Texto em negrito'; $lang['qb_italic'] = 'Texto em itálico'; $lang['qb_underl'] = 'Texto sublinhado'; @@ -212,7 +238,7 @@ $lang['qb_media'] = 'Adicionar imagens e/ou outros arquivos'; $lang['qb_sig'] = 'Inserir assinatura'; $lang['qb_smileys'] = 'Carinhas'; $lang['qb_chars'] = 'Caracteres especiais'; -$lang['upperns'] = 'Pular para namespace acima'; +$lang['upperns'] = 'Pular para espaço de nomes acima'; $lang['admin_register'] = 'Adicionar novo usuário'; $lang['metaedit'] = 'Editar metadados'; $lang['metasaveerr'] = 'Não foi possível escrever os metadados'; @@ -228,6 +254,9 @@ $lang['img_copyr'] = 'Direitos autorais'; $lang['img_format'] = 'Formato'; $lang['img_camera'] = 'Câmera'; $lang['img_keywords'] = 'Palavras-chave'; +$lang['img_width'] = 'Largura'; +$lang['img_height'] = 'Altura'; +$lang['img_manager'] = 'Ver no gerenciador de mídias'; $lang['subscr_subscribe_success'] = 'Adicionado %s à lista de monitoramentos de %s'; $lang['subscr_subscribe_error'] = 'Ocorreu um erro na adição de %s à lista de monitoramentos de %s'; $lang['subscr_subscribe_noaddress'] = 'Como não há nenhum endereço associado ao seu usuário, você não pode ser adicionado à lista de monitoramento'; @@ -246,6 +275,7 @@ $lang['subscr_style_digest'] = 'um agrupamento de e-mails com as mudanças par $lang['subscr_style_list'] = 'uma lista de páginas modificadas desde o último e-mail (a cada %.2f dias)'; $lang['authmodfailed'] = 'A configuração da autenticação de usuário está com problemas. Por favor, informe ao administrador do wiki.'; $lang['authtempfail'] = 'A autenticação de usuários está temporariamente desabilitada. Se essa situação persistir, por favor, informe ao administrador do Wiki.'; +$lang['authpwdexpire'] = 'Sua senha vai expirar em %d dias. Você deve mudá-la assim que for possível.'; $lang['i_chooselang'] = 'Selecione o seu idioma'; $lang['i_installer'] = 'Instalador do DokuWiki'; $lang['i_wikiname'] = 'Nome do Wiki'; @@ -278,3 +308,26 @@ $lang['hours'] = '%d horas atrás'; $lang['minutes'] = '%d minutos atrás'; $lang['seconds'] = '%d segundos atrás'; $lang['wordblock'] = 'Suas mudanças não foram salvas pois contem texto bloqueados (spam)'; +$lang['media_uploadtab'] = 'Enviar'; +$lang['media_searchtab'] = 'Pesquisar'; +$lang['media_file'] = 'Arquivo'; +$lang['media_viewtab'] = 'Ver'; +$lang['media_edittab'] = 'Editar'; +$lang['media_historytab'] = 'Histórico'; +$lang['media_list_thumbs'] = 'Miniaturas'; +$lang['media_list_rows'] = 'Linhas'; +$lang['media_sort_name'] = 'Nome'; +$lang['media_sort_date'] = 'Data'; +$lang['media_namespaces'] = 'Selecione o espaço de nomes'; +$lang['media_files'] = 'Arquivos em %s'; +$lang['media_upload'] = 'Enviar para %s'; +$lang['media_search'] = 'Pesquisar em %s'; +$lang['media_view'] = '%s'; +$lang['media_viewold'] = '%s em %s'; +$lang['media_edit'] = 'Editar %s'; +$lang['media_history'] = 'Histórico de %s'; +$lang['media_meta_edited'] = 'o metadado foi editado'; +$lang['media_perm_read'] = 'Desculpe, mas você não tem privilégios suficientes para ler arquivos.'; +$lang['media_perm_upload'] = 'Desculpe, mas você não tem privilégios suficientes para enviar arquivos.'; +$lang['media_update'] = 'Enviar uma nova versão'; +$lang['media_restore'] = 'Restaurar esta versão'; diff --git a/inc/lang/pt-br/mailwrap.html b/inc/lang/pt-br/mailwrap.html new file mode 100644 index 000000000..80bea7a22 --- /dev/null +++ b/inc/lang/pt-br/mailwrap.html @@ -0,0 +1,13 @@ +<html> +<head> +<title>@TITLE@</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<body> + +@HTMLBODY@ + +<br /><hr /> +<small>Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@.</small> +</body> +</html>
\ No newline at end of file diff --git a/inc/lang/pt-br/resetpwd.txt b/inc/lang/pt-br/resetpwd.txt new file mode 100644 index 000000000..febb1d6a0 --- /dev/null +++ b/inc/lang/pt-br/resetpwd.txt @@ -0,0 +1,3 @@ +====== Definir uma nova senha ====== + +Por favor, digite uma nova senha para sua conta neste wiki.
\ No newline at end of file diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php index 800b1a1b2..5f428b36a 100644 --- a/inc/lang/ru/lang.php +++ b/inc/lang/ru/lang.php @@ -203,6 +203,7 @@ $lang['user_tools'] = 'Инструменты пользовател $lang['site_tools'] = 'Инструменты сайта'; $lang['page_tools'] = 'Инструменты страницы'; $lang['skip_to_content'] = 'Перейти к содержанию'; +$lang['sidebar'] = 'Боковая колонна'; $lang['mail_newpage'] = 'страница добавлена:'; $lang['mail_changed'] = 'страница изменена:'; $lang['mail_subscribe_list'] = 'изменились страницы в пространстве имён:'; diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php index 25b2f2a2b..b8a947dc3 100644 --- a/inc/lang/sk/lang.php +++ b/inc/lang/sk/lang.php @@ -42,6 +42,7 @@ $lang['btn_backtomedia'] = 'Späť na výber súboru'; $lang['btn_subscribe'] = 'Sledovať zmeny'; $lang['btn_profile'] = 'Aktualizovať profil'; $lang['btn_reset'] = 'Zrušiť'; +$lang['btn_resendpwd'] = 'Nastaviť nové heslo'; $lang['btn_draft'] = 'Upraviť koncept'; $lang['btn_recover'] = 'Obnoviť koncept'; $lang['btn_draftdel'] = 'Zmazať koncept'; @@ -78,6 +79,7 @@ $lang['profnoempty'] = 'Prázdne meno alebo mailová adresa nie sú po $lang['profchanged'] = 'Užívateľský účet úspešne zmenený.'; $lang['pwdforget'] = 'Zabudli ste heslo? Získajte nové!'; $lang['resendna'] = 'Táto wiki nepodporuje opätovné zasielanie hesla.'; +$lang['resendpwd'] = 'Nastaviť nové heslo pre'; $lang['resendpwdmissing'] = 'Prepáčte, musíte vyplniť všetky polia.'; $lang['resendpwdnouser'] = 'Prepáčte, nemôžeme nájsť zadaného užívateľa v databáze.'; $lang['resendpwdbadauth'] = 'Prepáčte, tento autorizačný kód nie je platný. Uistite sa, či ste použili celý autorizačný odkaz.'; @@ -90,6 +92,7 @@ $lang['searchmedia_in'] = 'Hľadať v %s'; $lang['txt_upload'] = 'Vyberte súbor ako prílohu'; $lang['txt_filename'] = 'Uložiť ako (voliteľné)'; $lang['txt_overwrt'] = 'Prepísať existujúci súbor'; +$lang['maxuploadsize'] = 'Obmedzenie max. %s na súbor.'; $lang['lockedby'] = 'Práve zamknuté:'; $lang['lockexpire'] = 'Zámok stratí platnosť:'; $lang['js']['willexpire'] = 'Váš zámok pre editáciu za chvíľu stratí platnosť.\nAby ste predišli konfliktom, stlačte tlačítko Náhľad a zámok sa predĺži.'; @@ -179,11 +182,17 @@ $lang['lastmod'] = 'Posledná úprava'; $lang['by'] = 'od'; $lang['deleted'] = 'odstránené'; $lang['created'] = 'vytvorené'; -$lang['restored'] = 'stará verzia bola obnovená'; +$lang['restored'] = 'stará verzia bola obnovená (%s)'; $lang['external_edit'] = 'externá úprava'; $lang['summary'] = 'Komentár k úpravám'; $lang['noflash'] = 'Pre zobrazenie tohto obsahu potrebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.'; $lang['download'] = 'Stiahnuť'; +$lang['tools'] = 'Nástroje'; +$lang['user_tools'] = 'Nástroje používateľa'; +$lang['site_tools'] = 'Nástoje správy stránok'; +$lang['page_tools'] = 'Nástoje stránky'; +$lang['skip_to_content'] = 'skok na obsah'; +$lang['sidebar'] = 'Bočný panel'; $lang['mail_newpage'] = 'stránka pridaná:'; $lang['mail_changed'] = 'stránka zmenená:'; $lang['mail_subscribe_list'] = 'stránky zmenené v mennom priestore:'; @@ -254,6 +263,7 @@ $lang['subscr_style_digest'] = 'email so zhrnutím zmien pre každú stránku $lang['subscr_style_list'] = 'zoznam zmenených stránok od posledného emailu (perióda %.2f dňa)'; $lang['authmodfailed'] = 'Užívateľská autentifikácia nie je možná. Prosím informujte správcu systému.'; $lang['authtempfail'] = 'Užívateľská autentifikácia je dočasne nedostupná. Ak táto situácia pretrváva, prosím informujte správcu systému.'; +$lang['authpwdexpire'] = 'Platnosť hesla vyprší za %d dní, mali by ste ho zmeniť čo najskôr.'; $lang['i_chooselang'] = 'Zvoľte váš jazyk'; $lang['i_installer'] = 'DokuWiki inštalátor'; $lang['i_wikiname'] = 'Názov Wiki'; diff --git a/inc/lang/sk/mailwrap.html b/inc/lang/sk/mailwrap.html new file mode 100644 index 000000000..2e42515fb --- /dev/null +++ b/inc/lang/sk/mailwrap.html @@ -0,0 +1,13 @@ +<html> +<head> +<title>@TITLE@</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<body> + +@HTMLBODY@ + +<br /><hr /> +<small>Táto správa bola zaslaná DokuWiki @DOKUWIKIURL@.</small> +</body> +</html>
\ No newline at end of file diff --git a/inc/lang/sk/resetpwd.txt b/inc/lang/sk/resetpwd.txt new file mode 100644 index 000000000..a4df4a545 --- /dev/null +++ b/inc/lang/sk/resetpwd.txt @@ -0,0 +1,3 @@ +====== Nastavenie nového hesla ====== + +Prosím zadajte nové heslo vášho účtu v tejto wiki. diff --git a/inc/lang/zh/lang.php b/inc/lang/zh/lang.php index fc7b0cab3..b21a74ed5 100644 --- a/inc/lang/zh/lang.php +++ b/inc/lang/zh/lang.php @@ -190,7 +190,7 @@ $lang['lastmod'] = '最后更改'; $lang['by'] = '由'; $lang['deleted'] = '移除'; $lang['created'] = '创建'; -$lang['restored'] = '已恢复为旧版'; +$lang['restored'] = '已恢复为旧版 (%s)'; $lang['external_edit'] = '外部编辑'; $lang['summary'] = '编辑摘要'; $lang['noflash'] = '需要 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash 插件</a> 来播放本内容。 '; @@ -200,6 +200,7 @@ $lang['user_tools'] = '用户工具'; $lang['site_tools'] = '站点工具'; $lang['page_tools'] = '页面工具'; $lang['skip_to_content'] = '跳至内容'; +$lang['sidebar'] = '侧边栏'; $lang['mail_newpage'] = '添加页面:'; $lang['mail_changed'] = '更改页面:'; $lang['mail_subscribe_list'] = '命名空间中改变的页面:'; diff --git a/inc/plugincontroller.class.php b/inc/plugincontroller.class.php index 968d47a5c..0b4041a77 100644 --- a/inc/plugincontroller.class.php +++ b/inc/plugincontroller.class.php @@ -97,6 +97,9 @@ class Doku_Plugin_Controller { $inf = confToHash(DOKU_PLUGIN."$dir/plugin.info.txt"); if($inf['base'] && $inf['base'] != $plugin){ msg(sprintf("Plugin installed incorrectly. Rename plugin directory '%s' to '%s'.", hsc($plugin), hsc($inf['base'])), -1); + } elseif (preg_match('/^'.DOKU_PLUGIN_NAME_REGEX.'$/', $plugin) !== 1) { + msg(sprintf("Plugin name '%s' is not a valid plugin name, only the characters a-z and 0-9 are allowed. ". + 'Maybe the plugin has been installed in the wrong directory?', hsc($plugin)), -1); } return null; } @@ -156,10 +159,6 @@ class Doku_Plugin_Controller { } else { $all_plugins[$plugin] = 1; } - if ($all_plugins[$plugin] == 1 && preg_match('/^'.DOKU_PLUGIN_NAME_REGEX.'$/', $plugin) !== 1) { - msg(sprintf("Plugin name '%s' is not a valid plugin name, only the characters a-z and 0-9 are allowed. ". - 'Maybe the plugin has been installed in the wrong directory?', hsc($plugin)), -1); - } } $this->tmp_plugins = $all_plugins; if (!file_exists($this->last_local_config_file)) { diff --git a/inc/search.php b/inc/search.php index a02b86b34..1cecfd5ec 100644 --- a/inc/search.php +++ b/inc/search.php @@ -119,7 +119,7 @@ function search_index(&$data,$base,$file,$type,$lvl,$opts){ 'listfiles' => !$opts['nofiles'], 'sneakyacl' => $conf['sneaky_index'], // Hacky, should rather use recmatch - 'depth' => preg_match('#^'.$file.'(/|$)#','/'.$opts['ns']) ? 0 : -1 + 'depth' => preg_match('#^'.preg_quote($file, '#').'(/|$)#','/'.$opts['ns']) ? 0 : -1 ); return search_universal($data, $base, $file, $type, $lvl, $opts); diff --git a/inc/subscription.php b/inc/subscription.php index 029d93e66..6b201c266 100644 --- a/inc/subscription.php +++ b/inc/subscription.php @@ -396,12 +396,14 @@ function subscription_send($subscriber_mail, $replaces, $subject, $id, $template $text = rawLocale($template); $trep = array_merge($replaces, array('PAGE' => $id)); + $hrep = $trep; + $hrep['DIFF'] = nl2br(htmlspecialchars($hrep['DIFF'])); $subject = $lang['mail_' . $subject] . ' ' . $id; $mail = new Mailer(); $mail->bcc($subscriber_mail); $mail->subject($subject); - $mail->setBody($text,$trep); + $mail->setBody($text,$trep,$hrep); $mail->from($conf['mailfromnobody']); $mail->setHeader( 'List-Unsubscribe', diff --git a/inc/template.php b/inc/template.php index 2dc58b36d..0d96be214 100644 --- a/inc/template.php +++ b/inc/template.php @@ -1465,18 +1465,19 @@ function tpl_license($img = 'badge', $imgonly = false, $return = false, $wrap = } /** - * Includes the rendered XHTML of a given page + * Includes the rendered HTML of a given page * * This function is useful to populate sidebars or similar features in a * template */ -function tpl_include_page($pageid, $print = true) { +function tpl_include_page($pageid, $print = true, $propagate = false) { global $ID; global $TOC; - $oldid = $ID; + + if ($propagate) $pageid = page_findnearest($pageid); + $oldtoc = $TOC; $html = p_wiki_xhtml($pageid, '', false); - $ID = $oldid; $TOC = $oldtoc; if(!$print) return $html; @@ -1485,17 +1486,6 @@ function tpl_include_page($pageid, $print = true) { } /** - * Include the sidebar, will check current namespaces first - */ -function tpl_sidebar($print = true) { - global $conf; - - $sidebar = page_findnearest($conf['sidebar']); - if($sidebar) return tpl_include_page($sidebar, $print); - return ''; -} - -/** * Display the subscribe form * * @author Adrian Lang <lang@cosmocode.de> @@ -1693,7 +1683,7 @@ function tpl_favicon($types = array('favicon')) { $return .= '<link rel="shortcut icon" href="'.tpl_getMediaFile($look).'" />'.NL; break; case 'mobile': - $look = array(':wiki:apple-touch-icon.png', ':apple-touch-icon.png', 'images/apple-touch-icon.ico'); + $look = array(':wiki:apple-touch-icon.png', ':apple-touch-icon.png', 'images/apple-touch-icon.png'); $return .= '<link rel="apple-touch-icon" href="'.tpl_getMediaFile($look).'" />'.NL; break; case 'generic': |