Commit b34fd201a79e033dcea28aadabb1f75a415776ea

Authored by bshuttle
1 parent b91d7de5

- make conditional metadata work again.

- add a titles to various pages.
- make columns include toggleselect.
- rolled in treewidgets
- correct the $main !== $this->oPage issue


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@4169 c91229c3-7414-0410-bfa2-8a42b809f60b
config/siteMap.inc
... ... @@ -107,8 +107,8 @@ $default->siteMap->addPage("orgManagement", "/presentation/lookAndFeel/knowledge
107 107 $default->siteMap->addPage("doctype", "presentation/lookAndFeel/knowledgeTree/administration/doctypemanagement/documentTypes.php", "Administration", SysAdmin, _("Document Type Management"), true, 5);
108 108 $default->siteMap->addPage("docfield", "/presentation/lookAndFeel/knowledgeTree/administration/admin.php/documents/fieldmanagement", "Administration", SysAdmin, _("Document Field Management"), true, 6);
109 109  
110   -$default->siteMap->addPage("archivedDocuments", "/presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/manageArchivedDocumentsBL.php", "Administration", UnitAdmin, _("Restore Archived Documents"), true, 7);
111   -$default->siteMap->addPage("deletedDocuments", "/presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/listDeletedDocumentsBL.php", "Administration", UnitAdmin, _("Deleted Documents"), true, 8);
  110 +$default->siteMap->addPage("archivedDocuments", "/presentation/lookAndFeel/knowledgeTree/administration/admin.php/storage/archived", "Administration", UnitAdmin, _("Restore Archived Documents"), true, 7);
  111 +$default->siteMap->addPage("deletedDocuments", "/presentation/lookAndFeel/knowledgeTree/administration/admin.php/storage/expunge", "Administration", UnitAdmin, _("Deleted Documents"), true, 8);
112 112 $default->siteMap->addPage("doccheckoutManagement", "/presentation/lookAndFeel/knowledgeTree/administration/doccheckoutmanagement/listDocumentsBL.php", "Administration", UnitAdmin, _("Document Checkout Management"), true, 9);
113 113  
114 114 $default->siteMap->addPage("newsManagement", "/presentation/lookAndFeel/knowledgeTree/administration/news/listNewsBL.php", "Administration", SysAdmin, _("Dashboard News Management"), true, 10);
... ... @@ -127,7 +127,7 @@ $default->siteMap->addPage("manageHelp", "/presentation/lookAndFeel/knowledgeTre
127 127  
128 128 $default->siteMap->addPage("managePermissions", "/presentation/lookAndFeel/knowledgeTree/administration/permissions/managePermissions.php", "Administration", SysAdmin, _("Permissions Administration"), true, 18);
129 129 $default->siteMap->addPage("manageLookupTrees", "/presentation/lookAndFeel/knowledgeTree/administration/docfieldmanagement/manageLookupTrees.php", "Administration", SysAdmin, _("Lookup Tree Administration"), true, 19);
130   -$default->siteMap->addPage("manageWorkflows", "/presentation/lookAndFeel/knowledgeTree/administration/workflow/workflows.php", "Administration", SysAdmin, _("Workflow Management"), true, 20);
  130 +$default->siteMap->addPage("manageWorkflows", "/presentation/lookAndFeel/knowledgeTree/administration/admin.php/documents/workflows", "Administration", SysAdmin, _("Workflow Management"), true, 20);
131 131 $default->siteMap->addPage("manageCleanup", "/presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/manageCleanup.php", "Administration", SysAdmin, _("Repository Cleanup"), true, 21);
132 132 $default->siteMap->addPage("manageSavedSearches", "/presentation/lookAndFeel/knowledgeTree/administration/searches/savedSearch.php", "Administration", SysAdmin, _("Saved Searches"), true, 22);
133 133 $default->siteMap->addPage("manageDocumentConditions", "/presentation/lookAndFeel/knowledgeTree/administration/searches/conditions.php", "Administration", SysAdmin, _("Document Conditions"), true, 23);
... ...
lib/actions/portletregistry.inc.php
... ... @@ -11,7 +11,7 @@ class KTPortletRegistry {
11 11 }
12 12 // }}}
13 13  
14   - function registerPortlet($action, $name, $nsname, $path = "", $sPlugin) {
  14 + function registerPortlet($action, $name, $nsname, $path = "", $sPlugin = "") {
15 15 if (!is_array($action)) {
16 16 $action = array($action);
17 17 }
... ...
lib/browse/BrowseColumns.inc.php
... ... @@ -180,7 +180,7 @@ class SelectionColumn extends BrowseColumn {
180 180 function renderHeader($sReturnURL) {
181 181 // FIXME clean up access to oPage.
182 182 global $main;
183   - $main->requireJSResource("/resources/js/toggleselect.js");
  183 + $main->requireJSResource("resources/js/toggleselect.js");
184 184  
185 185 return '<input type="checkbox" title="toggle all" onactivate="toggleSelectFor('.$this->name.')">';
186 186  
... ...
lib/dispatcher.inc.php
... ... @@ -118,7 +118,7 @@ class KTStandardDispatcher extends KTDispatcher {
118 118  
119 119 function KTStandardDispatcher() {
120 120 global $main;
121   - $this->oPage = $main;
  121 + $this->oPage =& $main;
122 122 parent::KTDispatcher();
123 123 }
124 124  
... ...
lib/widgets/FieldsetDisplayRegistry.inc.php
1 1 <?php
2 2  
  3 +require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php');
  4 +
3 5 class KTFieldsetDisplayRegistry {
4 6  
5 7 var $fieldset_types = array();
... ... @@ -24,7 +26,16 @@ class KTFieldsetDisplayRegistry {
24 26  
25 27 function getHandler($nsname) {
26 28 if (!array_key_exists($nsname, $this->fieldset_types)) {
27   - return 'SimpleFieldsetDisplay';
  29 + // unfortunately, we need to do a bit more spelunking here.
  30 + // if its conditional, we use a different item. ns is unsufficient.
  31 + //
  32 + // FIXME this is slightly wasteful from a performance POV, though DB caching should make it OK.
  33 + $oFieldset =& KTFieldset::getByNamespace ($nsname);
  34 + if ($oFieldset->getIsConditional()) {
  35 + return 'ConditionalFieldsetDisplay';
  36 + } else {
  37 + return 'SimpleFieldsetDisplay';
  38 + }
28 39 } else {
29 40 return $this->fieldset_types[$nsname];
30 41 }
... ...
lib/widgets/fieldWidgets.php
... ... @@ -81,8 +81,9 @@ class KTStaticTextWidget extends KTBaseWidget { var $sTemplate = &quot;kt3/fields/sta
81 81 /* lookup widget */
82 82 // EXPECTS $aOptions["vocab"] => key, item
83 83 class KTLookupWidget extends KTBaseWidget { var $sTemplate = "kt3/fields/lookup"; }
  84 +// EXPECTS $aOptions["tree"] => inner widget.
  85 +class KTTreeWidget extends KTBaseWidget { var $sTemplate = "kt3/fields/tree"; }
84 86  
85   -// TODO KTTreeWidget
86 87 // TODO KTTransferWidget
87 88 // TODO KTDateWidget
88 89 // TODO KTDateRangeWidget
... ...
lib/widgets/fieldsetDisplay.inc.php
... ... @@ -16,6 +16,8 @@
16 16 require_once(KT_LIB_DIR . "/templating/templating.inc.php");
17 17 require_once(KT_LIB_DIR . "/database/dbutil.inc");
18 18  
  19 +require_once(KT_LIB_DIR . "/documentmanagement/MDTree.inc"); // :(
  20 +
19 21  
20 22  
21 23 // data acquisition
... ... @@ -26,7 +28,7 @@ require_once(KT_LIB_DIR . &quot;/widgets/fieldWidgets.php&quot;);
26 28  
27 29  
28 30 /* it may be useful to move this to a factory, eventually? */
29   -function getWidgetForMetadataField($field, $current_value, $page, $errors = null) {
  31 +function getWidgetForMetadataField($field, $current_value, $page, $errors = null, $vocab = null) {
30 32 // all fields have these elements.
31 33 $fieldLabel = $field->getName();
32 34 $fieldDescription = '<strong>FIXME</strong> we don\'t handle descriptions for fields, yet.';
... ... @@ -49,13 +51,30 @@ function getWidgetForMetadataField($field, $current_value, $page, $errors = null
49 51 if ($field->getHasLookup()) {
50 52 // could either be normal, or a tree.
51 53 // ignore trees (for now).
52   - if (true) {
  54 + if (!$field->getHasLookupTree()) {
  55 + // FIXME we need to somehow handle both value-value and id-value here
53 56 // extract the lookup.
54   - $lookups = MetaData::getEnabledValuesByDocumentField($field);
55   - //var_dump($lookups);
56   -
57   - $fieldOptions["vocab"] = array(); // FIXME handle lookups
58   - $oField = new KTLookupWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions);
  57 + if ($vocab === null) { // allow override
  58 + $lookups = MetaData::getEnabledValuesByDocumentField($field);
  59 + $fieldOptions["vocab"] = array(); // FIXME handle lookups
  60 + foreach ($lookups as $md) {
  61 + $fieldOptions["vocab"][$md->getName()] = $md->getName();
  62 + }
  63 + } else {
  64 + $fieldOptions["vocab"] = $vocab;
  65 + }
  66 +
  67 + $oField = new KTLookupWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions);
  68 + } else {
  69 + // FIXME vocab's are _not_ supported for tree-inputs. this means conditional-tree-widgets are not unsupported.
  70 +
  71 + // for trees, we are currently brutal.
  72 + $fieldTree = new MDTree();
  73 + $fieldTree->buildForField($field->getId());
  74 + $fieldTree->setActiveItem($current_value);
  75 + $fieldOptions['tree'] = $fieldTree->_evilTreeRenderer($fieldTree, $fieldName);
  76 +
  77 + $oField = new KTTreeWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions);
59 78 }
60 79 } else {
61 80 $oField = new KTBaseWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions);
... ... @@ -356,4 +375,63 @@ class SimpleFieldsetDisplay extends KTFieldsetDisplay {
356 375  
357 376 }
358 377  
  378 +
  379 +// Handle the conditional case.
  380 +class ConditionalFieldsetDisplay extends SimpleFieldsetDisplay {
  381 +
  382 + function renderEdit($document_data) {
  383 + global $main; // FIXME remove direct access to $main
  384 + $oPage =& $main;
  385 +
  386 + // FIXME do this from inside the widgetry mojo.
  387 + $oPage->requireCSSResource('resources/css/kt-treewidget.css');
  388 +
  389 + // FIXME this currently doesn't work, since we use NBM's half-baked Ajax on add/bulk ;)
  390 + $oPage->requireJSResource('presentation/lookAndFeel/knowledgeTree/js/taillog.js');
  391 + $oPage->requireJSResource('presentation/lookAndFeel/knowledgeTree/js/conditional_usage.js');
  392 +
  393 + $aFields = array();
  394 + $fields =& $this->fieldset->getFields();
  395 + $values = array();
  396 +
  397 + $have_values = false;
  398 + foreach ($fields as $oField) {
  399 + $val = KTUtil::arrayGet($document_data["field_values"], $oField->getId(), null);
  400 + if ($val !== null) {
  401 + $have_values = true;
  402 +
  403 + }
  404 +
  405 + $values[$oField->getId()] = $val;
  406 + }
  407 + // FIXME handle the editable case _with_ values.
  408 +
  409 + if ($have_values) {
  410 +
  411 + return '<div class="ktError"><p>Do not yet know how to edit conditional fieldsets with values.</p></div>';
  412 + } // else {
  413 +
  414 + // now, we need to do some extra work on conditional widgets.
  415 + // how?
  416 +
  417 + $fieldset_name = $this->fieldset->getName();
  418 + $fieldset_description = "The information in this section is part of the <strong>" . $fieldset_name . "</strong> of the document. Note that the options which are available depends on previous choices within this fieldset.";
  419 +
  420 + //
  421 +
  422 + $oTemplating = new KTTemplating;
  423 + $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/conditional_editable");
  424 + $aTemplateData = array(
  425 + "context" => $this,
  426 + "field" => $oField, // first field, widget.
  427 + 'fieldset_id' => $this->fieldset->getId(),
  428 + "title" => $fieldset_name,
  429 + "description" => $fieldset_description,
  430 + );
  431 +
  432 + return $oTemplate->render($aTemplateData);
  433 + }
  434 +
  435 +}
  436 +
359 437 ?>
... ...
plugins/ktcore/KTAdminPlugins.php
... ... @@ -40,12 +40,16 @@ $oAdminRegistry-&gt;registerLocation(&quot;roles&quot;,&#39;RoleAdminDispatcher&#39;,&quot;security&quot;, &quot;Rol
40 40 $oAdminRegistry->registerLocation("typemanagement",'KTDocumentTypeDispatcher','documents', 'Document Types','Manage the different classes of document which can be added to the system.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/doctypemanagement/documentTypes.php', null);
41 41 $oAdminRegistry->registerLocation("fieldmanagement",'KTDocumentFieldDispatcher','documents', 'Document Fieldsets','Control which kinds of documents have which sets of information associated with them.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/docfieldmanagement/documentFields.php', null);
42 42 $oAdminRegistry->registerLocation("linkmanagement",'KTDocLinkAdminDispatcher','documents', 'Link Type Management','Specify the different "link types" - ways to relate different documents togeter.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/doclinkmanagement/documentLinks.php', null);
43   -
  43 +$oAdminRegistry->registerLocation("workflows",'KTWorkflowDispatcher','documents', 'Workflows','Configure the process documents go through..', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/workflow/workflows.php', null);
44 44  
45 45 // storage
46 46 $oAdminRegistry->registerLocation("checkout",'KTCheckoutAdminDispatcher','storage', 'Checked Out Document Control','Override the checked-out status of documents if a user has failed to do so.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/doccheckoutmanagement/documentCheckout.php', null);
  47 +$oAdminRegistry->registerLocation("archived",'ArchivedDocumentsDispatcher','storage', 'Archived Document Restoration','Restore old (archived) documents, usually at a user\'s request.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/archivedDocuments.php', null);
  48 +$oAdminRegistry->registerLocation("expunge",'DeletedDocumentsDispatcher','storage', 'Expunge Deleted Documents','Permanently expunge deleted documents.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/deletedDocuments.php', null);
47 49  
  50 +// misc
48 51 $oAdminRegistry->registerLocation("helpmanagement",'ManageHelpDispatcher','misc', 'Edit Help files','Change the help files that are displayed to users.', KT_DIR . '/presentation/lookAndFeel/knowledgeTree/administration/help/manageHelp.php', null);
49 52  
50 53  
  54 +
51 55 ?>
... ...
plugins/ktcore/KTFolderActions.php
... ... @@ -21,11 +21,14 @@ class KTFolderAddDocumentAction extends KTFolderAction {
21 21  
22 22 function do_main() {
23 23 $this->oPage->setBreadcrumbDetails("add document");
  24 + $this->oPage->setTitle('Add a document');
24 25 $oTemplate =& $this->oValidator->validateTemplate('ktcore/document/add');
25 26 $add_fields = array();
26 27 $add_fields[] = new KTFileUploadWidget('File', 'The contents of the document to be added to the document management system.', 'file', "", $this->oPage, true);
27 28 $add_fields[] = new KTStringWidget('Title', 'Describe the changes made to the document.', 'title', "", $this->oPage, true);
28   -
  29 +
  30 +
  31 +
29 32 $aVocab = array();
30 33 foreach (DocumentType::getList() as $oDocumentType) {
31 34 $aVocab[$oDocumentType->getId()] = $oDocumentType->getName();
... ...
presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/archivedDocuments.php 0 โ†’ 100644
  1 +<?php
  2 +
  3 +//require_once('../../../../../config/dmsDefaults.php');
  4 +require_once(KT_LIB_DIR . '/dispatcher.inc.php');
  5 +require_once(KT_LIB_DIR . '/templating/templating.inc.php');
  6 +
  7 +require_once(KT_LIB_DIR . '/documentmanagement/Document.inc');
  8 +require_once(KT_LIB_DIR . '/documentmanagement/DocumentTransaction.inc');
  9 +
  10 +require_once(KT_LIB_DIR . "/widgets/fieldWidgets.php");
  11 +require_once(KT_LIB_DIR . "/templating/kt3template.inc.php");
  12 +
  13 +// FIXME chain in a notification alert for un-archival requests.
  14 +
  15 +class ArchivedDocumentsDispatcher extends KTAdminDispatcher {
  16 +
  17 + // Breadcrumbs base - added to in methods
  18 + var $aBreadcrumbs = array(
  19 + array('action' => 'administration', 'name' => 'Administration'),
  20 + );
  21 +
  22 + function do_main () {
  23 + $this->aBreadcrumbs[] = array('action' => 'archivedDocuments', 'name' => 'Archived Documents');
  24 +
  25 + $this->oPage->setBreadcrumbDetails('list');
  26 +
  27 + $aDocuments =& Document::getList("status_id=" . ARCHIVED);
  28 +
  29 +
  30 + $oTemplating =& KTTemplating::getSingleton();
  31 + $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/archivedlist');
  32 + $oTemplate->setData(array(
  33 + 'context' => $this,
  34 + 'documents' => $aDocuments,
  35 + ));
  36 + return $oTemplate;
  37 + }
  38 +
  39 + function do_confirm_restore() {
  40 + $this->aBreadcrumbs[] = array('action' => 'archivedDocuments', 'name' => 'Archived Documents');
  41 +
  42 + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array());
  43 +
  44 + $this->oPage->setTitle('Confirm Restore of ' . count($selected_docs) . ' documents');
  45 +
  46 + $this->oPage->setBreadcrumbDetails('confirm restore of ' . count($selected_docs) . ' documents');
  47 +
  48 + $aDocuments = array();
  49 + foreach ($selected_docs as $doc_id) {
  50 + $oDoc =& Document::get($doc_id);
  51 + if (PEAR::isError($oDoc) || ($oDoc === false)) {
  52 + $this->errorRedirectToMain('Invalid document id specified. Aborting restore.');
  53 + } else if ($oDoc->getStatusId() != ARCHIVED) {
  54 + $this->errorRedirectToMain($oDoc->getName() . ' is not an archived document. Aborting restore.');
  55 + }
  56 + $aDocuments[] = $oDoc;
  57 + }
  58 +
  59 +
  60 + $oTemplating =& KTTemplating::getSingleton();
  61 + $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/dearchiveconfirmlist');
  62 + $oTemplate->setData(array(
  63 + 'context' => $this,
  64 + 'documents' => $aDocuments,
  65 + ));
  66 + return $oTemplate;
  67 + }
  68 +
  69 + function do_finish_restore() {
  70 +
  71 +
  72 + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array());
  73 +
  74 + $aDocuments = array();
  75 + foreach ($selected_docs as $doc_id) {
  76 + $oDoc =& Document::get($doc_id);
  77 + if (PEAR::isError($oDoc) || ($oDoc === false)) {
  78 + $this->errorRedirectToMain('Invalid document id specified. Aborting restore.');
  79 + } else if ($oDoc->getStatusId() != ARCHIVED) {
  80 + $this->errorRedirectToMain($oDoc->getName() . ' is not an archived document. Aborting restore.');
  81 + }
  82 + $aDocuments[] = $oDoc;
  83 + }
  84 +
  85 + $this->startTransaction();
  86 +
  87 + foreach ($aDocuments as $oDoc) {
  88 + // FIXME find de-archival source.
  89 + // FIXME purge old notifications.
  90 + // FIXME create de-archival notices to those who sent in old notifications.
  91 + $oDoc->setStatusId(LIVE);
  92 + $res = $oDoc->update();
  93 + if (PEAR::isError($res) || ($res == false)) {
  94 + $this->errorRedirectToMain($oDoc->getName . ' could not be made "live".');
  95 + }
  96 + }
  97 + $this->commitTransaction();
  98 + $msg = count($aDocuments) . ' documents made active.';
  99 + $this->successRedirectToMain($msg);
  100 + }
  101 +}
  102 +
  103 +//$d =& new DeletedDocumentsDispatcher;
  104 +//$d->dispatch();
  105 +
  106 +?>
... ...
presentation/lookAndFeel/knowledgeTree/administration/documentmanagement/deletedDocuments.php 0 โ†’ 100644
  1 +<?php
  2 +
  3 +//require_once('../../../../../config/dmsDefaults.php');
  4 +require_once(KT_LIB_DIR . '/dispatcher.inc.php');
  5 +require_once(KT_LIB_DIR . '/templating/templating.inc.php');
  6 +
  7 +require_once(KT_LIB_DIR . '/documentmanagement/Document.inc');
  8 +require_once(KT_LIB_DIR . '/documentmanagement/DocumentTransaction.inc');
  9 +
  10 +require_once(KT_LIB_DIR . "/widgets/fieldWidgets.php");
  11 +require_once(KT_LIB_DIR . "/templating/kt3template.inc.php");
  12 +
  13 +class DeletedDocumentsDispatcher extends KTAdminDispatcher {
  14 +
  15 + // Breadcrumbs base - added to in methods
  16 + var $aBreadcrumbs = array(
  17 + array('action' => 'administration', 'name' => 'Administration'),
  18 + );
  19 +
  20 + function do_main () {
  21 + $this->aBreadcrumbs[] = array('action' => 'deletedDocuments', 'name' => 'Deleted Documents');
  22 +
  23 + $this->oPage->setBreadcrumbDetails('view');
  24 +
  25 + $aDocuments =& Document::getList("status_id=" . DELETED);
  26 +
  27 +
  28 + $oTemplating =& KTTemplating::getSingleton();
  29 + $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/deletedlist');
  30 + $oTemplate->setData(array(
  31 + 'context' => $this,
  32 + 'documents' => $aDocuments,
  33 + ));
  34 + return $oTemplate;
  35 + }
  36 +
  37 + function do_confirm_expunge() {
  38 + $this->aBreadcrumbs[] = array('action' => 'deletedDocuments', 'name' => 'Deleted Documents');
  39 +
  40 + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array());
  41 +
  42 + $this->oPage->setTitle('Confirm Expunge of ' . count($selected_docs) . ' documents');
  43 +
  44 + $this->oPage->setBreadcrumbDetails('confirm expunge of ' . count($selected_docs) . ' documents');
  45 +
  46 + $aDocuments = array();
  47 + foreach ($selected_docs as $doc_id) {
  48 + $oDoc =& Document::get($doc_id);
  49 + if (PEAR::isError($oDoc) || ($oDoc === false)) {
  50 + $this->errorRedirectToMain('Invalid document id specified. Aborting expunge');
  51 + } else if ($oDoc->getStatusId() != DELETED) {
  52 + $this->errorRedirectToMain($oDoc->getName() . ' is not a deleted document. Aborting expunge');
  53 + }
  54 + $aDocuments[] = $oDoc;
  55 + }
  56 +
  57 +
  58 + $oTemplating =& KTTemplating::getSingleton();
  59 + $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/expungeconfirmlist');
  60 + $oTemplate->setData(array(
  61 + 'context' => $this,
  62 + 'documents' => $aDocuments,
  63 + ));
  64 + return $oTemplate;
  65 + }
  66 +
  67 + function do_finish_expunge() {
  68 +
  69 +
  70 + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array());
  71 +
  72 + $aDocuments = array();
  73 + foreach ($selected_docs as $doc_id) {
  74 + $oDoc =& Document::get($doc_id);
  75 + if (PEAR::isError($oDoc) || ($oDoc === false)) {
  76 + $this->errorRedirectToMain('Invalid document id specified. Aborting expunge');
  77 + } else if ($oDoc->getStatusId() != DELETED) {
  78 + $this->errorRedirectToMain($oDoc->getName() . ' is not a deleted document. Aborting expunge');
  79 + }
  80 + $aDocuments[] = $oDoc;
  81 + }
  82 +
  83 + $this->startTransaction();
  84 + $aErrorDocuments = array();
  85 + $aSuccessDocuments = array();
  86 +
  87 + foreach ($aDocuments as $oDoc) {
  88 + if (!PhysicalDocumentManager::expunge($oDoc)) { $aErrorDocuments[] = $oDoc->getDisplayPath(); }
  89 + else {
  90 + $oDocumentTransaction = & new DocumentTransaction($oDoc->getId(), "Document expunged", EXPUNGE);
  91 + $oDocumentTransaction->create();
  92 +
  93 + // delete this from the db now
  94 + if (!$oDoc->delete()) { $aErrorDocuments[] = $oDoc->getId(); }
  95 + else {
  96 + // removed succesfully
  97 + $aSuccessDocuments[] = $oDoc->getDisplayPath();
  98 +
  99 + // remove any document data
  100 + $oDoc->cleanupDocumentData($oDoc->getId()); // silly - why the redundancy?
  101 + }
  102 + }
  103 + }
  104 + $this->commitTransaction();
  105 + $msg = count($aSuccessDocuments) . ' documents expunged.';
  106 + if (count($aErrorDocuments) != 0) { $msg .= 'Failed to expunge: ' . join(', ', $aErrorDocuments); }
  107 + $this->successRedirectToMain($msg);
  108 + }
  109 +}
  110 +
  111 +//$d =& new DeletedDocumentsDispatcher;
  112 +//$d->dispatch();
  113 +
  114 +?>
... ...
presentation/lookAndFeel/knowledgeTree/administration/workflow/workflows.php
1 1 <?php
2 2  
3   -require_once('../../../../../config/dmsDefaults.php');
  3 +//require_once('../../../../../config/dmsDefaults.php');
4 4 require_once(KT_LIB_DIR . '/dispatcher.inc.php');
5 5 require_once(KT_LIB_DIR . '/validation/dispatchervalidation.inc.php');
6 6 require_once(KT_LIB_DIR . '/templating/templating.inc.php');
... ... @@ -10,7 +10,8 @@ require_once(KT_LIB_DIR . &#39;/workflow/workflowstate.inc.php&#39;);
10 10 require_once(KT_LIB_DIR . '/workflow/workflowtransition.inc.php');
11 11  
12 12 $sectionName = "Administration";
13   -require_once(KT_DIR . "/presentation/webpageTemplate.inc");
  13 +
  14 +require_once(KT_LIB_DIR . "/templating/kt3template.inc.php");
14 15  
15 16 require_once(KT_LIB_DIR . '/permissions/permission.inc.php');
16 17 require_once(KT_LIB_DIR . '/groups/Group.inc');
... ... @@ -28,10 +29,20 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
28 29 // {{{ WORKFLOW HANDLING
29 30 // {{{ do_main
30 31 function do_main () {
  32 + $this->aBreadcrumbs[] = array(
  33 + 'action' => 'manageWorkflows',
  34 + 'name' => 'Workflows',
  35 + );
  36 +
  37 + $add_fields = array();
  38 + $add_fields[] = new KTStringWidget('Name','A human-readable name for the workflow.', 'fName', null, $this->oPage, true);
  39 +
31 40 $oTemplating =& KTTemplating::getSingleton();
32 41 $oTemplate =& $oTemplating->loadTemplate('ktcore/workflow/listWorkflows');
33 42 $oTemplate->setData(array(
  43 + 'context' => $this,
34 44 'aWorkflow' => KTWorkflow::getList(),
  45 + 'add_fields' => $add_fields,
35 46 ));
36 47 return $oTemplate;
37 48 }
... ... @@ -39,20 +50,66 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
39 50  
40 51 // {{{ do_editWorkflow
41 52 function do_editWorkflow() {
  53 +
42 54 $oTemplate =& $this->oValidator->validateTemplate('ktcore/workflow/editWorkflow');
43 55 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
  56 +
  57 + $aStates = KTWorkflowState::getByWorkflow($oWorkflow);
  58 + $aPermissions = KTPermission::getList();
  59 +
  60 + $edit_fields = array();
  61 + $edit_fields[] = new KTStringWidget('Name','A human-readable name for the workflow.', 'fName', $oWorkflow->getName(), $this->oPage, true);
  62 + $aOptions = array();
  63 + $vocab = array();
  64 + $vocab[0] = 'None';
  65 + foreach($aStates as $state) {
  66 + $vocab[$state->getId()] = $state->getName();
  67 + }
  68 + $aOptions['vocab'] = $vocab;
  69 + $edit_fields[] = new KTLookupWidget('Starting State','When a document has this workflow applied to it, to which state should it initially be set ', 'fStartingStateId', $oWorkflow->getStartStateId(), $this->oPage, false, null, null, $aOptions);
  70 +
  71 + $add_state_fields = array();
  72 + $add_state_fields[] = new KTStringWidget('Name','A human-readable name for the state.', 'fName', null, $this->oPage, true);
  73 +
  74 +
  75 + $add_transition_fields = array();
  76 + $add_transition_fields[] = new KTStringWidget('Name','A human-readable name for the state.', 'fName', null, $this->oPage, true);
  77 + $aOptions = array();
  78 + $vocab = array();
  79 + foreach($aStates as $state) {
  80 + $vocab[$state->getId()] = $state->getName();
  81 + }
  82 + $aOptions['vocab'] = $vocab;
  83 + $add_transition_fields[] = new KTLookupWidget('Destination State','Once this transition is complete, which state should the document be in?', 'fTargetStateId', $oWorkflow->getStartStateId(), $this->oPage, true, null, null, $aOptions);
  84 + $aOptions = array();
  85 + $vocab = array();
  86 + foreach($aPermissions as $permission) {
  87 + $vocab[$permission->getId()] = $permission->getHumanName();
  88 + }
  89 + $aOptions['vocab'] = $vocab;
  90 + $add_transition_fields[] = new KTLookupWidget('Guard Permission.','Which permission must the user have in order to follow this transition?', 'fPermissionId', $oWorkflow->getStartStateId(), $this->oPage, true, null, null, $aOptions);
  91 +
  92 + $this->aBreadcrumbs[] = array(
  93 + 'action' => 'manageWorkflows',
  94 + 'name' => 'Workflows',
  95 + );
44 96 $this->aBreadcrumbs[] = array(
45 97 'action' => 'manageWorkflows',
46 98 'query' => 'action=editWorkflow&fWorkflowId=' . $oWorkflow->getId(),
47   - 'name' => 'Workflow ' . $oWorkflow->getName(),
  99 + 'name' => $oWorkflow->getName(),
48 100 );
49 101 $oTemplate->setData(array(
50 102 'oWorkflow' => $oWorkflow,
51   - 'aStates' => KTWorkflowState::getByWorkflow($oWorkflow),
  103 + 'aStates' => $aStates,
52 104 'aTransitions' => KTWorkflowTransition::getByWorkflow($oWorkflow),
53   - 'aPermissions' => KTPermission::getList(),
  105 + 'aPermissions' => $aPermissions,
54 106 'aActions' => KTDocumentActionUtil::getAllDocumentActions(),
55 107 'aActionsSelected' => KTWorkflowUtil::getControlledActionsForWorkflow($oWorkflow),
  108 +
  109 + // fields
  110 + 'edit_fields' => $edit_fields,
  111 + 'add_state_fields' => $add_state_fields,
  112 + 'add_transition_fields' => $add_transition_fields,
56 113 ));
57 114 return $oTemplate;
58 115 }
... ... @@ -150,14 +207,15 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
150 207 $aTransitionsSelected = KTWorkflowUtil::getTransitionsFrom($oState, array('ids' => true));
151 208 $this->aBreadcrumbs[] = array(
152 209 'action' => 'manageWorkflows',
153   - 'query' => 'action=editWorkflow&fWorkflowId=' . $oWorkflow->getId(),
154   - 'name' => 'Workflow ' . $oWorkflow->getName(),
  210 + 'name' => 'Workflows',
155 211 );
156 212 $this->aBreadcrumbs[] = array(
157 213 'action' => 'manageWorkflows',
158   - 'query' => 'action=editState&fWorkflowId=' . $oWorkflow->getId() . '&fStateId=' . $oState->getId(),
159   - 'name' => 'State ' . $oState->getName(),
  214 + 'query' => 'action=editWorkflow&fWorkflowId=' . $oWorkflow->getId(),
  215 + 'name' => $oWorkflow->getName(),
160 216 );
  217 + $this->oPage->setBreadcrumbDetails('state: ' . $oState->getName());
  218 +
161 219 $aInformed = KTWorkflowUtil::getInformedForState($oState);
162 220 $oTemplate->setData(array(
163 221 'oWorkflow' => $oWorkflow,
... ... @@ -301,24 +359,84 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
301 359 $oTemplate =& $this->oValidator->validateTemplate('ktcore/workflow/editTransition');
302 360 $oWorkflow =& $this->oValidator->validateWorkflow($_REQUEST['fWorkflowId']);
303 361 $oTransition =& $this->oValidator->validateWorkflowTransition($_REQUEST['fTransitionId']);
  362 +
  363 + $aStates = KTWorkflowState::getByWorkflow($oWorkflow);
  364 + $aPermissions = KTPermission::getList();
  365 + $aGroups = Group::getList();
  366 + $aRoles = Role::getList();
  367 + $aConditions = KTSavedSearch::getConditions();
  368 +
  369 + $edit_fields = array();
  370 + $edit_fields[] = new KTStringWidget('Name','A human-readable name for the state.', 'fName', $oTransition->getName(), $this->oPage, true);
  371 + $aOptions = array();
  372 + $vocab = array();
  373 + foreach($aStates as $state) {
  374 + $vocab[$state->getId()] = $state->getName();
  375 + }
  376 + $aOptions['vocab'] = $vocab;
  377 + $edit_fields[] = new KTLookupWidget('Destination State','Once this transition is complete, which state should the document be in?', 'fTargetStateId', $oTransition->getTargetStateId(), $this->oPage, true, null, null, $aOptions);
  378 + $aOptions = array();
  379 + $vocab = array();
  380 + $vocab[0] = 'None';
  381 + foreach($aPermissions as $permission) {
  382 + $vocab[$permission->getId()] = $permission->getHumanName();
  383 + }
  384 + $aOptions['vocab'] = $vocab;
  385 + $edit_fields[] = new KTLookupWidget('Guard Permission.','Which permission must the user have in order to follow this transition?', 'fPermissionId', $oTransition->getGuardPermissionId(), $this->oPage, true, null, null, $aOptions);
  386 + $aOptions = array();
  387 + $vocab = array();
  388 + $vocab[0] = 'None';
  389 + foreach($aGroups as $group) {
  390 + $vocab[$group->getId()] = $group->getName();
  391 + }
  392 + $aOptions['vocab'] = $vocab;
  393 + $edit_fields[] = new KTLookupWidget('Guard Group.','Which group must the user belong to in order to follow this transition?', 'fGroupId', $oTransition->getGuardGroupId(), $this->oPage, false, null, null, $aOptions);
  394 + $aOptions = array();
  395 + $vocab = array();
  396 + $vocab[0] = 'None';
  397 + foreach($aRoles as $role) {
  398 + $vocab[$role->getId()] = $role->getName();
  399 + }
  400 + $aOptions['vocab'] = $vocab;
  401 + $edit_fields[] = new KTLookupWidget('Guard Role.','Which role must the user have in order to follow this transition?', 'fRoleId', $oTransition->getGuardRoleId(), $this->oPage, false, null, null, $aOptions);
  402 +
  403 + if (!empty($aConditions)) {
  404 + $aOptions = array();
  405 + $vocab = array();
  406 + $vocab[0] = 'None';
  407 + foreach($aConditions as $condition) {
  408 + $vocab[$condition->getId()] = $condition->getName();
  409 + }
  410 + $aOptions['vocab'] = $vocab;
  411 + $edit_fields[] = new KTLookupWidget('Guard Condition.','Which condition (stored search) must be satisfied before the transition can take place?', 'fConditionId', $oTransition->getGuardConditionId(), $this->oPage, false, null, null, $aOptions);
  412 + }
  413 +
  414 + $this->aBreadcrumbs[] = array(
  415 + 'action' => 'manageWorkflows',
  416 + 'name' => 'Workflows',
  417 + );
304 418 $this->aBreadcrumbs[] = array(
305 419 'action' => 'manageWorkflows',
306 420 'query' => 'action=editWorkflow&fWorkflowId=' . $oWorkflow->getId(),
307   - 'name' => 'Workflow ' . $oWorkflow->getName(),
  421 + 'name' => $oWorkflow->getName(),
308 422 );
309 423 $this->aBreadcrumbs[] = array(
310 424 'action' => 'manageWorkflows',
311   - 'query' => 'action=editTransitionfWorkflowId=' . $oWorkflow->getId() . '&fTransitionId=' . $oTransition->getId(),
312   - 'name' => 'Transition ' . $oTransition->getName(),
  425 + 'query' => 'action=editTransition&fWorkflowId=' . $oWorkflow->getId() . '&fTransitionId=' . $oTransition->getId(),
  426 + 'name' => $oTransition->getName(),
313 427 );
314 428 $oTemplate->setData(array(
315 429 'oWorkflow' => $oWorkflow,
316 430 'oTransition' => $oTransition,
317   - 'aStates' => KTWorkflowState::getByWorkflow($oWorkflow),
318   - 'aPermissions' => KTPermission::getList(),
319   - 'aGroups' => Group::getList(),
320   - 'aRoles' => Role::getList(),
321   - 'aConditions' => KTSavedSearch::getConditions(),
  431 + 'aStates' => $aStates,
  432 + 'aPermissions' => $aPermissions,
  433 + 'aGroups' => $aGroups,
  434 + 'aRoles' => $aRoles,
  435 + 'aConditions' => $aConditions,
  436 +
  437 + // fields
  438 +
  439 + 'edit_fields' => $edit_fields,
322 440 ));
323 441 return $oTemplate;
324 442 }
... ... @@ -373,7 +491,7 @@ class KTWorkflowDispatcher extends KTStandardDispatcher {
373 491  
374 492 }
375 493  
376   -$d =& new KTWorkflowDispatcher;
377   -$d->dispatch();
  494 +//$d =& new KTWorkflowDispatcher;
  495 +//$d->dispatch();
378 496  
379 497 ?>
... ...
presentation/lookAndFeel/knowledgeTree/ajaxConditional.php
... ... @@ -9,6 +9,7 @@ require_once(KT_LIB_DIR . &quot;/util/ktutil.inc&quot;);
9 9 require_once(KT_LIB_DIR . "/dispatcher.inc.php");
10 10 $sectionName = "Administration";
11 11 require_once(KT_DIR . "/presentation/webpageTemplate.inc");
  12 +require_once(KT_LIB_DIR . '/widgets/fieldsetDisplay.inc.php');
12 13  
13 14 /*
14 15 * example code - tests the frontend behaviour. remember to check ajaxConditional.php
... ... @@ -38,6 +39,7 @@ class AjaxConditionalDispatcher extends KTStandardDispatcher {
38 39 }
39 40  
40 41 function do_updateFieldset() {
  42 + global $main;
41 43 $GLOBALS['default']->log->error(print_r($_REQUEST, true));
42 44 header('Content-Type: application/xml');
43 45 $oFieldset =& $this->oValidator->validateFieldset($_REQUEST['fieldset']);
... ... @@ -45,17 +47,25 @@ class AjaxConditionalDispatcher extends KTStandardDispatcher {
45 47 $matches = array();
46 48 $aFields = array();
47 49 foreach ($_REQUEST as $k => $v) {
48   - if (preg_match('/^emd(\d+)$/', $k, $matches)) {
  50 + if (preg_match('/^metadata_(\d+)$/', $k, $matches)) {
49 51 $aValues[$matches[1]] = $v;
50 52 }
51 53 }
52 54  
53 55 $aNextFieldValues =& KTMetadataUtil::getNext($oFieldset, $aValues);
54   -
55   - $oTemplate =& $this->oValidator->validateTemplate('ktcore/metadata/chooseFromMetadataLookup');
56   - $oTemplate->setData(array('aFieldValues' => $aNextFieldValues));
57   - $GLOBALS['default']->log->debug(print_r($aNextFieldValues, true));
58   - return $oTemplate->render();
  56 +
  57 + $sWidgets = '';
  58 + // convert these into widgets using the ever-evil...
  59 + // function getWidgetForMetadataField($field, $current_value, $page, $errors = null, $vocab = null)
  60 + foreach ($aNextFieldValues as $aFieldInfo) {
  61 + $vocab = array();
  62 + $vocab[''] = 'Unset';
  63 + foreach ($aFieldInfo['values'] as $md_v) { $vocab[$md_v->getName()] = $md_v->getName(); }
  64 + $oWidget = getWidgetForMetadataField($aFieldInfo['field'], null, $main, null, $vocab) ;
  65 + $sWidgets .= $oWidget->render();
  66 + }
  67 +
  68 + return $sWidgets;
59 69 }
60 70 }
61 71  
... ...
presentation/lookAndFeel/knowledgeTree/js/conditional_usage.js
... ... @@ -2,7 +2,7 @@
2 2 // i don't like Mochikit's one.
3 3  
4 4 function getBindTarget(fieldset) {
5   - var possibles = getElementsByTagAndClassName('TBODY','conditional_target', fieldset);
  5 + var possibles = getElementsByTagAndClassName('DIV','conditional_target', fieldset);
6 6 return possibles[0];
7 7 }
8 8  
... ... @@ -130,18 +130,18 @@ function popStack(fieldset) {
130 130 function createFixedWidget(fieldset, widget, i_name, i_value, i_label) {
131 131 // bad, but there's nothing else we can do in the current design.
132 132 // we need to walk the TR for the TH (widget.tagName == TR)
133   - if (widget.tagName != 'TR')
  133 + if (widget.tagName != 'DIV')
134 134 {
135 135 // alert('Invalid widget in conditional.'+widget);
136 136 simpleLog('ERROR','invalid widget in conditional.');
137 137 return false;
138 138 }
139   - var header = widget.getElementsByTagName('TH')[0]; // FIXME _could_ fail if pathalogical.
  139 + var header = widget.getElementsByTagName('LABEL')[0]; // FIXME _could_ fail if pathalogical.
140 140 var i_friendly_name = scrapeText(header);
141 141  
142   - var newWidget = TR({'class':'widget fixed'},
143   - TH(null, i_friendly_name),
144   - TD(null,
  142 + var newWidget = DIV({'class':'field fixed'},
  143 + createDOM('LABEL',null, i_friendly_name),
  144 + DIV(null,
145 145 INPUT({'type':'hidden','name':i_name, 'value':i_value,'class':'fixed'}),
146 146 SPAN(null, i_label)
147 147 )
... ... @@ -159,7 +159,7 @@ function createFixedWidget(fieldset, widget, i_name, i_value, i_label) {
159 159 */
160 160  
161 161 function handleSelectChange(fieldset, widget, select_object) {
162   - simpleLog('ERROR','call to stub: handleSelectChange on select with name "'+select_object.name+'"');
  162 + simpleLog('DEBUG','handleSelectChange on select with name "'+select_object.name+'"');
163 163 var i_name = select_object.name;
164 164 var i_value = select_object.value;
165 165 var i_label = scrapeText(select_object.options[select_object.selectedIndex]);
... ... @@ -300,15 +300,15 @@ function do_updateFieldset(fieldset, req) {
300 300 // clear unfixed widgets before we start.
301 301 clearUnfixedWidgets(fieldset);
302 302 // create an unparented div for HTML insertion.
303   - var tb = TBODY(null);
304   - var t = TABLE(null, tb);
  303 + var hold = DIV(null);
305 304  
306   - tb.innerHTML = req.responseText;
  305 + hold.innerHTML = req.responseText;
307 306  
308   - var new_widgets = getElementsByTagAndClassName('TR','widget', tb);
309   - simpleLog('DEBUG','new_widgets.length: ',new_widgets.length);
  307 + var new_widgets = getElementsByTagAndClassName('DIV','field', hold);
  308 +
  309 + simpleLog('DEBUG','new_widgets.length: '+new_widgets.length);
310 310 var target = getBindTarget(fieldset);
311   - simpleLog('DEBUG','new_widgets.length: ',new_widgets.length);
  311 + simpleLog('DEBUG','new_widgets.length: '+new_widgets.length);
312 312 for (var i=0; i<new_widgets.length; i++) {
313 313 var w = new_widgets[i];
314 314 simpleLog('DEBUG','binding: '+toHTML(w));
... ...
resources/css/kt-treewidget.css 0 โ†’ 100644
  1 +/* CSS to handle the trees. */
  2 +.kt_treenodes {
  3 + list-style: none;
  4 + margin: 0;
  5 + padding: 0;
  6 + border: 0;
  7 + text-align: left !important;
  8 +}
  9 +
  10 +.leafnode {font-weight: bold; }
  11 +
  12 +.kt_treenodes ul {
  13 + list-style: none;
  14 + text-align: left;
  15 +}
  16 +.kt_treenodes li.treenode > a.pathnode {
  17 + background: transparent url(/graphics/plus.png) center left no-repeat;
  18 + padding-left: 15px;
  19 +}
  20 +
  21 +.kt_treenodes li.treenode.active > a.pathnode {
  22 + background: transparent url(/graphics/minus.png) center left no-repeat;
  23 +}
  24 +
  25 +.kt_treenodes li.active > ul {
  26 + display: block;
  27 +}
  28 +
  29 +.kt_treenodes li ul {
  30 + display: none;
  31 +}
  32 +
... ...
templates/kt3/document/edit.smarty
  1 +{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Base.js')}
  2 +{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Async.js')}
  3 +{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Iter.js')}
  4 +{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/DateTime.js')}
  5 +{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/DOM.js')}
  6 +
  7 +<!-- unforunate, but (currently) necessary -->
  8 +
  9 +{$context->oPage->requireJSResource('presentation/lookAndFeel/knowledgeTree/js/taillog.js')}
  10 +{$context->oPage->requireJSResource('presentation/lookAndFeel/knowledgeTree/js/conditional_usage.js')}
  11 +
  12 +{$context->oPage->requireCSSResource('resources/css/kt-treewidget.css')}
  13 +
1 14 <h2>Editing: {$document->getName()}</h2>
2 15 <p class="descriptiveText"><strong>FIXME</strong>: do we need assisting text here?</p>
3 16  
... ...
templates/kt3/fields/tree.smarty 0 โ†’ 100644
  1 + <div class="field {if ($has_errors)}error{/if}">
  2 + <label for="{$name}">{$label}{if ($required === true)}<span class="required">(Required)</span>{/if}</label>
  3 + <p class="descriptiveText">{$description}</p>
  4 + {if ($has_errors)}
  5 + {foreach item=sError from=$errors}
  6 + <p class="errorMessage">
  7 + {$sError}
  8 + </p>
  9 + {/foreach}
  10 + {else}
  11 + <p class="errorMessage"></p>
  12 + {/if}
  13 +
  14 + {$options.tree}
  15 + <input type="hidden" name="kt_core_fieldsets_expect[{$name}]" value ="1" />
  16 + </div>
0 17 \ No newline at end of file
... ...
templates/kt3/fieldsets/conditional_editable.smarty 0 โ†’ 100644
  1 +<fieldset class="conditional_metadata">
  2 + <legend>{$title}</legend>
  3 + <input type="hidden" class="fixed" name="fieldset" value="{$fieldset_id}" />
  4 + <p class="descriptiveText">
  5 + {$description}
  6 + </p>
  7 +
  8 + <div class="conditional_target">
  9 + conditional data.
  10 + </div>
  11 +
  12 +</fieldset>
... ...
templates/ktcore/document/add.smarty
1 1 {$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Base.js')}
2 2 {$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Async.js')}
3 3 {$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Iter.js')}
  4 +{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/DateTime.js')}
4 5 {$context->oPage->requireJSResource('thirdpartyjs/MochiKit/DOM.js')}
5 6  
  7 +<!-- unforunate, but (currently) necessary -->
  8 +
  9 +{$context->oPage->requireJSResource('presentation/lookAndFeel/knowledgeTree/js/taillog.js')}
  10 +{$context->oPage->requireJSResource('presentation/lookAndFeel/knowledgeTree/js/conditional_usage.js')}
  11 +
  12 +{$context->oPage->requireCSSResource('resources/css/kt-treewidget.css')}
  13 +
6 14 {capture assign=sJavascript}
7 15 {literal}
8 16 function swapInItem(elementId, req) {
... ...
templates/ktcore/document/admin/archivedlist.smarty 0 โ†’ 100644
  1 +<h2>Archived Documents</h2>
  2 +
  3 +<p class="descriptiveText">In order to keep the documents which are visible useful
  4 +to end users, it is possible to <strong>archive</strong> old documents. Users who
  5 +want to see these old documents need to request their restoration - these requests
  6 +will typically be done within the system, and will generate a notification to you.
  7 +</p>
  8 +
  9 +<div class="ktError"><p><strong>FIXME</strong> this aspect of the UI is unuseable.
  10 +KT 2.x had a full-on search here. That's probably _also_ unuseable. Ponder an
  11 +improvement (probably notification driven / basic search driven. Even better: allow browse
  12 +with LIVE turned off.)</p></div>
  13 +
  14 +{if (!empty($documents))}
  15 +
  16 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  17 +
  18 +<input type="hidden" name="action" value="confirm_restore" />
  19 +
  20 +<table class="listing">
  21 + <thead>
  22 + <tr>
  23 + <th>&nbsp;</th>
  24 + <th>Document Name</th>
  25 + <th>Location</th>
  26 + </tr>
  27 + </thead>
  28 + <tbody>
  29 + {foreach item=oDoc from=$documents}
  30 + <tr>
  31 + <td><input type="checkbox" name="selected_docs[]" value="{$oDoc->getId()}"/></td>
  32 + <td>{$oDoc->getName()}</td>
  33 + <td class="descriptiveText">{$oDoc->getDisplayPath()}</td>
  34 + </tr>
  35 + {/foreach}
  36 + </tbody>
  37 +</table>
  38 +<div class="form_actions">
  39 + <input type="submit" value="Expunge" />
  40 + <!-- <input type="submit" value="Restore" /> --> <!-- how do we want to handle restore in this? major UI issue :( -->
  41 +</div>
  42 +</form>
  43 +
  44 +{else}
  45 +<div class="ktInfo"><p>No documents are marked as archived.</p></div>
  46 +{/if}
0 47 \ No newline at end of file
... ...
templates/ktcore/document/admin/dearchiveconfirmlist.smarty 0 โ†’ 100644
  1 +<h2>Confirm De-archival</h2>
  2 +
  3 +<div class="ktInfo"><p><strong>Note</strong> please confirm that you want to restore these documents from an archived state.</p></div>
  4 +
  5 +{if (!empty($documents))}
  6 +
  7 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  8 +
  9 +<input type="hidden" name="action" value="finish_restore" />
  10 +
  11 +<table class="listing">
  12 + <thead>
  13 + <tr>
  14 +
  15 + <th>Document Name</th>
  16 + <th>Location</th>
  17 + </tr>
  18 + </thead>
  19 + <tbody>
  20 + {foreach item=oDoc from=$documents}
  21 + <tr>
  22 + <td>{$oDoc->getName()}<input type="hidden" name="selected_docs[]" value="{$oDoc->getId()}" /></td>
  23 + <td class="descriptiveText">{$oDoc->getDisplayPath()}</td>
  24 + </tr>
  25 + {/foreach}
  26 + </tbody>
  27 +</table>
  28 +<div class="form_actions">
  29 + <input type="submit" value="Confirm De-archival" />
  30 +</div>
  31 +</form>
  32 +
  33 +{else}
  34 +<div class="ktInfo"><p>No documents were selected.</p></div>
  35 +{/if}
0 36 \ No newline at end of file
... ...
templates/ktcore/document/admin/deletedlist.smarty 0 โ†’ 100644
  1 +<h2>Deleted Documents</h2>
  2 +
  3 +<p class="descriptiveText">Documents which are deleted by users are hidden from view,
  4 +but still available for restoration. Since this consumes system resources, it
  5 +is possible to <strong>expunge</strong> these documents. Alternatively, you
  6 +can <strong>restore</strong> them as necessary.</p>
  7 +
  8 +<p class="descriptiveText"><strong>FIXME</strong> its probably very useful to add
  9 +more information about the documents below - e.g. when was it deleted (last modified?)</p>
  10 +
  11 +<p class="descriptiveText"><strong>FIXME</strong> Have a "select all" toggler here.</p>
  12 +
  13 +{if (!empty($documents))}
  14 +
  15 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  16 +
  17 +<input type="hidden" name="action" value="confirm_expunge" />
  18 +
  19 +<table class="listing">
  20 + <thead>
  21 + <tr>
  22 + <th>&nbsp;</th>
  23 + <th>Document Name</th>
  24 + <th>Location</th>
  25 + </tr>
  26 + </thead>
  27 + <tbody>
  28 + {foreach item=oDoc from=$documents}
  29 + <tr>
  30 + <td><input type="checkbox" name="selected_docs[]" value="{$oDoc->getId()}"/></td>
  31 + <td>{$oDoc->getName()}</td>
  32 + <td class="descriptiveText">{$oDoc->getDisplayPath()}</td>
  33 + </tr>
  34 + {/foreach}
  35 + </tbody>
  36 +</table>
  37 +<div class="form_actions">
  38 + <input type="submit" value="Expunge" />
  39 + <!-- <input type="submit" value="Restore" /> --> <!-- how do we want to handle restore in this? major UI issue :( -->
  40 +</div>
  41 +</form>
  42 +
  43 +{else}
  44 +<div class="ktInfo"><p>No documents are marked as deleted.</p></div>
  45 +{/if}
0 46 \ No newline at end of file
... ...
templates/ktcore/document/admin/expungeconfirmlist.smarty 0 โ†’ 100644
  1 +<h2>Confirm Expunge</h2>
  2 +
  3 +<div class="ktInfo"><p><strong>Note</strong> please confirm that you want to delete these documents.</p></div>
  4 +
  5 +{if (!empty($documents))}
  6 +
  7 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  8 +
  9 +<input type="hidden" name="action" value="finish_expunge" />
  10 +
  11 +<table class="listing">
  12 + <thead>
  13 + <tr>
  14 +
  15 + <th>Document Name</th>
  16 + <th>Location</th>
  17 + </tr>
  18 + </thead>
  19 + <tbody>
  20 + {foreach item=oDoc from=$documents}
  21 + <tr>
  22 + <td>{$oDoc->getName()}<input type="hidden" name="selected_docs[]" value="{$oDoc->getId()}" /></td>
  23 + <td class="descriptiveText">{$oDoc->getDisplayPath()}</td>
  24 + </tr>
  25 + {/foreach}
  26 + </tbody>
  27 +</table>
  28 +<div class="form_actions">
  29 + <input type="submit" value="Confirm Expunge" />
  30 + <!-- <input type="submit" value="Restore" /> --> <!-- how do we want to handle restore in this? major UI issue :( -->
  31 +</div>
  32 +</form>
  33 +
  34 +{else}
  35 +<div class="ktInfo"><p>No documents were selected.</p></div>
  36 +{/if}
0 37 \ No newline at end of file
... ...
templates/ktcore/metadata/chooseFromMetadataLookup.smarty
1 1 {foreach from=$aFieldValues key=iFieldId item=aFieldInfo }
2 2 {assign var="oField" value=$aFieldInfo.field}
3 3 {assign var="aLookups" value=$aFieldInfo.values}
4   -<tr class="widget">
5   - <th><span title="Field: {$oField->getId()}">{$oField->getName()|escape}</span></th>
6   - <td>
7 4  
8   -<select name="emd{$oField->getId()}">
9   - <option value="">Unset</option>
10   -{foreach from=$aLookups item=oLookup}
11   - <option value="{$oLookup->getId()}">{$oLookup->getName()}</option>
12   -{/foreach}
13   -</select>
  5 +<div class="field ">
  6 + <label for="condi-field-{$iFieldId}">{$oField->getName()|escape}</label>
  7 + <p class="descriptiveText">FIXME</p>
  8 + <p class="errorMessage"></p>
  9 +
  10 +
  11 + <select name="metadata_{$iFieldId}" id="condi-field-{$iFieldId}" >
  12 + <option value="">Unset</option>
  13 + {foreach from=$aLookups item=oLookup}
  14 + <option value="{$oLookup->getName()}">{$oLookup->getName()}</option>
  15 + {/foreach}
  16 + </select>
  17 + <input type="hidden" name="kt_core_fieldsets_expect[metadata_{$iFieldId}]" value ="1" />
  18 +</div>
14 19  
15   - </td>
16   -</tr>
17 20 {/foreach}
... ...
templates/ktcore/metadata/editable_metadata_fields.smarty
1   -{literal}
2   -<style>
3   -
4   -.kt_treenodes {
5   - list-style: none;
6   - margin: 0;
7   - padding: 0;
8   - border: 0;
9   - text-align: left !important;
10   -}
11   -
12   -.leafnode {font-weight: bold; }
13   -
14   -.kt_treenodes ul {
15   - list-style: none;
16   - text-align: left;
17   -}
18   -.kt_treenodes li.treenode > a.pathnode {
19   - background: transparent url(/graphics/plus.png) center left no-repeat;
20   - padding-left: 15px;
21   -}
22   -
23   -.kt_treenodes li.treenode.active > a.pathnode {
24   - background: transparent url(/graphics/minus.png) center left no-repeat;
25   -}
26   -
27   -.kt_treenodes li.active > ul {
28   - display: block;
29   -}
30   -
31   -.kt_treenodes li ul {
32   - display: none;
33   -}
34   -
35   -</style>
36   -{/literal}
37   -
38 1 <table class="prettysw" cellpadding="0" cellspacing="0">
39 2 {if !$metadata_prefix}
40 3 {assign var="metadata_prefix" value="emd"}
... ...
templates/ktcore/workflow/editState.smarty
1   -<h1>State: {$oState->getName()|escape}</h1>
2   -
3   -<h2>Edit state properties</h2>
  1 +<h2>State: {$oState->getName()|escape}</h2>
4 2  
5 3 <form action="{$smarty.server.PHP_SELF}" method="POST">
  4 +<fieldset>
  5 +<legend>Edit state properties</legend>
6 6 <input type="hidden" name="action" value="saveState" />
7 7 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
8 8 <input type="hidden" name="fStateId" value="{$oState->getId()}" />
9 9 <input type="textbox" name="fName" value="{$oState->getName()|escape}" />
10   -<input type="submit" name="submit" value="Save" />
  10 +<div class="form_actions">
  11 + <input type="submit" name="submit" value="Save" />
  12 +</div>
  13 +</fieldset>
11 14 </form>
12 15  
13   -<h2>Inform</h2>
14   -
15   -<p class="helpText">Please select which roles or groups should be
16   -informed when this state is reached.</p>
17   -
18 16 <form action="{$smarty.server.PHP_SELF}" method="POST">
19 17 <input type="hidden" name="action" value="saveInform" />
20 18 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
21 19 <input type="hidden" name="fStateId" value="{$oState->getId()}" />
  20 +
  21 +<fieldset>
  22 +<legend>Inform Which Users?</legend>
  23 +<p class="descriptiveText">Please select which roles or groups should be
  24 +informed when this state is reached.</p>
  25 +
  26 +
22 27 <h3>Roles</h3>
23 28 {entity_checkboxes entities=$aRoles name="fRoleIds" multiple="true" selected=$aInformed.role assign=aBoxes}
24 29 {foreach from=$aBoxes item=sBox}
... ... @@ -38,20 +43,27 @@ informed when this state is reached.&lt;/p&gt;
38 43 {$sBox}<br />
39 44 {/foreach}
40 45 <input type="submit" name="submit" value="Save" />
  46 +
41 47 </form>
42 48 *}
43 49  
44   -<h2>Permissions</h2>
  50 +</fieldset>
  51 +
45 52  
46   -<p class="helpText">While in this workflow state, additional permissions
  53 +<h3>Assigned Permissions</h3>
  54 +<p class="descriptiveText">While in this workflow state, additional permissions
47 55 may be given. This is done either to expose the document to more users
48 56 or to allow a particular role to be fulfilled before a workflow
49 57 transition can be accomplished.</p>
50 58  
51   -<h2>Transitions</h2>
  59 +
  60 +<fieldset>
  61 +<legend>Transitions</legend>
52 62 {if $aTransitionsTo}
53   -<h3>Transitions to this state</h3>
54 63  
  64 +
  65 +<h3>Transitions to this state</h3>
  66 +{if (!empty($aTransitionsTo))}
55 67 <ul>
56 68 {foreach from=$aTransitionsTo item=oTransition}
57 69 <li><a
... ... @@ -60,6 +72,9 @@ title=&quot;Transition
60 72 {$oTransition->getId()}">{$oTransition->getName()|escape}</a></li>
61 73 {/foreach}
62 74 </ul>
  75 +{else}
  76 +No transitions lead to this state.
  77 +{/if}
63 78  
64 79 {/if}
65 80  
... ... @@ -68,22 +83,42 @@ title=&quot;Transition
68 83 <input type="hidden" name="action" value="saveTransitions" />
69 84 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
70 85 <input type="hidden" name="fStateId" value="{$oState->getId()}" />
  86 +
  87 +{if (!empty($aTransitions))}
71 88 {entity_checkboxes entities=$aTransitions name="fTransitionIds" multiple="true" selected=$aTransitionsSelected}
  89 +<div class="form_actions">
72 90 <input type="submit" name="submit" value="Save" />
  91 +</div>
  92 +{else}
  93 +No transitions defined.
  94 +{/if}
73 95 </form>
  96 +</fieldset>
  97 +
  98 +
74 99  
75   -<h2>Actions allowed</h2>
76 100  
77 101 <form action="{$smarty.server.PHP_SELF}" method="POST">
  102 +<fieldset>
  103 +<legend>Actions allowed</legend>
  104 +
78 105 <input type="hidden" name="action" value="setStateActions" />
79 106 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
80 107 <input type="hidden" name="fStateId" value="{$oState->getId()}" />
  108 +
  109 +{if (!empty($aActions))}
81 110 <ul>
82 111 {entity_checkboxes name="fActions" entities=$aActions idmethod="getName" method="getDisplayName" assign="aCheckboxes" selected="$aActionsSelected"}
83 112 {foreach from=$aCheckboxes item=sCheckbox}
84 113 <li>{$sCheckbox}</li>
85 114 {/foreach}
86 115 </ul>
87   -<input type="submit" name="submit" value="Set allowed actions" />
  116 +<div class="form_actions">
  117 + <input type="submit" name="submit" value="Set allowed actions" />
  118 +</div>
  119 +{else}
  120 +No actions defined.
  121 +{/if}
  122 +</fieldset>
88 123 </form>
89 124  
... ...
templates/ktcore/workflow/editTransition.smarty
1   -<h1>Transition: {$oTransition->getName()|escape}</h1>
  1 +<h2>Transition: {$oTransition->getName()|escape}</h2>
2 2  
3   -<h2>Edit transition properties</h2>
  3 +
  4 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  5 +<fieldset>
  6 +<legend>Edit transition properties</legend>
4 7  
5 8 <p class="helpText">Select the target state of the transition, and
6 9 select the permission, group, and/or role necessary to perform the
... ... @@ -8,42 +11,17 @@ transition. Selecting more than one of permission, group, or role will
8 11 require that the user wishing to perform the transition fulfil every
9 12 requirement.</p>
10 13  
11   -<form action="{$smarty.server.PHP_SELF}" method="POST">
12 14 <input type="hidden" name="action" value="saveTransition" />
13 15 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
14 16 <input type="hidden" name="fTransitionId" value="{$oTransition->getId()}" />
15   -<table class="prettysw" cellpadding="0" cellspacing="0">
16   -<tr><th>Name</th><td><input type="textbox" name="fName" value="{$oTransition->getName()|escape}" /></td></tr>
17   -<tr>
18   - <th>Target State</th>
19   - <td>{entity_select entities=$aStates selected=$oTransition->getTargetStateId() name="fTargetStateId"}</td>
20   -</tr>
21   -<tr>
22   - <th>Guard Permission</th>
23   - <td>{entity_select entities=$aPermissions
24   -selected=$oTransition->getGuardPermissionId() name="fPermissionId"
25   -none=true}</td>
26   -</tr>
27   -<tr>
28   - <th>Guard Group</th>
29   - <td>{entity_select entities=$aGroups
30   -selected=$oTransition->getGuardGroupId() name="fGroupId" none=true}</td>
31   -</tr>
32   -{if $aRoles}
33   -<tr>
34   - <th>Guard Role</th>
35   - <td>{entity_select entities=$aRoles
36   -selected=$oTransition->getGuardRoleId() name="fRoleId" none=true}</td>
37   -</tr>
38   -{/if}
39   -{if $aConditions}
40   -<tr>
41   - <th>Guard Condition</th>
42   - <td>{entity_select entities=$aConditions
43   -selected=$oTransition->getGuardConditionId() name="fConditionId" none=true}</td>
44   -</tr>
45   -{/if}
46   -</table>
  17 +
  18 +{foreach item=oWidget from=$edit_fields}
  19 + {$oWidget->render()}
  20 +{/foreach}
  21 +
  22 +<div class="form_actions">
47 23 <input type="submit" name="submit" value="Save" />
  24 +</div>
  25 +</fieldset>
48 26 </form>
49 27  
... ...
templates/ktcore/workflow/editWorkflow.smarty
1   -<h1>Workflow: {$oWorkflow->getName()|escape}</h1>
  1 +<h2>Workflow: {$oWorkflow->getName()|escape}</h2>
  2 +
2 3  
3   -<h2>Edit workflow properties</h2>
4 4  
5 5 <form action="{$smarty.server.PHP_SELF}" method="POST">
  6 +<fieldset>
  7 +<legend>Edit workflow properties</legend>
6 8 <input type="hidden" name="action" value="saveWorkflow" />
7 9 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
8   -<table class="prettysw" cellpadding="0" cellspacing="0">
9   -<tr>
10   - <th>Name</th>
11   - <td><input type="textbox" name="fName" value="{$oWorkflow->getName()|escape}" /></td>
12   -</tr>
13   -<tr>
14   - <th>Starting state</th>
15   - <td>{ entity_select entities=$aStates name="fStartStateId" none=true selected=$oWorkflow->getStartStateId()}</td>
16   -</tr>
17   -</table>
18   -<input type="submit" name="submit" value="Save" />
  10 +
  11 +{foreach item=oWidget from=$edit_fields}
  12 + {$oWidget->render()}
  13 +{/foreach}
  14 +
  15 +<div class="form_actions">
  16 +<input type="submit" name="submit" value="Update workflow properties" />
  17 +</div>
  18 +</fieldset>
19 19 </form>
20 20  
21   -<h2>States</h2>
  21 +<h3>States</h3>
  22 +<p class="descriptiveText"><strong>FIXME</strong> insert intelligent help.</p>
  23 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  24 +<fieldset>
  25 +<legend>Create a new state</legend>
  26 +<input type="hidden" name="action" value="newState" />
  27 +<input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
22 28  
23   -{if $aStates}
24   -<h3>Existing states</h3>
25 29  
  30 +{foreach item=oWidget from=$add_state_fields}
  31 + {$oWidget->render()}
  32 +{/foreach}
  33 +
  34 +<div class="form_actions">
  35 +<input type="submit" name="submit" value="Create state" />
  36 +</div>
  37 +</fieldset>
  38 +</form>
  39 +
  40 +{if $aStates}
  41 +<h4>Existing states</h4>
  42 +<p class="descriptiveText">Select a state to update its properties.</p>
26 43 <ul>
27 44 {foreach from=$aStates item=oState}
28 45 <li><a
... ... @@ -32,16 +49,31 @@ title=&quot;State {$oState-&gt;getId()}&quot;&gt;{$oState-&gt;getName()|escape}&lt;/a&gt;&lt;/li&gt;
32 49 </ul>
33 50 {/if}
34 51  
35   -<h3>Create a new state</h3>
  52 +
  53 +
  54 +
  55 +
  56 +<h3>Transitions</h3>
  57 +
  58 +<p class="descriptiveText"><strong>FIXME</strong> insert intelligent help.</p>
36 59  
37 60 <form action="{$smarty.server.PHP_SELF}" method="POST">
38   -<input type="hidden" name="action" value="newState" />
  61 +<fieldset>
  62 +<legend>Create a new transition</legend>
  63 +<input type="hidden" name="action" value="newTransition" />
39 64 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
40   -<input type="textbox" name="fName" />
41   -<input type="submit" name="submit" value="Create state" />
  65 +
  66 +
  67 +{foreach item=oWidget from=$add_transition_fields}
  68 + {$oWidget->render()}
  69 +{/foreach}
  70 +
  71 +<div class="form_actions">
  72 +<input type="submit" name="submit" value="Create transition" />
  73 +</div>
  74 +</fieldset>
42 75 </form>
43 76  
44   -<h2>Transitions</h2>
45 77  
46 78 {if $aTransitions}
47 79 <h3>Existing transitions</h3>
... ... @@ -55,35 +87,26 @@ title=&quot;Transition {$oTransition-&gt;getId()}&quot;&gt;{$oTransition-&gt;getName()|escape}&lt;/a&gt;&lt;
55 87 </ul>
56 88 {/if}
57 89  
58   -<h3>Create a new transition</h3>
59 90  
60   -<form action="{$smarty.server.PHP_SELF}" method="POST">
61   -<input type="hidden" name="action" value="newTransition" />
62   -<input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
63   -<table class="prettysw" cellpadding="0" cellspacing="0">
64   -<tr><th>Name</th><td><input type="textbox" name="fName" /></td></tr>
65   -<tr>
66   - <th>Target State</th>
67   - <td>{entity_select entities=$aStates name="fTargetStateId"}</td>
68   -</tr>
69   -<tr>
70   - <th>Guard permission</th>
71   - <td>{entity_select entities=$aPermissions name="fPermissionId"}</td>
72   -</tr>
73   -</table>
74   -<input type="submit" name="submit" value="Create transition" />
75   -</form>
76 91  
77   -<h2>Actions controlled</h2>
78 92  
79 93 <form action="{$smarty.server.PHP_SELF}" method="POST">
  94 +<fieldset>
  95 +<legend>Actions controlled</legend>
  96 +
  97 +<p class="descriptiveText"><strong>FIXME</strong> be helpful</p>
  98 +
80 99 <input type="hidden" name="action" value="setWorkflowActions" />
81 100 <input type="hidden" name="fWorkflowId" value="{$oWorkflow->getId()}" />
  101 +
82 102 <ul>
83 103 {entity_checkboxes name="fActions" entities=$aActions idmethod="getName" method="getDisplayName" assign="aCheckboxes" selected="$aActionsSelected"}
84 104 {foreach from=$aCheckboxes item=sCheckbox}
85 105 <li>{$sCheckbox}</li>
86 106 {/foreach}
87 107 </ul>
88   -<input type="submit" name="submit" value="Set controlled actions" />
  108 +<div class="form_actions">
  109 + <input type="submit" name="submit" value="Set controlled actions" />
  110 +</div>
  111 +</fieldset>
89 112 </form>
... ...
templates/ktcore/workflow/listWorkflows.smarty
1   -<h1>Workflow</h1>
  1 +<h2>Workflow</h2>
  2 +
  3 +<form action="{$smarty.server.PHP_SELF}" method="POST">
  4 +<fieldset>
  5 +<legend>Create a new workflow</legend>
  6 +
  7 +<input type="hidden" name="action" value="newWorkflow" />
  8 +
  9 +
  10 +{foreach item=oWidget from=$add_fields}
  11 + {$oWidget->render()}
  12 +{/foreach}
  13 +
  14 +<div class="form_actions">
  15 + <input type="submit" name="submit" value="Create" />
  16 +</div>
  17 +</fieldset>
  18 +</form>
2 19  
3   -{if $aWorkflow}
4   -<h2>Existing workflows</h2>
5 20  
  21 +{if $aWorkflow}
  22 +<h3>Existing workflows</h3>
  23 +<p class="descriptiveText">Select a workflow to modify.</p>
6 24 <ul>
7 25 {foreach from=$aWorkflow item=oWorkflow}
8 26 <li><a href="?action=editWorkflow&fWorkflowId={$oWorkflow->getId()}" title="Workflow: {$oWorkflow->getId()}">{$oWorkflow->getName()}</a></li>
... ... @@ -10,10 +28,6 @@
10 28 </ul>
11 29 {/if}
12 30  
13   -<h2>Create a new workflow</h2>
14 31  
15   -<form action="{$smarty.server.PHP_SELF}" method="POST">
16   -<input type="hidden" name="action" value="newWorkflow" />
17   -<input type="textbox" name="fName" />
18   -<input type="submit" name="submit" value="Create" />
19   -</form>
  32 +
  33 +
... ...