Merge branch 'seeddms-5.1.x' into seeddms-6.0.x

This commit is contained in:
Uwe Steinmann 2018-03-23 10:16:44 +01:00
commit 40ec1447d5
33 changed files with 503 additions and 96 deletions

View File

@ -45,6 +45,7 @@ class SeedDMS_Controller_RemoveDocument extends SeedDMS_Controller_Common {
$result = $this->callHook('removeDocument', $document);
if($result === null) {
if (!$document->remove()) {
$this->errormsg = "error_occured";
return false;
} else {

View File

@ -59,6 +59,7 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common {
$dms->setCallback('onPreRemoveDocument', 'removeFromIndex', array($index, $indexconf));
if (!$folder->remove()) {
$this->errormsg = 'error_occured';
return false;
} else {

View File

@ -57,6 +57,11 @@ class SeedDMS_Extension_Mgr {
*/
protected $errmsgs;
/*
* Name of json file containg available extension from repository
*/
const repos_list_file = 'repository.json';
/**
* Compare two version
*
@ -132,7 +137,7 @@ class SeedDMS_Extension_Mgr {
*
* @return boolean
*/
public function isWritableExitDir() { /* {{{ */
public function isWritableExtDir() { /* {{{ */
return is_writable($this->extdir);
} /* }}} */
@ -141,6 +146,8 @@ class SeedDMS_Extension_Mgr {
*
* This function will always create a file, even if no extensions
* are installed.
*
* @return boolean true on success, false on error
*/
public function createExtensionConf() { /* {{{ */
$extensions = self::getExtensions();
@ -161,6 +168,11 @@ class SeedDMS_Extension_Mgr {
}
} /* }}} */
/**
* Get names of locally installed extensions by scanning the extension dir
*
* @return string[] list of extension names
*/
protected function getExtensions() { /* {{{ */
$extensions = array();
if(file_exists($this->extdir)) {
@ -178,6 +190,13 @@ class SeedDMS_Extension_Mgr {
return $extensions;
} /* }}} */
/**
* Create zip archive of an extension
*
* @param string $extname name of extension
* @param string $version version of extension (x.y.z)
* @return string name of temporary file with archive
*/
public function createArchive($extname, $version) { /* {{{ */
if(!is_dir($this->extdir ."/". $extname))
return false;
@ -219,6 +238,7 @@ class SeedDMS_Extension_Mgr {
}
$extname = key($EXT_CONF);
if(!$extname || !preg_match('/[a-zA-Z_]*/', $extname)) {
$this->errmsgs[] = "Extension has invalid or no name";
return false;
}
@ -253,6 +273,9 @@ class SeedDMS_Extension_Mgr {
if(!empty($extconf['class']['file']) && !file_exists($dir."/".$extconf['class']['file'])) {
$this->errmsgs[] = "Missing class file";
}
if(!empty($extconf['icon']) && !file_exists($dir."/".$extconf['icon'])) {
$this->errmsgs[] = "Missing icon file";
}
}
if(!isset($options['noconstraints']) || $options['noconstraints'] == false) {
@ -323,6 +346,7 @@ class SeedDMS_Extension_Mgr {
* @return boolean true on success, othewise false
*/
public function updateExtension($file) { /* {{{ */
/* unzip the extension in a temporary directory */
$newdir = $this->cachedir ."/ext.new";
if(!mkdir($newdir, 0755)) {
$this->errmsgs[] = "Cannot create temp. extension directory";
@ -331,6 +355,7 @@ class SeedDMS_Extension_Mgr {
$cmd = "cd ".$newdir."; unzip ".$file;
exec($cmd);
/* Check if extension is complete and fullfills the constraints */
if(!self::checkExtension($newdir)) {
self::rrmdir($newdir);
return false;
@ -356,18 +381,82 @@ class SeedDMS_Extension_Mgr {
} /* }}} */
/**
* Import list of extension from repository
* Get list of extensions from cached repository index
*
* @param boolean $force force download even if file already exists
* This function returns the whole repository index file separated in
* single lines. Each line is either a comment if it starts with an '#'
* or a json encoded array containing the extension configuration.
*
* Run SeedDMS_Extension_Mgr::updateExtensionList() to ensure the
* currently cached extension list file is up to date.
*
* @return string[] list of json strings or comments
*/
public function getExtensionList() { /* {{{ */
if(file_exists($this->cachedir."/repository.json")) {
return file($this->cachedir."/repository.json");
public function getRawExtensionList() { /* {{{ */
if(file_exists($this->cachedir."/".self::repos_list_file)) {
return file($this->cachedir."/".self::repos_list_file);
} else {
return array();
}
} /* }}} */
/**
* Get list of extensions from cached repository index
*
* This function reads the cache respository index and returns
* a list of extension configurations. Only the most recent version
* of an extension will be included.
*
* Run SeedDMS_Extension_Mgr::updateExtensionList() to ensure the
* currently cached extension list file is up to date.
*
* @return array[] list of extension configurations
*/
public function getExtensionList() { /* {{{ */
$list = self::getRawExtensionList();
$result = array();
$vcache = array(); // keep highest version of extension
foreach($list as $e) {
if($e[0] != '#') {
$re = json_decode($e, true);
if(!isset($result[$re['name']])) {
$result[$re['name']] = $re;
$vcache[$re['name']] = $re['version'];
} elseif(self::cmpVersion($re['version'], $vcache[$re['name']]) > 0) {
$result[$re['name']] = $re;
$vcache[$re['name']] = $re['version'];
}
}
}
return $result;
} /* }}} */
/**
* Get list of version of an extension from cached repository index
*
* This function reads the cache respository index and returns
* a list of extension configurations. Only those extensions will
* be included which maches the given name.
*
* Run SeedDMS_Extension_Mgr::updateExtensionList() to ensure the
* currently cached extension list file is up to date.
*
* @return array[] list of extension configurations
*/
public function getExtensionListByName($extname) { /* {{{ */
$list = self::getRawExtensionList();
$result = array();
foreach($list as $e) {
if($e[0] != '#') {
$re = json_decode($e, true);
if($re['name'] == $extname) {
$result[$re['version']] = $re;
}
}
}
return $result;
} /* }}} */
/**
* Import list of extension from repository
*
@ -375,7 +464,7 @@ class SeedDMS_Extension_Mgr {
*/
public function updateExtensionList($version='', $force=false) { /* {{{ */
if($this->reposurl) {
if(!file_exists($this->cachedir."/repository.json") || $force) {
if(!file_exists($this->cachedir."/".self::repos_list_file) || $force) {
$file = @file_get_contents($this->reposurl.($version ? '?seeddms_version='.$version : ''));
if(is_array($http_response_header)) {
$parts=explode(' ',$http_response_header[0]);
@ -385,7 +474,7 @@ class SeedDMS_Extension_Mgr {
return false;
}
}
file_put_contents($this->cachedir."/repository.json", $file);
file_put_contents($this->cachedir."/".self::repos_list_file, $file);
}
return true;
} else {

View File

@ -499,10 +499,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - تم تغيير تاريخ الصلاحية',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'ﺇﺩﺍﺭﺓ ﺍﻼﻣﺩﺍﺩﺎﺗ',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'فبراير',
'file' => 'ملف',
'files' => 'ملفات',
@ -1438,6 +1441,8 @@ URL: [url]',
'set_owner_error' => 'خطأ في تحديد المالك',
'set_password' => 'تحديد كلمة السر',
'set_workflow' => 'تحديد مسار العمل',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'تسجيل الدخول بإسم',
'sign_in' => 'تسجيل الدخول',
'sign_out' => 'تسجيل الخروج',

View File

@ -448,10 +448,13 @@ $text = array(
'expiry_changed_email_subject' => '',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'управление на добавките',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Февруари',
'file' => 'Файл',
'files' => 'Файлове',
@ -1301,6 +1304,8 @@ $text = array(
'set_owner_error' => 'Грешка при установяване на собственика',
'set_password' => 'Установи парола',
'set_workflow' => 'Установи процес',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Вход като',
'sign_in' => 'вход',
'sign_out' => 'изход',

View File

@ -453,10 +453,13 @@ URL: [url]',
'expiry_changed_email_subject' => '',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Gestiona les Extensions',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Febrer',
'file' => 'Fitxer',
'files' => 'Fitxers',
@ -1306,6 +1309,8 @@ URL: [url]',
'set_owner_error' => 'Error a l\'establir el propietari/a',
'set_password' => '',
'set_workflow' => '',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Connectat com',
'sign_in' => 'sign in',
'sign_out' => 'desconnectar',

View File

@ -506,10 +506,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Datum ukončení platnosti změněn',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Správa rozšíření',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Únor',
'file' => 'Soubor',
'files' => 'Soubory',
@ -1447,6 +1450,8 @@ URL: [url]',
'set_owner_error' => 'Chybné nastavení vlastníka',
'set_password' => 'Nastavení hesla',
'set_workflow' => 'Nastavení pracovního postupu',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Přihlášen jako',
'sign_in' => 'Přihlásit',
'sign_out' => 'Odhlásit',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (2582), dgrutsch (22)
// Translators: Admin (2588), dgrutsch (22)
$text = array(
'2_factor_auth' => '2-Faktor Authentifizierung',
@ -529,10 +529,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Ablaufdatum geändert',
'export' => 'Export',
'extension_archive' => 'Erweiterung',
'extension_changelog' => 'Versionshistorie',
'extension_loading' => 'Lade Erweiterungen ...',
'extension_manager' => 'Erweiterungen verwalten',
'extension_mgr_installed' => 'Installiert',
'extension_mgr_no_upload' => 'Der Upload neuer Erweiterungen ist nicht möglich, weil das Verzeichnis für Erweiterungen nicht beschreibbar ist.',
'extension_mgr_repository' => 'Verfügbar',
'extension_version_list' => 'Versionen',
'february' => 'Februar',
'file' => 'Datei',
'files' => 'Dateien',
@ -1527,6 +1530,8 @@ Name: [username]
'set_owner_error' => 'Fehler beim Setzen des Besitzers',
'set_password' => 'Passwort setzen',
'set_workflow' => 'Workflow zuweisen',
'show_extension_changelog' => 'Zeige Versionshistorie',
'show_extension_version_list' => 'Zeige Liste der Versionen',
'signed_in_as' => 'Angemeldet als',
'sign_in' => 'Anmelden',
'sign_out' => 'Abmelden',

View File

@ -448,10 +448,13 @@ $text = array(
'expiry_changed_email_subject' => '',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => '',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Φεβρουάριος',
'file' => 'Αρχείο',
'files' => 'Αρχεία',
@ -1312,6 +1315,8 @@ URL: [url]',
'set_owner_error' => '',
'set_password' => '',
'set_workflow' => '',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Σύνδεση σαν',
'sign_in' => 'Σύνδεση',
'sign_out' => 'Αποσύνδεση',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (1696), archonwang (3), dgrutsch (9), netixw (14)
// Translators: Admin (1701), archonwang (3), dgrutsch (9), netixw (14)
$text = array(
'2_factor_auth' => '2-factor authentication',
@ -530,10 +530,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Expiry date changed',
'export' => 'Export',
'extension_archive' => 'Extension',
'extension_changelog' => 'Changelog',
'extension_loading' => 'Loading extensions ...',
'extension_manager' => 'Manage extensions',
'extension_mgr_installed' => 'Installed',
'extension_mgr_no_upload' => 'Uploading new extensions is not possible because the extentension directory is not writable.',
'extension_mgr_repository' => 'Available',
'extension_version_list' => 'Versions',
'february' => 'February',
'file' => 'File',
'files' => 'Files',
@ -1522,6 +1525,8 @@ Name: [username]
'set_owner_error' => 'Error setting owner',
'set_password' => 'Set Password',
'set_workflow' => 'Set Workflow',
'show_extension_changelog' => 'Show Changelog',
'show_extension_version_list' => 'Show list of versions',
'signed_in_as' => 'Signed in as',
'sign_in' => 'Sign in',
'sign_out' => 'Sign out',

View File

@ -506,10 +506,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Fecha de caducidad modificada',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Administrar extensiones',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Febrero',
'file' => 'Fichero',
'files' => 'Ficheros',
@ -1453,6 +1456,8 @@ URL: [url]',
'set_owner_error' => 'Error estableciendo propietario',
'set_password' => 'Establecer contraseña',
'set_workflow' => 'Establecer Flujo de Trabajo',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Conectado como',
'sign_in' => 'Conectar',
'sign_out' => 'Salir',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (1080), jeromerobert (50), lonnnew (9), Oudiceval (660)
// Translators: Admin (1080), jeromerobert (50), lonnnew (9), Oudiceval (674)
$text = array(
'2_factor_auth' => 'Authentification forte',
@ -271,7 +271,7 @@ URL: [url]',
'comment' => 'Commentaire',
'comment_changed_email' => '',
'comment_for_current_version' => 'Commentaires pour la version actuelle',
'configure_extension' => '',
'configure_extension' => 'Configurer lextension',
'confirm_clear_cache' => 'Confirmer l\'effacement du cache',
'confirm_create_fulltext_index' => 'Oui, je souhaite recréer l\'index de recherche plein texte !',
'confirm_move_document' => 'Veuillez confirmer le déplacement du document.',
@ -350,8 +350,15 @@ URL: [url]',
'documents_with_notification' => 'Documents avec notification',
'document_already_checkedout' => 'Ce document est déjà débloqué',
'document_already_locked' => 'Ce document est déjà verrouillé',
'document_attribute_changed_email_body' => '',
'document_attribute_changed_email_subject' => '',
'document_attribute_changed_email_body' => 'Attribut modifié
Document : [name]
Attribut : [attribute_name]
Ancienne valeur : [attribute_old_value]
Nouvelle valeur : [attribute_new_value]
Dossier parent : [folder_path]
Utilisateur : [username]
URL : [url]',
'document_attribute_changed_email_subject' => '[sitename] : [name] - Attribut modifié',
'document_comment_changed_email' => 'Commentaire modifié',
'document_comment_changed_email_body' => 'Commentaire modifié
Document: [name]
@ -421,7 +428,7 @@ URL: [url]',
'does_not_expire' => 'N\'expire jamais',
'does_not_inherit_access_msg' => 'Accès hérité',
'download' => 'Téléchargement',
'download_extension' => '',
'download_extension' => 'Télécharger lextension en tant que fichier zip',
'download_links' => 'Liens de téléchargement',
'download_link_email_body' => 'Cliquez sur le lien suivant pour télécharger la version [version] du document
« [docname] ».
@ -522,11 +529,14 @@ Utilisateur : [username]
URL : [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Date d\'expiration modifiée',
'export' => '',
'extension_archive' => '',
'extension_archive' => 'Extension',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Gestionnaire d\'extensions',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_mgr_installed' => 'Installées',
'extension_mgr_no_upload' => 'Lajout de nouvelles extensions nest pas possible car le répertoire des extensions nest pas accessible en écriture.',
'extension_mgr_repository' => 'Disponibles',
'extension_version_list' => '',
'february' => 'Février',
'file' => 'Fichier',
'files' => 'Fichiers',
@ -540,8 +550,15 @@ URL : [url]',
'folders' => 'Dossiers',
'folders_and_documents_statistic' => 'Aperçu du contenu',
'folders_with_notification' => 'Dossiers avec notification',
'folder_attribute_changed_email_body' => '',
'folder_attribute_changed_email_subject' => '',
'folder_attribute_changed_email_body' => 'Attribut modifié
Dossier : [name]
Attribut : [attribute_name]
Ancienne valeur : [attribute_old_value]
Nouvelle valeur : [attribute_new_value]
Dossier parent : [folder_path]
Utilisateur : [username]
URL : [url]',
'folder_attribute_changed_email_subject' => '[sitename] : [name] - Attribut modifié',
'folder_comment_changed_email' => 'Commentaire changé',
'folder_comment_changed_email_body' => 'Commentaire changé
Dossier: [name]
@ -618,7 +635,7 @@ URL: [url]',
'identical_version' => 'Nouvelle version identique à l\'actuelle.',
'import' => 'Importer',
'importfs' => 'Importer depuis le système de fichiers',
'import_extension' => '',
'import_extension' => 'Importer lextension',
'import_fs' => 'Importer depuis le système de fichiers',
'import_fs_warning' => 'Limportation peut se faire à partir du dossier de dépôt personnel uniquement. Tous les sous-dossiers et fichiers seront importés. Les fichiers seront immédiatement publiés.',
'include_content' => 'Inclure le contenu',
@ -714,7 +731,7 @@ URL: [url]',
'local_file' => 'Fichier local',
'locked_by' => 'Verrouillé par',
'lock_document' => 'Verrouiller',
'lock_message' => 'Ce document a été verrouillé par [username]. Seuls les utilisateurs autorisés peuvent déverrouiller ce document (voir fin de page).',
'lock_message' => 'Ce document a été verrouillé par [username]. Seuls les utilisateurs autorisés peuvent déverrouiller ce document.',
'lock_status' => 'Statut',
'login' => 'Identification',
'login_disabled_text' => 'Votre compte est désactivé, sans doute à cause de trop nombreuses connexions qui ont échoué.',
@ -1492,6 +1509,8 @@ Nom : [username]
'set_owner_error' => 'Erreur lors de la définition du propriétaire',
'set_password' => 'Définir mot de passe',
'set_workflow' => 'Définir le Workflow',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Connecté en tant que',
'sign_in' => 'Connexion',
'sign_out' => 'Déconnexion',
@ -1525,8 +1544,8 @@ Nom : [username]
'splash_error_add_to_transmittal' => 'Erreur lors de lajout du document à la transmission',
'splash_error_rm_download_link' => 'Erreur lors de la suppression du lien de téléchargement',
'splash_error_send_download_link' => 'Erreur lors de lenvoi du lien de téléchargement',
'splash_extension_import' => '',
'splash_extension_refresh' => '',
'splash_extension_import' => 'Extension installée',
'splash_extension_refresh' => 'Liste des extensions actualisée',
'splash_folder_edited' => 'Dossier modifié',
'splash_importfs' => '[docs] documents et [folders] dossiers importés',
'splash_inherit_access' => 'Droits daccès hérités',

View File

@ -511,10 +511,13 @@ Internet poveznica: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Promijenjen datum isteka',
'export' => 'Izvoz',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Upravljanje ekstenzijama',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Veljača',
'file' => 'Datoteka',
'files' => 'Datoteke',
@ -1474,6 +1477,8 @@ Internet poveznica: [url]',
'set_owner_error' => 'Greška pri postavljanju vlasnika',
'set_password' => 'Postavi lozinku',
'set_workflow' => 'Postavi tok rada',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Prijavljen kao',
'sign_in' => 'Prijava u sustav',
'sign_out' => 'Odjava',

View File

@ -506,10 +506,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Lejárati dátum módosítva',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Bővítmények kezelése',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Február',
'file' => 'Állomány',
'files' => 'Állományok',
@ -1452,6 +1455,8 @@ URL: [url]',
'set_owner_error' => 'Hiba a tulajdonos beállításakor',
'set_password' => 'Jelszó beállítása',
'set_workflow' => 'Munkafolyamat beállítása',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Bejelentkezve mint',
'sign_in' => 'Bejelentkezés',
'sign_out' => 'Kijelentkezés',

View File

@ -512,10 +512,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Scadenza cambiata',
'export' => 'Esporta',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Gestisci le estensioni dei files',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Febbraio',
'file' => 'File',
'files' => 'Files',
@ -1486,6 +1489,8 @@ URL: [url]',
'set_owner_error' => 'Errore nell\'impostazione del proprietario',
'set_password' => 'Imposta Password',
'set_workflow' => 'Imposta il flusso di lavoro',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Utente',
'sign_in' => 'Accesso',
'sign_out' => 'Disconnettiti',

View File

@ -512,10 +512,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename] : [name] - 유효 기간 변경',
'export' => '내보내기',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => '확장자 관리',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => '2월',
'file' => '파일',
'files' => '파일',
@ -1468,6 +1471,8 @@ URL : [url]',
'set_owner_error' => '소유자 설정 오류',
'set_password' => '비밀번호 설정',
'set_workflow' => '워크플로우 설정',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => '로그인',
'sign_in' => '로그인',
'sign_out' => '로그 아웃',

View File

@ -511,10 +511,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Vervaldatum gewijzigd',
'export' => 'export',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Beheer uitbreidingen',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'februari',
'file' => 'Bestand',
'files' => 'Bestanden',
@ -1498,6 +1501,8 @@ Name: [username]
'set_owner_error' => 'Fout bij instellen eigenaar',
'set_password' => 'Stel wachtwoord in',
'set_workflow' => 'Stel workflow in',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Ingelogd als:',
'sign_in' => 'Log in',
'sign_out' => 'Log uit',

View File

@ -499,10 +499,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Zmiana daty wygaśnięcia',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Zarządzanie rozszerzeniami',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Luty',
'file' => 'Plik',
'files' => 'Pliki',
@ -1432,6 +1435,8 @@ URL: [url]',
'set_owner_error' => 'Błąd podczas ustawiania właściciela',
'set_password' => 'Zmień hasło',
'set_workflow' => 'Ustaw proces',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Zalogowany jako',
'sign_in' => 'Zaloguj się',
'sign_out' => 'Wyloguj',

View File

@ -19,7 +19,7 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// Translators: Admin (974), flaviove (627), lfcristofoli (352)
// Translators: Admin (976), flaviove (627), lfcristofoli (352)
$text = array(
'2_factor_auth' => '',
@ -291,8 +291,8 @@ URL: [url]',
'confirm_update_transmittalitem' => '',
'content' => 'Conteúdo',
'continue' => 'Continue',
'converter_new_cmd' => '',
'converter_new_mimetype' => '',
'converter_new_cmd' => 'Comando',
'converter_new_mimetype' => 'Novo mimetype',
'copied_to_checkout_as' => '',
'create_download_link' => '',
'create_fulltext_index' => 'Criar índice de texto completo',
@ -505,10 +505,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Data de validade mudou',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Gerenciar extensões',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'February',
'file' => 'Arquivo',
'files' => 'Arquivos',
@ -1450,6 +1453,8 @@ URL: [url]',
'set_owner_error' => 'Proprietário configuração de erro',
'set_password' => 'Definir Senha',
'set_workflow' => 'Definir fluxo de trabalho',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Logado como',
'sign_in' => 'Entrar',
'sign_out' => 'Sair',

View File

@ -511,10 +511,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Data de expirare schimbată',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Gestionați extensiile',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Februarie',
'file' => 'Fișier',
'files' => 'Fișiere',
@ -1475,6 +1478,8 @@ URL: [url]',
'set_owner_error' => 'Eroare setare proprietar',
'set_password' => 'Setare Parolă',
'set_workflow' => 'Setare Workflow',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Autentificat ca',
'sign_in' => 'Sign in',
'sign_out' => 'Sign out',

View File

@ -511,10 +511,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: изменен срок действия для «[name]»',
'export' => 'Экспорт',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Управление расширениями',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Февраль',
'file' => 'Файл',
'files' => 'Файлы',
@ -1482,6 +1485,8 @@ URL: [url]',
'set_owner_error' => 'Ошибка при установке владельца',
'set_password' => 'Установить пароль',
'set_workflow' => 'Установить процесс',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Пользователь',
'sign_in' => 'Войти',
'sign_out' => 'Выйти',

View File

@ -460,10 +460,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Dátum vypršania platnosti bol zmenený',
'export' => 'Exportovať',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Správa rozšírení',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Február',
'file' => 'Súbor',
'files' => 'Súbory',
@ -1313,6 +1316,8 @@ URL: [url]',
'set_owner_error' => '',
'set_password' => 'Nastaviť heslo',
'set_workflow' => '',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Prihlásený ako',
'sign_in' => 'Prihlásiť sa',
'sign_out' => 'odhlásiť',

View File

@ -524,10 +524,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Utgångsdatum ändrat',
'export' => 'Exportera',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Hantera tillägg',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'februari',
'file' => 'Fil',
'files' => 'Filer',
@ -1495,6 +1498,8 @@ Kommentar: [comment]',
'set_owner_error' => 'Fel vid val av ägare',
'set_password' => 'Ange lösenord',
'set_workflow' => 'Välj arbetsflöde',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Inloggad som',
'sign_in' => 'Logga in',
'sign_out' => 'Logga ut',

View File

@ -505,10 +505,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: [name] - Bitiş tarihi değişti',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Uzantıları düzenle',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Şubat',
'file' => 'Dosya',
'files' => 'Dosyalar',
@ -1454,6 +1457,8 @@ URL: [url]',
'set_owner_error' => 'Sahip belirlenirken hata oluştu',
'set_password' => 'Parola Belirle',
'set_workflow' => 'İş Akışı Tanımla',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Giriş yapan kullanıcı',
'sign_in' => 'Giriş',
'sign_out' => ıkış',

View File

@ -511,10 +511,13 @@ URL: [url]',
'expiry_changed_email_subject' => '[sitename]: зміна дати терміну виконання для «[name]»',
'export' => 'Експорт',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => 'Керування розширеннями',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => 'Лютий',
'file' => 'Файл',
'files' => 'Файли',
@ -1475,6 +1478,8 @@ URL: [url]',
'set_owner_error' => 'Помилка при призначенні власника',
'set_password' => 'Встановити пароль',
'set_workflow' => 'Вказати процес',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => 'Користувач',
'sign_in' => 'Увійти',
'sign_out' => 'Вийти',

View File

@ -507,10 +507,13 @@ URL: [url]',
'expiry_changed_email_subject' => '',
'export' => '导出',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => '扩展管理器',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => '二 月',
'file' => '文件',
'files' => '文件',
@ -1456,6 +1459,8 @@ URL: [url]',
'set_owner_error' => '错误 设置所有者',
'set_password' => '设定密码',
'set_workflow' => '',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => '登录为',
'sign_in' => '登录',
'sign_out' => '登出',

View File

@ -452,10 +452,13 @@ URL: [url]',
'expiry_changed_email_subject' => '',
'export' => '',
'extension_archive' => '',
'extension_changelog' => '',
'extension_loading' => '',
'extension_manager' => '整體索引進度',
'extension_mgr_installed' => '',
'extension_mgr_no_upload' => '',
'extension_mgr_repository' => '',
'extension_version_list' => '',
'february' => '二 月',
'file' => '文件',
'files' => '文件',
@ -1305,6 +1308,8 @@ URL: [url]',
'set_owner_error' => '錯誤 設置所有者',
'set_password' => '',
'set_workflow' => '',
'show_extension_changelog' => '',
'show_extension_version_list' => '',
'signed_in_as' => '登錄為',
'sign_in' => '',
'sign_out' => '登出',

View File

@ -72,7 +72,7 @@ elseif ($action == "refresh") { /* {{{ */
header("Location:../out/out.ExtensionMgr.php?currenttab=".$currenttab);
} /* }}} */
elseif ($action == "upload") { /* {{{ */
if(!$extmgr->isWritableExitDir()) {
if(!$extmgr->isWritableExtDir()) {
UI::exitError(getMLText("admin_tools"),getMLText("extension_mgr_no_upload"));
}
if($_FILES['userfile']['error']) {

View File

@ -41,6 +41,10 @@ if(isset($_GET['currenttab']))
$currenttab = $_GET['currenttab'];
else
$currenttab = 'installed';
if(isset($_GET['extensionname']))
$extname = $_GET['extensionname'];
else
$extname = '';
if($view) {
$view->setParam('httproot', $settings->_httpRoot);
@ -49,6 +53,7 @@ if($view) {
$view->setParam('accessobject', $accessop);
$view->setParam('extmgr', $extmgr);
$view->setParam('currenttab', $currenttab);
$view->setParam('extname', $extname);
$view->setParam('reposurl', $reposurl);
$view($_GET);
exit;

View File

@ -296,6 +296,13 @@ ul.qq-upload-list li span {
display: none;
}
@media (min-width: 1200px) {
.modal-wide {
width: 800px;
margin-left: -400px;
}
}
@media (max-width: 480px) {
.nav-tabs > li {
float:none;

View File

@ -63,6 +63,66 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style {
<?php
} /* }}} */
function info() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$extmgr = $this->params['extmgr'];
$extname = $this->params['extname'];
echo "<table class=\"table _table-condensed\">\n";
print "<thead>\n<tr>\n";
print "<th></th>\n";
print "<th>".getMLText('name')."</th>\n";
print "<th>".getMLText('version')."</th>\n";
print "<th>".getMLText('author')."</th>\n";
print "<th></th>\n";
print "</tr></thead><tbody>\n";
$list = $extmgr->getExtensionListByName($extname);
foreach($list as $re) {
$extmgr->checkExtension($re);
$checkmsgs = $extmgr->getErrorMsgs();
$needsupdate = !isset($GLOBALS['EXT_CONF'][$re['name']]) || SeedDMS_Extension_Mgr::cmpVersion($re['version'], $GLOBALS['EXT_CONF'][$re['name']]['version']) > 0;
echo "<tr";
if(isset($GLOBALS['EXT_CONF'][$re['name']])) {
if($needsupdate)
echo " class=\"warning\"";
else
echo " class=\"success\"";
}
echo ">";
echo "<td width=\"32\">".($re['icon-data'] ? '<img width="32" height="32" alt="'.$re['name'].'" title="'.$re['name'].'" src="'.$re['icon-data'].'">' : '')."</td>";
echo "<td>".$re['title']."<br /><small>".$re['description']."</small>";
if($checkmsgs)
echo "<div><img src=\"".$this->getImgPath("attention.gif")."\"> ".implode('<br /><img src="'.$this->getImgPath("attention.gif").'"> ', $checkmsgs)."</div>";
echo "</td>";
echo "<td nowrap>".$re['version']."<br /><small>".$re['releasedate']."</small></td>";
echo "<td nowrap>".$re['author']['name']."<br /><small>".$re['author']['company']."</small></td>";
echo "<td nowrap>";
echo "<div class=\"list-action\">";
if(!$checkmsgs && $extmgr->isWritableExtDir())
echo "<form style=\"display: inline-block; margin: 0px;\" method=\"post\" action=\"../op/op.ExtensionMgr.php\" id=\"".$re['name']."-import\">".createHiddenFieldWithKey('extensionmgr')."<input type=\"hidden\" name=\"action\" value=\"import\" /><input type=\"hidden\" name=\"currenttab\" value=\"repository\" /><input type=\"hidden\" name=\"url\" value=\"".$re['filename']."\" /><a class=\"import\" data-extname=\"".$re['name']."\" title=\"".getMLText('import_extension')."\"><i class=\"icon-download\"></i></a></form>";
echo "</div>";
echo "</td>";
echo "</tr>";
}
echo "</tbody></table>\n";
} /* }}} */
function changelog() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$extdir = $this->params['extdir'];
$extmgr = $this->params['extmgr'];
$extname = $this->params['extname'];
if(isset($GLOBALS['EXT_CONF'][$extname])) {
$extconf = $GLOBALS['EXT_CONF'][$extname];
if(!empty($extconf['changelog']) && file_exists($extdir."/".$extname."/".$extconf['changelog'])) {
echo '<div style="white-space: pre-wrap; font-family: monospace; padding: 0px;">'.file_get_contents($extdir."/".$extname."/".$extconf['changelog'])."</div>";
}
}
} /* }}} */
function show() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
@ -82,7 +142,7 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style {
<div class="row-fluid">
<div class="span4">
<?php
if($extmgr->isWritableExitDir()) {
if($extmgr->isWritableExtDir()) {
?>
<form class="form-horizontal" method="post" enctype="multipart/form-data" action="../op/op.ExtensionMgr.php">
<?= createHiddenFieldWithKey('extensionmgr') ?>
@ -135,14 +195,11 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style {
echo "<tr class=\"success\">";
} else
echo "<tr class=\"warning\">";
echo "<td>";
echo "<td width=\"32\">";
if($extconf['icon'])
echo "<img src=\"".$httproot."ext/".$extname."/".$extconf['icon']."\" alt=\"".$extname."\" title=\"".$extname."\">";
echo "<img width=\"32\" height=\"32\" src=\"".$httproot."ext/".$extname."/".$extconf['icon']."\" alt=\"".$extname."\" title=\"".$extname."\">";
echo "</td>";
echo "<td>".$extconf['title'];
if(!empty($extconf['changelog']) && file_exists($extdir."/".$extname."/".$extconf['changelog'])) {
echo $this->printPopupBox("<i class=\"icon-reorder\"></i>", '<div style="white-space: pre-wrap; font-family: monospace; padding: 0px;">'.file_get_contents($extdir."/".$extname."/".$extconf['changelog'])."</div>", true);
}
echo "<br /><small>".$extconf['description']."</small>";
if($errmsgs)
echo "<div><img src=\"".$this->getImgPath("attention.gif")."\"> ".implode('<br /><img src="'.$this->getImgPath("attention.gif").'"> ', $errmsgs)."</div>";
@ -153,6 +210,9 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style {
echo "<td nowrap><a href=\"mailto:".$extconf['author']['email']."\">".$extconf['author']['name']."</a><br /><small>".$extconf['author']['company']."</small></td>";
echo "<td nowrap>";
echo "<div class=\"list-action\">";
if(!empty($extconf['changelog']) && file_exists($extdir."/".$extname."/".$extconf['changelog'])) {
echo "<a data-target=\"#extensionChangelog\" href=\"../out/out.ExtensionMgr.php?action=changelog&extensionname=".$extname."\" data-toggle=\"modal\" title=\"".getMLText('show_extension_changelog')."\"><i class=\"icon-reorder\"></i></a>\n";
}
if($extconf['config'])
echo "<a href=\"../out/out.Settings.php?currenttab=extensions#".$extname."\" title=\"".getMLText('configure_extension')."\"><i class=\"icon-cogs\"></i></a>";
echo "<form style=\"display: inline-block; margin: 0px;\" method=\"post\" action=\"../op/op.ExtensionMgr.php\" id=\"".$extname."-download\">".createHiddenFieldWithKey('extensionmgr')."<input type=\"hidden\" name=\"action\" value=\"download\" /><input type=\"hidden\" name=\"extname\" value=\"".$extname."\" /><a class=\"download\" data-extname=\"".$extname."\" title=\"".getMLText('download_extension')."\"><i class=\"icon-download\"></i></a></form>";
@ -183,35 +243,34 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style {
print "<th></th>\n";
print "</tr></thead><tbody>\n";
$list = $extmgr->getExtensionList();
foreach($list as $e) {
if($e[0] != '#') {
$re = json_decode($e, true);
$extmgr->checkExtension($re);
$checkmsgs = $extmgr->getErrorMsgs();
$needsupdate = !isset($GLOBALS['EXT_CONF'][$re['name']]) || SeedDMS_Extension_Mgr::cmpVersion($re['version'], $GLOBALS['EXT_CONF'][$re['name']]['version']) > 0;
echo "<tr";
if(isset($GLOBALS['EXT_CONF'][$re['name']])) {
if($needsupdate)
echo " class=\"warning\"";
else
echo " class=\"success\"";
}
echo ">";
echo "<td></td>";
echo "<td>".$re['title']."<br /><small>".$re['description']."</small>";
if($checkmsgs)
echo "<div><img src=\"".$this->getImgPath("attention.gif")."\"> ".implode('<br /><img src="'.$this->getImgPath("attention.gif").'"> ', $checkmsgs)."</div>";
echo "</td>";
echo "<td nowrap>".$re['version']."<br /><small>".$re['releasedate']."</small></td>";
echo "<td nowrap>".$re['author']['name']."<br /><small>".$re['author']['company']."</small></td>";
echo "<td nowrap>";
echo "<div class=\"list-action\">";
if(!$checkmsgs && $extmgr->isWritableExitDir())
echo "<form style=\"display: inline-block; margin: 0px;\" method=\"post\" action=\"../op/op.ExtensionMgr.php\" id=\"".$re['name']."-import\">".createHiddenFieldWithKey('extensionmgr')."<input type=\"hidden\" name=\"action\" value=\"import\" /><input type=\"hidden\" name=\"currenttab\" value=\"repository\" /><input type=\"hidden\" name=\"url\" value=\"".$re['filename']."\" /><a class=\"import\" data-extname=\"".$re['name']."\" title=\"".getMLText('import_extension')."\"><i class=\"icon-download\"></i></a></form>";
echo "</div>";
echo "</td>";
echo "</tr>";
foreach($list as $re) {
$extmgr->checkExtension($re);
$checkmsgs = $extmgr->getErrorMsgs();
$needsupdate = !isset($GLOBALS['EXT_CONF'][$re['name']]) || SeedDMS_Extension_Mgr::cmpVersion($re['version'], $GLOBALS['EXT_CONF'][$re['name']]['version']) > 0;
echo "<tr";
if(isset($GLOBALS['EXT_CONF'][$re['name']])) {
if($needsupdate)
echo " class=\"warning\"";
else
echo " class=\"success\"";
}
echo ">";
echo "<td width=\"32\">".($re['icon-data'] ? '<img width="32" height="32" alt="'.$re['name'].'" title="'.$re['name'].'" src="'.$re['icon-data'].'">' : '')."</td>";
echo "<td>".$re['title'];
echo "<br /><small>".$re['description']."</small>";
if($checkmsgs)
echo "<div><img src=\"".$this->getImgPath("attention.gif")."\"> ".implode('<br /><img src="'.$this->getImgPath("attention.gif").'"> ', $checkmsgs)."</div>";
echo "</td>";
echo "<td nowrap>".$re['version']."<br /><small>".$re['releasedate']."</small></td>";
echo "<td nowrap>".$re['author']['name']."<br /><small>".$re['author']['company']."</small></td>";
echo "<td nowrap>";
echo "<div class=\"list-action\">";
echo "<a data-target=\"#extensionInfo\" href=\"../out/out.ExtensionMgr.php?action=info&extensionname=".$re['name']."\" data-toggle=\"modal\" title=\"".getMLText('show_extension_version_list')."\"><i class=\"icon-list-ol\"></i></a>\n";
if(!$checkmsgs && $extmgr->isWritableExtDir())
echo "<form style=\"display: inline-block; margin: 0px;\" method=\"post\" action=\"../op/op.ExtensionMgr.php\" id=\"".$re['name']."-import\">".createHiddenFieldWithKey('extensionmgr')."<input type=\"hidden\" name=\"action\" value=\"import\" /><input type=\"hidden\" name=\"currenttab\" value=\"repository\" /><input type=\"hidden\" name=\"url\" value=\"".$re['filename']."\" /><a class=\"import\" data-extname=\"".$re['name']."\" title=\"".getMLText('import_extension')."\"><i class=\"icon-download\"></i></a></form>";
echo "</div>";
echo "</td>";
echo "</tr>";
}
echo "</tbody></table>\n";
?>
@ -227,7 +286,32 @@ class SeedDMS_View_ExtensionMgr extends SeedDMS_Bootstrap_Style {
</div>
</div>
</div>
</div>
</div>
<div class="modal modal-wide hide" id="extensionInfo" tabindex="-1" role="dialog" aria-labelledby="extensionInfoLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="extensionInfoLabel"><?= getMLText("extension_version_list") ?></h3>
</div>
<div class="modal-body">
<p><?php printMLText('extension_loading') ?></p>
</div>
<div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"><?php printMLText("close") ?></button>
</div>
</div>
<div class="modal modal-wide hide" id="extensionChangelog" tabindex="-1" role="dialog" aria-labelledby="extensionChangelogLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="extensionChangelogLabel"><?= getMLText("extension_changelog") ?></h3>
</div>
<div class="modal-body">
<p><?php printMLText('extension_loading') ?></p>
</div>
<div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"><?php printMLText("close") ?></button>
</div>
</div>
<?php
$this->contentEnd();
$this->htmlEndPage();

View File

@ -15,9 +15,10 @@ if($settings->_logFileEnable) {
$logname = $settings->_contentDir."log/webdav-".$logname.".log";
if(!file_exists($settings->_contentDir.'log'))
@mkdir($settings->_contentDir.'log');
if(file_exists($settings->_contentDir.'log') && is_dir($settings->_contentDir.'log'))
if(file_exists($settings->_contentDir.'log') && is_dir($settings->_contentDir.'log')) {
$log = Log::factory('file', $logname);
else
$log->setMask(Log::MAX(PEAR_LOG_INFO));
} else
$log = null;
} else {
$log = null;

View File

@ -55,18 +55,6 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
*/
function ServeRequest($dms = null, $logger = null) /* {{{ */
{
// special treatment for litmus compliance test
// reply on its identifier header
// not needed for the test itself but eases debugging
if( function_exists('apache_request_headers') ) {
foreach (apache_request_headers() as $key => $value) {
if (stristr($key, "litmus")) {
error_log("Litmus test $value");
header("X-Litmus-reply: ".$value);
}
}
}
// set root directory, defaults to webserver document root if not set
if ($dms) {
$this->dms = $dms;
@ -77,12 +65,18 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
// set logger
$this->logger = $logger;
// establish connection to property/locking db
/*
mysql_connect($this->db_host, $this->db_user, $this->db_passwd) or die(mysql_error());
mysql_select_db($this->db_name) or die(mysql_error());
*/
// TODO throw on connection problems
// special treatment for litmus compliance test
// reply on its identifier header
// not needed for the test itself but eases debugging
if( function_exists('apache_request_headers') ) {
foreach (apache_request_headers() as $key => $value) {
if (stristr($key, "litmus")) {
if($this->logger)
$this->logger->log('Litmus test '.$value, PEAR_LOG_DEBUG);
header("X-Litmus-reply: ".$value);
}
}
}
// let the base class do all the work
parent::ServeRequest();
@ -140,11 +134,17 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
$userobj = $authobj->authenticate($user, $pass);
} /* }}} */
if(!$userobj)
if(!$userobj) {
if($this->logger)
$this->logger->log('check_auth: No such user', PEAR_LOG_NOTICE);
return false;
}
if(($userobj->getID() == $settings->_guestID) && (!$settings->_enableGuestLogin))
if(($userobj->getID() == $settings->_guestID) && (!$settings->_enableGuestLogin)) {
if($this->logger)
$this->logger->log('check_auth: Login as guest is not allowed', PEAR_LOG_NOTICE);
return false;
}
if($userobj->isDisabled())
return false;
@ -538,6 +538,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
*/
function PUT(&$options) /* {{{ */
{
global $settings, $indexconf;
$this->log_options('PUT', $options);
$path = $options["path"];
@ -555,6 +557,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
/* Check if user is logged in */
if(!$this->user) {
if($this->logger)
$this->logger->log('PUT: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -580,47 +584,112 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
if($lastDotIndex === false) $fileType = ".";
else $fileType = substr($name, $lastDotIndex);
}
if($this->logger)
$this->logger->log('PUT: file is of type '.$mimetype, PEAR_LOG_INFO);
/* First check whether there is already a file with the same name */
if($this->useorgfilename)
$document = $this->dms->getDocumentByOriginalFilename($name, $folder);
else
$document = $this->dms->getDocumentByName($name, $folder);
if($document) {
if($this->logger)
$this->logger->log('PUT: replacing document id='.$document->getID(), PEAR_LOG_INFO);
if ($document->getAccessMode($this->user) < M_READWRITE) {
if($this->logger)
$this->logger->log('PUT: no access on document', PEAR_LOG_ERR);
unlink($tmpFile);
return "403 Forbidden";
} else{
} else {
/* Check if the new version iѕ identical to the current version.
* In that case just update the modification date
*/
$lc = $document->getLatestContent();
if($lc->getChecksum() == SeedDMS_Core_File::checksum($tmpFile)) {
if($this->logger)
$this->logger->log('PUT: identical to latest version', PEAR_LOG_INFO);
$lc->setDate();
} else {
if($this->user->getID() == $lc->getUser()->getID() &&
$name == $lc->getOriginalFileName() &&
$fileType == $lc->getFileType() &&
$mimetype == $lc->getMimeType()) {
if($this->logger)
$this->logger->log('PUT: replacing latest version', PEAR_LOG_INFO);
if(!$document->replaceContent($lc->getVersion(), $this->user, $tmpFile, $name, $fileType, $mimetype)) {
if($this->logger)
$this->logger->log('PUT: error replacing latest version', PEAR_LOG_ERR);
unlink($tmpFile);
return "403 Forbidden";
}
} else {
if($this->logger)
$this->logger->log('PUT: adding new version', PEAR_LOG_INFO);
if(!$document->addContent('', $this->user, $tmpFile, $name, $fileType, $mimetype, array(), array(), 0)) {
if($this->logger)
$this->logger->log('PUT: error adding new version', PEAR_LOG_ERR);
unlink($tmpFile);
return "409 Conflict";
}
}
}
}
} else {
if($this->logger)
$this->logger->log('PUT: adding new document', PEAR_LOG_INFO);
if ($folder->getAccessMode($this->user) < M_READWRITE) {
if($this->logger)
$this->logger->log('PUT: no access on folder', PEAR_LOG_ERR);
unlink($tmpFile);
return "403 Forbidden";
} elseif(!$res = $folder->addDocument($name, '', 0, $this->user, '', array(), $tmpFile, $name, $fileType, $mimetype, 0, array(), array(), 0, "")) {
}
if($settings->_enableFullSearch) {
$index = $indexconf['Indexer']::open($settings->_luceneDir);
$indexconf['Indexer']::init($settings->_stopWordsFile);
} else {
$index = null;
$indexconf = null;
}
$controller = Controller::factory('AddDocument');
$controller->setParam('dms', $this->dms);
$controller->setParam('user', $this->user);
$controller->setParam('documentsource', 'webdav');
$controller->setParam('folder', $folder);
$controller->setParam('index', $index);
$controller->setParam('indexconf', $indexconf);
$controller->setParam('name', $name);
$controller->setParam('comment', '');
$controller->setParam('expires', 0);
$controller->setParam('keywords', '');
$controller->setParam('categories', array());
$controller->setParam('owner', $this->user);
$controller->setParam('userfiletmp', $tmpFile);
$controller->setParam('userfilename', $name);
$controller->setParam('filetype', $fileType);
$controller->setParam('userfiletype', $mimetype);
$minmax = $folder->getDocumentsMinMax();
if($settings->_defaultDocPosition == 'start')
$controller->setParam('sequence', $minmax['min'] - 1);
else
$controller->setParam('sequence', $minmax['max'] + 1);
$controller->setParam('reviewers', array());
$controller->setParam('approvers', array());
$controller->setParam('reqversion', 0);
$controller->setParam('versioncomment', '');
$controller->setParam('attributes', array());
$controller->setParam('attributesversion', array());
$controller->setParam('workflow', null);
$controller->setParam('notificationgroups', array());
$controller->setParam('notificationusers', array());
$controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText);
$controller->setParam('defaultaccessdocs', $settings->_defaultAccessDocs);
if(!$document = $controller->run()) {
// if(!$res = $folder->addDocument($name, '', 0, $this->user, '', array(), $tmpFile, $name, $fileType, $mimetype, 0, array(), array(), 0, "")) {
unlink($tmpFile);
return "409 Conflict";
if($this->logger)
$this->logger->log('PUT: error adding object: '.$controller->getErrorMsg(), PEAR_LOG_ERR);
return "409 Conflict ".$controller->getErrorMsg();
}
}
@ -655,6 +724,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
/* Check if parent of new folder is a folder */
if (get_class($folder) != $this->dms->getClassname('folder')) {
if($this->logger)
$this->logger->log('MKCOL: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -669,10 +740,14 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
/* Check if user is logged in */
if(!$this->user) {
if($this->logger)
$this->logger->log('MKCOL: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
if ($folder->getAccessMode($this->user) < M_READWRITE) {
if($this->logger)
$this->logger->log('MKCOL: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -688,7 +763,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
$controller->setParam('notificationusers', array());
if(!$subFolder = $controller->run()) {
// if (!$folder->addSubFolder($name, '', $this->user, 0)) {
return "403 Forbidden";
return "409 Conflict ".$controller->getErrorMsg();
}
return ("201 Created");
@ -718,6 +793,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
// check for access rights
if($obj->getAccessMode($this->user) < M_ALL) {
if($this->logger)
$this->logger->log('DELETE: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -731,6 +808,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
if (get_class($obj) == $this->dms->getClassname('folder')) {
if($obj->hasDocuments() || $obj->hasSubFolders()) {
if($this->logger)
$this->logger->log('DELETE: cannot delete, folder has children', PEAR_LOG_ERR);
return "409 Conflict";
}
$controller = Controller::factory('RemoveFolder');
@ -741,7 +820,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
$controller->setParam('indexconf', $indexconf);
if(!$controller->run()) {
// if(!$obj->remove()) {
return "409 Conflict";
return "409 Conflict ".$controller->getErrorMsg();
}
} else {
$controller = Controller::factory('RemoveDocument');
@ -752,7 +831,7 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
$controller->setParam('indexconf', $indexconf);
if(!$controller->run()) {
// if(!$obj->remove()) {
return "409 Conflict";
return "409 Conflict ".$controller->getErrorMsg();
}
}
@ -802,6 +881,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
* destination object
*/
if (($objsource->getAccessMode($this->user) < M_READWRITE) || ($objdest->getAccessMode($this->user) < M_READWRITE)) {
if($this->logger)
$this->logger->log('MOVE: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -901,6 +982,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
* access on the destination object
*/
if (($objsource->getAccessMode($this->user) < M_READ) || ($objdest->getAccessMode($this->user) < M_READWRITE)) {
if($this->logger)
$this->logger->log('COPY: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -987,12 +1070,10 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
$controller->setParam('notificationusers', array());
$controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText);
$controller->setParam('defaultaccessdocs', $settings->_defaultAccessDocs);
if(!$document = $controller->run()) {
// if(!$newdoc = $objdest->addDocument($newdocname, '', 0, $this->user, '', array(), $fspath, $content->getOriginalFileName(), $content->getFileType(), $content->getMimeType(), 0, array(), array(), 0, "")) {
if($this->logger)
$this->logger->log('COPY: error copying object', PEAR_LOG_INFO);
$this->logger->log('COPY: error copying object', PEAR_LOG_ERR);
return "409 Conflict";
}
return "201 Created";
@ -1090,6 +1171,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
}
if ($obj->getAccessMode($this->user) < M_READWRITE) {
if($this->logger)
$this->logger->log('LOCK: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}
@ -1128,6 +1211,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server
}
if ($obj->getAccessMode($this->user) < M_READWRITE) {
if($this->logger)
$this->logger->log('UNLOCK: access forbidden', PEAR_LOG_ERR);
return "403 Forbidden";
}