diff --git a/admin.php b/admin.php index 666be4b..2875dda 100644 --- a/admin.php +++ b/admin.php @@ -28,15 +28,31 @@ class AdminSplashDispatcher extends KTAdminDispatcher { // are we categorised, or not? $oRegistry =& KTAdminNavigationRegistry::getSingleton(); $categories = $oRegistry->getCategories(); + $KTConfig =& KTConfig::getSingleton(); + $condensed_admin = $KTConfig->get("condensedAdminUI"); + $aAllItems = array(); // we need to investigate sub_url solutions. + if ($condensed_admin) { + foreach ($categories as $aCategory) { + $aItems = $oRegistry->getItemsForCategory($aCategory['name']); + $aAllItems[$aCategory['name']] = $aItems; + } + } $this->oPage->title = _("DMS Administration") . ": "; $oTemplating = new KTTemplating; - $oTemplate = $oTemplating->loadTemplate("kt3/admin_categories"); + + if ($condensed_admin) { + $oTemplate = $oTemplating->loadTemplate("kt3/admin_fulllist"); + } else { + $oTemplate = $oTemplating->loadTemplate("kt3/admin_categories"); + } + $aTemplateData = array( "context" => $this, "categories" => $categories, + "all_items" => $aAllItems, "baseurl" => $_SERVER['PHP_SELF'], ); return $oTemplate->render($aTemplateData); @@ -85,8 +101,9 @@ if (empty($sub_url)) { $aCategory = $oRegistry->getCategory($aParts[0]); $oDispatcher->aBreadcrumbs = array(); - $oDispatcher->aBreadcrumbs[] = array('url' => KTUtil::getRequestScriptName($_SERVER), 'name' => 'Administration'); + $oDispatcher->aBreadcrumbs[] = array('action' => "administration", 'name' => 'Administration'); $oDispatcher->aBreadcrumbs[] = array("name" => $aCategory['title'], "url" => KTUtil::ktLink('admin.php',$aParts[0])); + } else { // FIXME (minor) redirect to no-suburl? $oDispatcher = new AdminSplashDispatcher(); diff --git a/config/config.ini b/config/config.ini index 326027a..cf568c7 100644 --- a/config/config.ini +++ b/config/config.ini @@ -86,6 +86,9 @@ alwaysShowAll = default ; have expired. automaticRefresh = default +; use a condensed admin ui +condensedAdminUI = default + ; ---------------------------------------------------------------- ; These sections are for more esoteric settings - you probably don't ; want to mess with these diff --git a/config/dmsDefaults.php b/config/dmsDefaults.php index fd72ed4..1436380 100644 --- a/config/dmsDefaults.php +++ b/config/dmsDefaults.php @@ -401,6 +401,7 @@ $oKTConfig->setdefaultns("user_prefs", "restrictAdminPasswords", false); $oKTConfig->setdefaultns("ui", "ieGIF", true); $oKTConfig->setdefaultns("ui", "alwaysShowAll", false); +$oKTConfig->setdefaultns("ui", "condensedAdminUI", false); $oKTConfig->setdefaultns(null, "logLevel", 'INFO'); $oKTConfig->setdefaultns("import", "unzip", 'unzip'); diff --git a/lib/dispatcher.inc.php b/lib/dispatcher.inc.php index ff41658..1b92c67 100644 --- a/lib/dispatcher.inc.php +++ b/lib/dispatcher.inc.php @@ -216,6 +216,10 @@ class KTStandardDispatcher extends KTDispatcher { return true; } + function addInfoMessage($sMessage) { $_SESSION['KTInfoMessage'][] = $sMessage; } + + function addErrorMessage($sMessage) { $_SESSION['KTErrorMessage'][] = $sMessage; } + function handleOutput($data) { global $default; global $sectionName; diff --git a/lib/util/ktutil.inc b/lib/util/ktutil.inc index 33766a7..5f84d0e 100644 --- a/lib/util/ktutil.inc +++ b/lib/util/ktutil.inc @@ -488,11 +488,13 @@ class KTUtil { $root = $KTConfig->get("KnowledgeTree/rootUrl"); $url = generateLink($base); - $hasPathInfo = $KTConfig->get("KnowledgeTree/pathInfoSupport"); - if ($hasPathInfo) { - $url .= $subpath; - } else { - $url = KTUtil::addQueryString($url, "kt_path_info=" . $subpath); + if (!empty($subpath)) { + $hasPathInfo = $KTConfig->get("KnowledgeTree/pathInfoSupport"); + if ($hasPathInfo) { + $url .= $subpath; + } else { + $url = KTUtil::addQueryString($url, "kt_path_info=" . $subpath); + } } return KTUtil::addQueryString($url, $qs); diff --git a/plugins/ktcore/KTCorePlugin.php b/plugins/ktcore/KTCorePlugin.php index abeb123..a4c527a 100644 --- a/plugins/ktcore/KTCorePlugin.php +++ b/plugins/ktcore/KTCorePlugin.php @@ -51,6 +51,10 @@ class KTCorePlugin extends KTPlugin { 'KTBrowseModePortlet', 'ktcore.portlets.browsemodes', 'KTPortlets.php'); + $this->registerPortlet(array('administration'), + 'KTAdminSectionNavigation', 'ktcore.portlets.adminnavigation', + 'KTPortlets.php'); + $this->setupAdmin(); } diff --git a/plugins/ktcore/KTPortlets.php b/plugins/ktcore/KTPortlets.php index 8174418..79bc874 100644 --- a/plugins/ktcore/KTPortlets.php +++ b/plugins/ktcore/KTPortlets.php @@ -41,7 +41,7 @@ class KTBrowseModePortlet extends KTPortlet { parent::KTPortlet($sTitle); } - function render() { + function render() { // this is unfortunate, but such is life. $current_action = KTUtil::arrayGet($_REQUEST, 'fBrowseMode', null); $modes = array( @@ -107,3 +107,29 @@ class KTAdminModePortlet extends KTPortlet { return $oTemplate->render($aTemplateData); } } + + + +class KTAdminSectionNavigation extends KTPortlet { + + function KTAdminSectionNavigation() { + parent::KTPortlet(_("Administration")); + } + + function render() { + require_once(KT_LIB_DIR . "/plugins/KTAdminNavigation.php"); + + $oRegistry =& KTAdminNavigationRegistry::getSingleton(); + $categories = $oRegistry->getCategories(); + + // we need to investigate sub_url solutions. + + $oTemplating = new KTTemplating; + $oTemplate = $oTemplating->loadTemplate("kt3/portlets/admin_categories"); + $aTemplateData = array( + "context" => $this, + "categories" => $categories, + ); + return $oTemplate->render($aTemplateData); + } +} diff --git a/plugins/ktcore/admin/documentFields.php b/plugins/ktcore/admin/documentFields.php index 7943bc3..93caf27 100755 --- a/plugins/ktcore/admin/documentFields.php +++ b/plugins/ktcore/admin/documentFields.php @@ -32,7 +32,7 @@ class KTDocumentFieldDispatcher extends KTAdminDispatcher { $createFields[] = new KTTextWidget('Description', _('A brief description of the information stored in this fieldset.'), 'description', null, $this->oPage, true); $createFields[] = new KTCheckboxWidget('Generic', _('A generic fieldset is one that is available for every document by default. These fieldsets will be available for users to edit and add for every document in the document management system.'), 'generic', false, $this->oPage, false); $createFields[] = new KTCheckboxWidget('System', - _('A system fieldset is one that is never displayed to a user, and is used only by the document management system.'), 'generic', false, $this->oPage, false); + _('A system fieldset is one that is never displayed to a user, and is used only by the document management system.'), 'system', false, $this->oPage, false); $oTemplating =& KTTemplating::getSingleton(); @@ -120,7 +120,11 @@ class KTDocumentFieldDispatcher extends KTAdminDispatcher { if (KTUtil::arrayGet($_REQUEST, 'system')) { $bIsSystem = true; // Can't be a system fieldset and a generic fieldset... - $bIsGeneric = false; + if ($bIsGeneric) { + $bIsGeneric = false; + $this->addInfoMessage(_('System fieldsets cannot be generic. Generic flag removed.')); + } + } // basic validation diff --git a/plugins/ktcore/folder/addDocument.php b/plugins/ktcore/folder/addDocument.php index 6987123..70b1b2e 100644 --- a/plugins/ktcore/folder/addDocument.php +++ b/plugins/ktcore/folder/addDocument.php @@ -91,6 +91,11 @@ class KTFolderAddDocumentAction extends KTFolderAction { $aFile = $this->oValidator->validateFile($_FILES['file'], $aErrorOptions); $sTitle = $this->oValidator->validateString($_REQUEST['title'], $aErrorOptions); + if (KTDocumentUtil::exists( $this->oFolder, basename($aFile['name']))) { + $this->errorRedirectToMain(_('There is already a document with that filename in this folder.'),'fFolderId=' . $this->oFolder->getId()); + exit(0); + } + $matches = array(); $aFields = array(); foreach ($_REQUEST as $k => $v) { diff --git a/plugins/ktstandard/KTSubscriptions.php b/plugins/ktstandard/KTSubscriptions.php index ca37add..2f61785 100644 --- a/plugins/ktstandard/KTSubscriptions.php +++ b/plugins/ktstandard/KTSubscriptions.php @@ -24,6 +24,8 @@ class KTSubscriptionPlugin extends KTPlugin { 'ktstandard.subscription.documentunsubscription'); $this->registerTrigger('checkout', 'postValidate', 'KTCheckoutSubscriptionTrigger', 'ktstandard.triggers.subscription.checkout'); + $this->registerTrigger('edit', 'postValidate', 'KTEditSubscriptionTrigger', + 'ktstandard.triggers.subscription.checkout'); $this->registerTrigger('delete', 'postValidate', 'KTDeleteSubscriptionTrigger', 'ktstandard.triggers.subscription.delete'); $this->registerTrigger('moveDocument', 'postValidate', 'KTDocumentMoveSubscriptionTrigger', @@ -180,6 +182,28 @@ class KTCheckoutSubscriptionTrigger { } // }}} + +// {{{ KTCheckoutSubscriptionTrigger +class KTEditSubscriptionTrigger { + var $aInfo = null; + function setInfo(&$aInfo) { + $this->aInfo =& $aInfo; + } + + function postValidate() { + global $default; + $oDocument =& $this->aInfo["document"]; + // fire subscription alerts for the checked out document + + // fire subscription alerts for the checked in document + $oSubscriptionEvent = new SubscriptionEvent(); + $oFolder = Folder::get($oDocument->getFolderID()); + $oSubscriptionEvent->ModifyDocument($oDocument, $oFolder); + + } +} +// }}} + // {{{ KTDeleteSubscriptionTrigger class KTDeleteSubscriptionTrigger { var $aInfo = null; diff --git a/resources/css/kt-framing.css b/resources/css/kt-framing.css index ce7c2ce..4fd4de2 100644 --- a/resources/css/kt-framing.css +++ b/resources/css/kt-framing.css @@ -550,6 +550,10 @@ a.main_nav_item { white-space: nowrap !important; } +.kt_collection.narrow { + width: auto; +} + .kt_collection thead th { border-bottom: 1px solid #888; text-align: left; diff --git a/templates/kt3/admin_fulllist.smarty b/templates/kt3/admin_fulllist.smarty new file mode 100644 index 0000000..f032031 --- /dev/null +++ b/templates/kt3/admin_fulllist.smarty @@ -0,0 +1,12 @@ +
+ {foreach item=aCategory from=$categories} +
{capture assign="cat_id"}{$aCategory.name}{/capture}{$aCategory.title}
+
+

{$aCategory.description}

+

{foreach item=aItem from=$all_items.$cat_id name=itemlist} + {$aItem.title} {if !($smarty.foreach.itemlist.last)} | {/if} + {/foreach} +

+
+ {/foreach} +
\ No newline at end of file diff --git a/templates/kt3/portlets/admin_categories.smarty b/templates/kt3/portlets/admin_categories.smarty new file mode 100644 index 0000000..fc7877f --- /dev/null +++ b/templates/kt3/portlets/admin_categories.smarty @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/templates/ktcore/metadata/listFieldsets.smarty b/templates/ktcore/metadata/listFieldsets.smarty index 82ab8b1..40dd283 100644 --- a/templates/ktcore/metadata/listFieldsets.smarty +++ b/templates/ktcore/metadata/listFieldsets.smarty @@ -5,11 +5,12 @@ { if $fieldsets}

{i18n}Existing document fieldsets{/i18n}

- +
- + + @@ -22,13 +23,20 @@ { $oFieldset->getName() } - +
{i18n}Name{/i18n}{i18n}Is Generic{/i18n}{i18n}Is Generic{/i18n}{i18n}Is System{/i18n} {i18n}Fields{/i18n} {i18n}Edit{/i18n} {i18n}Delete{/i18n} + {if ($oFieldset->getIsGeneric())} - {i18n}Yes{/i18n} + {i18n}Yes{/i18n} {else} - {i18n}No{/i18n} + {i18n}No{/i18n} {/if} +{if ($oFieldset->getIsSystem())} + {i18n}Yes{/i18n} +{else} + {i18n}No{/i18n} +{/if} + {assign var="aFields" value=$oFieldset->getFields()} {if $aFields}