Merge branch 'master' into moviepreviewfallback

Conflicts:
	lib/private/preview/movies.php
This commit is contained in:
Thomas Müller 2013-11-14 20:57:29 +01:00
commit 617dc0e468
535 changed files with 8674 additions and 4152 deletions

View file

@ -10,7 +10,7 @@ OCP\JSON::checkLoggedIn();
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$dir = \OC\Files\Filesystem::normalizePath($dir);
if (!\OC\Files\Filesystem::is_dir($dir . '/')) {
header("HTTP/1.0 404 Not Found");
exit();

View file

@ -36,6 +36,7 @@ OCP\Util::addscript('files', 'filelist');
OCP\App::setActiveNavigationEntry('files_index');
// Load the files
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
$dir = \OC\Files\Filesystem::normalizePath($dir);
// Redirect if directory does not exist
if (!\OC\Files\Filesystem::is_dir($dir . '/')) {
header('Location: ' . OCP\Util::getScriptName() . '');
@ -128,7 +129,7 @@ if ($needUpgrade) {
$tmpl = new OCP\Template('files', 'index', 'user');
$tmpl->assign('fileList', $list->fetchPage());
$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage());
$tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($dir));
$tmpl->assign('dir', $dir);
$tmpl->assign('isCreatable', $isCreatable);
$tmpl->assign('permissions', $permissions);
$tmpl->assign('files', $files);

View file

@ -303,16 +303,15 @@ $(document).ready(function() {
OC.Upload.log('fail', e, data);
if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
if (data.textStatus === 'abort') {
$('#notification').text(t('files', 'Upload cancelled.'));
OC.Notification.show(t('files', 'Upload cancelled.'));
} else {
// HTTP connection problem
$('#notification').text(data.errorThrown);
OC.Notification.show(data.errorThrown);
}
$('#notification').fadeIn();
//hide notification after 5 sec
//hide notification after 10 sec
setTimeout(function() {
$('#notification').fadeOut();
}, 5000);
OC.Notification.hide();
}, 10000);
}
OC.Upload.deleteUpload(data);
},

View file

@ -170,6 +170,12 @@ var FileList={
return;
}
FileList.setCurrentDir(targetDir, changeUrl);
$('#fileList').trigger(
jQuery.Event('changeDirectory', {
dir: targetDir,
previousDir: currentDir
}
));
FileList.reload();
},
linkTo: function(dir) {
@ -654,19 +660,19 @@ var FileList={
$('.summary .filesize').html(humanFileSize(fileSummary.totalSize));
// Show only what's necessary (may be hidden)
if ($dirInfo.html().charAt(0) === "0") {
if (fileSummary.totalDirs === 0) {
$dirInfo.hide();
$connector.hide();
} else {
$dirInfo.show();
}
if ($fileInfo.html().charAt(0) === "0") {
if (fileSummary.totalFiles === 0) {
$fileInfo.hide();
$connector.hide();
} else {
$fileInfo.show();
}
if ($dirInfo.html().charAt(0) !== "0" && $fileInfo.html().charAt(0) !== "0") {
if (fileSummary.totalDirs > 0 && fileSummary.totalFiles > 0) {
$connector.show();
}
}

View file

@ -636,7 +636,7 @@ function procesSelection() {
if (selectedFiles.length>0) {
selection += n('files', '%n file', '%n files', selectedFiles.length);
}
$('#headerName>span.name').text(selection);
$('#headerName span.name').text(selection);
$('#modified').text('');
$('table').addClass('multiselect');
}

View file

@ -60,6 +60,7 @@ $TRANSLATIONS = array(
"Name" => "Nome",
"Size" => "Tamanho",
"Modified" => "Modificado",
"Invalid folder name. Usage of 'Shared' is reserved." => "Nome da pasta inválido. Uso de 'Shared' é reservado.",
"%s could not be renamed" => "%s não pode ser renomeado",
"Upload" => "Upload",
"File handling" => "Tratamento de Arquivo",

View file

@ -8,6 +8,7 @@ $TRANSLATIONS = array(
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"Error" => "Ошибка",
"Upload" => "Загрузка",
"Save" => "Сохранить",
"Cancel upload" => "Отмена загрузки",
"Download" => "Загрузка"
);

7
apps/files/l10n/uz.php Normal file
View file

@ -0,0 +1,7 @@
<?php
$TRANSLATIONS = array(
"_%n folder_::_%n folders_" => array(""),
"_%n file_::_%n files_" => array(""),
"_Uploading %n file_::_Uploading %n files_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";

View file

@ -9,6 +9,7 @@ $TRANSLATIONS = array(
"Private key password successfully updated." => "Senha de chave privada atualizada com sucesso.",
"Could not update the private key password. Maybe the old password was not correct." => "Não foi possível atualizar a senha de chave privada. Talvez a senha antiga esteja incorreta.",
"Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Aplicativo de criptografia não foi inicializado! Talvez o aplicativo de criptografia tenha sido reativado durante essa sessão. Por favor, tente fazer logoff e login novamente para inicializar o aplicativo de criptografia.",
"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Sua chave privada não é válida! Provavelmente sua senha foi alterada fora de %s (por exemplo, seu diretório corporativo). Você pode atualizar sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.",
"Unknown error please check your system settings or contact your administrator" => "Erro desconhecido, por favor verifique suas configurações ou faça contato com o administrador",
"Missing requirements." => "Requisitos não encontrados.",

View file

@ -157,6 +157,49 @@ class Helper {
return $return;
}
/**
* @brief Check if a path is a .part file
* @param string $path Path that may identify a .part file
* @return bool
*/
public static function isPartialFilePath($path) {
$extension = pathinfo($path, PATHINFO_EXTENSION);
if ( $extension === 'part' || $extension === 'etmp') {
return true;
} else {
return false;
}
}
/**
* @brief Remove .path extension from a file path
* @param string $path Path that may identify a .part file
* @return string File path without .part extension
* @note this is needed for reusing keys
*/
public static function stripPartialFileExtension($path) {
$extension = pathinfo($path, PATHINFO_EXTENSION);
if ( $extension === 'part' || $extension === 'etmp') {
$newLength = strlen($path) - 5; // 5 = strlen(".part") = strlen(".etmp")
$fPath = substr($path, 0, $newLength);
// if path also contains a transaction id, we remove it too
$extension = pathinfo($fPath, PATHINFO_EXTENSION);
if(substr($extension, 0, 12) === 'ocTransferId') { // 12 = strlen("ocTransferId")
$newLength = strlen($fPath) - strlen($extension) -1;
$fPath = substr($fPath, 0, $newLength);
}
return $fPath;
} else {
return $path;
}
}
/**
* @brief disable recovery

View file

@ -152,10 +152,10 @@ class Keymanager {
}
// try reusing key file if part file
if (self::isPartialFilePath($targetPath)) {
if (Helper::isPartialFilePath($targetPath)) {
$result = $view->file_put_contents(
$basePath . '/' . self::fixPartialFilePath($targetPath) . '.key', $catfile);
$basePath . '/' . Helper::stripPartialFileExtension($targetPath) . '.key', $catfile);
} else {
@ -169,48 +169,6 @@ class Keymanager {
}
/**
* @brief Remove .path extension from a file path
* @param string $path Path that may identify a .part file
* @return string File path without .part extension
* @note this is needed for reusing keys
*/
public static function fixPartialFilePath($path) {
if (preg_match('/\.part$/', $path) || preg_match('/\.etmp$/', $path)) {
$newLength = strlen($path) - 5;
$fPath = substr($path, 0, $newLength);
return $fPath;
} else {
return $path;
}
}
/**
* @brief Check if a path is a .part file
* @param string $path Path that may identify a .part file
* @return bool
*/
public static function isPartialFilePath($path) {
if (preg_match('/\.part$/', $path) || preg_match('/\.etmp$/', $path)) {
return true;
} else {
return false;
}
}
/**
* @brief retrieve keyfile for an encrypted file
* @param \OC_FilesystemView $view
@ -226,7 +184,7 @@ class Keymanager {
$util = new Util($view, \OCP\User::getUser());
list($owner, $filename) = $util->getUidAndFilename($filePath);
$filename = self::fixPartialFilePath($filename);
$filename = Helper::stripPartialFileExtension($filename);
$filePath_f = ltrim($filename, '/');
// in case of system wide mount points the keys are stored directly in the data directory
@ -385,8 +343,8 @@ class Keymanager {
foreach ($shareKeys as $userId => $shareKey) {
// try reusing key file if part file
if (self::isPartialFilePath($shareKeyPath)) {
$writePath = $basePath . '/' . self::fixPartialFilePath($shareKeyPath) . '.' . $userId . '.shareKey';
if (Helper::isPartialFilePath($shareKeyPath)) {
$writePath = $basePath . '/' . Helper::stripPartialFileExtension($shareKeyPath) . '.' . $userId . '.shareKey';
} else {
$writePath = $basePath . '/' . $shareKeyPath . '.' . $userId . '.shareKey';
}
@ -422,7 +380,7 @@ class Keymanager {
$util = new Util($view, \OCP\User::getUser());
list($owner, $filename) = $util->getUidAndFilename($filePath);
$filename = self::fixPartialFilePath($filename);
$filename = Helper::stripPartialFileExtension($filename);
// in case of system wide mount points the keys are stored directly in the data directory
if ($util->isSystemWideMountPoint($filename)) {
$shareKeyPath = '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey';

View file

@ -342,7 +342,7 @@ class Proxy extends \OC_FileProxy {
$fileInfo = false;
// get file info from database/cache if not .part file
if (!Keymanager::isPartialFilePath($path)) {
if (!Helper::isPartialFilePath($path)) {
$fileInfo = $view->getFileInfo($path);
}
@ -353,7 +353,7 @@ class Proxy extends \OC_FileProxy {
$fixSize = $util->getFileSize($path);
$fileInfo['unencrypted_size'] = $fixSize;
// put file info if not .part file
if (!Keymanager::isPartialFilePath($relativePath)) {
if (!Helper::isPartialFilePath($relativePath)) {
$view->putFileInfo($path, $fileInfo);
}
}
@ -372,7 +372,7 @@ class Proxy extends \OC_FileProxy {
$fileInfo['unencrypted_size'] = $size;
// put file info if not .part file
if (!Keymanager::isPartialFilePath($relativePath)) {
if (!Helper::isPartialFilePath($relativePath)) {
$view->putFileInfo($path, $fileInfo);
}
}

View file

@ -1145,10 +1145,7 @@ class Util {
// Make sure that a share key is generated for the owner too
list($owner, $ownerPath) = $this->getUidAndFilename($filePath);
$pathinfo = pathinfo($ownerPath);
if(array_key_exists('extension', $pathinfo) && $pathinfo['extension'] === 'part') {
$ownerPath = $pathinfo['dirname'] . '/' . $pathinfo['filename'];
}
$ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath);
$userIds = array();
if ($sharingEnabled) {

View file

@ -0,0 +1,54 @@
<?php
/**
* Copyright (c) 2013 Bjoern Schiessle <schiessle@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
require_once __DIR__ . '/../lib/helper.php';
use OCA\Encryption;
/**
* Class Test_Encryption_Helper
*/
class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase {
/**
* @medium
*/
function testStripPartialFileExtension() {
$partFilename = 'testfile.txt.part';
$filename = 'testfile.txt';
$this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename));
$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename));
$this->assertFalse(Encryption\Helper::isPartialFilePath($filename));
$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename));
}
/**
* @medium
*/
function testStripPartialFileExtensionWithTransferIdPath() {
$partFilename = 'testfile.txt.ocTransferId643653835.part';
$filename = 'testfile.txt';
$this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename));
$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename));
$this->assertFalse(Encryption\Helper::isPartialFilePath($filename));
$this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename));
}
}

View file

@ -188,23 +188,6 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase {
$this->assertArrayHasKey('key', $sslInfoPrivate);
}
/**
* @medium
*/
function testFixPartialFilePath() {
$partFilename = 'testfile.txt.part';
$filename = 'testfile.txt';
$this->assertTrue(Encryption\Keymanager::isPartialFilePath($partFilename));
$this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($partFilename));
$this->assertFalse(Encryption\Keymanager::isPartialFilePath($filename));
$this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($filename));
}
/**
* @medium
*/

View file

@ -18,3 +18,7 @@ tr:hover>td.remove>img { visibility:visible; cursor:pointer; }
#addMountPoint>td { border:none; }
#addMountPoint>td.applicable { visibility:hidden; }
#selectBackend { margin-left:-10px; }
#externalStorage label > input[type="checkbox"] {
margin-right: 3px;
}

View file

@ -34,16 +34,16 @@ class Shared extends \OC\Files\Storage\Common {
$this->sharedFolder = $arguments['sharedFolder'];
}
public function getId(){
public function getId() {
return 'shared::' . $this->sharedFolder;
}
/**
* @brief Get the source file path, permissions, and owner for a shared file
* @param string Shared target file path
* @return Returns array with the keys path, permissions, and owner or false if not found
*/
private function getFile($target) {
* @brief Get the source file path, permissions, and owner for a shared file
* @param string Shared target file path
* @return Returns array with the keys path, permissions, and owner or false if not found
*/
public function getFile($target) {
if (!isset($this->files[$target])) {
// Check for partial files
if (pathinfo($target, PATHINFO_EXTENSION) === 'part') {
@ -62,18 +62,18 @@ class Shared extends \OC\Files\Storage\Common {
}
/**
* @brief Get the source file path for a shared file
* @param string Shared target file path
* @return string source file path or false if not found
*/
private function getSourcePath($target) {
* @brief Get the source file path for a shared file
* @param string Shared target file path
* @return string source file path or false if not found
*/
public function getSourcePath($target) {
$source = $this->getFile($target);
if ($source) {
if (!isset($source['fullPath'])) {
\OC\Files\Filesystem::initMountPoints($source['fileOwner']);
$mount = \OC\Files\Filesystem::getMountByNumericId($source['storage']);
if (is_array($mount)) {
$this->files[$target]['fullPath'] = $mount[key($mount)]->getMountPoint().$source['path'];
$this->files[$target]['fullPath'] = $mount[key($mount)]->getMountPoint() . $source['path'];
} else {
$this->files[$target]['fullPath'] = false;
}
@ -84,10 +84,10 @@ class Shared extends \OC\Files\Storage\Common {
}
/**
* @brief Get the permissions granted for a shared file
* @param string Shared target file path
* @return int CRUDS permissions granted or false if not found
*/
* @brief Get the permissions granted for a shared file
* @param string Shared target file path
* @return int CRUDS permissions granted or false if not found
*/
public function getPermissions($target) {
$source = $this->getFile($target);
if ($source) {
@ -222,7 +222,7 @@ class Shared extends \OC\Files\Storage\Common {
if ($path == '' || $path == '/') {
$mtime = 0;
$dh = $this->opendir($path);
if(is_resource($dh)) {
if (is_resource($dh)) {
while (($filename = readdir($dh)) !== false) {
$tempmtime = $this->filemtime($filename);
if ($tempmtime > $mtime) {
@ -244,7 +244,7 @@ class Shared extends \OC\Files\Storage\Common {
$source = $this->getSourcePath($path);
if ($source) {
$info = array(
'target' => $this->sharedFolder.$path,
'target' => $this->sharedFolder . $path,
'source' => $source,
);
\OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_get_contents', $info);
@ -257,13 +257,14 @@ class Shared extends \OC\Files\Storage\Common {
if ($source = $this->getSourcePath($path)) {
// Check if permission is granted
if (($this->file_exists($path) && !$this->isUpdatable($path))
|| ($this->is_dir($path) && !$this->isCreatable($path))) {
|| ($this->is_dir($path) && !$this->isCreatable($path))
) {
return false;
}
$info = array(
'target' => $this->sharedFolder.$path,
'source' => $source,
);
'target' => $this->sharedFolder . $path,
'source' => $source,
);
\OCP\Util::emitHook('\OC\Files\Storage\Shared', 'file_put_contents', $info);
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
$result = $storage->file_put_contents($internalPath, $data);
@ -304,31 +305,16 @@ class Shared extends \OC\Files\Storage\Common {
$pos1 = strpos($path1, '/', 1);
$pos2 = strpos($path2, '/', 1);
if ($pos1 !== false && $pos2 !== false && ($oldSource = $this->getSourcePath($path1))) {
$newSource = $this->getSourcePath(dirname($path2)).'/'.basename($path2);
if (dirname($path1) == dirname($path2)) {
// Rename the file if UPDATE permission is granted
if ($this->isUpdatable($path1)) {
list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
return $storage->rename($oldInternalPath, $newInternalPath);
}
} else {
// Move the file if DELETE and CREATE permissions are granted
if ($this->isDeletable($path1) && $this->isCreatable(dirname($path2))) {
// Get the root shared folder
$folder1 = substr($path1, 0, $pos1);
$folder2 = substr($path2, 0, $pos2);
// Copy and unlink the file if it exists in a different shared folder
if ($folder1 != $folder2) {
if ($this->copy($path1, $path2)) {
return $this->unlink($path1);
}
} else {
list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
list( , $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
return $storage->rename($oldInternalPath, $newInternalPath);
}
}
$newSource = $this->getSourcePath(dirname($path2)) . '/' . basename($path2);
// Within the same folder, we only need UPDATE permissions
if (dirname($path1) == dirname($path2) and $this->isUpdatable($path1)) {
list($storage, $oldInternalPath) = \OC\Files\Filesystem::resolvePath($oldSource);
list(, $newInternalPath) = \OC\Files\Filesystem::resolvePath($newSource);
return $storage->rename($oldInternalPath, $newInternalPath);
// otherwise DELETE and CREATE permissions required
} elseif ($this->isDeletable($path1) && $this->isCreatable(dirname($path2))) {
$rootView = new \OC\Files\View('');
return $rootView->rename($oldSource, $newSource);
}
}
}
@ -338,10 +324,10 @@ class Shared extends \OC\Files\Storage\Common {
public function copy($path1, $path2) {
// Copy the file if CREATE permission is granted
if ($this->isCreatable(dirname($path2))) {
$source = $this->fopen($path1, 'r');
$target = $this->fopen($path2, 'w');
list ($count, $result) = \OC_Helper::streamCopy($source, $target);
return $result;
$oldSource = $this->getSourcePath($path1);
$newSource = $this->getSourcePath(dirname($path2)) . '/' . basename($path2);
$rootView = new \OC\Files\View('');
return $rootView->copy($oldSource, $newSource);
}
return false;
}
@ -363,16 +349,16 @@ class Shared extends \OC\Files\Storage\Common {
case 'xb':
case 'a':
case 'ab':
$exists = $this->file_exists($path);
if ($exists && !$this->isUpdatable($path)) {
return false;
}
if (!$exists && !$this->isCreatable(dirname($path))) {
return false;
}
$exists = $this->file_exists($path);
if ($exists && !$this->isUpdatable($path)) {
return false;
}
if (!$exists && !$this->isCreatable(dirname($path))) {
return false;
}
}
$info = array(
'target' => $this->sharedFolder.$path,
'target' => $this->sharedFolder . $path,
'source' => $source,
'mode' => $mode,
);
@ -412,6 +398,7 @@ class Shared extends \OC\Files\Storage\Common {
}
return false;
}
public function touch($path, $mtime = null) {
if ($source = $this->getSourcePath($path)) {
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
@ -422,11 +409,12 @@ class Shared extends \OC\Files\Storage\Common {
public static function setup($options) {
if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user']
|| \OCP\Share::getItemsSharedWith('file')) {
|| \OCP\Share::getItemsSharedWith('file')
) {
$user_dir = $options['user_dir'];
\OC\Files\Filesystem::mount('\OC\Files\Storage\Shared',
array('sharedFolder' => '/Shared'),
$user_dir.'/Shared/');
$user_dir . '/Shared/');
}
}

View file

@ -32,9 +32,32 @@ class Shared_Watcher extends Watcher {
* @param string $path
*/
public function checkUpdate($path) {
if ($path != '') {
parent::checkUpdate($path);
if ($path != '' && parent::checkUpdate($path)) {
// since checkUpdate() has already updated the size of the subdirs,
// only apply the update to the owner's parent dirs
// find last parent before reaching the shared storage root,
// which is the actual shared dir from the owner
$sepPos = strpos($path, '/');
if ($sepPos > 0) {
$baseDir = substr($path, 0, $sepPos);
} else {
$baseDir = $path;
}
// find the path relative to the data dir
$file = $this->storage->getFile($baseDir);
$view = new \OC\Files\View('/' . $file['fileOwner']);
// find the owner's storage and path
list($storage, $internalPath) = $view->resolvePath($file['path']);
// update the parent dirs' sizes in the owner's cache
$storage->getCache()->correctFolderSize(dirname($internalPath));
return true;
}
return false;
}
/**

View file

@ -20,90 +20,33 @@
*
*/
require_once __DIR__ . '/../../../lib/base.php';
require_once __DIR__ . '/base.php';
use OCA\Files\Share;
/**
* Class Test_Files_Sharing_Api
*/
class Test_Files_Sharing_Api extends \PHPUnit_Framework_TestCase {
const TEST_FILES_SHARING_API_USER1 = "test-share-user1";
const TEST_FILES_SHARING_API_USER2 = "test-share-user2";
const TEST_FILES_SHARING_API_USER3 = "test-share-user3";
public $stateFilesEncryption;
public $filename;
public $data;
/**
* @var OC_FilesystemView
*/
public $view;
public $folder;
public static function setUpBeforeClass() {
// reset backend
\OC_User::clearBackends();
\OC_User::useBackend('database');
// clear share hooks
\OC_Hook::clear('OCP\\Share');
\OC::registerShareHooks();
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
// create users
self::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1, true);
self::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, true);
self::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER3, true);
}
class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
function setUp() {
//login as user1
\Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1);
$this->data = 'foobar';
$this->view = new \OC_FilesystemView('/' . \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1 . '/files');
parent::setUp();
$this->folder = '/folder_share_api_test';
$this->filename = 'share-api-test.txt';
// remember files_encryption state
$this->stateFilesEncryption = \OC_App::isEnabled('files_encryption');
//we don't want to tests with app files_encryption enabled
\OC_App::disable('files_encryption');
$this->assertTrue(!\OC_App::isEnabled('files_encryption'));
// save file with content
$this->view->file_put_contents($this->filename, $this->data);
$this->view->mkdir($this->folder);
$this->view->file_put_contents($this->folder.'/'.$this->filename, $this->data);
}
function tearDown() {
$this->view->unlink($this->filename);
$this->view->deleteAll($this->folder);
// reset app files_encryption
if ($this->stateFilesEncryption) {
\OC_App::enable('files_encryption');
} else {
\OC_App::disable('files_encryption');
}
}
public static function tearDownAfterClass() {
// cleanup users
\OC_User::deleteUser(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1);
\OC_User::deleteUser(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2);
\OC_User::deleteUser(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER3);
parent::tearDown();
}
/**
@ -548,50 +491,4 @@ class Test_Files_Sharing_Api extends \PHPUnit_Framework_TestCase {
$this->assertTrue(empty($itemsAfterDelete));
}
/**
* @param $user
* @param bool $create
* @param bool $password
*/
private static function loginHelper($user, $create = false, $password = false) {
if ($create) {
\OC_User::createUser($user, $user);
}
if ($password === false) {
$password = $user;
}
\OC_Util::tearDownFS();
\OC_User::setUserId('');
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($user);
\OC_User::setUserId($user);
$params['uid'] = $user;
$params['password'] = $password;
}
/**
* @brief get some information from a given share
* @param int $shareID
* @return array with: item_source, share_type, share_with, item_type, permissions
*/
private function getShareFromId($shareID) {
$sql = 'SELECT `item_source`, `share_type`, `share_with`, `item_type`, `permissions` FROM `*PREFIX*share` WHERE `id` = ?';
$args = array($shareID);
$query = \OCP\DB::prepare($sql);
$result = $query->execute($args);
$share = Null;
if ($result && $result->numRows() > 0) {
$share = $result->fetchRow();
}
return $share;
}
}

View file

@ -0,0 +1,143 @@
<?php
/**
* ownCloud
*
* @author Bjoern Schiessle
* @copyright 2013 Bjoern Schiessle <schiessle@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once __DIR__ . '/../../../lib/base.php';
use OCA\Files\Share;
/**
* Class Test_Files_Sharing_Base
*
* Base class for sharing tests.
*/
abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase {
const TEST_FILES_SHARING_API_USER1 = "test-share-user1";
const TEST_FILES_SHARING_API_USER2 = "test-share-user2";
const TEST_FILES_SHARING_API_USER3 = "test-share-user3";
public $stateFilesEncryption;
public $filename;
public $data;
/**
* @var OC_FilesystemView
*/
public $view;
public $folder;
public static function setUpBeforeClass() {
// reset backend
\OC_User::clearBackends();
\OC_User::useBackend('database');
// clear share hooks
\OC_Hook::clear('OCP\\Share');
\OC::registerShareHooks();
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
// create users
self::loginHelper(self::TEST_FILES_SHARING_API_USER1, true);
self::loginHelper(self::TEST_FILES_SHARING_API_USER2, true);
self::loginHelper(self::TEST_FILES_SHARING_API_USER3, true);
}
function setUp() {
//login as user1
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
$this->data = 'foobar';
$this->view = new \OC_FilesystemView('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
// remember files_encryption state
$this->stateFilesEncryption = \OC_App::isEnabled('files_encryption');
//we don't want to tests with app files_encryption enabled
\OC_App::disable('files_encryption');
$this->assertTrue(!\OC_App::isEnabled('files_encryption'));
}
function tearDown() {
// reset app files_encryption
if ($this->stateFilesEncryption) {
\OC_App::enable('files_encryption');
} else {
\OC_App::disable('files_encryption');
}
}
public static function tearDownAfterClass() {
// cleanup users
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1);
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2);
\OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER3);
}
/**
* @param $user
* @param bool $create
* @param bool $password
*/
protected static function loginHelper($user, $create = false, $password = false) {
if ($create) {
\OC_User::createUser($user, $user);
}
if ($password === false) {
$password = $user;
}
\OC_Util::tearDownFS();
\OC_User::setUserId('');
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($user);
\OC_User::setUserId($user);
$params['uid'] = $user;
$params['password'] = $password;
}
/**
* @brief get some information from a given share
* @param int $shareID
* @return array with: item_source, share_type, share_with, item_type, permissions
*/
protected function getShareFromId($shareID) {
$sql = 'SELECT `item_source`, `share_type`, `share_with`, `item_type`, `permissions` FROM `*PREFIX*share` WHERE `id` = ?';
$args = array($shareID);
$query = \OCP\DB::prepare($sql);
$result = $query->execute($args);
$share = Null;
if ($result && $result->numRows() > 0) {
$share = $result->fetchRow();
}
return $share;
}
}

View file

@ -0,0 +1,161 @@
<?php
/**
* ownCloud
*
* @author Vincent Petry
* @copyright 2013 Vincent Petry <pvince81@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
require_once __DIR__ . '/base.php';
class Test_Files_Sharing_Watcher extends Test_Files_Sharing_Base {
function setUp() {
parent::setUp();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
// prepare user1's dir structure
$textData = "dummy file data\n";
$this->view->mkdir('container');
$this->view->mkdir('container/shareddir');
$this->view->mkdir('container/shareddir/subdir');
list($this->ownerStorage, $internalPath) = $this->view->resolvePath('');
$this->ownerCache = $this->ownerStorage->getCache();
$this->ownerStorage->getScanner()->scan('');
// share "shareddir" with user2
$fileinfo = $this->view->getFileInfo('container/shareddir');
\OCP\Share::shareItem('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
self::TEST_FILES_SHARING_API_USER2, 31);
// login as user2
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
// retrieve the shared storage
$secondView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2);
list($this->sharedStorage, $internalPath) = $secondView->resolvePath('files/Shared/shareddir');
$this->sharedCache = $this->sharedStorage->getCache();
}
function tearDown() {
$this->sharedCache->clear();
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
$fileinfo = $this->view->getFileInfo('container/shareddir');
\OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
self::TEST_FILES_SHARING_API_USER2);
$this->view->deleteAll('container');
$this->ownerCache->clear();
parent::tearDown();
}
/**
* Tests that writing a file using the shared storage will propagate the file
* size to the owner's parent folders.
*/
function testFolderSizePropagationToOwnerStorage() {
$initialSizes = self::getOwnerDirSizes('files/container/shareddir');
$textData = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$dataLen = strlen($textData);
$this->sharedCache->put('shareddir/bar.txt', array('storage_mtime' => 10));
$this->sharedStorage->file_put_contents('shareddir/bar.txt', $textData);
$this->sharedCache->put('shareddir', array('storage_mtime' => 10));
// run the propagation code
$result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir');
$this->assertTrue($result);
// the owner's parent dirs must have increase size
$newSizes = self::getOwnerDirSizes('files/container/shareddir');
$this->assertEquals($initialSizes[''] + $dataLen, $newSizes['']);
$this->assertEquals($initialSizes['files'] + $dataLen, $newSizes['files']);
$this->assertEquals($initialSizes['files/container'] + $dataLen, $newSizes['files/container']);
$this->assertEquals($initialSizes['files/container/shareddir'] + $dataLen, $newSizes['files/container/shareddir']);
// no more updates
$result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir');
$this->assertFalse($result);
}
/**
* Tests that writing a file using the shared storage will propagate the file
* size to the owner's parent folders.
*/
function testSubFolderSizePropagationToOwnerStorage() {
$initialSizes = self::getOwnerDirSizes('files/container/shareddir/subdir');
$textData = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$dataLen = strlen($textData);
$this->sharedCache->put('shareddir/subdir/bar.txt', array('storage_mtime' => 10));
$this->sharedStorage->file_put_contents('shareddir/subdir/bar.txt', $textData);
$this->sharedCache->put('shareddir/subdir', array('storage_mtime' => 10));
// run the propagation code
$result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir/subdir');
$this->assertTrue($result);
// the owner's parent dirs must have increase size
$newSizes = self::getOwnerDirSizes('files/container/shareddir/subdir');
$this->assertEquals($initialSizes[''] + $dataLen, $newSizes['']);
$this->assertEquals($initialSizes['files'] + $dataLen, $newSizes['files']);
$this->assertEquals($initialSizes['files/container'] + $dataLen, $newSizes['files/container']);
$this->assertEquals($initialSizes['files/container/shareddir'] + $dataLen, $newSizes['files/container/shareddir']);
$this->assertEquals($initialSizes['files/container/shareddir/subdir'] + $dataLen, $newSizes['files/container/shareddir/subdir']);
// no more updates
$result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir/subdir');
$this->assertFalse($result);
}
function testNoUpdateOnRoot() {
// no updates when called for root path
$result = $this->sharedStorage->getWatcher()->checkUpdate('');
$this->assertFalse($result);
// FIXME: for some reason when running this "naked" test,
// there will be remaining nonsensical entries in the
// database with a path "test-share-user1/container/..."
}
/**
* Returns the sizes of the path and its parent dirs in a hash
* where the key is the path and the value is the size.
*/
function getOwnerDirSizes($path) {
$result = array();
while ($path != '' && $path != '' && $path != '.') {
$cachedData = $this->ownerCache->get($path);
$result[$path] = $cachedData['size'];
$path = dirname($path);
}
$cachedData = $this->ownerCache->get('');
$result[''] = $cachedData['size'];
return $result;
}
}

View file

@ -1,7 +1,14 @@
<?php
$TRANSLATIONS = array(
"Couldn't delete %s permanently" => "Tidak dapat menghapuskan %s secara kekal",
"Couldn't restore %s" => "Tidak dapat memulihkan %s",
"Error" => "Ralat",
"restored" => "dipulihkan",
"Nothing in here. Your trash bin is empty!" => "Tiada apa disini. Tong sampah anda kosong!",
"Name" => "Nama",
"Delete" => "Padam"
"Restore" => "Pulihkan",
"Deleted" => "Dihapuskan",
"Delete" => "Padam",
"Deleted Files" => "Fail Dihapus"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";

View file

@ -530,6 +530,7 @@ class Trashbin {
$size += $view->filesize('/files_trashbin/files/' . $file);
}
$view->unlink('/files_trashbin/files/' . $file);
\OC_Hook::emit('\OCP\Trashbin', 'delete', array('path' => '/files_trashbin/files/' . $file));
$trashbinSize -= $size;
self::setTrashbinSize($user, $trashbinSize);

View file

@ -21,7 +21,7 @@ $(document).ready(function(){
// Action to perform when clicked
if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback
var file = $('#dir').val()+'/'+filename;
var file = $('#dir').val().replace(/(?!<=\/)$|\/$/, '/' + filename);
var createDropDown = true;
// Check if drop down is already visible for a different file
if (($('#dropdown').length > 0) ) {

View file

@ -0,0 +1,10 @@
<?php
$TRANSLATIONS = array(
"Could not revert: %s" => "Tidak dapat kembalikan: %s",
"Versions" => "Versi",
"Failed to revert {file} to revision {timestamp}." => "Gagal kembalikan {file} ke semakan {timestamp}.",
"More versions..." => "Lagi versi...",
"No other versions available" => "Tiada lagi versi lain",
"Restore" => "Pulihkan"
);
$PLURAL_FORMS = "nplurals=1; plural=0;";

View file

@ -156,6 +156,7 @@ class Storage {
}
foreach ($versions as $v) {
unlink($abs_path . $v['version']);
\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $abs_path . $v['version']));
$versionsSize -= $v['size'];
}
self::setVersionsSize($uid, $versionsSize);
@ -465,6 +466,7 @@ class Storage {
while ($availableSpace < 0 && $i < $numOfVersions) {
$version = current($allVersions);
$versionsFileview->unlink($version['path'].'.v'.$version['version']);
\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'].'.v'.$version['version']));
$versionsSize -= $version['size'];
$availableSpace += $version['size'];
next($allVersions);
@ -515,6 +517,7 @@ class Storage {
if ($version['version'] > $nextVersion) {
//distance between two version too small, delete version
$versionsFileview->unlink($version['path'] . '.v' . $version['version']);
\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'] . '.v' . $version['version']));
$size += $version['size'];
unset($allVersions[$key]); // update array with all versions
} else {

View file

@ -3,13 +3,9 @@
width: 60%;
}
.tablecell {
display: table-cell !important;
white-space: nowrap;
}
.tablerow {
display: table-row;
white-space: nowrap;
}
.tablerow input, .tablerow textarea {
@ -78,6 +74,7 @@
.wizSpinner {
height: 15px;
margin: 0.3em;
}
.ldapSettingControls {
@ -100,7 +97,6 @@
#ldap fieldset input, #ldap fieldset textarea {
width: 60%;
display: inline-block;
}
#ldap fieldset p input[type=checkbox] {

View file

@ -192,19 +192,20 @@ var LdapWizard = {
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
LdapWizard.showSpinner('#ldap_base');
$('#ldap_base').prop('disabled', 'disabled');
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
LdapWizard.hideSpinner('#ldap_base');
if($('#ldap_base').val()) {
$('#ldap_base').removeClass('invisible');
LdapWizard.hideInfoBox();
}
$('#ldap_base').prop('disabled', false);
},
function (result) {
LdapWizard.hideSpinner('#ldap_base');
$('#ldap_base').removeClass('invisible');
LdapWizard.showInfoBox('Please specify a port');
LdapWizard.showInfoBox('Please specify a Base DN');
$('#ldap_base').prop('disabled', false);
}
);
}
@ -212,28 +213,28 @@ var LdapWizard = {
checkPort: function() {
host = $('#ldap_host').val();
user = $('#ldap_dn').val();
pass = $('#ldap_agent_password').val();
port = $('#ldap_port').val();
if(host && user && pass) {
if(host && !port) {
param = 'action=guessPortAndTLS'+
'&ldap_serverconfig_chooser='+$('#ldap_serverconfig_chooser').val();
LdapWizard.showSpinner('#ldap_port');
$('#ldap_port').prop('disabled', 'disabled');
LdapWizard.ajax(param,
function(result) {
LdapWizard.applyChanges(result);
LdapWizard.hideSpinner('#ldap_port');
if($('#ldap_port').val()) {
LdapWizard.checkBaseDN();
$('#ldap_port').removeClass('invisible');
$('#ldap_port').prop('disabled', false);
LdapWizard.hideInfoBox();
}
},
function (result) {
LdapWizard.hideSpinner('#ldap_port');
$('#ldap_port').removeClass('invisible');
LdapWizard.showInfoBox('Please specify the BaseDN');
$('#ldap_port').prop('disabled', false);
LdapWizard.showInfoBox('Please specify the Port');
}
);
}
@ -461,12 +462,6 @@ var LdapWizard = {
},
init: function() {
if($('#ldap_port').val()) {
$('#ldap_port').removeClass('invisible');
}
if($('#ldap_base').val()) {
$('#ldap_base').removeClass('invisible');
}
LdapWizard.basicStatusCheck();
},
@ -521,6 +516,8 @@ var LdapWizard = {
},
processChanges: function(triggerObj) {
LdapWizard.hideInfoBox();
if(triggerObj.id == 'ldap_host'
|| triggerObj.id == 'ldap_port'
|| triggerObj.id == 'ldap_dn'

View file

@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"Select groups" => "إختر مجموعة",
"_%s group found_::_%s groups found_" => array("","","","","",""),
"_%s user found_::_%s users found_" => array("","","","","",""),
"Save" => "حفظ",
"Help" => "المساعدة",
"Host" => "المضيف",
"Password" => "كلمة المرور",

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "Грешка",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Запис",
"Help" => "Помощ",
"Password" => "Парола"
);

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "সমস্যা",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "সংরক্ষণ",
"Help" => "সহায়িকা",
"Host" => "হোস্ট",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL আবশ্যক না হলে আপনি এই প্রটোকলটি মুছে ফেলতে পারেন । এরপর শুরু করুন এটা দিয়ে ldaps://",

View file

@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","","")
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Spasi"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("S'ha trobat %s usuari","S'han trobat %s usuaris"),
"Invalid Host" => "Ordinador central no vàlid",
"Could not find the desired feature" => "La característica desitjada no s'ha trobat",
"Save" => "Desa",
"Test Configuration" => "Comprovació de la configuració",
"Help" => "Ajuda",
"Limit the access to %s to groups meeting this criteria:" => "Limita l'accés a %s grups que compleixin amb el criteri:",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Potvrdit smazání",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Uložit",
"Test Configuration" => "Vyzkoušet nastavení",
"Help" => "Nápověda",
"Add Server Configuration" => "Přidat nastavení serveru",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "Gwall",
"_%s group found_::_%s groups found_" => array("","","",""),
"_%s user found_::_%s users found_" => array("","","",""),
"Save" => "Cadw",
"Help" => "Cymorth",
"Password" => "Cyfrinair"
);

View file

@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Bekræft Sletning",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Gem",
"Test Configuration" => "Test Konfiguration",
"Help" => "Hjælp",
"Add Server Configuration" => "Tilføj Server Konfiguration",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s Benutzer gefunden","%s Benutzer gefunden"),
"Invalid Host" => "Ungültiger Host",
"Could not find the desired feature" => "Konnte die gewünschte Funktion nicht finden",
"Save" => "Speichern",
"Test Configuration" => "Testkonfiguration",
"Help" => "Hilfe",
"Limit the access to %s to groups meeting this criteria:" => "Beschränke den Zugriff auf %s auf Gruppen, die die folgenden Kriterien erfüllen:",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Löschung bestätigen",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Speichern",
"Test Configuration" => "Testkonfiguration",
"Help" => "Hilfe",
"Add Server Configuration" => "Serverkonfiguration hinzufügen",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s Benutzer gefunden","%s Benutzer gefunden"),
"Invalid Host" => "Ungültiger Host",
"Could not find the desired feature" => "Konnte die gewünschte Funktion nicht finden",
"Save" => "Speichern",
"Test Configuration" => "Testkonfiguration",
"Help" => "Hilfe",
"Limit the access to %s to groups meeting this criteria:" => "Beschränke den Zugriff auf %s auf Gruppen, die die folgenden Kriterien erfüllen:",

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Επιβεβαίωση Διαγραφής",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Αποθήκευση",
"Test Configuration" => "Δοκιμαστικες ρυθμισεις",
"Help" => "Βοήθεια",
"Add Server Configuration" => "Προσθήκη Ρυθμίσεων Διακομιστή",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s user found","%s users found"),
"Invalid Host" => "Invalid Host",
"Could not find the desired feature" => "Could not find the desired feature",
"Save" => "Save",
"Test Configuration" => "Test Configuration",
"Help" => "Help",
"Limit the access to %s to groups meeting this criteria:" => "Limit the access to %s to groups meeting this criteria:",

View file

@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"_%s group found_::_%s groups found_" => array("%s grupo troviĝis","%s grupoj troviĝis"),
"_%s user found_::_%s users found_" => array("%s uzanto troviĝis","%s uzanto troviĝis"),
"Invalid Host" => "Nevalida gastigo",
"Save" => "Konservi",
"Test Configuration" => "Provi agordon",
"Help" => "Helpo",
"only those object classes:" => "nur tiuj objektoklasoj:",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("Usuario %s encontrado","Usuarios %s encontrados"),
"Invalid Host" => "Host inválido",
"Could not find the desired feature" => "No se puede encontrar la función deseada.",
"Save" => "Guardar",
"Test Configuration" => "Configuración de prueba",
"Help" => "Ayuda",
"Limit the access to %s to groups meeting this criteria:" => "Limitar el acceso a %s a los grupos que cumplan este criterio:",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Confirmar borrado",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Guardar",
"Test Configuration" => "Probar configuración",
"Help" => "Ayuda",
"Add Server Configuration" => "Añadir Configuración del Servidor",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s kasutaja leitud","%s kasutajat leitud"),
"Invalid Host" => "Vigane server",
"Could not find the desired feature" => "Ei suuda leida soovitud funktsioonaalsust",
"Save" => "Salvesta",
"Test Configuration" => "Testi seadistust",
"Help" => "Abiinfo",
"Limit the access to %s to groups meeting this criteria:" => "Piira ligipääs %s grupile, mis sobivad kriteeriumiga:",

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Baieztatu Ezabatzea",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Gorde",
"Test Configuration" => "Egiaztatu Konfigurazioa",
"Help" => "Laguntza",
"Add Server Configuration" => "Gehitu Zerbitzariaren Konfigurazioa",

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "تایید حذف",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "ذخیره",
"Test Configuration" => "امتحان پیکربندی",
"Help" => "راه‌نما",
"Add Server Configuration" => "افزودن پیکربندی سرور",

View file

@ -11,6 +11,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Vahvista poisto",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Tallenna",
"Help" => "Ohje",
"Host" => "Isäntä",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Voit jättää protokollan määrittämättä, paitsi kun vaadit SSL:ää. Aloita silloin ldaps://",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s utilisateur trouvé","%s utilisateurs trouvés"),
"Invalid Host" => "Hôte invalide",
"Could not find the desired feature" => "Impossible de trouver la fonction souhaitée",
"Save" => "Sauvegarder",
"Test Configuration" => "Tester la configuration",
"Help" => "Aide",
"Limit the access to %s to groups meeting this criteria:" => "Limiter l'accès à %s aux groupes respectant ce critère :",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("Atopouse %s usuario","Atopáronse %s usuarios"),
"Invalid Host" => "Máquina incorrecta",
"Could not find the desired feature" => "Non foi posíbel atopar a función desexada",
"Save" => "Gardar",
"Test Configuration" => "Probar a configuración",
"Help" => "Axuda",
"Limit the access to %s to groups meeting this criteria:" => "Limitar o acceso a %s aos grupos que coincidan con estes criterios:",

View file

@ -10,6 +10,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "אישור המחיקה",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "שמירה",
"Help" => "עזרה",
"Add Server Configuration" => "הוספת הגדרות השרת",
"Host" => "מארח",

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "त्रुटि",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "सहेजें",
"Help" => "सहयोग",
"Password" => "पासवर्ड"
);

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "Greška",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Snimi",
"Help" => "Pomoć",
"Password" => "Lozinka",
"Back" => "Natrag"

View file

@ -26,6 +26,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s felhasználó van","%s felhasználó van"),
"Invalid Host" => "Érvénytelen gépnév",
"Could not find the desired feature" => "A kívánt funkció nem található",
"Save" => "Mentés",
"Test Configuration" => "A beállítások tesztelése",
"Help" => "Súgó",
"Limit the access to %s to groups meeting this criteria:" => "Korlátozzuk %s elérését a következő feltételeknek megfelelő csoportokra:",

View file

@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("","")
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Պահպանել"
);
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "Error",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Salveguardar",
"Help" => "Adjuta",
"Password" => "Contrasigno",
"Back" => "Retro"

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Konfirmasi Penghapusan",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "Simpan",
"Test Configuration" => "Uji Konfigurasi",
"Help" => "Bantuan",
"Add Server Configuration" => "Tambah Konfigurasi Server",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "Villa",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Vista",
"Test Configuration" => "Prúfa uppsetningu",
"Help" => "Hjálp",
"Host" => "Netþjónn",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s utente trovato","%s utenti trovati"),
"Invalid Host" => "Host non valido",
"Could not find the desired feature" => "Impossibile trovare la funzionalità desiderata",
"Save" => "Salva",
"Test Configuration" => "Prova configurazione",
"Help" => "Aiuto",
"Limit the access to %s to groups meeting this criteria:" => "Limita l'accesso a %s ai gruppi che verificano questi criteri:",

View file

@ -26,6 +26,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s ユーザが見つかりました"),
"Invalid Host" => "無効なホスト",
"Could not find the desired feature" => "望ましい機能は見つかりませんでした",
"Save" => "保存",
"Test Configuration" => "設定をテスト",
"Help" => "ヘルプ",
"Limit the access to %s to groups meeting this criteria:" => "この基準に合致するグループに %s へのアクセスを制限:",

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "წაშლის დადასტურება",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "შენახვა",
"Test Configuration" => "კავშირის ტესტირება",
"Help" => "დახმარება",
"Add Server Configuration" => "სერვერის პარამეტრების დამატება",

View file

@ -8,6 +8,7 @@ $TRANSLATIONS = array(
"Connection test failed" => "연결 시험 실패",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "저장",
"Help" => "도움말",
"Host" => "호스트",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL을 사용하는 경우가 아니라면 프로토콜을 입력하지 않아도 됩니다. SSL을 사용하려면 ldaps://를 입력하십시오.",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "هه‌ڵه",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "پاشکه‌وتکردن",
"Help" => "یارمەتی",
"Password" => "وشەی تێپەربو"
);

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "Fehler",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Späicheren",
"Help" => "Hëllef",
"Host" => "Host",
"Password" => "Passwuert",

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Patvirtinkite trynimą",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Išsaugoti",
"Test Configuration" => "Bandyti konfigūraciją",
"Help" => "Pagalba",
"Add Server Configuration" => "Pridėti serverio konfigūraciją",

View file

@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Apstiprināt dzēšanu",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Saglabāt",
"Test Configuration" => "Testa konfigurācija",
"Help" => "Palīdzība",
"Add Server Configuration" => "Pievienot servera konfigurāciju",

View file

@ -1,12 +1,19 @@
<?php
$TRANSLATIONS = array(
"Deletion failed" => "Бришењето е неуспешно",
"Keep settings?" => "Да ги сочувам нагодувањата?",
"Cannot add server configuration" => "Не можам да ја додадам конфигурацијата на серверот",
"Error" => "Грешка",
"Connection test succeeded" => "Тестот за поврзување е успешен",
"Connection test failed" => "Тестот за поврзување не е успешен",
"Confirm Deletion" => "Потврдете го бришењето",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Сними",
"Help" => "Помош",
"Host" => "Домаќин",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Може да го скокнете протколот освен ако не ви треба SSL. Тогаш ставете ldaps://",
"Port" => "Порта",
"Password" => "Лозинка",
"Back" => "Назад",
"Continue" => "Продолжи"

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "Ralat",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "Simpan",
"Help" => "Bantuan",
"Password" => "Kata laluan",
"Back" => "Kembali"

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Bekreft sletting",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Lagre",
"Help" => "Hjelp",
"Add Server Configuration" => "Legg til tjener-konfigurasjon",
"Host" => "Tjener",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s gebruiker gevonden","%s gebruikers gevonden"),
"Invalid Host" => "Ongeldige server",
"Could not find the desired feature" => "Kon de gewenste functie niet vinden",
"Save" => "Bewaren",
"Test Configuration" => "Test configuratie",
"Help" => "Help",
"Limit the access to %s to groups meeting this criteria:" => "Beperk toegang tot %s tot groepen die voldoen aan deze criteria:",

View file

@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"Select groups" => "Vel grupper",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Lagra",
"Help" => "Hjelp",
"Host" => "Tenar",
"Password" => "Passord",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "Error",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Enregistra",
"Help" => "Ajuda",
"Password" => "Senhal"
);

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Potwierdź usunięcie",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Zapisz",
"Test Configuration" => "Konfiguracja testowa",
"Help" => "Pomoc",
"Add Server Configuration" => "Dodaj konfigurację servera",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Failed to delete the server configuration" => "Falha ao deletar a configuração do servidor",
"The configuration is valid and the connection could be established!" => "A configuração é válida e a conexão foi estabelecida!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "A configuração é válida, mas o Bind falhou. Confira as configurações do servidor e as credenciais.",
"The configuration is invalid. Please have a look at the logs for further details." => "Configuração inválida. Por favor, dê uma olhada nos logs para mais detalhes.",
"No action specified" => "Nenhuma ação especificada",
"No configuration specified" => "Nenhuma configuração especificada",
"No data specified" => "Não há dados especificados",
@ -26,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("usuário %s encontrado","usuários %s encontrados"),
"Invalid Host" => "Host inválido",
"Could not find the desired feature" => "Não foi possível encontrar a função desejada",
"Save" => "Guardar",
"Test Configuration" => "Teste de Configuração",
"Help" => "Ajuda",
"Limit the access to %s to groups meeting this criteria:" => "Limitar o acesso a %s para grupos que coincidam com estes critérios:",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Confirmar a operação de apagar",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Guardar",
"Test Configuration" => "Testar a configuração",
"Help" => "Ajuda",
"Add Server Configuration" => "Adicionar configurações do servidor",

View file

@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"Error" => "Eroare",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Salvează",
"Help" => "Ajutor",
"Host" => "Gazdă",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Puteți omite protocolul, decât dacă folosiți SSL. Atunci se începe cu ldaps://",

View file

@ -1,10 +1,10 @@
<?php
$TRANSLATIONS = array(
"Failed to clear the mappings." => "Не удалось очистить соотвествия.",
"Failed to clear the mappings." => "Не удалось очистить соответствия.",
"Failed to delete the server configuration" => "Не удалось удалить конфигурацию сервера",
"The configuration is valid and the connection could be established!" => "Конфигурация правильная и подключение может быть установлено!",
"The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Конфигурация верна, но операция подключения завершилась неудачно. Пожалуйста, проверьте настройки сервера и учетные данные.",
"The configuration is invalid. Please have a look at the logs for further details." => "Конфигурация не выполнена. Пожалуйста, просмотрите логи для уточнения деталей",
"The configuration is invalid. Please have a look at the logs for further details." => "Конфигурация недействительна. Пожалуйста, просмотрите логи для уточнения деталей.",
"No action specified" => "Действие не указано",
"No configuration specified" => "Конфигурация не создана",
"No data specified" => "Нет данных",
@ -16,60 +16,61 @@ $TRANSLATIONS = array(
"mappings cleared" => "Соответствия очищены",
"Success" => "Успешно",
"Error" => "Ошибка",
"Select groups" => "Выбрать группы",
"Select object classes" => "Выберите классы объекта",
"Select groups" => "Выберите группы",
"Select object classes" => "Выберите объектные классы",
"Select attributes" => "Выберите атрибуты",
"Connection test succeeded" => "Проверка соединения удалась",
"Connection test failed" => "Проверка соединения не удалась",
"Do you really want to delete the current Server Configuration?" => "Вы действительно хотите удалить существующую конфигурацию сервера?",
"Confirm Deletion" => "Подтверждение удаления",
"_%s group found_::_%s groups found_" => array("%s гурппа найдена","%s группы найдены","%s групп найдено"),
"_%s group found_::_%s groups found_" => array("%s группа найдена","%s группы найдены","%s групп найдено"),
"_%s user found_::_%s users found_" => array("%s пользователь найден","%s пользователя найдено","%s пользователей найдено"),
"Invalid Host" => "Неверный сервер",
"Could not find the desired feature" => "Не могу найти требуемой функциональности",
"Test Configuration" => "Тестовая конфигурация",
"Save" => "Сохранить",
"Test Configuration" => "Проверить конфигурацию",
"Help" => "Помощь",
"Limit the access to %s to groups meeting this criteria:" => "Ограничить доступ к %s группам удовлетворяющим этому критерию:",
"only those object classes:" => "только эти классы объекта",
"Limit the access to %s to groups meeting this criteria:" => "Ограничить доступ к %s группам, удовлетворяющим этому критерию:",
"only those object classes:" => "только эти объектные классы",
"only from those groups:" => "только из этих групп",
"Edit raw filter instead" => "Редактировать исходный фильтр",
"Raw LDAP filter" => "Исходный LDAP фильтр",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Этот фильтр определяет какие LDAP группы должны иметь доступ к %s.",
"The filter specifies which LDAP groups shall have access to the %s instance." => "Этот фильтр определяет, какие LDAP группы должны иметь доступ к %s.",
"groups found" => "групп найдено",
"What attribute shall be used as login name:" => "Какой аттибут должен быть использован для логина:",
"What attribute shall be used as login name:" => "Какой атрибут должен быть использован для логина:",
"LDAP Username:" => "Имя пользователя LDAP",
"LDAP Email Address:" => "LDAP адрес электронной почты:",
"Other Attributes:" => "Другие аттрибуты:",
"Other Attributes:" => "Другие атрибуты:",
"Add Server Configuration" => "Добавить конфигурацию сервера",
"Host" => "Сервер",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можно опустить протокол, за исключением того, когда вам требуется SSL. Тогда начните с ldaps :/ /",
"Port" => "Порт",
"User DN" => "DN пользователя",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN-клиента пользователя, с которым связывают должно быть заполнено, например, uid=агент, dc=пример, dc=com. Для анонимного доступа, оставьте DN и пароль пустыми.",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN пользователя, под которым выполняется подключение, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте DN и пароль пустыми.",
"Password" => "Пароль",
"For anonymous access, leave DN and Password empty." => "Для анонимного доступа оставьте DN и пароль пустыми.",
"One Base DN per line" => "По одному базовому DN в строке.",
"One Base DN per line" => "По одной базе поиска (Base DN) в строке.",
"You can specify Base DN for users and groups in the Advanced tab" => "Вы можете задать Base DN для пользователей и групп на вкладке \"Расширенное\"",
"Limit the access to %s to users meeting this criteria:" => "Ограничить доступ к %s пользователям удовлетворяющим этому критерию:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Этот фильтр указывает какие LDAP пользователи должны иметь доступ к %s.",
"Limit the access to %s to users meeting this criteria:" => "Ограничить доступ к %s пользователям, удовлетворяющим этому критерию:",
"The filter specifies which LDAP users shall have access to the %s instance." => "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к %s.",
"users found" => "пользователей найдено",
"Back" => "Назад",
"Continue" => "Продолжить",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Предупреждение:</b> Приложения user_ldap и user_webdavauth не совместимы. Вы можете наблюдать некорректное поведение. Пожалуйста попросите Вашего системного администратора отключить одно из них.",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Предупреждение:</b> Приложения user_ldap и user_webdavauth несовместимы. Вы можете наблюдать некорректное поведение. Пожалуйста, попросите вашего системного администратора отключить одно из них.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Внимание:</b> Модуль LDAP для PHP не установлен, бэкенд не будет работать. Пожалуйста, попросите вашего системного администратора его установить. ",
"Connection Settings" => "Настройки подключения",
"Configuration Active" => "Конфигурация активна",
"When unchecked, this configuration will be skipped." => "Когда галочка снята, эта конфигурация будет пропущена.",
"User Login Filter" => "Фильтр входа пользователей",
"User Login Filter" => "Фильтр учетных записей",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему. Например: \"uid=%%uid\"",
"Backup (Replica) Host" => "Адрес резервного сервера",
"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Укажите дополнительный резервный сервер. Он должен быть репликой главного LDAP/AD сервера.",
"Backup (Replica) Port" => "Порт резервного сервера",
"Disable Main Server" => "Отключение главного сервера",
"Only connect to the replica server." => "Только подключение к серверу реплик.",
"Disable Main Server" => "Отключить главный сервер",
"Only connect to the replica server." => "Подключаться только к серверу-реплике.",
"Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру сервер LDAP (Windows)",
"Turn off SSL certificate validation." => "Отключить проверку сертификата SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер сертификат SSL сервера LDAP.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер SSL-сертификат сервера LDAP.",
"Cache Time-To-Live" => "Кэш времени жизни",
"in seconds. A change empties the cache." => "в секундах. Изменение очистит кэш.",
"Directory Settings" => "Настройки каталога",
@ -77,8 +78,8 @@ $TRANSLATIONS = array(
"The LDAP attribute to use to generate the user's display name." => "Атрибут LDAP, который используется для генерации отображаемого имени пользователя.",
"Base User Tree" => "База пользовательского дерева",
"One User Base DN per line" => "По одной базовому DN пользователей в строке.",
"User Search Attributes" => "Поисковые атрибуты пользователя",
"Optional; one attribute per line" => "Опционально; один атрибут на линию",
"User Search Attributes" => "Атрибуты поиска пользоватетелей",
"Optional; one attribute per line" => "Опционально; один атрибут в строке",
"Group Display Name Field" => "Поле отображаемого имени группы",
"The LDAP attribute to use to generate the groups's display name." => "Атрибут LDAP, который используется для генерации отображаемого имени группы.",
"Base Group Tree" => "База группового дерева",
@ -86,21 +87,21 @@ $TRANSLATIONS = array(
"Group Search Attributes" => "Атрибуты поиска для группы",
"Group-Member association" => "Ассоциация Группа-Участник",
"Special Attributes" => "Специальные атрибуты",
"Quota Field" => "Поле квота",
"Quota Field" => "Поле квоты",
"Quota Default" => "Квота по умолчанию",
"in bytes" => "в байтах",
"Email Field" => "Поле адресса эллектронной почты",
"User Home Folder Naming Rule" => "Правило именования Домашней Папки Пользователя",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте имя пользователя пустым (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Email Field" => "Поле адреса электронной почты",
"User Home Folder Naming Rule" => "Правило именования домашней папки пользователя",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Internal Username" => "Внутреннее имя пользователя",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "По-умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по-умолчанию для папки пользователя в ownCloud. Оно также портом для удаленных ссылок, к примеру, для всех сервисов *DAV. С помощию данной настройки можно изменить поведение по-умолчанию. Чтобы достичь поведения, как было настроено до изменения, ownCloud 5 выводит атрибут имени пользователя в этом поле. Оставьте его пустым для режима по-умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
"Internal Username Attribute:" => "Аттрибут для внутреннего имени:",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для папки пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.",
"Internal Username Attribute:" => "Атрибут для внутреннего имени:",
"Override UUID detection" => "Переопределить нахождение UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "По-умолчанию, ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно индентифицировать пользователей и группы LDAP. Также, на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по-умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.",
"UUID Attribute for Users:" => "UUID Аттрибуты для Пользователей:",
"UUID Attribute for Groups:" => "UUID Аттрибуты для Групп:",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно индентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.",
"UUID Attribute for Users:" => "UUID-атрибуты для пользователей:",
"UUID Attribute for Groups:" => "UUID-атрибуты для групп:",
"Username-LDAP User Mapping" => "Соответствия Имя-Пользователь LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется доменное имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если доменное имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется различающееся имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если различающееся имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP-подключения! Ни в коем случае не рекомендуется сбрасывать привязки, если система уже находится в эксплуатации, только на этапе тестирования.",
"Clear Username-LDAP User Mapping" => "Очистить соответствия Имя-Пользователь LDAP",
"Clear Groupname-LDAP Group Mapping" => "Очистить соответствия Группа-Группа LDAP"
);

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Select groups" => "Выбрать группы",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Сохранить",
"Help" => "Помощь",
"Password" => "Пароль",
"Back" => "Назад"

View file

@ -5,6 +5,7 @@ $TRANSLATIONS = array(
"Error" => "දෝෂයක්",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "සුරකින්න",
"Help" => "උදව්",
"Host" => "සත්කාරකය",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL අවශ්‍යය වන විට පමණක් හැර, අන් අවස්ථාවන්හිදී ප්‍රොටොකෝලය අත් හැරිය හැක. භාවිතා කරන විට ldaps:// ලෙස ආරම්භ කරන්න",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Potvrdiť vymazanie",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Uložiť",
"Test Configuration" => "Test nastavenia",
"Help" => "Pomoc",
"Add Server Configuration" => "Pridať nastavenia servera.",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Potrdi brisanje",
"_%s group found_::_%s groups found_" => array("","","",""),
"_%s user found_::_%s users found_" => array("","","",""),
"Save" => "Shrani",
"Test Configuration" => "Preizkusne nastavitve",
"Help" => "Pomoč",
"Add Server Configuration" => "Dodaj nastavitve strežnika",

View file

@ -17,6 +17,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Konfirmoni Fshirjen",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "Ruaj",
"Test Configuration" => "Provoni konfigurimet",
"Help" => "Ndihmë",
"Add Server Configuration" => "Shtoni konfigurimet e serverit",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "Грешка",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Сачувај",
"Help" => "Помоћ",
"Host" => "Домаћин",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можете да изоставите протокол, осим ако захтевате SSL. У том случају почните са ldaps://.",

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "Greška",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Snimi",
"Help" => "Pomoć",
"Password" => "Lozinka"
);

View file

@ -26,6 +26,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s användare hittad","%s användare hittade"),
"Invalid Host" => "Felaktig Host",
"Could not find the desired feature" => "Det gick inte hitta den önskade funktionen",
"Save" => "Spara",
"Test Configuration" => "Testa konfigurationen",
"Help" => "Hjälp",
"Limit the access to %s to groups meeting this criteria:" => "Begränsa åtkomsten till %s till grupper som möter följande kriterie:",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "வழு",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "சேமிக்க ",
"Help" => "உதவி",
"Host" => "ஓம்புனர்",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "நீங்கள் SSL சேவையை தவிர உடன்படு வரைமுறையை தவிர்க்க முடியும். பிறகு ldaps:.// உடன் ஆரம்பிக்கவும்",

View file

@ -3,6 +3,7 @@ $TRANSLATIONS = array(
"Error" => "పొరపాటు",
"_%s group found_::_%s groups found_" => array("",""),
"_%s user found_::_%s users found_" => array("",""),
"Save" => "భద్రపరచు",
"Help" => "సహాయం",
"Password" => "సంకేతపదం"
);

View file

@ -15,6 +15,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "ยืนยันการลบทิ้ง",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "บันทึก",
"Help" => "ช่วยเหลือ",
"Add Server Configuration" => "เพิ่มการกำหนดค่าเซิร์ฟเวอร์",
"Host" => "โฮสต์",

View file

@ -27,6 +27,7 @@ $TRANSLATIONS = array(
"_%s user found_::_%s users found_" => array("%s kullanıcı bulundu","%s kullanıcı bulundu"),
"Invalid Host" => "Geçersiz Makine",
"Could not find the desired feature" => "İstenen özellik bulunamadı",
"Save" => "Kaydet",
"Test Configuration" => "Test Yapılandırması",
"Help" => "Yardım",
"Limit the access to %s to groups meeting this criteria:" => "%s erişimini, şu kriterle eşleşen gruplara sınırla:",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "خاتالىق",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "ساقلا",
"Help" => "ياردەم",
"Host" => "باش ئاپپارات",
"Port" => "ئېغىز",

View file

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "Підтвердіть Видалення",
"_%s group found_::_%s groups found_" => array("","",""),
"_%s user found_::_%s users found_" => array("","",""),
"Save" => "Зберегти",
"Test Configuration" => "Тестове налаштування",
"Help" => "Допомога",
"Add Server Configuration" => "Додати налаштування Сервера",

View file

@ -0,0 +1,6 @@
<?php
$TRANSLATIONS = array(
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";

View file

@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"Select groups" => "Chọn nhóm",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "Lưu",
"Help" => "Giúp đỡ",
"Host" => "Máy chủ",
"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Bạn có thể bỏ qua các giao thức, ngoại trừ SSL. Sau đó bắt đầu với ldaps://",

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "确认删除",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "保存",
"Test Configuration" => "测试配置",
"Help" => "帮助",
"Add Server Configuration" => "添加服务器配置",

View file

@ -4,6 +4,7 @@ $TRANSLATIONS = array(
"Error" => "錯誤",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "儲存",
"Help" => "幫助",
"Port" => "連接埠",
"Password" => "密碼"

View file

@ -18,6 +18,7 @@ $TRANSLATIONS = array(
"Confirm Deletion" => "確認刪除",
"_%s group found_::_%s groups found_" => array(""),
"_%s user found_::_%s users found_" => array(""),
"Save" => "儲存",
"Test Configuration" => "測試此設定",
"Help" => "說明",
"Add Server Configuration" => "新增伺服器設定",

View file

@ -63,8 +63,6 @@ class Wizard extends LDAPUtility {
public function countGroups() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
))) {
return false;
@ -98,8 +96,6 @@ class Wizard extends LDAPUtility {
public function countUsers() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
'ldapUserFilter',
))) {
@ -130,8 +126,6 @@ class Wizard extends LDAPUtility {
public function determineAttributes() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
'ldapUserFilter',
))) {
@ -160,8 +154,6 @@ class Wizard extends LDAPUtility {
private function getUserAttributes() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
'ldapUserFilter',
))) {
@ -214,8 +206,6 @@ class Wizard extends LDAPUtility {
private function determineGroups($dbkey, $confkey, $testMemberOf = true) {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
))) {
return false;
@ -242,8 +232,6 @@ class Wizard extends LDAPUtility {
public function determineGroupMemberAssoc() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapGroupFilter',
))) {
return false;
@ -266,8 +254,6 @@ class Wizard extends LDAPUtility {
public function determineGroupObjectClasses() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
))) {
return false;
@ -294,8 +280,6 @@ class Wizard extends LDAPUtility {
public function determineUserObjectClasses() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
))) {
return false;
@ -322,8 +306,6 @@ class Wizard extends LDAPUtility {
public function getGroupFilter() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
))) {
return false;
@ -337,8 +319,6 @@ class Wizard extends LDAPUtility {
public function getUserListFilter() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
))) {
return false;
@ -355,13 +335,12 @@ class Wizard extends LDAPUtility {
public function getUserLoginFilter() {
if(!$this->checkRequirements(array('ldapHost',
'ldapPort',
'ldapAgentName',
'ldapAgentPassword',
'ldapBase',
'ldapUserFilter',
))) {
return false;
}
$filter = $this->composeLdapFilter(self::LFILTER_LOGIN);
if(!$filter) {
throw new \Exception('Cannot create filter');
@ -377,8 +356,6 @@ class Wizard extends LDAPUtility {
*/
public function guessPortAndTLS() {
if(!$this->checkRequirements(array('ldapHost',
'ldapAgentName',
'ldapAgentPassword'
))) {
return false;
}
@ -418,8 +395,6 @@ class Wizard extends LDAPUtility {
*/
public function guessBaseDN() {
if(!$this->checkRequirements(array('ldapHost',
'ldapAgentName',
'ldapAgentPassword',
'ldapPort',
))) {
return false;
@ -799,7 +774,22 @@ class Wizard extends LDAPUtility {
throw new \Exception($error);
}
/**
* @brief checks whether a valid combination of agent and password has been
* provided (either two values or nothing for anonymous connect)
* @return boolean, true if everything is fine, false otherwise
*
*/
private function checkAgentRequirements() {
$agent = $this->configuration->ldapAgentName;
$pwd = $this->configuration->ldapAgentPassword;
return ( (!empty($agent) && !empty($pwd))
|| (empty($agent) && empty($pwd)));
}
private function checkRequirements($reqs) {
$this->checkAgentRequirements();
foreach($reqs as $option) {
$value = $this->configuration->$option;
if(empty($value)) {
@ -1005,9 +995,9 @@ class Wizard extends LDAPUtility {
//In case the port is already provided, we will check this first
if($port > 0) {
$hostInfo = parse_url($host);
if(is_array($hostInfo)
if(!(is_array($hostInfo)
&& isset($hostInfo['scheme'])
&& stripos($hostInfo['scheme'], 'ldaps') === false) {
&& stripos($hostInfo['scheme'], 'ldaps') !== false)) {
$portSettings[] = array('port' => $port, 'tls' => true);
}
$portSettings[] =array('port' => $port, 'tls' => false);

View file

@ -32,7 +32,7 @@
/>
<span>
<input type="number" id="ldap_port" name="ldap_port"
class="invisible lwautosave"
class="lwautosave"
placeholder="<?php p($l->t('Port'));?>" />
</span>
</div>
@ -56,7 +56,7 @@
<div class="tablerow">
<textarea id="ldap_base" name="ldap_base"
class="tablecell invisible lwautosave"
class="tablecell lwautosave"
placeholder="<?php p($l->t('One Base DN per line'));?>"
title="<?php p($l->t('You can specify Base DN for users and groups in the Advanced tab'));?>">
</textarea>

View file

@ -20,8 +20,7 @@
<h3><?php p($l->t('Connection Settings'));?></h3>
<div>
<p><label for="ldap_configuration_active"><?php p($l->t('Configuration Active'));?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php p($_['ldap_configuration_active_default']); ?>" title="<?php p($l->t('When unchecked, this configuration will be skipped.'));?>" /></p>
<p><label for="ldap_login_filter"><?php p($l->t('User Login Filter'));?></label>
<input type="text" id="ldap_login_filter" name="ldap_login_filter"
<p><label for="ldap_login_filter"><?php p($l->t('User Login Filter'));?></label><input type="text" id="ldap_login_filter" name="ldap_login_filter"
data-default="<?php p($_['ldap_login_filter_default']); ?>"
title="<?php p($l->t('Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: "uid=%%uid"'));?>" /></p>
<p><label for="ldap_backup_host"><?php p($l->t('Backup (Replica) Host'));?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php p($_['ldap_backup_host_default']); ?>" title="<?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.'));?>"></p>

View file

@ -0,0 +1,7 @@
<?php
$TRANSLATIONS = array(
"WebDAV Authentication" => "Pengesahan ",
"Address: " => "Alamat:",
"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Butiran pengguna akan dihantar ke alamat ini. Plugin ini memeriksa maklum balas dan akan mentafsir kod status HTTP 401 dan 403 sebagai butiran tidak sah, dan semua maklum balas lain sebagai butiran yang sah."
);
$PLURAL_FORMS = "nplurals=1; plural=0;";

Some files were not shown because too many files have changed in this diff Show more