Commit 03213e56 authored by Frank Bergmann's avatar Frank Bergmann

Initial Import

parents
Pipeline #140 failed with stages
Edit This Page version history
22 September 2003
-Added support for enhanched text widget to content attribute
-Converted etp-edit to use ad_form/form-builder
25 January 2003
-Oracle is broken. We will fix it later.
-Changed base content type to be etp_page_revision, all custom types should
subtype that. There is an upgrade script, please read the notes before
applying it. With this new types are automatically registered with a
search service contract.
30 October 2001
ETP code changed to support Oracle and OpenACS function style. No new
functionallity has been added.
NOTE that prior versions are guaranteed to break if you update.
24 September 2001
ETP code checked in to the anonymous CVS server at openacs.org, and tagged
as version 1.01. We changed the package internal name from editthispage
to edit-this-page, which is more standard. Unfortunately, the design of
the APM tables prevents you from changing the package name in an existing
database, so you'll need to reinstall the package and recreate any content
items you may have.
30 August 2001
Version 1.0 released at http://etp.museatech.net/download/editthispage-1.0.apm.
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="edit-this-page" package_version="1.8b3" locale="de_DE" charset="ISO-8859-1">
<msg key="A">A:</msg>
<msg key="Application">Applikation:</msg>
<msg key="atribute_for_page_title">%attribute_title% fr Seite '%page_title%'</msg>
<msg key="Attributes">Attribute fr Seite '%pa.title%'</msg>
<msg key="attributes_for_page">Attribute fr Seite'$pa(title)'</msg>
<msg key="auto_page_name"> auto_page_name</msg>
<msg key="change_ETP_application">nderung der ETP Applikation fr den Content Abschnitt \&quot;%page_title%\&quot;</msg>
<msg key="change_ETP_application_in_use_for">nderung der ETP Applikation fr den Content Abschnitt &quot;%page_title%&quot; </msg>
<msg key="Commit_your_work">Ihre Vernderungen speichern</msg>
<msg key="Create_a_link_to_local_content">Link zu einem lokal gespeicherten Content erzeugen</msg>
<msg key="Create_a_new">Neu erzeugen: </msg>
<msg key="Create_a_new_external_link">Einen neuen Link anlegen</msg>
<msg key="Create_a_new_subtopic">Ein neues Unterthema anlegen</msg>
<msg key="create_new_subtopic">%subtopic_name% Unterthema</msg>
<msg key="Created">Erstellt</msg>
<msg key="current">jetzige</msg>
<msg key="current_news_items">Jetzige Neuigkeiten</msg>
<msg key="delete">lschen</msg>
<msg key="Description">Beschreibung</msg>
<msg key="edit">ndern</msg>
<msg key="Edit_a_link_to_local_content">Einen Link zu lokal gespeicherten Content ndern</msg>
<msg key="Edit_an_external_link">Einen externen Link verndern</msg>
<msg key="Edit_internal_link">Einen internen Link verndern</msg>
<msg key="Edit_parent_page">Die bergeordnete Seite verndern</msg>
<msg key="expired">abgelaufen</msg>
<msg key="expired_news">abgelaufene Neuigkeiten</msg>
<msg key="external_link">externer Link</msg>
<msg key="external_ref">(external&amp;nbsp;ref)</msg>
<msg key="External_URL">Externe URL</msg>
<msg key="History">Historie</msg>
<msg key="internal_link">interner Link</msg>
<msg key="internal_ref">(internal&amp;nbsp;ref)</msg>
<msg key="LIVE">(LIVE)</msg>
<msg key="lt_All_editable_attributes">Alle vernderbaren Attribute</msg>
<msg key="lt_Are_you_sure_you_want">Sind Sie sich sicher, dass Sie die Seite &quot;%title%&quot; at %page_url% lschen wollen? Diese Operation kann nicht rckgngig gemacht werden!</msg>
<msg key="lt_Are_you_sure_you_want_1">Sind Sie sich sicher, dass Sie zu der Version %version_number% zurckgehen wollen?</msg>
<msg key="lt_Are_you_sure_you_want_2">Sind Sie sich sicher, dass Sie die Version %version_number% lschen wollen?</msg>
<msg key="lt_Change_ETP_application">Anderes Template auswhlen </msg>
<msg key="lt_changes_will_go_live_immediately">(nderungen gehen sofort live)</msg>
<msg key="lt_Configuration_of_this">Konfiguration dieses Content Abschnitts</msg>
<msg key="lt_Confirm_delete_operat">Besttigen Sie die Lschung von %name;noquote%</msg>
<msg key="lt_Confirm_revert_operat">Besttigen Sie bitte die Zurcknahme des Arbeitsschrittes fr %name;noquote% </msg>
<msg key="lt_Confirm_revert_operation">Bitte besttigen Sie die Zurcknahme des Arbeitsschrittes fr %name;noquote%</msg>
<msg key="lt_Content_items_in_this">Content Positionen in diesem Abschnitt</msg>
<msg key="lt_Frequently_Asked_Ques">Hufig gestellte Fragen (FAQ)</msg>
<msg key="lt_If_youre_looking_for_">Wenn Sie nach einem alten Artikel suchen, prfen Sie bitte</msg>
<msg key="lt_parameter_the_page_name">Parameter, der Seitenname vordefiniert mit einer eindeutigen Zahl oder mit einer Zahl, die dem heutigen Datum entspricht.</msg>
<msg key="lt_Questions_and_Answers">Fragen und Antworten:</msg>
<msg key="lt_revision_count_more_recent_versions">%revision_count% aktuellere Versionen</msg>
<msg key="lt_The_ETP_application">Das Template bestimmt fr einen Content Abschnitt, wie dieser aussieht und wie er den Text anzeigt. Sie knnen hier auch die fr die Unterthemen dieses Content Abschnitts ein Template auswhlen.</msg>
<msg key="lt_This_is_the_text_of_t">Die ist der Text des Links, der erzeugt werden wird.</msg>
<msg key="lt_This_is_the_url_of_th">Das ist die URL auf die der Link verweist. Wenn dieser Link zu einer anderen Website verweist, so muss er beginnen mit </msg>
<msg key="lt_This_must_be_a_short_">Dieses muss eine kurzer Identifizierung ohne die Verwendung von Freizeichen sein. Es entspricht gleichzeitig dem endgltigen in der URL verwendeten Namen, welcher die Webseite definiert. Abhngig von</msg>
<msg key="lt_This_must_be_a_short_identifier">Dieses muss eine kurzer Identifizierung ohne die Verwendung von Freizeichen sein. Es entspricht gleichzeitig dem endgltigen in der URL verwendeten Namen, die das Unterthema beinhaltet.</msg>
<msg key="lt_This_will_be_the_title">Dies wird der Titel der Einstiegsseite in dieses Unterthema sein. Sie knnen ihn spter ndern, wenn Sie wollen.</msg>
<msg key="lt_version_palatest_revi">Version %pa.latest_revision% (Die live Version ist die Version %pa.live_revision%)</msg>
<msg key="lt_View_revision_history">Versionshistorie ansehen </msg>
<msg key="lt_You_may_change_the_ti">Sie knnen den Titel spter ndern, wenn Sie wollen.</msg>
<msg key="most_recent_version">neueste Version</msg>
<msg key="move_up">eine Position nach oben</msg>
<msg key="New_external_link">Neuer externer Link</msg>
<msg key="New_internal_link">Neuer interner Link</msg>
<msg key="New_page">Neue Seite</msg>
<msg key="New_subtopic">Neues Unterthema</msg>
<msg key="news_items">Neuer News-Artikel</msg>
<msg key="on">am</msg>
<msg key="or">oder</msg>
<msg key="page">Seite</msg>
<msg key="Page_name">Page&amp;nbsp;name</msg>
<msg key="Page_title">Page&amp;nbsp;title</msg>
<msg key="Preview_changes">Preview der nderungen</msg>
<msg key="Published">Verffentlicht</msg>
<msg key="Publishing_options">Publikationsoptionen</msg>
<msg key="Q">Q:</msg>
<msg key="Return_to_the">Zurck zu</msg>
<msg key="revert">rckgngig machen</msg>
<msg key="revision_history_for">Versionshistorie fr %name%</msg>
<msg key="save_changes">Speichern</msg>
<msg key="Set_parameters">Paramater setzen</msg>
<msg key="Set_permissions">Zugriffsbeschrnkungen setzen</msg>
<msg key="Setup">Setup</msg>
<msg key="Site_map">Sitemap</msg>
<msg key="subtopic">(Unterthema)</msg>
<msg key="Subtopic_Application">Unterthema Applikation:</msg>
<msg key="Subtopic_name">Unterthema&amp;nbsp;name</msg>
<msg key="Subtopic_title">Unterthema&amp;nbsp;title</msg>
<msg key="The_subtopic_name_must_be_a_short_identifier">Der Name des Unterthemas muss ein kurzer Identifikator sein und darf keine Leerzeichen enthalten. Er wird endgltiger Teil der URL, die dieses Ujnterthema bestimmt.</msg>
<msg key="There_are_no">Es gibt keine</msg>
<msg key="Title">Titel</msg>
<msg key="Version">Version</msg>
<msg key="view">ansehen</msg>
<msg key="will_be_deleted">wird/werden gelscht</msg>
<msg key="You_must_fill_out_all_fields">Sie mssen alle Felder in diesem Formular ausfllen.</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="edit-this-page" package_version="1.8b2" locale="en_US" charset="ISO-8859-1">
<msg key="A">A:</msg>
<msg key="Application">Application:</msg>
<msg key="atribute_for_page_title">%attribute_title% for page '%page_title%'</msg>
<msg key="Attributes">Attributes for page '%pa.title%'</msg>
<msg key="attributes_for_page">Attributes for page'$pa(title)'</msg>
<msg key="auto_page_name">auto_page_name</msg>
<msg key="change_ETP_application">Change ETP application in use for content section \&quot;%page_title%\&quot;</msg>
<msg key="change_ETP_application_in_use_for">Change ETP application in use for content section &quot;%page_title%&quot;</msg>
<msg key="Commit_your_work">Commit your work</msg>
<msg key="Create_a_link_to_local_content">Create a link to local content</msg>
<msg key="Create_a_new">Create a new</msg>
<msg key="Create_a_new_external_link">Create a new external link</msg>
<msg key="Create_a_new_subtopic">Create a new subtopic</msg>
<msg key="create_new_subtopic">Subtopic %subtopic_name%</msg>
<msg key="Created">Created</msg>
<msg key="current">current</msg>
<msg key="current_news_items">current news items</msg>
<msg key="delete">delete</msg>
<msg key="Description">Description</msg>
<msg key="edit">edit</msg>
<msg key="Edit_a_link_to_local_content">Edit a link to local content</msg>
<msg key="Edit_an_external_link">Edit an external link</msg>
<msg key="Edit_internal_link">Edit internal link</msg>
<msg key="Edit_parent_page">Edit parent page</msg>
<msg key="expired">expired</msg>
<msg key="expired_news">expired news</msg>
<msg key="external_link">external link</msg>
<msg key="external_ref">(external&amp;nbsp;ref)</msg>
<msg key="External_URL">External URL</msg>
<msg key="History">History</msg>
<msg key="internal_link">internal link</msg>
<msg key="internal_ref">(internal&amp;nbsp;ref)</msg>
<msg key="LIVE">(LIVE)</msg>
<msg key="lt_All_editable_attributes">All editable attributes</msg>
<msg key="lt_Are_you_sure_you_want">Are you sure you want to delete the page &quot;%title%&quot; at %page_url% ?
This operation cannot be undone.</msg>
<msg key="lt_Are_you_sure_you_want_1">Are you sure you want to go back to version %version_number%?
In order to do so, the</msg>
<msg key="lt_Are_you_sure_you_want_2">Are you sure you want to delete version %version_number%?</msg>
<msg key="lt_Change_ETP_application">Change ETP application</msg>
<msg key="lt_changes_will_go_live_immediately">(changes will go live immediately)</msg>
<msg key="lt_Configuration_of_this">Configuration of this content section</msg>
<msg key="lt_Confirm_delete_operat">Confirm delete operation for %name;noquote%</msg>
<msg key="lt_Confirm_revert_operat">Confirm revert operation for %name;noquote%</msg>
<msg key="lt_Confirm_revert_operation">Confirm revert operation for %name;noquote%</msg>
<msg key="lt_Content_items_in_this">Content items in this section</msg>
<msg key="lt_Frequently_Asked_Ques">Frequently Asked Questions:</msg>
<msg key="lt_If_youre_looking_for_">If you're looking for an old news article, check the</msg>
<msg key="lt_parameter_the_page_name">parameter, the page name be
be pre-filled with a unique number or with a number representing today's date.</msg>
<msg key="lt_Questions_and_Answers">Questions and Answers:</msg>
<msg key="lt_revision_count_more_recent_versions">%revision_count% more recent versions</msg>
<msg key="lt_The_ETP_application">The ETP application in use for a content section determines the
appearance and content of its pages. You may also specify the
application that should be used when a subtopic is created within
this content section.</msg>
<msg key="lt_This_is_the_text_of_t">This is the text of the link that will be generated.</msg>
<msg key="lt_This_is_the_url_of_th">This is the url of the link destination. If the link is to another site,
it must be fully qualified beginning with</msg>
<msg key="lt_This_must_be_a_short_">This must be a short identifier containing
no spaces. It will be the final name in the URL that identifies this page.
Depending on the</msg>
<msg key="lt_This_must_be_a_short_identifier">This must be a short identifier containing no spaces. It will be the
final part of the URL that identifies this subtopic.</msg>
<msg key="lt_This_will_be_the_title">This will be the title of the top-level page in this subtopic. You
may change it later if you like.</msg>
<msg key="lt_version_palatest_revi">version %pa.latest_revision%
(live version is %pa.live_revision%)</msg>
<msg key="lt_View_revision_history">View revision history</msg>
<msg key="lt_You_may_change_the_ti">You may change the title later if you like.</msg>
<msg key="most_recent_version">most recent version</msg>
<msg key="move_up">move up</msg>
<msg key="New_external_link">New external link</msg>
<msg key="New_internal_link">New internal link</msg>
<msg key="New_page">New page</msg>
<msg key="New_subtopic">New subtopic</msg>
<msg key="news_items">news items</msg>
<msg key="on">on</msg>
<msg key="or">or</msg>
<msg key="page">page</msg>
<msg key="Page_name">Page&amp;nbsp;name</msg>
<msg key="Page_title">Page&amp;nbsp;title</msg>
<msg key="Preview_changes">Preview changes</msg>
<msg key="Published">Published</msg>
<msg key="Publishing_options">Publishing options</msg>
<msg key="Q">Q:</msg>
<msg key="Return_to_the">Return to the</msg>
<msg key="revert">revert</msg>
<msg key="revision_history_for">Revision history for %name%</msg>
<msg key="save_changes">Save changes</msg>
<msg key="Set_parameters">Set parameters</msg>
<msg key="Set_permissions">Set permissions</msg>
<msg key="Setup">Setup</msg>
<msg key="Site_map">Site map</msg>
<msg key="subtopic">(subtopic)</msg>
<msg key="Subtopic_Application">Subtopic Application:</msg>
<msg key="Subtopic_name">Subtopic&amp;nbsp;name</msg>
<msg key="Subtopic_title">Subtopic&amp;nbsp;title</msg>
<msg key="The_subtopic_name_must_be_a_short_identifier">The subtopic name must be a short identifier containing no spaces. It will be the final part of the URL that identifies this subtopic.</msg>
<msg key="There_are_no">There are no</msg>
<msg key="Title">Title</msg>
<msg key="Version">Version</msg>
<msg key="view">view</msg>
<msg key="will_be_deleted">will be deleted</msg>
<msg key="You_must_fill_out_all_fields">You must fill out all fields in this form.</msg>
</message_catalog>
<?xml version="1.0" encoding="ISO-8859-1"?>
<message_catalog package_key="edit-this-page" package_version="1.7" locale="es_ES" charset="ISO-8859-1">
<msg key="A">R</msg>
<msg key="Application">Aplicación</msg>
<msg key="atribute_for_page_title">%attribute_title% para la página '%page_title%'</msg>
<msg key="Attributes">Atributos para la página '%pa.title%'</msg>
<msg key="attributes_for_page">asdf</msg>
<msg key="auto_page_name">nombre_página_automatico</msg>
<msg key="change_ETP_application">asdf sdfadf</msg>
<msg key="change_ETP_application_in_use_for">Cambiar la aplicación ETP en uso para la sección &quot;%page_title%&quot;</msg>
<msg key="Commit_your_work">Publicar su trabajo</msg>
<msg key="Create_a_link_to_local_content">Crear un enlace a otro contenido local</msg>
<msg key="Create_a_new">Crear un nuevo</msg>
<msg key="Create_a_new_external_link">Crear un nuevo enlace externo</msg>
<msg key="Create_a_new_subtopic">Crear una nueva subsección</msg>
<msg key="Created">Creado</msg>
<msg key="current">actual</msg>
<msg key="current_news_items">noticias actuales</msg>
<msg key="delete">borrar</msg>
<msg key="Description">Descripción</msg>
<msg key="edit">editar</msg>
<msg key="Edit_a_link_to_local_content">Modificar un enlace a otro contenido local</msg>
<msg key="Edit_an_external_link">Modificar un enlace externo</msg>
<msg key="Edit_internal_link">Modificar enlace interno</msg>
<msg key="Edit_parent_page">Editar página padre</msg>
<msg key="expired">caducado</msg>
<msg key="expired_news">noticia caducada</msg>
<msg key="external_link">link externo</msg>
<msg key="external_ref">ref_externa</msg>
<msg key="External_URL">URL externa</msg>
<msg key="History">Historial</msg>
<msg key="internal_link">link interno</msg>
<msg key="internal_ref">(referencia_interna)</msg>
<msg key="LIVE">(VISIBLE)</msg>
<msg key="lt_All_editable_attributes">Todos los atributos editables</msg>
<msg key="lt_Are_you_sure_you_want">¿Está seguro que quiere borrar la página &quot;%title%&quot; en %page_urg%? Esta operación no se puede deshacer</msg>
<msg key="lt_Are_you_sure_you_want_1">¿Está seguro que quiere volver a la vesrión %version_number%? En ese caso, la</msg>
<msg key="lt_Are_you_sure_you_want_2">¿Está seguro que quiere borrar la versión %version_number%?</msg>
<msg key="lt_Change_ETP_application">Cambiar aplicación ETP</msg>
<msg key="lt_changes_will_go_live_immediately">(los cambios serán visibles inmediatamente)</msg>
<msg key="lt_Configuration_of_this">Configuración del contenido de esta sección</msg>
<msg key="lt_Confirm_delete_operat">Confirme que quiere borrar %name%</msg>
<msg key="lt_Confirm_revert_operat">Confirme que quiere volver atrás para %name%</msg>
<msg key="lt_Confirm_revert_operation">Confirme que quiere volver atrás para %name%</msg>
<msg key="lt_Content_items_in_this">Unidades contenidos en esta sección</msg>
<msg key="lt_Frequently_Asked_Ques">Preguntas hechas con frecuencia</msg>
<msg key="lt_If_youre_looking_for_">Si está buscando viejos artículos de noticias, mire el</msg>
<msg key="lt_parameter_the_page_name">el nombre de la página será rellenado con un número único o con un número que represente la fecha de hoy.</msg>
<msg key="lt_Questions_and_Answers">Preguntas y Respuestas</msg>
<msg key="lt_revision_count_more_recent_versions">revisiones más recientes %revision_count%</msg>
<msg key="lt_The_ETP_application">La aplicación ETP en uso para el contenido de una sección determina la apariencia y el contenido de sus páginas. También puede especificar la aplicación que debe ser usada cuando se crea una subsección dentro de esta sección.</msg>
<msg key="lt_This_is_the_text_of_t">Este es el texto del enlace que será generado</msg>
<msg key="lt_This_is_the_url_of_th">Esta es la url del link destino. Si el link es a otro site, debe empezar con</msg>
<msg key="lt_This_must_be_a_short_">Esto debe ser una corta identificación sin contener espacios. Será el último nombre en la URL que identificará la página. Dependiendo del parámetro nombre_página_automatico, el nombre de la página será rellenado con un número único o con un número que representa la fecha de hoy.</msg>
<msg key="lt_This_must_be_a_short_identifier">Esto debe ser una corta identificación sin contener espacios. Este será la parte fina de la URL que identificará esta subsección.</msg>
<msg key="lt_This_will_be_the_title">Este será el título de la página principal en esta subsección. Lo puede cambiar más tarde si quiere.</msg>
<msg key="lt_version_palatest_revi">version %pa.latest_revision% (la versión utilizada es %pa.live_revision%)</msg>
<msg key="lt_View_revision_history">Ver historial de revisiones</msg>
<msg key="lt_You_may_change_the_ti">Puede cambiar el título más tarde si quiere.</msg>
<msg key="most_recent_version">versión más reciente</msg>
<msg key="move_up">mover arriba</msg>
<msg key="New_external_link">Nuevo enlace externo</msg>
<msg key="New_internal_link">Nuevo enlace interno</msg>
<msg key="New_page">Nueva página</msg>
<msg key="New_subtopic">Nueva subsección</msg>
<msg key="news_items">noticia</msg>
<msg key="on">en</msg>
<msg key="or">o</msg>
<msg key="page">página</msg>
<msg key="Page_name">Nombre de la página</msg>
<msg key="Page_title">Título de la página</msg>
<msg key="Preview_changes">Previsualizar cambios</msg>
<msg key="Published">Publicado</msg>
<msg key="Publishing_options">Opciones de publicación</msg>
<msg key="Q">P:</msg>
<msg key="Return_to_the">Volver al</msg>
<msg key="revert">volver atrás</msg>
<msg key="revision_history_for">Historial de revisiones para %name%</msg>
<msg key="save_changes">Guardar cambios</msg>
<msg key="Set_parameters">Fijar parametros</msg>
<msg key="Set_permissions">Fijar permisos</msg>
<msg key="Setup">Configuración</msg>
<msg key="Site_map">Mapa del sitio</msg>
<msg key="subtopic">(subsección)</msg>
<msg key="Subtopic_Application">Aplicación de la subsección</msg>
<msg key="Subtopic_name">Nombre de la subsección</msg>
<msg key="Subtopic_title">Título de la subsección</msg>
<msg key="The_subtopic_name_must_be_a_short_identifier">El nombre de la subsección debe ser un identificativo corto que no contenga espacios. Será la parte final de la URL que identifica la subsección</msg>
<msg key="There_are_no">No hay</msg>
<msg key="Title">Título</msg>
<msg key="Version">Versión</msg>
<msg key="view">ver</msg>
<msg key="will_be_deleted">será borrada</msg>
<msg key="You_must_fill_out_all_fields">Debe rellenar todos los campos de este formulario.</msg>
</message_catalog>
<?xml version="1.0" encoding="utf-8"?>
<message_catalog package_key="edit-this-page" locale="ru_RU" charset="utf-8">
<msg key="A">А:</msg>
<msg key="Application">Приложение:</msg>
<msg key="atribute_for_page_title">%attribute_title% для страницы '%page_title%'</msg>
<msg key="Attributes">Атрибуты для страницы '%pa.title%'</msg>
<msg key="attributes_for_page">Атрибуты для страницы'$pa(title)'</msg>
<msg key="auto_page_name">auto_page_name</msg>
<msg key="change_ETP_application">Изменить используемое ETP приложение для содержания раздела \&quot;%page_title%\&quot;</msg>
<msg key="change_ETP_application_in_use_for">Изменить используемое ETP приложение для содержания раздела &quot;%page_title%&quot;</msg>
<msg key="Commit_your_work">Фиксировать вашу работу</msg>
<msg key="Create_a_link_to_local_content">Создать ссылку на локальное содержание</msg>
<msg key="Create_a_new">Создать новый(ую)</msg>
<msg key="Create_a_new_external_link">Создать новую внешнюю ссылку</msg>
<msg key="Create_a_new_subtopic">Создать новую подтему</msg>
<msg key="create_new_subtopic">Подтема %subtopic_name%</msg>
<msg key="Created">Создано</msg>
<msg key="current">текущий</msg>
<msg key="current_news_items">текущие новостные сообщения</msg>
<msg key="delete">удалить</msg>
<msg key="Description">Описание</msg>
<msg key="edit">редактировать</msg>
<msg key="Edit_a_link_to_local_content">Редактировать ссылку на локальное содержание</msg>
<msg key="Edit_an_external_link">Редактировать внешнюю ссылку</msg>
<msg key="Edit_internal_link">Редактировать внутреннюю ссылку</msg>
<msg key="Edit_parent_page">Редактировать родительскую страницу</msg>
<msg key="expired">истекло</msg>
<msg key="expired_news">истёкшие новости</msg>
<msg key="external_link">внешняя(юю) ссылка(у)</msg>
<msg key="external_ref">(внешний&amp;nbsp;ref)</msg>
<msg key="External_URL">Внешний URL</msg>
<msg key="History">История</msg>
<msg key="internal_link">внутренняя(юю) ссылка(у)</msg>
<msg key="internal_ref">(внутренний&amp;nbsp;ref)</msg>
<msg key="LIVE">(LIVE)</msg>
<msg key="lt_All_editable_attributes">Все редактируемые атрибуты</msg>
<msg key="lt_Are_you_sure_you_want">Вы уверены, что хотите удалить страницу %title%&quot; на %page_url% ? Эту операцию невозможно отменить.</msg>
<msg key="lt_Are_you_sure_you_want_1">Вы действительно хотите вернуться к версии %version_number%? Для этого</msg>
<msg key="lt_Are_you_sure_you_want_2">Вы уверены, что хотите удалить версию %version_number%? </msg>
<msg key="lt_Change_ETP_application">Изменить ETP приложение</msg>
<msg key="lt_changes_will_go_live_immediately">(изменения будут применены немедленно)</msg>
<msg key="lt_Configuration_of_this">Настройка этого раздела</msg>
<msg key="lt_Confirm_delete_operat">Подтвердите операцию удаления для %name;noquote%</msg>
<msg key="lt_Confirm_revert_operat">Подтвердите возврат к предыдущей версии для %name;noquote%</msg>
<msg key="lt_Confirm_revert_operation">Подтвердите возврат к предыдущей версии %name;noquote%</msg>
<msg key="lt_Content_items_in_this">Содержание пунктов в этом разделе</msg>
<msg key="lt_Frequently_Asked_Ques">Часто задаваемые вопросы</msg>
<msg key="lt_If_youre_looking_for_">Если вы ищете устаревшие новостную статью, проверьте</msg>
<msg key="lt_parameter_the_page_name">параметр, названию страницы будет присвоен уникальный номер или номер, соответствующий текущей дате.</msg>
<msg key="lt_Questions_and_Answers">Вопросы и ответы:</msg>
<msg key="lt_revision_count_more_recent_versions">%revision_count% самые последние версии</msg>
<msg key="lt_The_ETP_application">Используемое для содержания раздела ETP приложение определяет отображение и содержание страниц раздела. Вы также можете выбрать приложение, которое должно использоваться в случае, когда внутри раздела создается подтема.</msg>
<msg key="lt_This_is_the_text_of_t">Это текст ссылки, которая будет сгенерирована. </msg>
<msg key="lt_This_is_the_url_of_th">Это url назначения ссылки. Если это ссылка на другой сайт, то она должна начинаться с полностью определённого </msg>
<msg key="lt_This_must_be_a_short_">Это должен быть краткий идентификатор, не содержащий пробелов. Он будет окончательным именем в URL, которое определяет эту страницу. В зависимости от</msg>
<msg key="lt_This_must_be_a_short_identifier">Это должен быть краткий идентификатор, не содержащий пробелов. Он будет окончательным именем в URL, которое определяет данную подтему.</msg>
<msg key="lt_This_will_be_the_title">Это будет заголовок первой страницы данной подтемы. При желании, вы сможете изменить его позже.</msg>
<msg key="lt_version_palatest_revi">версия %pa.latest_revision%
(текущая версия: %pa.live_revision%)</msg>
<msg key="lt_View_revision_history">Просмотреть историю ревизии</msg>
<msg key="lt_You_may_change_the_ti">При желании, вы сможете изменить заголовок позже.</msg>
<msg key="most_recent_version">самая актуальная версия</msg>
<msg key="move_up">переместить вверх</msg>
<msg key="New_external_link">Новая внешняя ссылка</msg>
<msg key="New_internal_link">Новая внутренняя ссылка</msg>
<msg key="New_page">Новая страница</msg>
<msg key="New_subtopic">Новый подраздел</msg>
<msg key="news_items">новые пункты</msg>
<msg key="on">на</msg>
<msg key="or">или</msg>
<msg key="page">страница</msg>
<msg key="Page_name">Страница&amp;nbsp;имя</msg>
<msg key="Page_title">Страница&amp;nbsp;заголовок</msg>
<msg key="Preview_changes">Предварительный просмотр изменений</msg>
<msg key="Published">Опубликовано</msg>
<msg key="Publishing_options">Опции публикации</msg>
<msg key="Q">В:</msg>
<msg key="Return_to_the">Вернуться к</msg>
<msg key="revert">вернуться назад</msg>
<msg key="revision_history_for">История ревизий для %name%</msg>
<msg key="save_changes">Сохранить изменения</msg>
<msg key="Set_parameters">Установить параметры</msg>
<msg key="Set_permissions">Установить права доступа</msg>
<msg key="Setup">Установить</msg>
<msg key="Site_map">Карта сайта</msg>
<msg key="subtopic">(подтема)</msg>
<msg key="Subtopic_Application">Приложение подтемы</msg>
<msg key="Subtopic_name">Подтема&amp;nbsp;имя</msg>
<msg key="Subtopic_title">Подтема&amp;nbsp;заголовок</msg>
<msg key="The_subtopic_name_must_be_a_short_identifier">Имя подтемы должно быть коротким идентификатором без пробелов. Оно будет являться конечной частью URL, определяющей данную подтему. </msg>
<msg key="There_are_no">Отсутствуют</msg>
<msg key="Title">Заголовок</msg>
<msg key="Version">Версия</msg>
<msg key="view">просмотреть</msg>
<msg key="will_be_deleted">будет удалено</msg>
<msg key="You_must_fill_out_all_fields">Вы должны заполнить все поля в этой форме.</msg>
</message_catalog>
<?xml version="1.0"?>
<!-- Generated by the OpenACS Package Manager -->
<package key="edit-this-page" url="http://openacs.org/repository/apm/packages/edit-this-page" type="apm_application">
<package-name>Edit This Page</package-name>
<pretty-plural>Edit This Page</pretty-plural>
<initial-install-p>f</initial-install-p>
<singleton-p>f</singleton-p>
<version name="1.9d3" url="http://openacs.org/repository/download/apm/edit-this-page-1.9d3.apm">
<database-support>
<database>postgresql</database>
</database-support>
<owner url="mailto:dave@thedesignexperience.org">Dave Bauer</owner>
<owner url="mailto:luke@museatech.net">Luke Pond</owner>
<owner url="mailto:jon@mayuli.com">Jon Griffin</owner>
<summary>An easy-to-use content management system.</summary>
<description format="text/html">An Easy to use publishing system with versioning and permissions.</description>
<provides url="edit-this-page" version="1.9d3"/>
<requires url="acs-kernel" version="4.6.2"/>
<requires url="acs-subsite" version="4.6.3"/>
<requires url="acs-templating" version="4.1.2"/>
<files>
<file path="Changes"/>
<file type="package_spec" path="edit-this-page.info"/>
<file type="data_model_create" db_type="oracle" path="sql/oracle/edit-this-page-create.sql"/>
<file type="data_model_drop" db_type="oracle" path="sql/oracle/edit-this-page-drop.sql"/>
<file type="data_model_create" db_type="postgresql" path="sql/postgresql/edit-this-page-create.sql"/>
<file type="data_model_drop" db_type="postgresql" path="sql/postgresql/edit-this-page-drop.sql"/>
<file type="data_model_upgrade" db_type="postgresql" path="sql/postgresql/upgrade/upgrade-1.1d-1.2b.sql"/>
<file type="tcl_util" path="tcl/etp-gc.tcl"/>
<file type="tcl_init" path="tcl/etp-init.tcl"/>
<file type="query_file" db_type="oracle" path="tcl/etp-procs-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="tcl/etp-procs-postgresql.xql"/>
<file type="tcl_procs" path="tcl/etp-procs.tcl"/>
<file type="query_file" path="tcl/etp-procs.xql"/>
<file type="template" path="templates/article-content.adp"/>
<file type="template" path="templates/article-content.tcl"/>
<file type="template" path="templates/article-index.adp"/>
<file type="template" path="templates/article-index.tcl"/>
<file type="template" path="templates/faq-content.adp"/>
<file type="template" path="templates/faq-content.tcl"/>
<file type="template" path="templates/faq-index.adp"/>
<file type="template" path="templates/faq-index.tcl"/>
<file type="template" path="templates/journal-article.adp"/>
<file type="template" path="templates/journal-article.tcl"/>
<file type="template" path="templates/journal-issue.adp"/>
<file type="template" path="templates/journal-issue.tcl"/>
<file type="template" path="templates/news-content.adp"/>
<file type="template" path="templates/news-content.tcl"/>
<file type="query_file" db_type="oracle" path="templates/news-index-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="templates/news-index-postgresql.xql"/>
<file type="template" path="templates/news-index.adp"/>
<file type="template" path="templates/news-index.tcl"/>
<file type="content_page" path="www/etp-create-2.tcl"/>
<file type="content_page" path="www/etp-create-extlink.tcl"/>
<file type="content_page" path="www/etp-create.adp"/>
<file type="content_page" path="www/etp-create.tcl"/>
<file type="query_file" db_type="oracle" path="www/etp-delete-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-delete-postgresql.xql"/>
<file type="content_page" path="www/etp-delete.adp"/>
<file type="content_page" path="www/etp-delete.tcl"/>
<file type="query_file" path="www/etp-delete.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-edit-2-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-edit-2-postgresql.xql"/>
<file type="content_page" path="www/etp-edit-2.tcl"/>
<file type="query_file" path="www/etp-edit-2.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-edit-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-edit-postgresql.xql"/>
<file type="content_page" path="www/etp-edit.adp"/>
<file type="content_page" path="www/etp-edit.tcl"/>
<file type="query_file" db_type="oracle" path="www/etp-extlink-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-extlink-postgresql.xql"/>
<file type="content_page" path="www/etp-extlink.adp"/>
<file type="content_page" path="www/etp-extlink.tcl"/>
<file type="query_file" db_type="oracle" path="www/etp-history-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-history-postgresql.xql"/>
<file type="content_page" path="www/etp-history.adp"/>
<file type="content_page" path="www/etp-history.tcl"/>
<file type="content_page" path="www/etp-master.adp"/>
<file type="content_page" path="www/etp-master.tcl"/>
<file type="query_file" db_type="oracle" path="www/etp-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-postgresql.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-publish-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-publish-postgresql.xql"/>
<file type="content_page" path="www/etp-publish.tcl"/>
<file type="query_file" path="www/etp-publish.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-revert-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-revert-postgresql.xql"/>
<file type="content_page" path="www/etp-revert.adp"/>
<file type="content_page" path="www/etp-revert.tcl"/>
<file type="query_file" path="www/etp-revert.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-setup-2-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-setup-2-postgresql.xql"/>
<file type="content_page" path="www/etp-setup-2.tcl"/>
<file type="query_file" path="www/etp-setup-2.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-setup-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-setup-postgresql.xql"/>
<file type="content_page" path="www/etp-setup.adp"/>
<file type="content_page" path="www/etp-setup.tcl"/>
<file type="query_file" path="www/etp-setup.xql"/>
<file type="content_page" path="www/etp-subtopic-create.adp"/>
<file type="content_page" path="www/etp-subtopic-create.tcl"/>
<file type="query_file" path="www/etp-subtopic-create.xql"/>
<file type="query_file" db_type="oracle" path="www/etp-swap-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-swap-postgresql.xql"/>
<file type="content_page" path="www/etp-swap.tcl"/>
<file type="query_file" db_type="oracle" path="www/etp-symlink-oracle.xql"/>
<file type="query_file" db_type="postgresql" path="www/etp-symlink-postgresql.xql"/>
<file type="content_page" path="www/etp-symlink.adp"/>
<file type="content_page" path="www/etp-symlink.tcl"/>
<file type="content_page" path="www/etp-trash.tcl"/>
<file type="query_file" path="www/etp-trash.xql"/>
<file type="content_page" path="www/etp.adp"/>
<file type="content_page" path="www/etp.tcl"/>
<file type="content_page" path="www/index.vuh"/>
</files>
<parameters>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="application" default="default" description="Name of the ETP application to use (default, faq, news, or create your own with the etp::define_applicaton procedure)"/>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="cache_max_age" default="600" description="number of seconds to keep requested page attributes in the cache"/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="subtopic_application" default="default" description="Name of the ETP application to use when creating a subtopic"/>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="CommentsEnabledP" default="0" description="Are General Comments Enabled for this Subtopic?"/>
</parameters>
</version>
</package>
This diff is collapsed.
-- etp-create.sql
-- @author Luke Pond (dlpond@pobox.com)
-- @creation-date 2001-05-31
--
-- Ported to Oracle by Jon Griffin and Don Baccus
drop sequence etp_auto_page_number_seq;
--create view etp_auto_page_number_seq as
--select nextval('t_etp_auto_page_number_seq') as nextval;
--- package decs
drop package etp;
declare
cursor subsite_values is
select v.value_id
from apm_parameter_values v, apm_parameters p
where p.package_key = 'acs-subsite'
and p.section_name = 'EditThisPage'
and p.parameter_id = v.parameter_id;
cursor subsite_parameters is
select parameter_id
from apm_parameters
where package_key = 'acs-subsite'
and section_name = 'EditThisPage';
begin
for cur_val in subsite_values loop
apm_parameter_value.del (
value_id => cur_val.value_id
);
end loop;
for cur_val in subsite_parameters loop
apm.unregister_parameter(
parameter_id => cur_val.parameter_id
);
end loop;
end;
/
show errors;
-- although we don't attempt to delete content that was
-- added via ETP, in order to delete the package we must
-- remove the package reference from cr_folders that were
-- created by ETP
update cr_folders set package_id = null
where package_id in (select package_id
from apm_packages
where package_key = 'edit-this-page');
-- also kill the package reference in the context_id field
-- of ETP content
update acs_objects set context_id = 0
where context_id in (select package_id
from apm_packages
where package_key = 'edit-this-page');
This diff is collapsed.
This diff is collapsed.
-- edit-this-page-drop.sql
-- @author Jon Griffin (jon@mayuli.com)
-- @creation-date 2001-11-01
--
drop sequence t_etp_auto_page_number_seq;
drop view etp_auto_page_number_seq;
drop function etp__get_attribute_value (integer, integer);
drop function etp__create_page(integer, varchar, varchar, varchar);
drop function etp__create_extlink(integer, varchar, varchar, varchar);
drop function etp__create_symlink(integer, integer);
drop function etp__create_new_revision(integer, varchar, integer);
drop function etp__get_folder_id (integer);
drop function etp__get_relative_url(integer, varchar);
drop function etp__get_title(integer, varchar);
drop function etp__get_description(integer, varchar);
create function inline_0 ()
returns integer as '
declare
v_cur_val record;
begin
for v_cur_val in
select v.value_id
from apm_parameter_values v, apm_parameters p
where p.package_key = ''acs-subsite''
and p.section_name = ''EditThisPage''
and p.parameter_id = v.parameter_id
loop
perform apm_parameter_value__delete (v_cur_val.value_id);
end loop;
for v_cur_val in
select parameter_id
from apm_parameters
where package_key = ''acs-subsite''
and section_name = ''EditThisPage''
loop
perform apm__unregister_parameter(v_cur_val.parameter_id);
end loop;
return 0;
end;' language 'plpgsql';
select inline_0 ();
drop function inline_0 ();
-- although we don't attempt to delete content that was
-- added via ETP, in order to delete the package we must
-- remove the package reference from cr_folders that were
-- created by ETP
update cr_folders set package_id = null
where package_id in (select package_id
from apm_packages
where package_key = 'edit-this-page');
-- also kill the package reference in the context_id field
-- of ETP content
update acs_objects set context_id = 0
where context_id in (select package_id
from apm_packages
where package_key = 'edit-this-page');
-- DaveB test service contracts for etp-page-revision
-- you will need a service contract implementation for
-- every ETP application that uses a different content type
select acs_sc_impl__new(
'FtsContentProvider', -- impl_contract_name
'etp_page_revision', -- impl_name
'edit-this-page' -- impl_owner.name
);
select acs_sc_impl_alias__new(
'FtsContentProvider', -- impl_contract_name
'etp_page_revision', -- impl_name
'datasource', -- impl_operation_name
'etp::revision_datasource', -- impl_alias
'TCL' -- impl_pl
);
select acs_sc_impl_alias__new(
'FtsContentProvider', -- impl_contract_name
'etp_page_revision', -- impl_name
'url', -- impl_operation_name
'etp::revision_url', -- impl_alias
'TCL' -- impl_pl
);
select acs_sc_binding__new (
'FtsContentProvider',
'etp_page_revision'
);
-- upgrade from 1.0.1 to 1.1b
-- dave@thedesignexperience.org
-- 2002-01-24
-- This fixes the content type on all the existing revisions
-- It does this by making them all etp_page_revision
-- If you have custom types, you will need to fix those
-- To do that change the cr_items.content_type to your custom type
-- for the cr_items
-- and change acs_objects.object_type to your custom type for the cr_revisions.
-- If you have any other items with a NULL content_type this will capture them
-- Please confirm and test this before running on a production database.
select content_type__create_type (
'etp_page_revision', -- content_type
'content_revision', -- supertype
'ETP managed page', -- pretty_name
'ETP managed pages', -- pretty_plural
'etp_page_revisions', -- table_name
'etp_page_revision_id', -- id_column
'content_revision__revision_name' -- name_method
);
update cr_items set content_type='etp_page_revision' where content_type is NULL;
-- this is untested DAVEB
update acs_objects set object_type='etp_page_revision'
where exists
(select 1 from cr_revisions cr, cr_items ci
where cr.item_id=ci.item_id
and ci.content_type='etp_page_revision'
and cr.revision_id=object_id);
-- this function correctly sets the actual content type specificed
-- in the type definition
create or replace function etp__create_page(integer, varchar, varchar, varchar)
returns integer as '
declare
p_package_id alias for $1;
p_name alias for $2;
p_title alias for $3;
p_content_type alias for $4; -- default null -> use content_revision
v_item_id integer;
v_revision_id integer;
v_folder_id integer;
begin
v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id);
v_folder_id := etp__get_folder_id(p_package_id);
-- due to a change in acs_object__delete we can reference the actual
-- object type we want
-- using this we can more easily search, but we will have to create a service
-- contract for each custom content type
-- we define a default etp_page_revision and service contract to go with it
-- make sure to subtype from etp_page_revision for any custom types
-- 2003-01-12 DaveB
insert into cr_items (
item_id, parent_id, name, content_type
) values (
v_item_id, v_folder_id, p_name, p_content_type
);
v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id);
insert into cr_revisions (revision_id, item_id, title,
publish_date, mime_type)
values (v_revision_id, v_item_id, p_title, now(), ''text/html'');
update cr_items set live_revision = v_revision_id
where item_id = v_item_id;
return 1;
end;
' language 'plpgsql';
create or replace function etp__get_description(integer, varchar)
returns varchar as '
declare
p_item_id alias for $1;
p_revision_description alias for $2;
v_item_id integer;
v_description varchar(400);
v_object_type varchar;
begin
if p_revision_description is not null then
return p_revision_description;
end if;
select object_type from acs_objects into v_object_type
where object_id = p_item_id;
if v_object_type = ''content_folder'' then
select r.description
into v_description
from cr_items i, cr_revisions r
where i.parent_id = p_item_id
and i.name = ''index''
and i.live_revision = r.revision_id
and i.item_id = r.item_id;
return v_description;
end if;
if v_object_type = ''content_extlink'' then
select description into v_description
from cr_extlinks
where extlink_id = p_item_id;
return v_description;
end if;
if v_object_type = ''content_symlink'' then
select target_id into v_item_id
from cr_symlinks
where symlink_id = p_item_id;
return etp__get_description(v_item_id, null);
end if;
if v_object_type = ''content_item'' then
select r.description into v_description
from cr_items i, cr_revisions r
where i.item_id = v_item_id
and i.live_revision = r.revision_id;
return v_description;
end if;
return null;
end;' language 'plpgsql';
create or replace function etp__get_title(integer, varchar)
returns varchar as '
declare
p_item_id alias for $1;
p_revision_title alias for $2;
v_item_id integer;
v_title varchar(400);
v_object_type varchar;
begin
if p_revision_title is not null then
return p_revision_title;
end if;
select object_type from acs_objects into v_object_type
where object_id = p_item_id;
if v_object_type = ''content_folder'' then
select r.title
into v_title
from cr_items i, cr_revisions r
where i.parent_id = p_item_id
and i.name = ''index''
and i.live_revision = r.revision_id;
return v_title;
end if;
if v_object_type = ''content_extlink'' then
select label into v_title
from cr_extlinks
where extlink_id = p_item_id;
return v_title;
end if;
if v_object_type = ''content_symlink'' then
select target_id into v_item_id
from cr_symlinks
where symlink_id = p_item_id;
return etp__get_title(v_item_id, null);
end if;
if v_object_type = ''content_item'' then
select r.title into v_title
from cr_items i, cr_revisions r
where i.item_id = v_item_id
and i.live_revision = r.revision_id;
return v_title;
end if;
return null;
end;
' language 'plpgsql';
\i ../edit-this-page-sc-create.sql
\ No newline at end of file
-- changed variable declaration from varchar(400) to varchar
create or replace function etp__get_relative_url(integer, varchar)
returns varchar as '
declare
p_item_id alias for $1;
p_name alias for $2;
v_item_id integer;
v_url varchar;
v_object_type varchar;
v_link_rec record;
begin
select object_type into v_object_type
from acs_objects
where object_id = p_item_id;
if v_object_type = ''content_item'' then
return p_name;
end if;
if v_object_type = ''content_folder'' then
select s.name || ''/'' into v_url
from cr_folders f, site_nodes s
where f.folder_id = p_item_id
and s.object_id = f.package_id;
return v_url;
end if;
if v_object_type = ''content_extlink'' then
select url into v_url
from cr_extlinks
where extlink_id = p_item_id;
return v_url;
end if;
if v_object_type = ''content_symlink'' then
select target_id into v_item_id
from cr_symlinks
where symlink_id = p_item_id;
select f.package_id, i.name
into v_link_rec
from cr_items i, cr_folders f
where i.item_id = v_item_id
and i.parent_id = f.folder_id;
select site_node__url(s.node_id) into v_url
from site_nodes s
where s.object_id = v_link_rec.package_id;
return v_url || v_link_rec.name;
end if;
return null;
end;
' language 'plpgsql';
create or replace function etp__get_title(integer, varchar)
returns varchar as '
declare
p_item_id alias for $1;
p_revision_title alias for $2;
v_item_id integer;
v_title varchar;
v_object_type varchar;
begin
if p_revision_title is not null then
return p_revision_title;
end if;
select object_type from acs_objects into v_object_type
where object_id = p_item_id;
if v_object_type = ''content_folder'' then
select r.title
into v_title
from cr_items i, cr_revisions r
where i.parent_id = p_item_id
and i.name = ''index''
and i.live_revision = r.revision_id;
return v_title;
end if;
if v_object_type = ''content_extlink'' then
select label into v_title
from cr_extlinks
where extlink_id = p_item_id;
return v_title;
end if;
if v_object_type = ''content_symlink'' then
select target_id into v_item_id
from cr_symlinks
where symlink_id = p_item_id;
return etp__get_title(v_item_id, null);
end if;
if v_object_type = ''content_item'' then
select r.title into v_title
from cr_items i, cr_revisions r
where i.item_id = v_item_id
and i.live_revision = r.revision_id;
return v_title;
end if;
return null;
end;
' language 'plpgsql';
create or replace function etp__get_description(integer, varchar)
returns varchar as '
declare
p_item_id alias for $1;
p_revision_description alias for $2;
v_item_id integer;
v_description varchar;
v_object_type varchar;
begin
if p_revision_description is not null then
return p_revision_description;
end if;
select object_type from acs_objects into v_object_type
where object_id = p_item_id;
if v_object_type = ''content_folder'' then
select r.description
into v_description
from cr_items i, cr_revisions r
where i.parent_id = p_item_id
and i.name = ''index''
and i.live_revision = r.revision_id
and i.item_id = r.item_id;
return v_description;
end if;
if v_object_type = ''content_extlink'' then
select description into v_description
from cr_extlinks
where extlink_id = p_item_id;
return v_description;
end if;
if v_object_type = ''content_symlink'' then
select target_id into v_item_id
from cr_symlinks
where symlink_id = p_item_id;
return etp__get_description(v_item_id, null);
end if;
if v_object_type = ''content_item'' then
select r.description into v_description
from cr_items i, cr_revisions r
where i.item_id = v_item_id
and i.live_revision = r.revision_id;
return v_description;
end if;
return null;
end;' language 'plpgsql';
--add new pl/pgsql proc
--Dave Bauer dave@thedesignexperience.org
--2003-09-22
create or replace function etp__create_page(integer, integer, varchar, varchar, varchar)
returns integer as '
declare
p_item_id alias for $1;
p_package_id alias for $2;
p_name alias for $3;
p_title alias for $4;
p_content_type alias for $5; -- default null -> use content_revision
v_item_id integer;
v_revision_id integer;
v_folder_id integer;
begin
if p_item_id is null then
v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id);
else
v_item_id := acs_object__new(p_item_id, ''content_item'', now(), null, null, p_package_id);
end if;
v_folder_id := etp__get_folder_id(p_package_id);
-- due to a change in acs_object__delete we can reference the actual
-- object type we want
-- using this we can more easily search, but we will have to create a service
-- contract for each custom content type
-- we define a default etp_page_revision and service contract to go with it
-- make sure to subtype from etp_page_revision for any custom types
-- 2003-01-12 DaveB
insert into cr_items (
item_id, parent_id, name, content_type
) values (
v_item_id, v_folder_id, p_name, p_content_type
);
v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id);
insert into cr_revisions (revision_id, item_id, title,
publish_date, mime_type)
values (v_revision_id, v_item_id, p_title, now(), ''text/html'');
update cr_items set live_revision = v_revision_id
where item_id = v_item_id;
return 1;
end;
' language 'plpgsql';
create or replace function etp__create_new_revision(integer, varchar, integer, integer)
returns integer as '
declare
p_package_id alias for $1;
p_name alias for $2;
p_user_id alias for $3;
p_revision_id alias for $4;
v_revision_id integer;
v_item_id integer;
v_content_type varchar;
begin
select max(r.revision_id)
into v_revision_id
from cr_revisions r, cr_items i
where i.name = p_name
and i.parent_id = etp__get_folder_id(p_package_id)
and r.item_id = i.item_id;
select item_id
into v_item_id
from cr_revisions
where revision_id = v_revision_id;
select object_type
into v_content_type
from acs_objects
where object_id = v_revision_id;
-- cannot use acs_object__new because it creates attributes with their
-- default values, which is not what we want.
insert into acs_objects (object_id, object_type, creation_date, creation_user, context_id)
values (p_revision_id, v_content_type, now(), p_user_id, v_item_id);
insert into cr_revisions (revision_id, item_id, title, description, content, mime_type)
select p_revision_id, item_id, title, description, content, mime_type
from cr_revisions r
where r.revision_id = v_revision_id;
-- copy extended attributes to the new revision, if there are any
insert into acs_attribute_values (object_id, attribute_id, attr_value)
select p_revision_id as object_id, attribute_id, attr_value
from acs_attribute_values
where object_id = v_revision_id;
return 1;
end;
' language 'plpgsql';
create or replace function etp__create_page(integer, varchar, varchar, varchar)
returns integer as '
declare
p_package_id alias for $1;
p_name alias for $2;
p_title alias for $3;
p_content_type alias for $4; -- default null -> use content_revision
v_item_id integer;
v_revision_id integer;
v_folder_id integer;
begin
v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id);
v_folder_id := etp__get_folder_id(p_package_id);
-- due to a change in acs_object__delete we can reference the actual
-- object type we want
-- using this we can more easily search, but we will have to create a service
-- contract for each custom content type
-- we define a default etp_page_revision and service contract to go with it
-- make sure to subtype from etp_page_revision for any custom types
-- 2003-01-12 DaveB
insert into cr_items (
item_id, parent_id, name, content_type
) values (
v_item_id, v_folder_id, p_name, p_content_type
);
v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id);
insert into cr_revisions (revision_id, item_id, title,
publish_date, mime_type)
values (v_revision_id, v_item_id, p_title, now(), ''text/enhanced'');
update cr_items set live_revision = v_revision_id
where item_id = v_item_id;
return 1;
end;
' language 'plpgsql';
create or replace function etp__create_page(integer, integer, varchar, varchar, varchar)
returns integer as '
declare
p_item_id alias for $1;
p_package_id alias for $2;
p_name alias for $3;
p_title alias for $4;
p_content_type alias for $5; -- default null -> use content_revision
v_item_id integer;
v_revision_id integer;
v_folder_id integer;
begin
if p_item_id is null then
v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id);
else
v_item_id := acs_object__new(p_item_id, ''content_item'', now(), null, null, p_package_id);
end if;
v_folder_id := etp__get_folder_id(p_package_id);
-- due to a change in acs_object__delete we can reference the actual
-- object type we want
-- using this we can more easily search, but we will have to create a service
-- contract for each custom content type
-- we define a default etp_page_revision and service contract to go with it
-- make sure to subtype from etp_page_revision for any custom types
-- 2003-01-12 DaveB
insert into cr_items (
item_id, parent_id, name, content_type
) values (
v_item_id, v_folder_id, p_name, p_content_type
);
v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id);
insert into cr_revisions (revision_id, item_id, title,
publish_date, mime_type)
values (v_revision_id, v_item_id, p_title, now(), ''text/enhanced'');
update cr_items set live_revision = v_revision_id
where item_id = v_item_id;
return 1;
end;
' language 'plpgsql';
--
--
--
-- @author Dave Bauer (dave@thedesignexperience.org)
-- @creation-date 2004-12-08
-- @arch-tag: 52fe4cbd-c50d-432a-a4b3-1dd6cc3c6145
-- @cvs-id $Id$
--
create or replace function etp__get_folder_id (integer)
returns integer as '
declare
p_package_id alias for $1;
v_folder_id integer;
v_parent_id integer;
begin
select folder_id into v_folder_id
from cr_folders
where package_id = p_package_id;
if not found then
select parent_id into v_parent_id
from site_nodes
where object_id = p_package_id;
if found and v_parent_id is null then
v_folder_id := content_item_globals.c_root_folder_id;
else
-- This is probably an ETP app instance that
-- was created through the Site Map; by returning
-- 0 we ensure the get_page_attributes query will
-- fail and index.vuh will redirect to etp-setup-2.
v_folder_id := 0;
end if;
end if;
return v_folder_id;
end;
' language 'plpgsql' stable;
-- Getting right sequences usage in plpsql functions
-- Avoiding cases where from clause would be automatically added
--
-- @author Victor Guerra (vguerra@wu.ac.at)
create or replace function etp__create_extlink(integer, varchar, varchar, varchar)
returns integer as '
declare
p_package_id alias for $1;
p_url alias for $2;
p_title alias for $3;
p_description alias for $4;
v_item_id integer;
v_folder_id integer;
begin
v_item_id := acs_object__new(null, ''content_extlink'');
v_folder_id := etp__get_folder_id(p_package_id);
insert into cr_items (
item_id, parent_id, name, content_type
) values (
v_item_id, v_folder_id, ''extlink '' || nextval(''t_etp_auto_page_number_seq''), ''content_extlink''
);
insert into cr_extlinks
(extlink_id, url, label, description)
values
(v_item_id, p_url, p_title, p_description);
return 1;
end;
' language 'plpgsql';
create or replace function etp__create_symlink(integer, integer)
returns integer as '
declare
p_package_id alias for $1;
p_target_id alias for $2;
v_item_id integer;
v_folder_id integer;
begin
v_item_id := acs_object__new(null, ''content_symlink'');
v_folder_id := etp__get_folder_id(p_package_id);
insert into cr_items (
item_id, parent_id, name, content_type
) values (
v_item_id, v_folder_id, ''symlink '' || nextval(''t_etp_auto_page_number_seq''), ''content_symlink''
);
insert into cr_symlinks
(symlink_id, target_id)
values
(v_item_id, p_target_id);
return 1;
end;
' language 'plpgsql';
create or replace function etp__create_new_revision(integer, varchar, integer)
returns integer as '
declare
p_package_id alias for $1;
p_name alias for $2;
p_user_id alias for $3;
v_revision_id integer;
v_item_id integer;
v_new_revision_id integer;
v_content_type varchar;
begin
select max(r.revision_id)
into v_revision_id
from cr_revisions r, cr_items i
where i.name = p_name
and i.parent_id = etp__get_folder_id(p_package_id)
and r.item_id = i.item_id;
select item_id
into v_item_id
from cr_revisions
where revision_id = v_revision_id;
select object_type
into v_content_type
from acs_objects
where object_id = v_revision_id;
-- cannot use acs_object__new because it creates attributes with their
-- default values, which is not what we want.
select nextval(''t_acs_object_id_seq'')
into v_new_revision_id from dual;
insert into acs_objects (object_id, object_type, creation_date, creation_user, context_id)
values (v_new_revision_id, v_content_type, now(), p_user_id, v_item_id);
insert into cr_revisions (revision_id, item_id, title, description, content, mime_type)
select v_new_revision_id, item_id, title, description, content, mime_type
from cr_revisions r
where r.revision_id = v_revision_id;
-- copy extended attributes to the new revision, if there are any
insert into acs_attribute_values (object_id, attribute_id, attr_value)
select v_new_revision_id as object_id, attribute_id, attr_value
from acs_attribute_values
where object_id = v_revision_id;
return 1;
end;
' language 'plpgsql';
create or replace function etp__get_folder_id (integer)
returns integer as '
declare
p_package_id alias for $1;
v_folder_id integer;
v_parent_id integer;
begin
select folder_id into v_folder_id
from cr_folders
where package_id = p_package_id;
if not found then
select parent_id into v_parent_id
from site_nodes
where object_id = p_package_id;
if found and v_parent_id is null then
v_folder_id := content_item__get_root_folder(null);
else
-- This is probably an ETP app instance that
-- was created through the Site Map; by returning
-- 0 we ensure the get_page_attributes query will
-- fail and index.vuh will redirect to etp-setup-2.
v_folder_id := 0;
end if;
end if;
return v_folder_id;
end;
' language 'plpgsql';
update acs_object_types set table_name = NULL, id_column = NULL where object_type in ('journal_issue', 'journal_article', 'news_item');
# etp-custom-init.tcl
ad_library {
Registers custom content types used by Edit This Page templates. This allows users to keep their own custom templates, without cluttering etp-init.tcl
@cvs-id $Id$
@author Malte Sussdorff sussdorff@sussdorff.de
@creation-date 30 Jan 2004
}
# This is a custom application called asc. It will not work, as the asc-index and acs-content files are not available.
#If you want to start your own application, take packages/edit-this-page/templates/article-index.tcl/.adp and use this as your template for your own application.
# etp::define_application asc {
# index_template packages/edit-this-page/templates/asc-index
# index_object_name "ASC"
#
# content_template packages/edit-this-page/templates/asc-content
# content_object_name "asc-article"
#
# allow_subtopics f
# allow_extlinks f
# allow_symlinks f
# auto_page_name "number"
#}
# etp-gc.tcl
ad_library {
Demo for using general comments with ETP
@cvs-id $Id$
@author Pat Colgan pat@museatech.net
@creation-date 20 June 2001
}
namespace eval etp {
ad_proc -public get_gc_link { } {
Called from rotisserie questions template to present comment link
taking out permission checking for now
@author Pat Colgan pat@museatech.net
@creation-date 4-17-01
} {
# get object_id
# check permissions
# return link
# We only show the link here if the_public has
# general_comments_create privilege on the page. Why the_public
# rather than the current user? Because we don't want admins to
# be seeing "Add a comment" links on non-commentable pages.
#
set item_id $pa.item_id
set object_name [etp::get_name]
set comment_link ""
append comment_link "<center>
[general_comments_create_link -object_name $object_name $item_id ]
</center>"
append comment_link "[general_comments_get_comments -print_content_p 1 $item_id ]"
return $comment_link
}
}
# etp-init.tcl
ad_library {
Registers content types used by Edit This Page templates
@cvs-id $Id$
@author Luke Pond dlpond@pobox.com
@creation-date 31 May 2001
}
# Definitions of the attributes that belong to special content types
# and of ETP "applications". One of "application" must be chosen for
# each package instance of ETP, thereby determining the behavior and
# appearance of the package and the admin pages.
# Note: when defining your own application, you can specify
# whichever of these parameters you want to change; those you leave
# unspecified will be looked up from the "default" application.
# DRB: I added code to guard these definitions and to only define applications if the
# type exists or is successfully created. This is a workaround for the fact that certain
# older packages may define types with the same pretty name as an ETP type. When such a
# package was mounted, ETP would not work. The real-life example is news, where both the
# original news package and ETP define a content type with the pretty name "News Item".
# The name is so logical that I couldn't really see much sense in changing the name in
# one package or the other.
# This admittedly has made the code ugly but mounting news or any other package must
# not be allowed to break ETP ...
etp::define_application default {
index_template packages/edit-this-page/templates/article-index
index_content_type etp_page_revision
index_object_name "subtopic"
index_title_attr_name "Title"
index_description_attr_name "Description"
index_content_attr_name "Content"
content_template packages/edit-this-page/templates/article-content
content_content_type etp_page_revision
content_object_name "page"
content_title_attr_name "Title"
content_description_attr_name "Description"
content_content_attr_name "Content"
allow_subtopics t
allow_extlinks t
allow_symlinks t
auto_page_name ""
date_format "Month DD, YYYY"
}
if { [catch {
etp::define_content_type journal_issue "Journal Issue" "Journal Issues" {
{ publication_date "Publication Date" "Publication Dates" date "" "" }
{ issue_name "Issue name" "Issue names" string "size=60" "" }
}
} errmsg]} {
ns_log Warning "ETP: define 'Journal Issue' failed: $errmsg"
}
if { [catch {
etp::define_content_type journal_article "Journal Article" "Journal Articles" {
{ section Section Sections string "" "" }
{ byline Byline Bylines string "" "" }
{ abstract Abstract Abstracts string "rows=24 cols=80" "" }
{ citation Citation Citations string "rows=4 cols=80" "" }
}
} errmsg]} {
ns_log Warning "ETP: define 'Journal Articles' failed: $errmsg"
}
if { [catch {
etp::define_content_type news_item "News Item" "News Items" {
{ location "Location" "Location" string "size=80" "" }
{ subtitle "Subtitle" "Subtitle" string "rows=4 cols=80" "" }
{ release_date "Release Date" "Release Dates" date "size=60" "" }
{ archive_date "Archive Date" "Archive Dates" date "size=60" "" }
}
} errmsg]} {
ns_log Warning "ETP: define 'News Items' failed: $errmsg"
} else {
etp::define_application news {
index_template packages/edit-this-page/templates/news-index
content_template packages/edit-this-page/templates/news-content
content_content_type news_item
content_object_name "news item"
allow_subtopics f
allow_extlinks f
allow_symlinks f
auto_page_name "number"
}
}
etp::define_application faq {
index_template packages/edit-this-page/templates/faq-index
index_object_name "FAQ"
content_template packages/edit-this-page/templates/faq-content
content_object_name "question"
content_title_attr_name "Question"
content_content_attr_name "Answer"
allow_subtopics f
allow_extlinks f
allow_symlinks f
auto_page_name "number"
}
etp::define_application subnav-article {
index_template packages/edit-this-page/templates/subnav-article-index
index_object_name "Subnavbar Index"
content_template packages/edit-this-page/templates/subnav-article-content
content_object_name "Subnavbar Article"
allow_subtopics f
allow_extlinks f
allow_symlinks f
auto_page_name "number"
}
set custom_file "[file join [acs_root_dir] packages edit-this-page tcl etp-custom-init.tcl]"
source $custom_file
\ No newline at end of file
<?xml version="1.0"?>
<queryset>
<rdbms><type>oracle</type><version>8.1.6</version></rdbms>
<fullquery name="etp::define_content_type.object_type_create">
<querytext>
begin
acs_object_type.create_type (
object_type => :content_type,
pretty_name => :pretty_name,
pretty_plural => :pretty_plural,
supertype => 'content_revision',
table_name => :content_type,
id_column => :content_type
);
end;
</querytext>
</fullquery>
<fullquery name="etp::define_content_type.attribute_create">
<querytext>
begin
:1 := acs_attribute.create_attribute (
object_type => :content_type,
attribute_name => :a_name,
datatype => :a_datatype,
pretty_name => :a_pretty_name,
pretty_plural => :a_pretty_plural,
default_value => :a_default,
min_n_values => 1,
max_n_values => 1,
storage => 'generic'
);
end;
</querytext>
</fullquery>
<fullquery name="etp::make_page.page_create">
<querytext>
begin
:1 := etp.create_page(
package_id => :package_id,
name => :name,
title => :title,
content_type => :content_type
);
end;
</querytext>
</fullquery>
<fullquery name="etp::register-page.package_id_from_url">
<querytext>
select object_id as package_id
from site_nodes
where node_id = site_node.node_id(:url_stub, null)
</querytext>
</fullquery>
<fullquery name="etp::make_page.page_exists">
<querytext>
select 1 from cr_items
where parent_id = etp.get_folder_id(:package_id)
and name = :name
</querytext>
</fullquery>
<fullquery name="etp::get_pa.get_page_attributes">
<querytext>
select i.item_id, i.name, r.revision_id, r.title,
r.description, r.publish_date, r.content $extended_attributes
from cr_items i, cr_revisions r
where i.parent_id = etp.get_folder_id(:package_id)
and i.name = :name
and i.item_id = r.item_id
and r.revision_id = i.live_revision
</querytext>
</fullquery>
<fullquery name="etp::get_pa.get_page_attributes_other_revision">
<querytext>
select i.item_id, i.name, r.revision_id, r.title,
r.description, r.publish_date, r.content $extended_attributes
from cr_items i, cr_revisions r
where i.parent_id = etp.get_folder_id(:package_id)
and i.name = :name
and i.item_id = r.item_id
and r.revision_id = :revision_id
</querytext>
</fullquery>
<fullquery name="etp::get_latest_revision_id.get_latest_revision_id">
<querytext>
select max(revision_id) as revision_id
from cr_revisions r, cr_items i
where i.parent_id = etp.get_folder_id(:package_id)
and i.name = :name
and i.item_id = r.item_id
</querytext>
</fullquery>
<fullquery name="etp::get_live_revision_id.get_live_revision_id">
<querytext>
select live_revision as revision_id
from cr_items i
where i.parent_id = etp.get_folder_id(:package_id)
and i.name = :name
</querytext>
</fullquery>
<fullquery name="etp::get_content_items.get_content_items">
<querytext>
select * from
(select * from (
select $columns
from cr_items i, cr_revisions r
where i.parent_id = :folder_id
and i.name != 'index'
and i.live_revision = r.revision_id(+)
) attributes
where $extra_where_clauses
order by $orderby)
$limit_clause
</querytext>
</fullquery>
<fullquery name="etp::get_subtopics.get_subtopics">
<querytext>
select child.name, child.node_id, child.object_id as package_id,
etp.package_title(child.object_id) as title,
etp.package_description(child.object_id) as description
from site_nodes parent, site_nodes child, apm_packages p
where parent.object_id = :package_id
and child.parent_id = parent.node_id
and child.object_id = p.package_id
and p.package_key = 'edit-this-page'
</querytext>
</fullquery>
<partialquery name="etp::get_attribute_lookup_sql.lookup_sql_clause">
<querytext>
etp.get_attribute_value(r.revision_id, $attribute_id)
</querytext>
</partialquery>
<partialquery name="etp::get_content_items.gci_orderby">
<querytext>
sort_order
</querytext>
</partialquery>
<partialquery name="etp::get_content_items.gci_columns_clause">
<querytext>
i.item_id, i.name,
to_char(r.publish_date, 'Mon DD, YYYY') as publish_date, rownum as sort_order,
(select object_type from acs_objects
where object_id = i.item_id) as object_type,
etp.get_relative_url(i.item_id, i.name) as url,
etp.get_title(i.item_id, r.title) as title,
etp.get_description(i.item_id, r.description) as description
</querytext>
</partialquery>
</queryset>
<?xml version="1.0"?>
<queryset>
<rdbms><type>postgresql</type><version>7.1</version></rdbms>
<fullquery name="etp::revision_url.package_url">
<querytext>
select site_node__url(node_id) as package_url from site_nodes where object_id = (select package_id from cr_folders where folder_id= (select parent_id from cr_items where latest_revision = :object_id))
</querytext>
</fullquery>
<fullquery name="etp::define_content_type.object_type_create">
<querytext>
select acs_object_type__create_type (
:content_type,
:pretty_name,
:pretty_plural,
'etp_page_revision',
null,
null,
null,
'f',
null,
null
)
</querytext>
</fullquery>
<fullquery name="etp::define_content_type.attribute_create">
<querytext>
select acs_attribute__create_attribute (
:content_type,
:a_name,
:a_datatype,
:a_pretty_name,
:a_pretty_plural,
null,
null,
:a_default,
1,
1,
null,
'generic',
'f'
)
</querytext>
</fullquery>
<fullquery name="etp::make_page.page_create">
<querytext>
select etp__create_page(
:item_id,
:package_id,
:name,
:title,
:content_type
)
</querytext>
</fullquery>
<fullquery name="etp::register_page.package_id_from_url">
<querytext>
select object_id as package_id
from site_nodes
where node_id = site_node__node_id(:url_stub, null)
</querytext>
</fullquery>
<fullquery name="etp::make_page.page_exists">
<querytext>
select 1 from cr_items
where parent_id = etp__get_folder_id(:package_id)
and name = :name
</querytext>
</fullquery>
<fullquery name="etp::get_pa.get_page_attributes">
<querytext>
select i.item_id, i.name, r.revision_id, r.title, r.mime_type,
r.description, r.publish_date, r.content $extended_attributes
from cr_items i, cr_revisions r
where i.parent_id = etp__get_folder_id(:package_id)
and i.name = :name
and i.item_id = r.item_id
and r.revision_id = i.live_revision
</querytext>
</fullquery>
<fullquery name="etp::get_pa.get_page_attributes_other_revision">
<querytext>
select i.item_id, i.name, r.revision_id, r.title, r.mime_type,
r.description, r.publish_date, r.content $extended_attributes
from cr_items i, cr_revisions r
where i.parent_id = etp__get_folder_id(:package_id)
and i.name = :name
and i.item_id = r.item_id
and r.revision_id = :revision_id
</querytext>
</fullquery>
<fullquery name="etp::get_latest_revision_id.get_latest_revision_id">
<querytext>
select max(revision_id) as revision_id
from cr_revisions r, cr_items i
where i.parent_id = etp__get_folder_id(:package_id)
and i.name = :name
and i.item_id = r.item_id
</querytext>
</fullquery>
<fullquery name="etp::get_live_revision_id.get_live_revision_id">
<querytext>
select live_revision as revision_id
from cr_items i
where i.parent_id = etp__get_folder_id(:package_id)
and i.name = :name
</querytext>
</fullquery>
<fullquery name="etp::get_content_items.get_content_items">
<querytext>
select * from
(select $columns
from cr_items i left join cr_revisions r on (i.live_revision = r.revision_id)
where i.parent_id = :folder_id and i.name != 'index'
) attributes
where $extra_where_clauses
order by $orderby
$limit_clause
</querytext>
</fullquery>
<fullquery name="etp::get_subtopics.get_subtopics">
<querytext>
select child.name, child.node_id, child.object_id as package_id,
etp__get_title(f.folder_id,NULL) as title,
etp__get_description(f.folder_id,NULL) as description,
site_node__url(child.node_id) as url
from site_nodes parent, site_nodes child, apm_packages p,
cr_folders f
where parent.object_id = :package_id
and child.parent_id = parent.node_id
and child.object_id = p.package_id
and p.package_key = 'edit-this-page'
and f.package_id=p.package_id
</querytext>
</fullquery>
<partialquery name="etp::get_attribute_lookup_sql.lookup_sql_clause">
<querytext>
etp__get_attribute_value(r.revision_id, $attribute_id)
</querytext>
</partialquery>
<partialquery name="etp::get_content_items.gci_orderby">
<querytext>
sort_order
</querytext>
</partialquery>
<partialquery name="etp::get_content_items.gci_columns_clause">
<querytext>
i.item_id, i.name, tree_sortkey as sort_order,
to_char(r.publish_date, 'Mon DD, YYYY') as publish_date,
(select object_type from acs_objects
where object_id = i.item_id) as object_type,
etp__get_relative_url(i.item_id, i.name) as url,
etp__get_title(i.item_id, r.title) as title,
etp__get_description(i.item_id, r.description) as description
</querytext>
</partialquery>
<fullquery name="etp::get_folder_id.get_folder_id">
<querytext>
select etp__get_folder_id(:package_id)
</querytext>
</fullquery>
</queryset>
This diff is collapsed.
<?xml version="1.0"?>
<queryset>
<fullquery name="etp::define_content_type.object_type_exists">
<querytext>
select 1 from acs_object_types
where object_type = :content_type
</querytext>
</fullquery>
<fullquery name="etp::define_content_type.attribute_exists">
<querytext>
select attribute_id from acs_attributes
where object_type = :content_type
and attribute_name = :a_name
</querytext>
</fullquery>
<partialquery name="etp::get_content_items.gci_where_clause">
<querytext>
1 = 1
</querytext>
</partialquery>
</queryset>
<?xml version="1.0"?>
<queryset>
<rdbms><type>postgresql</type><version>7.1</version></rdbms>
<fullquery name="etp::revision_url.package_url">
<querytext>
select site_node__url(node_id) as package_url from site_nodes where object_id = (select package_id from cr_folders where folder_id= (select parent_id from cr_items where latest_revision = :object_id))
</querytext>
</fullquery>
<fullquery name="etp::create_search_impl.create_search_impl">
<querytext>
select acs_sc_impl__new(
'FtsContentProvider', -- impl_contract_name
:content_type, -- impl_name
'edit-this-page' -- impl_owner.name
);
</querytext>
</fullquery>
<fullquery name="etp::create_search_impl.create_datasource_alias">
<querytext>
select acs_sc_impl_alias__new(
'FtsContentProvider', -- impl_contract_name
:content_type, -- impl_name
'datasource', -- impl_operation_name
'etp::revision_datasource', -- impl_alias
'TCL' -- impl_pl
)
</querytext>
</fullquery>
<fullquery name="etp::create_search_impl.create_url_alias">
<querytext>
select acs_sc_impl_alias__new(
'FtsContentProvider', -- impl_contract_name
:content_type, -- impl_name
'url', -- impl_operation_name
'etp::revision_url', -- impl_alias
'TCL' -- impl_pl
);
</querytext>
</fullquery>
<fullquery name="etp::create_search_impl.install_binding">
<querytext>
select acs_sc_binding__new(
'FtsContentProvider', -- contract_name
:content_type -- impl_name
);
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
# edit-this-page/tcl/etp-sc-procs.tcl
# implements OpenFTS Search service contracts
# Dave Bauer dave@thedesignexperience.org
# 2002-08-13
# Right now I am leaving the keywords blank
# in the future we should either extract them from the META keyword tag
# or allow assignment of cr_keywords to static_pages
# 2003-01-13 added procs to create new service contract implementations
# when a new application type is added -DaveB
namespace eval etp {}
ad_proc etp::revision_datasource {
object_id
} {
Returns a search package compatible array
@author Dave Bauer
} {
db_0or1row revision_datasource "" -column_array datasource
set content_type [db_string get_content_type {}]
ns_log debug "etp::revision_datasource: content_type=$content_type"
# call a specially named proc to extend search content for
# this content_type if it exists
# we pass in the name of the tcl array for the datasource
# which the proc can modify if it likes to add additional
# content to be indexed.
if {[llength [info procs "etp::search::$content_type"]]==1} {
[etp::search::$content_type -array_name "datasource"]
}
return [array get datasource]
}
ad_proc etp::revision_url {
object_id
} {
returns the url of an etp page revision
@author Dave Bauer
} {
db_1row revision_url {}
set package_url [db_string package_url {} -default "/"]
return [string trimright "[ad_url]${package_url}${url}" "index"]
}
ad_proc etp::create_search_impl {
{-content_type:required}
} {
Creates and registers a service contract implementation alias
for an ETP custom application type if it does not already exist.
This will define the datasource proc for the type as
etp::revision_datasource. That proc will attempt to call a specially
named tcl proc of the form etp::content_type where content_type is the
acs_object type of the content type. If the proc does not exist only the
attributes of the default type will be used to create the datasource.
@author Dave Bauer
} {
db_transaction {
# create the implementation if it does not exist
if {![etp::search_impl_exists_p -content_type $content_type]==1} {
db_exec_plsql create_search_impl {}
db_exec_plsql create_datasource_alias {}
db_exec_plsql create_url_alias {}
}
# install the binding if it does not exist
if {![acs_sc_binding_exists_p "FtsContentProvider" $content_type]==1} {
db_exec_plsql install_binding {}
}
} on_error {
ns_log Error "etp::create_search_impl: Service contract implementation for content type \"${content_type}\" is not valid"
}
}
ad_proc etp::search_impl_exists_p {
{-content_type:required}
} {
checks for the existence of a search service contract implementation
and returns 1 if it exists, and 0 is it does not
@author Dave Bauer
} {
# check for service contract here
ns_log debug "etp::search_impl_exists_p: search_contract_exists_p content type=$content_type
exists_p=[acs_sc_binding_exists_p FtsContentProvider $content_type]"
return [acs_sc_binding_exists_p FtsContentProvider $content_type]
}
namespace eval etp::search {}
ad_proc etp::search::etp_page_revision {
{-array_name ""}
} {
Sample Custom content type search proc
We are allowed to add/modify the elements for the
search compatible datasource array via upvar
} {
if {([info exists array_name] && $array_name ne "")} {
upvar search_array $array_name
ns_log debug "etp::search::etp_page_revision: arrayname:$array_name"
}
}
\ No newline at end of file
<?xml version="1.0"?>
<queryset>
<fullquery name="etp::revision_datasource.get_content_type">
<querytext>
select object_type from acs_objects
where object_id=:object_id
</querytext>
</fullquery>
<fullquery name="etp::create_search_impl.get_contract_id">
<querytext>
select contract_id
from valid_uninstalled_bindings
where contract_name='FtsContentProvider'
and impl_name=:content_type
</querytext>
</fullquery>
<fullquery name="etp::revision_url.revision_url">
<querytext>
select name as url, parent_id as package_id
from cr_items
where live_revision = :object_id
</querytext>
</fullquery>
<fullquery name="etp::revision_datasource.revision_datasource">
<querytext>
select r.revision_id as object_id,
r.title as title,
content as content,
'text/html' as mime,
'' as keywords,
'text' as storage_type
from cr_revisions r
where revision_id = :object_id
</querytext>
</fullquery>
</queryset>
\ No newline at end of file
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
@pa.content;noquote@
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is the default page used to display content pages
for an Edit This Page package instance. It assumes a
content type with no extended attributes, and presents
the content item with a standard article layout.
<p>
If you want to use some other page instead, specify it with
the content_template package parameter.
} {
} -properties {
pa:onerow
}
etp::get_page_attributes
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<if @pa.content@ not nil>
@pa.content;noquote@
</if>
<blockquote>
<multiple name="content_items">
<p><a href="@content_items.url@">@content_items.title@</a>
<if @content_items.description@ not nil>
- @content_items.description@
</if>
<br><br>
</multiple>
</blockquote>
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is the default page used to display an index listing
for an Edit This Page package instance. It assumes a
content type with no extended attributes, and presents
a listing of all content pages belonging to this package.
<p>
If you want to use some other page instead, specify it with
the index_template package parameter.
} {
} -properties {
pa:onerow
content_pages:multirow
}
etp::get_page_attributes
etp::get_content_items
<master src="/packages/edit-this-page/www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<blockquote>
<b>Q:</b> <em>@pa.title@</em>
<p>
<b>A:</b>
@pa.content;noquote@
</blockquote>
# /packages/edit-this-page/templates/faq-content.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-07-05
This page can be used to display a single question from a FAQ.
However, the faq-index page displays all questions and answers
without linking to an individual question, so you'll have to
come up with some other way to use it (search engine results, perhaps)
} {
} -properties {
pa:onerow
}
etp::get_page_attributes
<master src="/packages/edit-this-page/www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<p>
<if @pa.content@ not nil>
@pa.content;noquote@
<p>
</if>
Frequently Asked Questions:
<ol>
<multiple name="content_items">
<li>
<a href="#@content_items.rownum@">@content_items.title@</a>
</li>
</multiple>
</ol>
<hr>
<p>
Questions and Answers:
<ol>
<multiple name="content_items">
<li><a name="@content_items.rownum@"></a>
<p><b>Q:</b> <em>@content_items.title@</em>
<p><b>A:</b>
@content_items.content;noquote@
<p>
</li>
</multiple>
</ol>
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is an interface for a list of Frequently Asked Questions.
We assume you want to see all the questions on a single page,
so there are no links to pages that display individual questions.
This template uses no extended page attributes. The question
is stored in the page title, and the answer is stored in the content
field.
} {
} -properties {
pa:onerow
content_pages:multirow
}
etp::get_page_attributes
etp::get_content_items content
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
@pa.content;noquote@
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is the default page used to display content pages
for an Edit This Page package instance. It assumes a
content type with no extended attributes, and presents
the content item with a standard article layout.
<p>
If you want to use some other page instead, specify it with
the content_template package parameter.
} {
} -properties {
pa:onerow
}
etp::get_page_attributes
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<if @pa.content@ not nil>
@pa.content;noquote@
</if>
<p>
<multiple name="content_items">
<b>@content_items.section@</b>
<blockquote>
<group column="section">
<a href="@content_items.name@">@content_items.title@</a><br>
<i>@content_items.byline@</i>
<br>
</group>
</blockquote>
<p>
</multiple>
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is the default page used to display an index listing
for an Edit This Page package instance. It assumes a
content type with no extended attributes, and presents
a listing of all content pages belonging to this package.
<p>
If you want to use some other page instead, specify it with
the index_template package parameter.
} {
} -properties {
pa:onerow
content_pages:multirow
}
etp::get_page_attributes
etp::get_content_items byline section -orderby section
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<if @pa.subtitle@ not nil>
<blockquote><b>@pa.subtitle@</b></blockquote>
</if>
<else>
<p>
</else>
<b>
<if @pa.location@ not nil>
@pa.location@ -
</if>
@pa.release_date@ -
</b>
@pa.content;noquote@
<p>
\ No newline at end of file
# /packages/edit-this-page/templates/news-content.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-08-30
Displays a single news item.
} {
} -properties {
pa:onerow
}
etp::get_page_attributes
<?xml version="1.0"?>
<queryset>
<rdbms><type>oracle</type><version>8.1.6</version></rdbms>
<partialquery name="archive_where_clause">
<querytext>
sysdate between to_date(attributes.release_date, 'Month DD, YYYY') and
to_date(attributes.archive_date, 'Month DD, YYYY')
</querytext>
</partialquery>
<partialquery name="no_archive_where_clause">
<querytext>
sysdate >= to_date(attributes.archive_date, 'Month DD, YYYY')
</querytext>
</partialquery>
<partialquery name="orderby_clause">
<querytext>
to_date(attributes.release_date, 'Month DD, YYYY') desc
</querytext>
</partialquery>
</queryset>
<?xml version="1.0"?>
<queryset>
<rdbms><type>postgresql</type><version>7.1</version></rdbms>
<partialquery name="archive_where_clause">
<querytext>
current_timestamp between attributes.release_date and attributes.archive_date
</querytext>
</partialquery>
<partialquery name="no_archive_where_clause">
<querytext>
current_timestamp >= attributes.archive_date
</querytext>
</partialquery>
<partialquery name="orderby_clause">
<querytext>
attributes.release_date desc
</querytext>
</partialquery>
</queryset>
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<if @pa.content@ not nil>
@pa.content;noquote@
<br>
<br>
</if>
<if @content_items:rowcount@ eq 0>
<em>There are no
<if @archive_p@ eq "f">current</if><else>expired</else>
news items</em>
</if>
<ul>
<multiple name="content_items">
<li>@content_items.release_date@: <a href="@content_items.url@">@content_items.title@</a>
</multiple>
</ul>
<if @archive_p@ eq "f">
If you're looking for an old news article, check the <a href="?archive_p=t">expired news</a>.
</if>
<else>
Return to the <a href="?">current news items</a>.
</else>
\ No newline at end of file
# /packages/edit-this-page/templates/news-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-08-30
This is an example of using extended attributes in an ETP template.
Displays all news items for which the release date is in
the past and the archive date is in the future.
If "archive_p=t" is in the url, displays all news items for
which the release date is in the past.
} {
{archive_p:boolean "f"}
} -properties {
pa:onerow
content_pages:multirow
}
if { $archive_p == "f" } {
set where [db_map archive_where_clause]
} else {
set where [db_map no_archive_where_clause]
}
set orderby [db_map orderby_clause]
etp::get_page_attributes
etp::get_content_items -where $where -orderby $orderby release_date archive_date
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<div id="subnavbar-div">
<div id="subnavbar-container">
<div id="subnavbar">
<multiple name="content_items">
<if @pa_name@ eq @content_items.name@>
<div class="tab" id="subnavbar-here">
<a href="@content_items.name@" title="@content_items.title@">@content_items.title@</a>
</div>
</if>
<else>
<div class="tab">
<a href="@content_items.name@" title="@content_items.title@">@content_items.title@</a>
</div>
</else>
</multiple>
</div>
</div>
</div>
<div id="subnavbar-body">
@pa.content;noquote@
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is the default page used to display content pages
for an Edit This Page package instance. It assumes a
content type with no extended attributes, and presents
the content item with a standard article layout.
<p>
If you want to use some other page instead, specify it with
the content_template package parameter.
} {
} -properties {
pa:onerow
}
etp::get_page_attributes
etp::get_content_items -orderby title
set pa_name $pa(name)
eval [template::adp_compile -string $pa(content)]
set pa(content) ${__adp_output}
<master src="../www/etp-master">
<property name="doc(title)">@pa.title;literal@</property>
<property name="context">@pa.context;literal@</property>
<div id="subnavbar-div">
<div id="subnavbar-container">
<div id="subnavbar">
<multiple name="content_items">
<div class="tab">
<a href="@content_items.name@" title="@content_items.title@">@content_items.title@</a>
</div>
</multiple>
</div>
</div>
</div>
<div id="subnavbar-body">
<if @pa.content@ not nil>
@pa.content;noquote@
</if>
\ No newline at end of file
# /packages/edit-this-page/templates/article-index.tcl
ad_page_contract {
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
This is the default page used to display an index listing
for an Edit This Page package instance. It assumes a
content type with no extended attributes, and presents
a listing of all content pages belonging to this package.
<p>
If you want to use some other page instead, specify it with
the index_template package parameter.
} {
} -properties {
pa:onerow
content_pages:multirow
}
etp::get_page_attributes
etp::get_content_items -orderby title
eval [template::adp_compile -string $pa(content)]
set pa(content) ${__adp_output}
<property name="context">{/doc/edit-this-page {Edit This Page}} {ETP applications}</property>
<property name="doc(title)">ETP applications</property>
<master>
<h2>ETP Applications</h2>
<br clear="right">
<a href="./">ETP Documentation</a>
:ETP Applications
<h3>What is an ETP Application?</h3>
After you've created a package instance of ETP, you've got a
virtual directory on your website where you can create and edit
pages, links, or subdirectories. The pages you create have a very
plain appearance and behavior: the index page displays a list of
the other pages, and the other pages simply display whatever
content you enter for them. This behavior is governed by what's
known as the "default application".
<p>The default application is defined by the ETP package at server
startup time as follows:</p>
<blockquote><pre>
etp::define_application default {
index_template packages/editthispage/templates/article-index
index_content_type etp_page_revision
index_object_name "subtopic"
index_title_attr_name "Title"
index_description_attr_name "Description"
index_content_attr_name "Content"
content_template packages/editthispage/templates/article-content
content_content_type etp_page_revision
content_object_name "page"
content_title_attr_name "Title"
content_description_attr_name "Description"
content_content_attr_name "Content"
allow_subtopics t
allow_extlinks t
allow_symlinks t
auto_page_name ""
}
</pre></blockquote>
You may customize the default application, or create new
applications based on it, thereby changing the appearance and
content of your web pages.
<h3>Modifying the default application</h3>
It's a good bet that you'll want to alter the appearance of the
pages generated by ETP. I highly recommend designing a master
template for your site, and ensuring that all packages you've
installed are using it. (If you don't know what a master template
is, the <a href="http://etp.museatech.net/doc/acs-templating/tagref/">ACS
Templating Reference</a>
will tell you). First, make a copy of the
templates you want from ETP:
<blockquote><pre>
cd /web/MYSERVER/www
mkdir templates
cp ../packages/editthispage/www/templates/* templates
</pre></blockquote>
Now you can change the tag at the top of
<code>article-index.adp</code>
and <code>article-content.adp</code>
to refer to your master template. Next, create a file in the
MYSERVER/tcl directory, and add the following code:
<blockquote><pre>
etp::modify_application default {
index_template www/templates/article-index
content_template www/templates/article-content
}
</pre></blockquote>
After restarting your server, every instance of ETP that's using
the "default" application will be rendered using your master
template.
<h3>Creating new applications</h3>
When you edit a content section in ETP, you'll see a link that says
"Choose ETP Application". At first this list contains just a few
entries: default, faq, news, and whatever other example
applications were included with the ETP package. You can add your
own entries to the list by calling the
<code>etp_define_application</code>
procedure. The real power of
defining new applications is that you can create templates that
reference structured data that is stored for each page in the
content repository, and ETP gives you the means to edit and
organize the structured data. To learn about how that works, please
go on to read about <a href="contenttypes">Content Types</a>
.
<hr>
<table width="100%"><tbody><tr><td><address><a href="mailto:luke\@museatech.net">luke\@museatech.net</a></address></td></tr></tbody></table>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ETP applications</title>
</head>
<body bgcolor="white"><h2>ETP Applications</h2>
<br clear="right">
<a href="./">ETP Documentation</a>:ETP Applications
<hr>
<h3>What is an ETP Application?</h3>
After you've created a package instance of ETP,
you've got a virtual directory on your website where you can create and edit
pages, links, or subdirectories. The pages you create have a very plain
appearance and behavior: the index page displays a list of the other pages,
and the other pages simply display whatever content you enter for them.
This behavior is governed by what's known as the "default application".<p>
The default application is defined by the ETP package at server startup time as follows:
</p><blockquote><pre>etp::define_application default {
index_template packages/editthispage/templates/article-index
index_content_type etp_page_revision
index_object_name "subtopic"
index_title_attr_name "Title"
index_description_attr_name "Description"
index_content_attr_name "Content"
content_template packages/editthispage/templates/article-content
content_content_type etp_page_revision
content_object_name "page"
content_title_attr_name "Title"
content_description_attr_name "Description"
content_content_attr_name "Content"
allow_subtopics t
allow_extlinks t
allow_symlinks t
auto_page_name ""
}
</pre></blockquote>You may customize the default application, or create new
applications based on it, thereby changing the appearance and content of
your web pages.<p>
</p><h3>Modifying the default application</h3>
It's a good bet that you'll want to alter the appearance of the pages generated by ETP.
I highly recommend designing a master template for your site, and ensuring
that all packages you've installed are using it. (If you don't know what
a master template is, the <a href="http://etp.museatech.net/doc/acs-templating/tagref/">ACS Templating Reference</a> will tell you). First, make a copy of the templates you want from ETP:
<blockquote><pre>cd /web/MYSERVER/www
mkdir templates
cp ../packages/editthispage/www/templates/* templates
</pre></blockquote>
Now you can change the <code></code> tag at the top of <code>article-index.adp</code> and <code>article-content.adp</code> to refer to your master template. Next, create a file in the MYSERVER/tcl directory, and add the following code:
<blockquote><pre>etp::modify_application default {
index_template www/templates/article-index
content_template www/templates/article-content
}
</pre></blockquote>
After restarting your server, every instance of ETP that's using the "default" application will be rendered using your master template.
<h3>Creating new applications</h3>
When you edit a content section in ETP, you'll see a link that says "Choose ETP
Application". At first this list contains just a few entries: default, faq,
news, and whatever other example applications were included with the ETP package. You can add your own entries to the list by calling the <code>etp_define_application</code>
procedure. The real power of defining new applications is that you can create
templates that reference structured data that is stored for each page in
the content repository, and ETP gives you the means to edit and organize the structured data. To learn about how that works, please go on to read about <a href="contenttypes">Content Types</a>.
</span>
<hr>
<table width="100%">
<tbody><tr>
<td><address><a href="mailto:luke@museatech.net">luke@museatech.net</a></address></td>
</tr>
</tbody></table>
</body></html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<property name="context">{/doc/edit-this-page {Edit This Page}} {ETP Documentation}</property>
<property name="doc(title)">ETP Documentation</property>
<master>
<h1>ETP Documentation</h1>
<br clear="right">
<blockquote>
<a href="install">Installation instructions</a><br><a href="applications">ETP applications</a> - Describes the default
behavior of the ETP package, and how it can be extended and
customized.<br><a href="contenttypes">Content Types</a> - How to specialize the
pages you create with additional structured data fields<br><a href="templates">Templates</a> - Customizing the appearance of
pages managed by ETP<br><a href="searching">OpenFTS Search Support</a> - adding Search
support<br>
</blockquote>
<hr>
<table width="100%"><tbody><tr><td><address><a href="mailto:luke\@museatech.net">luke\@museatech.net</a></address></td></tr></tbody></table>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<master src="etp-master">
<property name="doc(title)">#edit-this-page.lt_Confirm_delete_operat#</property>
#edit-this-page.lt_Are_you_sure_you_want#
<p>
<form method="post" action="etp-delete">
@form_vars;noquote@
<input type="submit" value="Yes, I'm sure">
</form>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<master src="etp-master">
<property name="doc(title)">@page_title;literal@</property>
<property name="context">@context;literal@</property>
<formtemplate id="etp_edit"></formtemplate>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
1. <%= "$data" %>
<br><br>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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