Commit ec7faa7d authored by Frank Bergmann's avatar Frank Bergmann

Initial Import

parents
Pipeline #552 failed with stages
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="ar_LB" charset="utf-8">
<msg key="Disable">غير مفعل</msg>
<msg key="Disable_Folders"> عدم تفعيل الحافظات المختارة</msg>
<msg key="Disabled">غير مفعل</msg>
<msg key="Enable">تفعيل</msg>
<msg key="Enable_Folders">تفعيل الحافظات المختارة</msg>
<msg key="Enabled">مفعل</msg>
<msg key="Folder_Name">اسم الحافظة</msg>
<msg key="Folder_URL">حافظة العناوين</msg>
<msg key="Folders_Disabled">عدم تفعيل الحافظات المختارة لدعم WebDAV </msg>
<msg key="Folders_Enabled">تفعيل الحافظات المختارة لدعم WebDAV </msg>
<msg key="Package_Name">اسم الحزمة</msg>
<msg key="Package_Type">نوع الحزمة</msg>
<msg key="Status">الحالة</msg>
<msg key="WebDAV_Folder_Administration">WebDAV حافظة الادارة ل</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="ca_ES" charset="ISO-8859-1">
<msg key="Disable">Deshabitar </msg>
<msg key="Disable_Folders">Deshabitar les carpetes seleccionades </msg>
<msg key="Disabled">Deshabilitat </msg>
<msg key="Enable">Habilitar </msg>
<msg key="Enable_Folders">Habilitar les carpetes seleccionades </msg>
<msg key="Enabled">Habilitat</msg>
<msg key="Folder_Name">Nom de la carpeta </msg>
<msg key="Folder_URL">Carpeta URL </msg>
<msg key="Folders_Disabled">Carpetes seleccionades deshabilitades per a suport WebDav. </msg>
<msg key="Folders_Enabled">Carpetes seleccionades habilitades per a suport WebDAV. </msg>
<msg key="Package_Name">Nom del paquet </msg>
<msg key="Package_Type">Tipus de paquet </msg>
<msg key="Status">Estat </msg>
<msg key="WebDAV_Folder_Administration">Administraci WebDAV de la carpeta </msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="da_DK" charset="ISO-8859-1">
<msg key="Disable">Deaktiver</msg>
<msg key="Disable_Folders">Deaktiver Valgte Mapper</msg>
<msg key="Disabled">Deaktiveret</msg>
<msg key="Enable">Aktiver</msg>
<msg key="Enable_Folders">Aktiver Valgte Mapper</msg>
<msg key="Enabled">Aktiveret</msg>
<msg key="Folder_Name">Mappenavn</msg>
<msg key="Folder_URL">Mappe URL</msg>
<msg key="Folders_Disabled">Valgte Mapper deaktiveret for WebDAV-understttelse.</msg>
<msg key="Folders_Enabled">Valgte Mapper aktiveret for WebDAV-understttelse.</msg>
<msg key="Package_Name">Pakke Navn</msg>
<msg key="Package_Type">Pakke Type</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">WebDAV Mappeadministration</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="de_DE" charset="ISO-8859-1">
<msg key="Disable">Deaktivieren</msg>
<msg key="Disable_Folders">Die ausgewhlten Ordner deaktivieren</msg>
<msg key="Disabled">Deaktiviert</msg>
<msg key="Enable">Aktivieren</msg>
<msg key="Enable_Folders">Die ausgewhlten Ordner aktivieren</msg>
<msg key="Enabled">Aktiviert</msg>
<msg key="Folder_Name">Ordnername</msg>
<msg key="Folder_URL">Ordner-URL</msg>
<msg key="Folders_Disabled">Die ausgewhlten Ordner wurden fr die WebDAV-Untersttzung deaktiviert</msg>
<msg key="Folders_Enabled">Die ausgewhlten Ordner wurden fr die WebDAV-Untersttzung aktiviert.</msg>
<msg key="Package_Name">Paket-Bezeichnung</msg>
<msg key="Package_Type">Paket-Typ</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">WebDAV-Ordnerverwaltung</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="el_GR" charset="utf-8">
<msg key="Disable">Απενεργοποίηση</msg>
<msg key="Disable_Folders">Απενεργοποίηση επιλεγμένων φακέλων</msg>
<msg key="Disabled">Απενεργοποιημένο</msg>
<msg key="Enable">Ενεργοποίηση</msg>
<msg key="Enable_Folders">Ενεργοποίηση επιλεγμένων φακέλων</msg>
<msg key="Enabled">Ενεργοποιημένο</msg>
<msg key="Folder_Name">Όνομα φακέλου</msg>
<msg key="Folder_URL">URL φακέλου</msg>
<msg key="Folders_Disabled">Επιλεγμένοι φάκελοι ανενεργοί για υποστήριξη WebDAV </msg>
<msg key="Folders_Enabled">Επιλεγμένοι φάκελοι ενεργοί για υποστήριξη WebDAV </msg>
<msg key="Package_Name">Όνομα πακέτου</msg>
<msg key="Package_Type">Τύπος πακέτου</msg>
<msg key="Status">Κατάσταση</msg>
<msg key="WebDAV_Folder_Administration">Διαχείριση WebDAV φακέλου</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="en_AU" charset="ISO-8859-1">
<msg key="Disable">Disable</msg>
<msg key="Disable_Folders">Disable Selected Folders</msg>
<msg key="Disabled">Disabled</msg>
<msg key="Enable">Enable</msg>
<msg key="Enable_Folders">Enable Selected Folders</msg>
<msg key="Enabled">Enabled</msg>
<msg key="Folder_Name">Folder Name</msg>
<msg key="Folder_URL">Folder URL</msg>
<msg key="Folders_Disabled">Selected Folders disabled for WebDAV support.</msg>
<msg key="Folders_Enabled">Selected Folders enabled for WebDAV support.</msg>
<msg key="Package_Name">Package Name</msg>
<msg key="Package_Type">Package Type</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">WebDAV Folder Administration</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="en_US" charset="ISO-8859-1">
<msg key="Disable">Disable</msg>
<msg key="Disable_Folders">Disable Selected Folders</msg>
<msg key="Disabled">Disabled</msg>
<msg key="Enable">Enable</msg>
<msg key="Enable_Folders">Enable Selected Folders</msg>
<msg key="Enabled">Enabled</msg>
<msg key="Folder_Name">Folder Name</msg>
<msg key="Folder_URL">Folder URL</msg>
<msg key="Folders_Disabled">Selected Folders disabled for WebDAV support.</msg>
<msg key="Folders_Enabled">Selected Folders enabled for WebDAV support.</msg>
<msg key="Package_Name">Package Name</msg>
<msg key="Package_Type">Package Type</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">WebDAV Folder Administration</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="es_CO" charset="ISO-8859-1">
<msg key="Disable">Deshabitar</msg>
<msg key="Disable_Folders">Deshabitar Carpetas Selecciondas </msg>
<msg key="Disabled">Deshabilitado</msg>
<msg key="Enable">Habilitar</msg>
<msg key="Enable_Folders">Habilitar Carpetas Seleccionadas</msg>
<msg key="Enabled">Habilitar</msg>
<msg key="Folder_Name">Nombre de la Carpeta</msg>
<msg key="Folder_URL">Carpeta URL</msg>
<msg key="Folders_Disabled">Carpetas Seleccionadas deshabilitadas para soporte WebDav.</msg>
<msg key="Folders_Enabled">Carpetas Seleccionadas habilitadas para soporte WebDAV.</msg>
<msg key="Package_Name">Nombre del Paquete</msg>
<msg key="Package_Type">Tipo del Paquete</msg>
<msg key="Status">Estado</msg>
<msg key="WebDAV_Folder_Administration">Administracin de la capeta WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="es_ES" charset="ISO-8859-1">
<msg key="Disable">Deshabitar</msg>
<msg key="Disable_Folders">Deshabitar Carpetas Selecciondas </msg>
<msg key="Disabled">Deshabilitado</msg>
<msg key="Enable">Habilitar</msg>
<msg key="Enable_Folders">Habilitar Carpetas Seleccionadas</msg>
<msg key="Enabled">Habilitar</msg>
<msg key="Folder_Name">Nombre de la Carpeta</msg>
<msg key="Folder_URL">Carpeta URL</msg>
<msg key="Folders_Disabled">Carpetas Seleccionadas deshabilitadas para soporte WebDav.</msg>
<msg key="Folders_Enabled">Carpetas Seleccionadas habilitadas para soporte WebDAV.</msg>
<msg key="Package_Name">Nombre del Paquete</msg>
<msg key="Package_Type">Tipo del paquete</msg>
<msg key="Status">Estado</msg>
<msg key="WebDAV_Folder_Administration">Administracin WebDAV de la carpeta</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="es_GT" charset="ISO-8859-1">
<msg key="Disable">Deshabitar</msg>
<msg key="Disable_Folders">Deshabitar Carpetas Selecciondas </msg>
<msg key="Disabled">Deshabilitado</msg>
<msg key="Enable">Habilitar</msg>
<msg key="Enable_Folders">Habilitar Carpetas Seleccionadas</msg>
<msg key="Enabled">Habilitar</msg>
<msg key="Folder_Name">Nombre de la Carpeta</msg>
<msg key="Folder_URL">Carpeta URL</msg>
<msg key="Folders_Disabled">Carpetas Seleccionadas deshabilitadas para soporte WebDav.</msg>
<msg key="Folders_Enabled">Carpetas Seleccionadas habilitadas para soporte WebDAV.</msg>
<msg key="Package_Name">Nombre del Paquete</msg>
<msg key="Package_Type">Tipo del Paquete</msg>
<msg key="Status">Estado</msg>
<msg key="WebDAV_Folder_Administration">Administracin de la capeta WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="eu_ES" charset="ISO-8859-1">
<msg key="Disable">Desaktibatu</msg>
<msg key="Disable_Folders">Desaktibatu aukeratutako karpetak</msg>
<msg key="Disabled">Desaktibatuta</msg>
<msg key="Enable">Aktibatu</msg>
<msg key="Enable_Folders">Aktibatu aukeratutako karpetak</msg>
<msg key="Enabled">Aktibatuta</msg>
<msg key="Folder_Name">Karpetaren Izena</msg>
<msg key="Folder_URL">Karpetaren URLa</msg>
<msg key="Folders_Disabled">Aukeratutako karpetak desaktibatuta WebDAV euskarrirako.</msg>
<msg key="Folders_Enabled">Aukeratutako karpetak aktibatuta WebDAV euskarrirako.</msg>
<msg key="Package_Name">Paketearen Izena</msg>
<msg key="Package_Type">Pakete-mota</msg>
<msg key="Status">Egoera</msg>
<msg key="WebDAV_Folder_Administration">WebDAV karpetaren kudeaketa</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="hi_IN" charset="utf-8">
<msg key="Disable">अशकतता </msg>
<msg key="Disable_Folders">अशकतता चुनना पुस्तिका</msg>
<msg key="Disabled">अशकतता </msg>
<msg key="Enable">समर्थ करना </msg>
<msg key="Enable_Folders">समर्थ चुनना पुस्तिका </msg>
<msg key="Enabled">समर्थ करना </msg>
<msg key="Folder_Name">पुस्तिका नाम </msg>
<msg key="Folder_URL">पुस्तिका URL</msg>
<msg key="Folders_Disabled">अशकतता चुनना पुस्तिका का WebDAV सहारा । </msg>
<msg key="Folders_Enabled">समर्थ चुनना पुस्तिका का WebDAV सहारा । </msg>
<msg key="Package_Name">पैकेज नाम </msg>
<msg key="Package_Type">पैकेज प्रकार </msg>
<msg key="Status">स्थिति </msg>
<msg key="WebDAV_Folder_Administration">WebDAV पुस्तिका शासन</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="it_IT" charset="ISO-8859-1">
<msg key="Disable">Disabilita</msg>
<msg key="Disable_Folders">Disabilita le cartelle selezionate</msg>
<msg key="Disabled">Disabilitata</msg>
<msg key="Enable">Abilita</msg>
<msg key="Enable_Folders">Abilita le cartelle selezionate</msg>
<msg key="Enabled">Abilitata</msg>
<msg key="Folder_Name">Nome cartella</msg>
<msg key="Folder_URL">URL della cartella</msg>
<msg key="Folders_Disabled">Le cartelle selezionate sono disabilitate per WebDAV</msg>
<msg key="Folders_Enabled">Le cartelle selezionate sono abilitate per WebDAV</msg>
<msg key="Package_Name">Nome package</msg>
<msg key="Package_Type">Tipo package</msg>
<msg key="Status">Stato</msg>
<msg key="WebDAV_Folder_Administration">Amministrazione delle cartelle WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="ms_MY" charset="utf-8">
<msg key="Disable">Lumpuh</msg>
<msg key="Disable_Folders">Folder-folder Terpilih Dilumpuhkan</msg>
<msg key="Disabled">Dilumpuh</msg>
<msg key="Enable">Pulih</msg>
<msg key="Enable_Folders">Folder-folder Terpilih Dipulihkan</msg>
<msg key="Enabled">Dipulih</msg>
<msg key="Folder_Name">Nama Folder</msg>
<msg key="Folder_URL">Folder URL</msg>
<msg key="Folders_Disabled">Folder-folder Terpilih dilumpuhkan untuk sokongan WebDAV.</msg>
<msg key="Folders_Enabled">Folder-folder Terpilih dipulihkan untuk sokongan WebDAV.</msg>
<msg key="Package_Name">Nama Pakej</msg>
<msg key="Package_Type">Jenis Pakej</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">Pentadbiran Folder WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="nl_NL" charset="ISO-8859-1">
<msg key="Disable">Uitschakelen</msg>
<msg key="Disable_Folders">Geselecteerde mappen uitschakelen</msg>
<msg key="Disabled">Uitgeschakeld</msg>
<msg key="Enable">Inschakelen</msg>
<msg key="Enable_Folders">Geselecteerde mappen inschakelen</msg>
<msg key="Enabled">Ingeschakeld</msg>
<msg key="Folder_Name">Mapnaam</msg>
<msg key="Folder_URL">Map-URL</msg>
<msg key="Folders_Disabled">WebDAV ondersteuning voor geselecteerde mappen is uitgeschakeld</msg>
<msg key="Folders_Enabled">WebDAV ondersteuning voor geselecteerde mappen is ingeschakeld</msg>
<msg key="Package_Name">Modulenaam</msg>
<msg key="Package_Type">Moduletype</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">Administratie WebDAV mappen</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="nn_NO" charset="ISO-8859-1">
<msg key="Disable">Gjer utilgjengeleg</msg>
<msg key="Disable_Folders">Gjer utvalde mapper utilgjengelege</msg>
<msg key="Disabled">Gjort utilgjengeleg</msg>
<msg key="Enable">Gjer tilgjengeleg</msg>
<msg key="Enable_Folders">Gjer utvalde mapper tilgjengelege</msg>
<msg key="Enabled">Gjort tilgjengeleg</msg>
<msg key="Folder_Name">Mappenavn</msg>
<msg key="Folder_URL">URL for mappe</msg>
<msg key="Folders_Disabled">Utvalde mapper som er utilgjengelege for WebDAV support.</msg>
<msg key="Folders_Enabled">Utvalde mapper som er tilgjengelege for WebDAV support.</msg>
<msg key="Package_Name">Pakkenavn</msg>
<msg key="Package_Type">Pakketype</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">Administrasjon av WebDAV mappe</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="no_NO" charset="ISO-8859-1">
<msg key="Disable">Gjr utilgjengelig</msg>
<msg key="Disable_Folders">Gjr utvalgte mapper utilgjengelige</msg>
<msg key="Disabled">Utilgjengelig</msg>
<msg key="Enable">Gjr tilgjengelig</msg>
<msg key="Enable_Folders">Gjr utvalgte mapper tilgjengelig</msg>
<msg key="Enabled">Tilgjengeliggjort</msg>
<msg key="Folder_Name">Navn p mappe</msg>
<msg key="Folder_URL">URL for mappe</msg>
<msg key="Folders_Disabled">Utvalgte mapper er ikke tilgjengelige for WebDAV-sttte.</msg>
<msg key="Folders_Enabled">Utvalgte mapper er tilgjengelige for WebDAV-sttte</msg>
<msg key="Package_Name">Navn p pakke</msg>
<msg key="Package_Type">Pakketype</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">Administrasjon for WebDAV-mappe</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="pa_IN" charset="utf-8">
<msg key="Disable">ਅਯੋਗ</msg>
<msg key="Disable_Folders">ਚੁਣੇ ਫੋਲਡਰ ਅਯੋਗ</msg>
<msg key="Disabled">ਅਯੋਗ</msg>
<msg key="Enable">ਯੋਗ</msg>
<msg key="Enable_Folders">ਚੁਣੇ ਫੋਲਡਰ ਯੋਗ</msg>
<msg key="Enabled">ਯੋਗ ਕੀਤਾ</msg>
<msg key="Folder_Name">ਫੋਲਡਰ ਨਾਂ</msg>
<msg key="Folder_URL">ਫੋਲਡਰ URL</msg>
<msg key="Package_Name">ਪੈਕੇਜ ਨਾਂ</msg>
<msg key="Package_Type">ਪੈਕੇਜ ਕਿਸਮ</msg>
<msg key="Status">ਹਾਲਤ</msg>
<msg key="WebDAV_Folder_Administration">WebDAV ਫੋਲਡਰ ਪਰਬੰਧਨ</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="oacs-dav" locale="pt_BR" charset="ISO-8859-1">
<msg key="Disable">Desabilitar</msg>
<msg key="Disable_Folders">Desabilitar Pastas Selecionadas</msg>
<msg key="Disabled">Disabilitado</msg>
<msg key="Enable">Habilitar</msg>
<msg key="Enable_Folders">Habilitar Pastas Selecionadas</msg>
<msg key="Enabled">Habilitado</msg>
<msg key="Folder_Name">Nome da Pasta</msg>
<msg key="Folder_URL">URL da Pasta</msg>
<msg key="Folders_Disabled">Pastas Selecionadas desabilitadas para suporte WebDAV.</msg>
<msg key="Folders_Enabled">Pastas selecionadas habilitadas para suporte WebDAV.</msg>
<msg key="Package_Name">Nome do Pacote</msg>
<msg key="Package_Type">Tipo de Pacote</msg>
<msg key="Status">Status</msg>
<msg key="WebDAV_Folder_Administration">Administrao de Pastas WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="ro_RO" charset="utf-8">
<msg key="Disable">Dezactivează</msg>
<msg key="Disable_Folders">Dezactivează Folderele Selectate</msg>
<msg key="Disabled">Dezactivat</msg>
<msg key="Enable">Activează</msg>
<msg key="Enable_Folders">Activează Folderele Selectate</msg>
<msg key="Enabled">Activează</msg>
<msg key="Folder_Name">Numele Folder-ului</msg>
<msg key="Folder_URL">URL pentru Folder</msg>
<msg key="Folders_Disabled">Folderele Selectate au fost deactivate pentru WebDAV support</msg>
<msg key="Folders_Enabled">Foldere Selectate activate pentru support WebDAV</msg>
<msg key="Package_Name">Numele Programului</msg>
<msg key="Package_Type">Tipul de Program</msg>
<msg key="Status">Statut</msg>
<msg key="WebDAV_Folder_Administration">Administrarea Folderului WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="ru_RU" charset="utf-8">
<msg key="Disable">Запретить</msg>
<msg key="Disable_Folders">Запретить для выбранных папок</msg>
<msg key="Disabled">Запрещено</msg>
<msg key="Enable">Разрешить</msg>
<msg key="Enable_Folders">Разрешить для выбранных папок</msg>
<msg key="Enabled">Разрешено</msg>
<msg key="Folder_Name">Название папки</msg>
<msg key="Folder_URL">URL папки</msg>
<msg key="Folders_Disabled">Для выбранных папок запрещена поддержка WebDAV.</msg>
<msg key="Folders_Enabled">Для выбранных папок разрешена поддержка WebDAV.</msg>
<msg key="Package_Name">Название пакета</msg>
<msg key="Package_Type">Тип пакета</msg>
<msg key="Status">Состояние</msg>
<msg key="WebDAV_Folder_Administration">Управление папкой WebDAV</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="oacs-dav" locale="zh_CN" charset="utf-8">
<msg key="Disable">不能</msg>
<msg key="Disable_Folders">不可选择的文件夹</msg>
<msg key="Disabled">不能</msg>
<msg key="Enable"></msg>
<msg key="Enable_Folders">可选择的文件夹</msg>
<msg key="Enabled"></msg>
<msg key="Folder_Name">文件夹名</msg>
<msg key="Folder_URL">文件夹URL</msg>
<msg key="Folders_Disabled">所选文件夹不支持WebDAV。</msg>
<msg key="Folders_Enabled">所选文件夹支持WebDAV。</msg>
<msg key="Package_Name">包名称</msg>
<msg key="Package_Type">包类型</msg>
<msg key="Status">状态</msg>
<msg key="WebDAV_Folder_Administration">WebDAV文件夹管理</msg>
</message_catalog>
<?xml version="1.0"?>
<!-- Generated by the OpenACS Package Manager -->
<package key="oacs-dav" url="http://openacs.org/repository/apm/packages/dav-support" type="apm_service">
<package-name>webDAV Support</package-name>
<pretty-plural></pretty-plural>
<initial-install-p>f</initial-install-p>
<singleton-p>t</singleton-p>
<auto-mount>webdav-support</auto-mount>
<version name="1.2.0d2" url="http://openacs.org/repository/download/apm/oacs-dav-1.2.0d2.apm">
<owner url="mailto:dave@thedesignexperience.org">Dave Bauer</owner>
<summary>Provides services to enable webDAV access to content repository items.</summary>
<release-date>2004-09-27</release-date>
<vendor>OpenACS</vendor>
<description format="text/html">An interface to the tDAV webDAV package. oacs-dav provides services to offer webDAV access to content repository data.</description>
<provides url="oacs-dav" version="1.2.0d2"/>
<callbacks>
<callback type="after-install" proc="oacs_dav::install::package_install"/>
<callback type="before-uninstall" proc="oacs_dav::install::package_uninstall"/>
<callback type="after-upgrade" proc="oacs_dav::install::upgrade"/>
</callbacks>
<parameters>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="DefaultLockTimeout" default="300" description="Length of time in seconds for locks if WebDAV client does not specify a time. Locks will expire after this length of time."/>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="RequireAuthForPropfind" default="1" description="Require authorization for PROPFIND requests. Enable this to suuport Microsoft Web Folders clients which may not respond correctly to an authentication request. Set to 1 for enabled, 0 for disabled."/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="WebDAVURLPrefix" default="/dav" description="Prefix to be added to the urls for WebDAV requests."/>
</parameters>
</version>
</package>
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2003-10-18
-- @cvs-id $Id$
--
-- create a table to map site node_ids to cr_folders
create table dav_site_node_folder_map (
node_id integer
constraint dav_sn_folder_map_node_id_un
unique
constraint dav_sn_folder_map_node_id_fk
references site_nodes on delete cascade,
folder_id integer
constraint dav_impls_folder_id_fk
references cr_folders on delete cascade,
enabled_p char(1)
constraint dav_sn_folder_map_enbld_p_bl
check (enabled_p in ('t','f'))
);
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2003-10-19
-- @cvs-id $Id$
--
drop table dav_site_node_folder_map
\ No newline at end of file
--
--
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2005-01-29
-- @arch-tag: 938abc15-f59c-4397-b882-f5a89884be62
-- @cvs-id $Id$
--
alter table dav_site_node_folder_map drop constraint dav_side_node_folder_map_node_id_fk;
alter table dav_site_node_folder_map add constraint dav_side_node_folder_map_node_id_fk foreign key (node_id) references site_nodes (node_id) on delete cascade;
alter table
dav_site_node_folder_map
drop constraint
dav_impls_folder_id_fk;
alter table
dav_site_node_folder_map
add constraint
dav_impls_folder_id_fk
foreign key (folder_id)
references cr_folders
on delete cascade;
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2003-09-14
-- @cvs-id $Id$
--
-- create a table to map site node_ids to cr_folders
create table dav_site_node_folder_map (
node_id integer
constraint dav_site_node_folder_map_node_id_un
unique
constraint dav_side_node_folder_map_node_id_fk
references site_nodes on delete cascade,
folder_id integer
constraint dav_impls_folder_id_fk
references cr_folders on delete cascade,
enabled_p boolean
);
\ No newline at end of file
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2003-09-28
-- @cvs-id $Id:
--
drop table dav_site_node_folder_map;
\ No newline at end of file
--
--
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2005-01-29
-- @arch-tag: 938abc15-f59c-4397-b882-f5a89884be62
-- @cvs-id $Id$
--
alter table dav_site_node_folder_map drop constraint dav_side_node_folder_map_node_id_fk;
alter table dav_site_node_folder_map add constraint dav_side_node_folder_map_node_id_fk foreign key (node_id) references site_nodes (node_id) on delete cascade;
alter table
dav_site_node_folder_map
drop constraint
dav_impls_folder_id_fk;
alter table
dav_site_node_folder_map
add constraint
dav_impls_folder_id_fk
foreign key (folder_id)
references cr_folders
on delete cascade;
#
ad_library {
setup filters
@author Dave Bauer (dave@thedesignexperience.org)
@creation-date 2003-12-18
@cvs-id $Id$
}
set prefix [parameter::get \
-package_id [apm_package_id_from_key "oacs-dav"] \
-parameter "WebDAVURLPrefix" \
-default "/dav"]
set url "${prefix}/*"
set filter_url "${prefix}/*"
ns_register_filter preauth GET ${filter_url} oacs_dav::authorize
ns_register_filter preauth HEAD ${filter_url} oacs_dav::authorize
ns_register_filter preauth PUT ${filter_url} oacs_dav::authorize
ns_register_filter preauth MKCOL ${filter_url} oacs_dav::authorize
ns_register_filter preauth COPY ${filter_url} oacs_dav::authorize
ns_register_filter preauth MOVE ${filter_url} oacs_dav::authorize
ns_register_filter preauth PROPFIND ${filter_url} oacs_dav::authorize
ns_register_filter preauth PROPPATCH ${filter_url} oacs_dav::authorize
ns_register_filter preauth DELETE ${filter_url} oacs_dav::authorize
ns_register_filter preauth LOCK ${filter_url} oacs_dav::authorize
ns_register_filter preauth UNLOCK ${filter_url} oacs_dav::authorize
ns_log notice "OACS-DAV preauth filters loaded on $filter_url"
ns_register_proc GET ${url} oacs_dav::handle_request
ns_register_proc HEAD ${url} oacs_dav::handle_request
ns_register_proc COPY ${url} oacs_dav::handle_request
ns_register_proc PUT ${url} oacs_dav::handle_request
ns_register_proc DELETE ${url} oacs_dav::handle_request
ns_register_proc PROPFIND ${url} oacs_dav::handle_request
ns_register_proc PROPPATCH ${url} oacs_dav::handle_request
ns_register_proc MKCOL ${url} oacs_dav::handle_request
ns_register_proc MOVE ${url} oacs_dav::handle_request
ns_register_proc LOCK ${url} oacs_dav::handle_request
ns_register_proc UNLOCK ${url} oacs_dav::handle_request
#
ad_library {
Setup procs to run at package install, should be run only once.
@author Dave Bauer (dave@thedesignexperience.org)
@creation-date 2003-09-11
@cvs-id $Id$
}
namespace eval oacs_dav::install {}
ad_proc -private oacs_dav::install::package_install {} {
setup DAV service contracts
} {
db_transaction {
create_service_contracts
register_implementation
}
}
ad_proc -private oacs_dav::install::package_uninstall {} {
clean up for package uninstall
} {
db_transaction {
delete_service_contracts
unregister_implementation
}
}
# this is far from complete or even known to be going in the
# right direction
# somehow we need to get identication information from the
# user and send back status of permission allowed or denied
# look at the DAV spec to get an idea of what inputs and
# outputs these methods have
ad_proc -private oacs_dav::install::create_service_contracts {
} {
create service contract for DAV methods
} {
oacs_dav::install::create_dav_sc
oacs_dav::install::create_dav_put_type_sc
oacs_dav::install::create_dav_mkcol_type_sc
}
ad_proc -private oacs_dav::install::create_dav_sc {
} {
create dav service contract spec
} {
set contract_name "dav"
set dav_spec {
description "implements DAV methods"
operations {
get {
description "DAV GET Method"
output { content:string }
}
put {
description "DAV PUT Method"
output { response:string }
}
propfind {
description "DAV PROPFIND Method"
output {
response:string
}
}
delete {
description "DAV DELETE Method"
output {
response:string
}
}
mkcol {
description "DAV MKCOL Method"
output {
response:string
}
}
copy {
description "DAV Copy Method"
output {
response:string
}
}
move {
description "DAV Move Method"
output {
response:string
}
}
proppatch {
description "DAV PROPATCH Method"
output {
response:string
}
}
lock {
description "DAV LOCK Method"
output {
response:string
}
}
unlock {
description "DAV UNLOCK Method"
output {
response:string
}
}
head {
description "DAV HEAD Method"
output {
response:string
}
}
}
}
acs_sc::contract::new_from_spec \
-spec [concat [list name $contract_name] $dav_spec ]
}
ad_proc -private oacs_dav::install::create_dav_put_type_sc {
} {
create dav_put_type service contract
} {
set contract_name "dav_put_type"
set dav_spec {
description "returns content type to use for PUT operation"
operations {
get_type {
description "DAV PUT Content Type"
output { content_type:string }
}
}
}
acs_sc::contract::new_from_spec \
-spec [concat [list name $contract_name] $dav_spec ]
}
ad_proc -private oacs_dav::install::create_dav_mkcol_type_sc {
} {
create dav_mkcol_type service contract
} {
set contract_name "dav_mkcol_type"
set spec {
description "returns content type to use for MKCOL operation"
operations {
get_type {
description "DAV MKCOL Content Type"
output { content_type:string }
}
}
}
acs_sc::contract::new_from_spec \
-spec [concat [list name $contract_name] $spec ]
}
ad_proc -private oacs_dav::install::delete_service_contracts {
} {
remove service contracts on uninstall
} {
acs_sc::contract::delete -name dav
acs_sc::contract::delete -name dav_put_type
acs_sc::contract::delete -name dav_mkcol_type
}
ad_proc -private oacs_dav::install::register_implementation {
} {
add default content repository service contract
implementation
} {
set spec {
name "content_revision"
aliases {
get oacs_dav::impl::content_revision::get
head oacs_dav::impl::content_revision::head
put oacs_dav::impl::content_revision::put
propfind oacs_dav::impl::content_revision::propfind
delete oacs_dav::impl::content_revision::delete
mkcol oacs_dav::impl::content_revision::mkcol
proppatch oacs_dav::impl::content_revision::proppatch
copy oacs_dav::impl::content_revision::copy
move oacs_dav::impl::content_revision::move
lock oacs_dav::impl::content_revision::lock
unlock oacs_dav::impl::content_revision::unlock
}
contract_name {dav}
owner [oacs_dav::package_key]
}
acs_sc::impl::new_from_spec -spec $spec
set spec {
name "content_folder"
aliases {
get oacs_dav::impl::content_folder::get
head oacs_dav::impl::content_revision::head
put oacs_dav::impl::content_folder::put
propfind oacs_dav::impl::content_folder::propfind
delete oacs_dav::impl::content_folder::delete
mkcol oacs_dav::impl::content_folder::mkcol
proppatch oacs_dav::impl::content_folder::proppatch
copy oacs_dav::impl::content_folder::copy
move oacs_dav::impl::content_folder::move
lock oacs_dav::impl::content_folder::lock
unlock oacs_dav::impl::content_folder::unlock
}
contract_name {dav}
owner [oacs_dav::package_key]
}
acs_sc::impl::new_from_spec -spec $spec
}
ad_proc -private oacs_dav::install::unregister_implementation {
} {
remove default service contract implementation
} {
acs_sc::impl::delete -contract_name dav -impl_name content_folder
acs_sc::impl::delete -contract_name dav -impl_name content_revision
}
ad_proc -private oacs_dav::install::upgrade {
-from_version_name
-to_version_name
} {
Install new DAV service contracts
} {
apm_upgrade_logic \
-from_version_name $from_version_name \
-to_version_name $to_version_name \
-spec {
1.0b1 1.0b2 {
oacs_dav::install::create_dav_mkcol_type_sc
}
}
}
\ No newline at end of file
<?xml version="1.0"?>
<queryset>
<rdbms><type>oracle</type><version>8.1.6</version></rdbms>
<fullquery name="oacs_dav::conn_setup.get_item_id">
<querytext>
begin
:1 := content_item.get_id(
item_path => :item_name,
root_folder_id => :parent_id,
resolve_index => 'f');
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::children_have_permission_p.child_perms">
<querytext>
select count(*)
from (select item_id
from cr_items
connect by prior item_id = parent_id
start with item_id = :item_id)
where not exists (select 1
from acs_object_party_privilege_map m
where m.object_id = cr_items.item_id
and m.party_id = :user_id
and m.privilege = :privilege)
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::propfind.get_properties">
<querytext>
select nvl (cr.content_length,0) as content_length,
nvl (cr.mime_type,'*/*') as mime_type,
to_char(o.creation_date, 'YYYY-MM-DD"T"HH:MI:SS."000"') as creation_date,
to_char(o.last_modified, 'Dy, Dd Mon YYYY HH:MI:SS "${os_time_zone}"') as last_modified,
ci1.item_id,
case when ci1.item_id=:folder_id then '' else ci1.name end as name,
content_item.get_path(ci1.item_id,:folder_id) as item_uri,
case when o.object_type='content_folder' then 1 else 0 end
as collection_p
from (
select * from cr_items
where (parent_id=:folder_id
or item_id=:folder_id)
and level <= :depth + 1
connect by prior item_id=parent_id
start with item_id=:folder_id
) ci1,
cr_revisions cr,
acs_objects o
where
ci1.item_id=o.object_id
and ci1.live_revision = cr.revision_id(+)
and exists (select 1
from acs_object_party_privilege_map m
where m.object_id = ci1.item_id
and m.party_id = :user_id
and m.privilege = 'read')
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_revision::propfind.get_properties">
<querytext>
select
ci.item_id,
ci.name,
content_item.get_path(ci.item_id,:folder_id) as item_uri,
nvl(cr.mime_type,'*/*') as mime_type,
nvl(cr.content_length,0) as content_length,
to_char(o.creation_date, 'YYYY-MM-DD"T"HH:MI:SS."000"') as creation_date,
to_char(o.last_modified, 'Dy, Dd Mon YYYY HH:MI:SS "${os_time_zone}"') as last_modified
from cr_items ci,
acs_objects o,
cr_revisions cr
where
ci.item_id=:item_id
and ci.item_id = o.object_id
and cr.revision_id=ci.live_revision
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::mkcol.create_folder">
<querytext>
begin
:1 := content_folder.new(
name => :new_folder_name,
label => :label,
description => :description,
parent_id => :parent_id,
context_id => :parent_id,
folder_id => NULL,
creation_date => sysdate,
creation_user => :user_id,
creation_ip => :peer_addr
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.copy_folder">
<querytext>
begin
content_folder.copy (
folder_id => :copy_folder_id,
target_folder_id => :new_parent_folder_id,
creation_user => :user_id,
creation_ip => :peer_addr,
name => :new_name
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.update_child_revisions">
<querytext>
update cr_items
set live_revision=latest_revision
where exists (
select 1
from
(select ci1.item_id as child_item_id
from cr_items ci1
connect by prior item_id = parent_id
start with item_id = :folder_id
) children
where item_id=children.child_item_id
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.move_folder">
<querytext>
begin
:1 := content_folder.move (
folder_id => :move_folder_id,
target_folder_id => :new_parent_folder_id,
name => :new_name
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.rename_folder">
<querytext>
begin
content_folder.edit_name (
folder_id => :move_folder_id,
name => :new_name,
label => :new_name,
description => NULL
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.move_item">
<querytext>
begin
content_item.move (
item_id => :item_id,
target_folder_id => :new_parent_folder_id,
name => :new_name
);
end;
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_revision::move.rename_item">
<querytext>
begin
content_item.edit_name (
item_id => :item_id,
name => :new_name
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::copy.copy_item">
<querytext>
begin
:1 := content_item.copy2 (
item_id => :copy_item_id,
target_folder_id => :new_parent_folder_id,
creation_user => :user_id,
creation_ip => :peer_addr,
name => :new_name
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.delete_for_move">
<querytext>
begin
content_item.del(
item_id => :dest_item_id
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::copy.delete_for_copy">
<querytext>
begin
content_item.del(
item_id => :dest_item_id
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::delete.delete_item">
<querytext>
begin
content_item.del (
item_id => :item_id
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::delete.delete_folder">
<querytext>
begin
content_folder.del (
folder_id => :item_id,
cascade_p => 't'
);
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::item_parent_folder_id.get_parent_folder_id">
<querytext>
begin
:1 := content_item.get_id(
item_path => :parent_name,
root_folder_id => :root_folder_id,
resolve_index => 'f');
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.get_dest_id">
<querytext>
select content_item.get_id(:new_name,:new_parent_folder_id,'f') from dual
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.get_dest_id">
<querytext>
select content_item.get_id(:new_name,:new_parent_folder_id,'f') from dual
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::move.delete_for_move">
<querytext>
begin
content_folder.del(
folder_id => :dest_item_id,
cascade_p => 't');
end;
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::copy.delete_for_copy">
<querytext>
begin
content_folder.del(
folder_id => :dest_item_id,
cascade_p => 't');
end;
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::copy.get_dest_id">
<querytext>
select content_item.get_id(:new_name,:new_parent_folder_id,'f') from dual
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.get_dest_id">
<querytext>
select content_item.get_id(:new_name,:new_parent_folder_id,'f') from dual
</querytext>
</fullquery>
</queryset>
<?xml version="1.0"?>
<queryset>
<rdbms><type>postgresql</type><version>7.1</version></rdbms>
<fullquery name="oacs_dav::conn_setup.get_item_id">
<querytext>
select content_item__get_id(:item_name,:parent_id,'f')
</querytext>
</fullquery>
<fullquery name="oacs_dav::children_have_permission_p.child_perms">
<querytext>
select count(*)
from cr_items c1, cr_items c2
where c2.item_id = :item_id
and c1.tree_sortkey between c2.tree_sortkey and tree_right(c2.tree_sortkey)
and not exists (select 1
from acs_object_party_privilege_map m
where m.object_id = cr_items.item_id
and m.party_id = :user_id
and m.privilege = :privilege)
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::propfind.get_properties">
<querytext>
select
coalesce (cr.content_length,0) as content_length,
coalesce(cr.mime_type,'*/*') as mime_type,
to_char(timezone('GMT',o.creation_date) :: timestamptz ,'YYYY-MM-DD"T"HH:MM:SS.MS"Z"') as creation_date,
to_char(timezone('GMT',o.last_modified) :: timestamptz ,'Dy, DD Mon YYYY HH:MM:SS TZ') as last_modified,
ci1.item_id,
case when ci1.item_id=ci2.item_id then '' else ci1.name end as name,
content_item__get_path(ci1.item_id,:folder_id) as item_uri,
case when o.object_type='content_folder' then 1 else 0 end
as collection_p
from
cr_items ci1,
cr_revisions cr,
cr_items ci2,
acs_objects o
where
ci1.live_revision = cr.revision_id and
ci1.tree_sortkey between ci2.tree_sortkey and tree_right(ci2.tree_sortkey) and
ci2.item_id=:folder_id and
ci1.item_id = o.object_id and
(tree_level(ci1.tree_sortkey) - tree_level(ci2.tree_sortkey)) <= :depth :: integer and
exists (select 1
from acs_object_party_privilege_map m
where m.object_id = ci1.item_id
and m.party_id = :user_id
and m.privilege = 'read')
union
select 0 as content_length,
'*/*' as mime_type,
to_char(timezone('GMT',o.creation_date) :: timestamptz ,'YYYY-MM-DD"T"HH:MM:SS.MS"Z"') as creation_date,
to_char(timezone('GMT',o.last_modified) :: timestamptz ,'Dy, DD Mon YYYY HH:MM:SS TZ') as last_modified,
ci1.item_id,
case when ci1.item_id=ci2.item_id then '' else ci1.name end as name,
content_item__get_path(ci1.item_id,:folder_id) as item_uri,
case when o.object_type='content_folder' then 1 else 0 end
as collection_p
from
cr_items ci1,
cr_items ci2,
acs_objects o
where
ci1.tree_sortkey between ci2.tree_sortkey and tree_right(ci2.tree_sortkey) and
ci2.item_id=:folder_id and
ci1.item_id = o.object_id and
(tree_level(ci1.tree_sortkey) - tree_level(ci2.tree_sortkey)) <= :depth :: integer and
exists (select 1
from acs_object_party_privilege_map m
where m.object_id = ci1.item_id
and m.party_id = :user_id
and m.privilege = 'read') and
not exists (select 1
from cr_revisions cr
where cr.revision_id = ci1.live_revision)
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_revision::propfind.get_properties">
<querytext>
select
ci.item_id,
ci.name,
content_item__get_path(ci.item_id,:folder_id) as item_uri,
coalesce(cr.mime_type,'*/*') as mime_type,
coalesce(cr.content_length,0) as content_length,
to_char(timezone('GMT',o.creation_date) :: timestamptz ,'YYYY-MM-DD"T"HH:MM:SS.MS"Z"') as creation_date,
to_char(timezone('GMT',o.last_modified) :: timestamptz ,'Dy, DD Mon YYYY HH:MM:SS TZ') as last_modified
from cr_items ci,
acs_objects o,
cr_revisions cr
where
ci.item_id=:item_id
and ci.item_id = o.object_id
and cr.revision_id=ci.live_revision
and exists (select 1
from acs_object_party_privilege_map m
where m.object_id = ci.item_id
and m.party_id = :user_id
and m.privilege = 'read')
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::mkcol.create_folder">
<querytext>
select content_folder__new(
:new_folder_name,
:label,
:description,
:parent_id,
:parent_id,
NULL,
current_timestamp,
:user_id,
:peer_addr
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.copy_folder">
<querytext>
select content_folder__copy (
:copy_folder_id,
:new_parent_folder_id,
:user_id,
:peer_addr,
:new_name
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.update_child_revisions">
<querytext>
update cr_items
set live_revision = latest_revision
where exists (
select 1
from
(select ci1.item_id as child_item_id
from cr_items ci1, cr_items ci2
where ci2.item_id=:new_folder_id
and ci1.tree_sortkey
between ci2.tree_sortkey and tree_right(ci2.tree_sortkey)
) children
where item_id=children.child_item_id
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.move_folder">
<querytext>
select content_folder__move (
:move_folder_id,
:new_parent_folder_id,
:new_name
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.rename_folder">
<querytext>
select content_folder__edit_name (
:move_folder_id,
:new_name,
:new_name,
NULL
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.move_item">
<querytext>
select content_item__move (
:item_id,
:new_parent_folder_id,
:new_name
)
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_revision::move.rename_item">
<querytext>
select content_item__edit_name (
:item_id,
:new_name
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::copy.copy_item">
<querytext>
select content_item__copy (
:copy_item_id,
:new_parent_folder_id,
:user_id,
:peer_addr,
:new_name
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::copy.delete_for_copy">
<querytext>
select content_item__delete(:dest_item_id)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.delete_for_move">
<querytext>
select content_item__delete(:dest_item_id)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::delete.delete_item">
<querytext>
select content_item__delete (
:item_id
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::delete.delete_folder">
<querytext>
select content_folder__delete (
:item_id,
't'
)
</querytext>
</fullquery>
<fullquery name="oacs_dav::item_parent_folder_id.get_parent_folder_id">
<querytext>
select content_item__get_id(:parent_name,:root_folder_id,'f')
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.get_dest_id">
<querytext>
select content_item__get_id(:new_name,:new_parent_folder_id,'f')
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.get_dest_id">
<querytext>
select content_item__get_id(:new_name,:new_parent_folder_id,'f')
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::move.delete_for_move">
<querytext>
select content_folder__delete(:dest_item_id,'t');
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::copy.delete_for_copy">
<querytext>
select content_folder__delete(:dest_item_id,'t');
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::copy.get_dest_id">
<querytext>
select content_item__get_id(:new_name,:new_parent_folder_id,'f')
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.get_dest_id">
<querytext>
select content_item__get_id(:new_name,:new_parent_folder_id,'f')
</querytext>
</fullquery>
</queryset>
This diff is collapsed.
<?xml version="1.0"?>
<queryset>
<fullquery name="oacs_dav::folder_enabled.enabled_p">
<querytext>
select enabled_p
from dav_site_node_folder_map
where folder_id=:folder_id
</querytext>
</fullquery>
<fullquery name="oacs_dav::register_folder.add_folder">
<querytext>
insert into dav_site_node_folder_map
(node_id, folder_id, enabled_p)
values
(:node_id, :folder_id, :enabled_p)
</querytext>
</fullquery>
<fullquery name="oacs_dav::unregister_folder.remove_folder">
<querytext>
delete from dav_site_node_folder_map
where folder_id=:folder_id
and node_id=:node_id
</querytext>
</fullquery>
<fullquery name="oacs_dav::request_folder_id.get_folder_id">
<querytext>
select folder_id from dav_site_node_folder_map
where node_id=:node_id and enabled_p = 't'
</querytext>
</fullquery>
<fullquery name="oacs_dav::handle_request.get_content_type">
<querytext>
select content_type from cr_items where item_id=:item_id
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::put.set_live_revision">
<querytext>
update cr_items set live_revision=:revision_id
where item_id=(select item_id from cr_revisions
where revision_id=:revision_id)
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_folder::move.site_node_folder">
<querytext>
select count(*) from dav_site_node_folder_map
where folder_id=:move_folder_id
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::move.update_label">
<querytext>
update cr_folders
set label = :new_name
where folder_id=:move_folder_id
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.get_new_folder_id">
<querytext>
select item_id
from cr_items
where name = :new_name
and parent_id = :new_parent_folder_id
</querytext>
</fullquery>
<fullquery
name="oacs_dav::impl::content_revision::copy.set_live_revision">
<querytext>
update cr_items set live_revision=latest_revision
where item_id=:item_id
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_revision::move.update_title">
<querytext>
update cr_revisions
set title = :new_name
where revision_id = (select latest_revision from cr_items
where item_id=:item_id)
</querytext>
</fullquery>
<fullquery name="oacs_dav::children_have_permission_p.revision_perms">
<querytext>
select count(*)
from cr_revisions
where item_id = :item_id
and not exists (select 1
from acs_object_party_privilege_map m
where m.object_id = revision_id
and m.party_id = :user_id
and m.privilege = 'delete')
</querytext>
</fullquery>
<fullquery name="oacs_dav::impl::content_folder::copy.update_child_revisions">
<querytext>
update cr_items
set live_revision=latest_revision
where exists (
select 1
from
(select ci1.item_id as child_item_id
from cr_items ci1, cr_items ci2
where ci2.item_id=:new_folder_id
and ci1.tree_sortkey
between ci2.tree_sortkey and tree_right(ci2.tree_sortkey)
) children
where item_id=child_item_id
)
</querytext>
</fullquery>
</queryset>
This diff is collapsed.
TEST
\ No newline at end of file
<html>
<head>
<title>Test Dav File</title>
</head>
<body>
<p>This is the test of OpenACS WebDAV support.</p>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<!DOCTYPE queryset PUBLIC "-//OpenACS//DTD XQL 1.0//EN" "xql.dtd">
<!-- @author Dave Bauer (dave@thedesignexperience.org) -->
<!-- @creation-date 2003-09-14 -->
<!-- @cvs-id $Id$ -->
<queryset>
<rdbms><type>postgresql</type><version>7.1</version></rdbms>
<fullquery name="_oacs-dav__oacs_dav_put.create_test_folder">
<querytext>
select content_folder__new (
'__test_folder',
'__test_folder',
NULL,
NULL
)
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_put.register_content_type">
<querytext>
select
content_folder__register_content_type(:folder_id,'content_revision','t')
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
#
ad_library {
Test procedures for oacs-dav
@author Dave Bauer (dave@thedesignexperience.org)
@creation-date 2003-09-14
@cvs-id $Id$
}
aa_register_case oacs_dav_sc_create {
test creation of DAV service contract
} {
aa_run_with_teardown \
-rollback \
-test_code {
aa_true "DAV Service contract created" [expr [db_0or1row get_dav_sc ""]]
set sc_ops [db_list get_dav_ops ""]
set valid_ops [list get put mkcol copy propfind proppatch move delete]
foreach op_name $valid_ops {
aa_true "$op_name operation created" [expr [lsearch $sc_ops $op_name] > -1]
}
aa_true "DAV put_type Service contract created" [expr [db_0or1row get_dav_pt_sc ""]]
aa_true "get_type operation created" [expr [db_0or1row get_dav_pt_op ""]]
}
}
aa_register_case oacs_dav_put {
test generic cr_revision PUT
} {
aa_run_with_teardown \
-rollback \
-test_code {
array set sn [site_node::get -url "/"]
set package_id $sn(package_id)
set name "__test_file.html"
oacs_dav::conn -set item_name $name
set uri "/${name}"
set item_id ""
oacs_dav::conn -set method "PUT"
oacs_dav::conn -set item_id $item_id
oacs_dav::conn -set uri $uri
oacs_dav::conn -set urlv $name
oacs_dav::conn -set tmpfile "[acs_root_dir]/packages/oacs-dav/tcl/test/$name"
# we probably want to create a bunch of files in the filesystem
# and test mime type and other attributes to make sure the
# content gets in the database
set fd [open [oacs_dav::conn tmpfile] r]
set orig_content [read $fd]
close $fd
set folder_id [db_exec_plsql create_test_folder ""]
aa_log "Folder Created $folder_id package_id $package_id"
oacs_dav::conn -set folder_id $folder_id
db_exec_plsql register_content_type ""
oacs_dav::register_folder $folder_id $sn(node_id)
set response [oacs_dav::impl::content_revision::put]
aa_log "Response was $response"
set new_item_id [db_string item_exists "" -default ""]
aa_log "Item_id=$new_item_id"
aa_true "Content Item Created" [expr ![empty_string_p $new_item_id]]
set revision_id [db_string revision_exists "" -default ""]
aa_true "Content Revision Created" [expr ![empty_string_p $revision_id]]
set cr_filename "[cr_fs_path]/[db_string get_content_filename ""]"
aa_true "Content Attribute Set" [string equal [file size [oacs_dav::conn tmpfile]] [file size $cr_filename]]
}
}
aa_register_case oacs_dav_mkcol {
test generic content folder creation
} {
aa_run_with_teardown \
-rollback \
-test_code {
array set sn [site_node::get -url "/"]
set package_id $sn(package_id)
set name "__test_folder1/__test_folder2"
set uri "/"
oacs_dav::conn -set item_id ""
oacs_dav::conn -set uri $uri
oacs_dav::conn -set extra_url $name
oacs_dav::conn -set urlv [split $uri "/"]
oacs_dav::conn -set package_id $package_id
set parent_folder_id [db_string get_parent_folder "" -default "-100"]
oacs_dav::conn -set folder_id $parent_folder_id
oacs_dav::register_folder $parent_folder_id $sn(node_id)
foreach fname [split $name "/"] {
set uri "$uri${fname}/"
oacs_dav::conn -set item_name $fname
oacs_dav::conn -set uri $uri
oacs_dav::conn -set extra_url $fname
oacs_dav::conn -set urlv [split $uri "/"]
aa_log "name $fname uri $uri"
set response [oacs_dav::impl::content_folder::mkcol]
set new_folder_id [db_string folder_exists "" -default ""]
aa_true "Content Folder $fname created" [expr ![empty_string_p $new_folder_id]]
}
}
}
\ No newline at end of file
<?xml version="1.0"?>
<!DOCTYPE queryset PUBLIC "-//OpenACS//DTD XQL 1.0//EN" "xql.dtd">
<!-- @author Dave Bauer (dave@thedesignexperience.org) -->
<!-- @creation-date 2003-09-14 -->
<!-- @cvs-id $Id$ -->
<queryset>
<fullquery name="_oacs-dav__oacs_dav_sc_create.get_dav_sc">
<querytext>
select * from acs_sc_contracts where contract_name='dav'
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_sc_create.get_dav_pt_sc">
<querytext>
select * from acs_sc_contracts where contract_name='dav_put_type'
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_sc_create.get_dav_ops">
<querytext>
select operation_name from acs_sc_operations where contract_name='dav'
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_sc_create.get_dav_pt_op">
<querytext>
select operation_name from acs_sc_operations where
contract_name='dav_put_type'
and operation_name='get_type'
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_put.item_exists">
<querytext>
select item_id from cr_items where name=:name
and parent_id=:folder_id
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_put.revision_exists">
<querytext>
select revision_id from cr_revisions
where item_id=:new_item_id
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_put.get_content_filename">
<querytext>
select content from cr_revisions where revision_id=:revision_id
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_put.item_exists">
<querytext>
select item_id from cr_items where name=:name
and parent_id=:folder_id
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_mkcol.get_parent_folder">
<querytext>
select folder_id from cr_folders where package_id=:package_id
</querytext>
</fullquery>
<fullquery name="_oacs-dav__oacs_dav_mkcol.folder_exists">
<querytext>
select item_id
from cr_items
where name=:fname
and content_type='content_folder'
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
TEST
\ No newline at end of file
#
ad_page_contract {
WebDAV disable folders
@author Dave Bauer (dave@thedesignexperience.org)
@creation-date 2004-02-15
@cvs-id $Id$
} {
folder_id:integer,multiple
} -properties {
} -validate {
} -errors {
}
permission::require_permission \
-party_id [ad_conn user_id] \
-object_id [ad_conn package_id ] \
-privilege "admin"
foreach id $folder_id {
db_dml disable_folder ""
}
util_user_message -message [_ oacs-dav.Folders_Disabled]
ad_returnredirect "."
\ No newline at end of file
<?xml version="1.0"?>
<!DOCTYPE queryset PUBLIC "-//OpenACS//DTD XQL 1.0//EN"
"http://www.thecodemill.biz/repository/xql.dtd">
<!-- @author Dave Bauer (dave@thedesignexperience.org) -->
<!-- @creation-date 2004-02-15 -->
<!-- @cvs-id $Id$ -->
<queryset>
<fullquery name="disable_folder">
<querytext>
update dav_site_node_folder_map
set enabled_p = 'f'
where folder_id=:id
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
#
ad_page_contract {
WebDAV enable folders
@author Dave Bauer (dave@thedesignexperience.org)
@creation-date 2004-02-15
@cvs-id $Id$
} {
folder_id:integer,multiple
} -properties {
} -validate {
} -errors {
}
permission::require_permission \
-party_id [ad_conn user_id] \
-object_id [ad_conn package_id ] \
-privilege "admin"
foreach id $folder_id {
db_dml enable_folder ""
}
util_user_message -message [_ oacs-dav.Folders_Enabled]
ad_returnredirect "."
\ No newline at end of file
<?xml version="1.0"?>
<!DOCTYPE queryset PUBLIC "-//OpenACS//DTD XQL 1.0//EN"
"http://www.thecodemill.biz/repository/xql.dtd">
<!-- @author Dave Bauer (dave@thedesignexperience.org) -->
<!-- @creation-date 2004-02-15 -->
<!-- @cvs-id $Id$ -->
<queryset>
<fullquery name="enable_folder">
<querytext>
update dav_site_node_folder_map
set enabled_p = 't'
where folder_id=:id
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
<master>
<property name="title">@title@</property>
<property name="context">@context@</property>
<listtemplate name="folders"></listtemplate>
\ No newline at end of file
# packages/oacs-dav/www/admin/index.tcl
ad_page_contract {
Administer webdav enabled folders
@author Dave Bauer (dave@thedesignexperience.org)
@creation-date 2004-02-15
@cvs-id $Id$
} {
} -properties {
title
context
} -validate {
} -errors {
}
permission::require_permission \
-party_id [ad_conn user_id] \
-object_id [ad_conn package_id ] \
-privilege "admin"
set bulk_actions [list "[_ oacs-dav.Enable]" "enable" "[_ oacs-dav.Enable_Folders]" "[_ oacs-dav.Disable]" "disable" "[_ oacs-dav.Disable_Folders]" ]
template::list::create \
-name folders \
-multirow folders \
-key folder_id \
-bulk_actions $bulk_actions \
-elements {
package_key {label {[_ oacs-dav.Package_Type]}}
package_name { label {[_ oacs-dav.Package_Name]} }
label { label {[_ oacs-dav.Folder_Name]} }
folder_url { label {[_ oacs-dav.Folder_URL]} }
status { label {[_ oacs-dav.Status]} }
}
db_multirow -extend {folder_url package_key package_name status} folders get_folders {} {
array set sn [site_node::get -node_id $node_id]
set folder_url $sn(url)
set package_key $sn(package_key)
set package_name $sn(instance_name)
set status [string map -nocase [list t [_ oacs-dav.Enabled] f [_ oacs-dav.Disabled] ] $enabled_p]
}
set title [_ oacs-dav.WebDAV_Folder_Administration]
set context $title
ad_return_template
<?xml version="1.0"?>
<!DOCTYPE queryset PUBLIC "-//OpenACS//DTD XQL 1.0//EN"
"http://www.thecodemill.biz/repository/xql.dtd">
<!-- @author Dave Bauer (dave@thedesignexperience.org) -->
<!-- @creation-date 2004-02-15 -->
<!-- @cvs-id $Id$ -->
<queryset>
<fullquery name="get_folders">
<querytext>
select cf.folder_id,
cf.label,
sn.node_id,
sn.enabled_p
from cr_folders cf,
dav_site_node_folder_map sn
where cf.folder_id=sn.folder_id
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
<html>
<head>
<title>OpenACS WebDAV Support</title>
</head>
<body>
<h2>OpenACS WebDAV Support</h2>
<h3>Introduction</h3>
<p>This package implements a WebDAV interface to the OpenACS
Content Repository. In addition to generic access to content
items, there is a service-contract interface so packages can
define custom handlers for WebDAV methods for objects that belong
to that package.
</p>
<h3>Installation</h3> <p>Install through the APM. If you install
file-storage, WebDAV support is installed automatically. In
addtion you should check the tDAV specific configuration
parameters to the AOLserver configuration file. The default parameters work fine, they will create webdav URLs like <i>yoursite/</i>dav/*
<p>
You can visit the <a href="/webdav-support/">/webdav-support/</a> page to control webdav access on a per-folder basis. Packages that support WebDAV will add folders to this list and an administrator can then activate or deactivate the folders.
</p>
<h3>How
it Works</h3> <p>OpenACS WebDAV Support requires the tDAV
AOLserver module to implement most of the WebDAV protocol. OpenACS
WebDAV Support just provides and interface between tDAV and the
Content Repository
</p>
<p>Each content_type that requires a custom handler much implement
the <code>dav</code> service contract. Each content type should
implement the <code>dav</code> service contract with the implementation name the same as the content_type. This includes operations
for every WebDAV method. Some operations do not make sense for
certian object types. Specifically, content_items, which are
mapped to WebDAV resources, should not perform a MKCOL (make
collection) method. Likewise, a content_folder, or WebDAV
collection, should not allow a PUT method. In addition to the
<code>dav</code> service contract is a helper contract to allow
packages to set the initial content_type for new items created
through WebDAV. Each package should implement the
<code>dav_put_type</code> service contract with the implementation
named the same as the package key.</p>
<p>Each package instance that will allow WebDAV access should
register a package_id and folder_id for the root content_folder
that corresponds with the URI of the package's mount point using <code>oacs_dav::register_folder</code>.</p>
<h3>Dispatching Requests</h3>
<p>A preauth filter is registered for all WebDAV methods. This
calls oacs_dav::authorize which will set oacs_dav::conn user_id to
the OpenACS user_id or 0 is the request is not authenticated. This
filter also calls oacs_dav::setup_conn sets up the basic
information needed to authorize the request. If authorization
fails a 401 HTTP response is returned requesting authentication
information. If authorization is successful the filter returns
filter_ok and the tdav::filter* filter for the method is called.</p>
<p>The tdav::filter* commands setup global information for each
method that is independent of the storage type. After this filter
runs, the request is handled by the registered procedure for
OpenACS oacs_dav::handle_request.</p>
<p>oacs_dav::handle_request determines the package_id that should
handle the URI. This is based on the standard OpenACS site_node
Tcl API. After the package is found, the root folder for that
package is retreived from the dav_package_folder_map table. Using
the folder_id, and the URI of the request, the
<code>content_item__get_id</code> pl/sql(plpgsql) procedure is
called to find the item_id for the request. If no item_id is found
and the requested method is PUT, a new item should be created. If
the method is not PUT, a 404 error should be returned.
</p>
<p>oacs_dav::handle_request will call the service contract
implemenation for the content_type of the item. If the request is a
PUT, first the dav_put_type service contract for the package_key of
the request is called. For file-storage this returns
"file_storage_object" so items created by PUT are created as
file_storage_objects instead of generic content_revisions. </p>
<p>The service contract implementation for each operation must return
the response data in the format required by tDAV. The documentation
for the tdav::respond::* procedures named for each method describe
what is required.</p>
#
#
# Redirect to administration
#
# @author Dave Bauer (dave@thedesignexperience.org)
# @creation-date 2004-02-16
# @cvs-id $Id$
ad_returnredirect "admin/"
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment