diff --git a/config/config.ini b/config/config.ini index 533fffb..1899f9f 100644 --- a/config/config.ini +++ b/config/config.ini @@ -135,6 +135,9 @@ fakeMimetype = default ; "dot" command location dot = dot +; sort the metadata fields alphabetically +metadata_sort = true + [i18n] ; Default language for the interface defaultLanguage = en @@ -197,7 +200,7 @@ uiUrl = ${rootUrl}/presentation/lookAndFeel/knowledgeTree ;dedicated feed url ;dedicatedrsstitle = RSS Feed Title -;dedicatedrssurl = +;dedicatedrssurl = ; files stopwordsFile = ${fileSystemRoot}/config/stopwords.txt diff --git a/lib/widgets/fieldsetDisplay.inc.php b/lib/widgets/fieldsetDisplay.inc.php index c5ea77a..03bb154 100644 --- a/lib/widgets/fieldsetDisplay.inc.php +++ b/lib/widgets/fieldsetDisplay.inc.php @@ -5,32 +5,32 @@ * KnowledgeTree Open Source Edition * Document Management Made Simple * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. - * + * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. - * + * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by - * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices - * must display the words "Powered by KnowledgeTree" and retain the original - * copyright notice. + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. * Contributor( s): ______________________________________ * */ @@ -45,20 +45,20 @@ * "document_id" => $iDocumentId * */ - + // boilerplate -require_once(KT_LIB_DIR . "/templating/templating.inc.php"); -require_once(KT_LIB_DIR . "/database/dbutil.inc"); +require_once(KT_LIB_DIR . '/templating/templating.inc.php'); +require_once(KT_LIB_DIR . '/database/dbutil.inc'); -require_once(KT_LIB_DIR . "/documentmanagement/MDTree.inc"); // :( +require_once(KT_LIB_DIR . '/documentmanagement/MDTree.inc'); // :( // data acquisition -require_once(KT_LIB_DIR . "/users/User.inc"); +require_once(KT_LIB_DIR . '/users/User.inc'); require_once(KT_LIB_DIR . '/documentmanagement/MetaData.inc'); -require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php"); -require_once(KT_LIB_DIR . "/widgets/fieldWidgets.php"); +require_once(KT_LIB_DIR . '/widgets/FieldsetDisplayRegistry.inc.php'); +require_once(KT_LIB_DIR . '/widgets/fieldWidgets.php'); /* it may be useful to move this to a factory, eventually? */ @@ -77,9 +77,9 @@ function getWidgetForMetadataField($field, $current_value, $page, $errors = null if ($errors === null) { $fieldErrors = array(); } else { - $fieldErrors = $errors; + $fieldErrors = $errors; } - + // now we need to break, based on a few aspects of the oField (DocumentField) if ($field->getHasLookup()) { @@ -90,34 +90,47 @@ function getWidgetForMetadataField($field, $current_value, $page, $errors = null // extract the lookup. if ($vocab === null) { // allow override $lookups = MetaData::getEnabledByDocumentField($field); - $fieldOptions["vocab"] = array(); // FIXME handle lookups - $fieldOptions['vocab'][''] = _kt('Select a value'); + $fieldOptions['vocab'] = array(); // FIXME handle lookups + $fieldOptions['vocab'][''] = _kt('Select a value'); foreach ($lookups as $md) { - $fieldOptions["vocab"][$md->getName()] = $md->getName(); + $fieldOptions['vocab'][$md->getName()] = $md->getName(); } } else { - $fieldOptions["vocab"] = $vocab; + $fieldOptions['vocab'] = $vocab; } - - $oField = new KTLookupWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); + + $oField = new KTLookupWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); } else { // FIXME vocab's are _not_ supported for tree-inputs. this means conditional-tree-widgets are not unsupported. - + // for trees, we are currently brutal. $fieldTree = new MDTree(); $fieldTree->buildForField($field->getId()); $fieldTree->setActiveItem($current_value); $fieldOptions['tree'] = $fieldTree->_evilTreeRenderer($fieldTree, $fieldName); - - $oField = new KTTreeWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); + + $oField = new KTTreeWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); } } else { - $oField = new KTBaseWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); + $oField = new KTBaseWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions); } return $oField; } +/** + * Compare the fields within a fieldset for alphabetising. + * + * @param object $a + * @param object $b + * @return integer + */ +function compareFieldSetField($a, $b) +{ + if ($a['field']->getName() == $b['field']->getName()) return 0; + if ($a['field']->getName() < $b['field']->getName()) return -1; + return 1; +} // FIXME need to establish some kind of api to pass in i18n information. class KTFieldsetDisplay { @@ -126,33 +139,33 @@ class KTFieldsetDisplay { function KTFieldsetDisplay($oFieldset) { $this->fieldset = $oFieldset; } - + function _dateHelper($dDate) { $dColumnDate = strtotime($dDate); - return date("Y-m-d H:i", $dColumnDate); + return date('Y-m-d H:i', $dColumnDate); } - - + + function _sizeHelper($size) { $finalSize = $size; $label = 'b'; - + if ($finalSize > 1000) { $label='Kb'; $finalSize = floor($finalSize/1000); } if ($finalSize > 1000) { $label='Mb'; $finalSize = floor($finalSize/1000); } return $finalSize . $label; } - + function _mimeHelper($iMimeTypeId) { // FIXME lazy cache this. // FIXME extend mime_types to have something useful to say. $sQuery = 'SELECT * FROM mime_types WHERE id = ?'; $res = DBUtil::getOneResult(array($sQuery, array($iMimeTypeId))); - + if (PEAR::isError($res)) { return _kt('unknown type'); } - + if (!empty($res['friendly_name'])) { return _kt($res['friendly_name']); } else { @@ -160,19 +173,19 @@ class KTFieldsetDisplay { } } - - + + // this should multiplex i18n_title function getTitle() { return $this->sTitle; } - + function render($aDocumentData) { return '

Warning: Abstract Fieldset created.

'; } - + function renderComparison($aDocumentData, $aComparisonData) { return '
Not implemented: comparison rendering
'; } - + // we need the $main to (potentially) add js, etc. function renderEdit($document_data) { return '
Not Implemented: fieldset editing.
'; @@ -188,29 +201,29 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { // DON'T take anything. function GenericFieldsetDisplay() { - + } - + function render($aDocumentData) { // we do a fair bit of fetching, etc. in here. - $document = $aDocumentData["document"]; + $document = $aDocumentData['document']; // creation $creator =& User::get($document->getCreatorId()); if (PEAR::isError($creator)) { - $creator_name = "" . _kt("Unable to find the document's creator") . ""; + $creator_name = '' . _kt("Unable to find the document's creator") . ''; } else { $creator_name = $creator->getName(); } $owner =& User::get($document->getOwnerId()); if (PEAR::isError($owner)) { - $owner_name = "" . _kt("Unable to find the document's owner") . ""; + $owner_name = '' . _kt("Unable to find the document's owner") . ''; } else { $owner_name = $owner->getName(); } $modified_user =& User::get($document->getModifiedUserId()); if (PEAR::isError($modified_user)) { - $modified_user_name = "" . _kt("Unable to find the document's modifier") . ""; + $modified_user_name = '' . _kt("Unable to find the document's modifier") . ''; } else { $modified_user_name = $modified_user->getName(); } @@ -218,48 +231,48 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { // last mod $last_modified_date = $this->_dateHelper($document->getLastModifiedDate()); - + // document type // FIXME move this to view.php - $document_type = $aDocumentData["document_type"]->getName(); + $document_type = $aDocumentData['document_type']->getName(); $oWorkflow = KTWorkflowUtil::getWorkflowForDocument($document); $oState = KTWorkflowUtil::getWorkflowStateForDocument($document); - - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/generic"); + + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/generic'); $aTemplateData = array( - "context" => $this, - "document_data" => $aDocumentData, - "document" => $aDocumentData["document"], - - "filename" => $document->getFileName(), - - "creator" => $creator_name, - "owner" => $owner_name, - "creation_date" => $creation_date, - - "last_modified_by" => $modified_user_name, - "last_modified_date" => $last_modified_date, - - "document_type" => $document_type, - - "workflow_state" => $oState, - "workflow" => $oWorkflow, + 'context' => $this, + 'document_data' => $aDocumentData, + 'document' => $aDocumentData['document'], + + 'filename' => $document->getFileName(), + + 'creator' => $creator_name, + 'owner' => $owner_name, + 'creation_date' => $creation_date, + + 'last_modified_by' => $modified_user_name, + 'last_modified_date' => $last_modified_date, + + 'document_type' => $document_type, + + 'workflow_state' => $oState, + 'workflow' => $oWorkflow, ); - return $oTemplate->render($aTemplateData); + return $oTemplate->render($aTemplateData); } - + function renderComparison($aDocumentData, $aComparisonData) { // we do a fair bit of fetching, etc. in here. - $document = $aDocumentData["document"]; - $comparison_document = $aComparisonData["document"]; + $document = $aDocumentData['document']; + $comparison_document = $aComparisonData['document']; // creation $creator =& User::get($document->getCreatorId()); if (PEAR::isError($creator)) { - $creator = "" . _kt("Unable to find the document's creator") . ""; + $creator = '' . _kt("Unable to find the document's creator") . ''; } else { $creator = $creator->getName(); } @@ -268,30 +281,30 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { // last mod $last_modified_date = $this->_dateHelper($document->getVersionCreated()); $comparison_last_modified_date = $this->_dateHelper($comparison_document->getVersionCreated()); - + // document type // FIXME move this to view.php - $document_type = $aDocumentData["document_type"]->getName(); - $comparison_document_type = $aComparisonData["document_type"]->getName(); - + $document_type = $aDocumentData['document_type']->getName(); + $comparison_document_type = $aComparisonData['document_type']->getName(); + $modified_user =& User::get($document->getVersionCreatorId()); if (PEAR::isError($modified_user)) { - $modified_user = "" . _kt("Unable to find the document's modifier") . ""; + $modified_user = "" . _kt("Unable to find the document's modifier") . ''; } else { $modified_user = $modified_user->getName(); } $owner_user =& User::get($document->getOwnerId()); if (PEAR::isError($owner_user)) { - $owner_user = "" . _kt("Unable to find the document's owner") . ""; + $owner_user = "" . _kt("Unable to find the document's owner") . ''; } else { $owner_user = $owner_user->getName(); } - + $comparison_modified_user =& User::get($comparison_document->getVersionCreatorId()); if (PEAR::isError($comparison_modified_user)) { - $comparison_modified_user = "" . _kt("Unable to find the document's modifier") . ""; + $comparison_modified_user = "" . _kt("Unable to find the document's modifier") . ''; } else { $comparison_modified_user = $comparison_modified_user->getName(); } @@ -300,59 +313,59 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { $oState = KTWorkflowUtil::getWorkflowStateForDocument($document); $oComparisonWorkflow = KTWorkflowUtil::getWorkflowForDocument($comparison_document); $oComparisonState = KTWorkflowUtil::getWorkflowStateForDocument($comparison_document); - - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/generic_versioned"); + + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/generic_versioned'); $aTemplateData = array( - "context" => $this, - "document_data" => $aDocumentData, - "document" => $aDocumentData["document"], - - "title" => $document->getName(), - "comparison_title" => $comparison_document->getName(), - - "filename" => $document->getFileName(), - "comparison_filename" => $comparison_document->getFileName(), - - "creator" => $creator, - "creation_date" => $creation_date, - "owner" => $owner_user, - - "last_modified_by" => $modified_user, - "last_modified_date" => $last_modified_date, - - "comparison_last_modified_by" => $comparison_modified_user, - "comparison_last_modified_date" => $comparison_last_modified_date, - - "document_type" => $document_type, - "comparison_document_type" => $comparison_document_type, - - "workflow_state" => $oState, - "comparison_workflow_state" => $oComparisonState, - "workflow" => $oWorkflow, - "comparison_workflow" => $oComparisonWorkflow, - - "comparison_document" => $aComparisonData["document"], + 'context' => $this, + 'document_data' => $aDocumentData, + 'document' => $aDocumentData['document'], + + 'title' => $document->getName(), + 'comparison_title' => $comparison_document->getName(), + + 'filename' => $document->getFileName(), + 'comparison_filename' => $comparison_document->getFileName(), + + 'creator' => $creator, + 'creation_date' => $creation_date, + 'owner' => $owner_user, + + 'last_modified_by' => $modified_user, + 'last_modified_date' => $last_modified_date, + + 'comparison_last_modified_by' => $comparison_modified_user, + 'comparison_last_modified_date' => $comparison_last_modified_date, + + 'document_type' => $document_type, + 'comparison_document_type' => $comparison_document_type, + + 'workflow_state' => $oState, + 'comparison_workflow_state' => $oComparisonState, + 'workflow' => $oWorkflow, + 'comparison_workflow' => $oComparisonWorkflow, + + 'comparison_document' => $aComparisonData['document'], ); - - return $oTemplate->render($aTemplateData); + + return $oTemplate->render($aTemplateData); } - + function renderEdit($document_data) { global $main; // FIXME remove direct access to $main - $oField = new KTBaseWidget(_kt("Document Title"), + $oField = new KTBaseWidget(_kt('Document Title'), sprintf(_kt("The document title is used as the main name of a document throughout %s™."), APP_NAME), - "generic_title", $document_data["document"]->getName(), $main, true, null, array()); + 'generic_title', $document_data['document']->getName(), $main, true, null, array()); $aFields = array($oField); // its the only one editable from the basic set (currently). - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple_editable"); + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple_editable'); $aTemplateData = array( - "context" => $this, - "fields" => $aFields, - "title" => _kt("Generic Document Information"), - "description" => sprintf(_kt("The information in this section is stored by %s™ for every document."), APP_NAME), + 'context' => $this, + 'fields' => $aFields, + 'title' => _kt('Generic Document Information'), + 'description' => sprintf(_kt("The information in this section is stored by %s™ for every document."), APP_NAME), ); return $oTemplate->render($aTemplateData); } @@ -361,177 +374,184 @@ class GenericFieldsetDisplay extends KTFieldsetDisplay { // The generic object class SimpleFieldsetDisplay extends KTFieldsetDisplay { - + function render($aDocumentData) { // we do a fair bit of fetching, etc. in here. - $document = $aDocumentData["document"]; - + $document = $aDocumentData['document']; + // we need to extract the fields. $fields =& $this->fieldset->getFields(); - - + + // we now grab that subset of items which fit in here. // FIXME link value -> lookup where appropriate. // FIXME probably need to be more careful about the _type_ of field here. $fieldset_values = array(); foreach ($fields as $oField) { - $val = KTUtil::arrayGet($aDocumentData["field_values"], $oField->getId(), null); - $fieldset_values[] = array("field" => $oField, "value" => $val, ); + $val = KTUtil::arrayGet($aDocumentData['field_values'], $oField->getId(), null); + $fieldset_values[] = array('field' => $oField, 'value' => $val, ); + } + + // Alphabetise the metadata fields within a fieldset if set in config + $oKTConfig =& KTConfig::getSingleton(); + $use_sort = $oKTConfig->get('ui/metadata_sort', false); + + if($use_sort){ + usort($fieldset_values, 'compareFieldSetField'); } - - - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple"); + + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple'); $aTemplateData = array( - "context" => $this, - "document_data" => $aDocumentData, - "document" => $aDocumentData["document"], - "fieldset" => $this->fieldset, - "fieldset_values" => $fieldset_values, - "description" => $this->fieldset->getDescription(), + 'context' => $this, + 'document_data' => $aDocumentData, + 'document' => $aDocumentData['document'], + 'fieldset' => $this->fieldset, + 'fieldset_values' => $fieldset_values, + 'description' => $this->fieldset->getDescription(), ); - return $oTemplate->render($aTemplateData); + return $oTemplate->render($aTemplateData); } - + function renderComparison($aDocumentData, $aComparisonData) { // we do a fair bit of fetching, etc. in here. - $document = $aDocumentData["document"]; - + $document = $aDocumentData['document']; + // we need to extract the fields. $fields =& $this->fieldset->getFields(); - - + + // we now grab that subset of items which fit in here. // FIXME link value -> lookup where appropriate. // FIXME probably need to be more careful about the _type_ of field here. $fieldset_values = array(); foreach ($fields as $oField) { - $curr_val = KTUtil::arrayGet($aDocumentData["field_values"], $oField->getId(), null); - $old_val = KTUtil::arrayGet($aComparisonData["field_values"], $oField->getId(), null); - $fieldset_values[] = array("field" => $oField, "current_value" => $curr_val, "previous_value" => $old_val); + $curr_val = KTUtil::arrayGet($aDocumentData['field_values'], $oField->getId(), null); + $old_val = KTUtil::arrayGet($aComparisonData['field_values'], $oField->getId(), null); + $fieldset_values[] = array('field' => $oField, 'current_value' => $curr_val, 'previous_value' => $old_val); } - - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple_versioned"); + + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple_versioned'); $aTemplateData = array( - "context" => $this, - "document_data" => $aDocumentData, - "document" => $aDocumentData["document"], - "fieldset" => $this->fieldset, - "fieldset_values" => $fieldset_values, + 'context' => $this, + 'document_data' => $aDocumentData, + 'document' => $aDocumentData['document'], + 'fieldset' => $this->fieldset, + 'fieldset_values' => $fieldset_values, ); - return $oTemplate->render($aTemplateData); - } - + return $oTemplate->render($aTemplateData); + } + function renderEdit($document_data) { global $main; // FIXME remove direct access to $main - + $aFields = array(); - + $fields =& $this->fieldset->getFields(); - + foreach ($fields as $oField) { - $val = KTUtil::arrayGet($document_data["field_values"], $oField->getId(), null); - + $val = KTUtil::arrayGet($document_data['field_values'], $oField->getId(), null); + $has_errors = KTUtil::arrayGet($document_data['errors'], $oField->getId(),false); if ($has_errors !== false) { // FIXME when the actual errors (meaningful) are passed out, fix this. $errors = array(_kt('The system rejected your value for this field.')); - } else { + } else { $errors = null; } - + $aFields[] = getWidgetForMetadataField($oField, $val, $main, $errors); // FIXME handle errors } $fieldset_name = $this->fieldset->getName(); $fieldset_description = $this->fieldset->getDescription(); - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/simple_editable"); + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/simple_editable'); $aTemplateData = array( - "context" => $this, - "fields" => $aFields, - "title" => $fieldset_name, - "description" => $fieldset_description, + 'context' => $this, + 'fields' => $aFields, + 'title' => $fieldset_name, + 'description' => $fieldset_description, ); - - + + return $oTemplate->render($aTemplateData); } - + } // Handle the conditional case. class ConditionalFieldsetDisplay extends SimpleFieldsetDisplay { - + function renderEdit($document_data) { global $main; // FIXME remove direct access to $main $oPage =& $main; - + // FIXME do this from inside the widgetry mojo. $oPage->requireCSSResource('resources/css/kt-treewidget.css'); - + // FIXME this currently doesn't work, since we use NBM's half-baked Ajax on add/bulk ;) $oPage->requireJSResource('resources/js/taillog.js'); $oPage->requireJSResource('resources/js/conditional_usage.js'); - - $aFields = array(); + + $aFields = array(); $fields =& $this->fieldset->getFields(); $values = array(); $errors = $document_data['errors']; $have_values = false; foreach ($fields as $oField) { - $val = KTUtil::arrayGet($document_data["field_values"], $oField->getId(), null); + $val = KTUtil::arrayGet($document_data['field_values'], $oField->getId(), null); if ($val !== null) { $have_values = true; - - } - + + } + $values[$oField->getId()] = $val; - } + } + - // now, we need to do some extra work on conditional widgets. // how? - + $fieldset_name = $this->fieldset->getName(); $fieldset_description = _kt($this->fieldset->getDescription()); // need a better approach. how do we handle database-resident translations? - $fieldset_description .= _kt("Note that the options which are available depends on previous choices within this fieldset."); - + $fieldset_description .= _kt('Note that the options which are available depends on previous choices within this fieldset.'); + // FIXME handle the editable case _with_ values. - + if ($have_values) { - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/conditional_editable_values"); + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/conditional_editable_values'); $aTemplateData = array( - "context" => $this, - "fields" => $fields =& $this->fieldset->getFields(), + 'context' => $this, + 'fields' => $fields =& $this->fieldset->getFields(), 'fieldset_id' => $this->fieldset->getId(), - "title" => $fieldset_name, - "description" => $fieldset_description, + 'title' => $fieldset_name, + 'description' => $fieldset_description, 'values' => $values, 'errors' => $errors, ); - + return $oTemplate->render($aTemplateData); } // else { - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("kt3/fieldsets/conditional_editable"); + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate = $oTemplating->loadTemplate('kt3/fieldsets/conditional_editable'); $aTemplateData = array( - "context" => $this, - "field" => $oField, // first field, widget. + 'context' => $this, + 'field' => $oField, // first field, widget. 'fieldset_id' => $this->fieldset->getId(), - "title" => $fieldset_name, - "description" => $fieldset_description, + 'title' => $fieldset_name, + 'description' => $fieldset_description, ); - + return $oTemplate->render($aTemplateData); } - + } -?> +?> \ No newline at end of file diff --git a/view.php b/view.php index bd695e2..8713108 100755 --- a/view.php +++ b/view.php @@ -5,64 +5,64 @@ * KnowledgeTree Open Source Edition * Document Management Made Simple * Copyright (C) 2004 - 2007 The Jam Warehouse Software (Pty) Limited - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. - * + * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. - * + * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by - * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices - * must display the words "Powered by KnowledgeTree" and retain the original - * copyright notice. + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. * Contributor( s): ______________________________________ */ // boilerplate. -require_once("config/dmsDefaults.php"); -require_once(KT_LIB_DIR . "/templating/templating.inc.php"); -require_once(KT_LIB_DIR . "/templating/kt3template.inc.php"); -require_once(KT_LIB_DIR . "/dispatcher.inc.php"); -require_once(KT_LIB_DIR . "/util/ktutil.inc"); -require_once(KT_LIB_DIR . "/database/dbutil.inc"); -require_once(KT_LIB_DIR . "/util/sanitize.inc"); +require_once('config/dmsDefaults.php'); +require_once(KT_LIB_DIR . '/templating/templating.inc.php'); +require_once(KT_LIB_DIR . '/templating/kt3template.inc.php'); +require_once(KT_LIB_DIR . '/dispatcher.inc.php'); +require_once(KT_LIB_DIR . '/util/ktutil.inc'); +require_once(KT_LIB_DIR . '/database/dbutil.inc'); +require_once(KT_LIB_DIR . '/util/sanitize.inc'); // document related includes -require_once(KT_LIB_DIR . "/documentmanagement/Document.inc"); -require_once(KT_LIB_DIR . "/documentmanagement/DocumentType.inc"); -require_once(KT_LIB_DIR . "/documentmanagement/DocumentFieldLink.inc"); -require_once(KT_LIB_DIR . "/documentmanagement/documentmetadataversion.inc.php"); -require_once(KT_LIB_DIR . "/documentmanagement/documentcontentversion.inc.php"); -require_once(KT_LIB_DIR . "/metadata/fieldset.inc.php"); -require_once(KT_LIB_DIR . "/security/Permission.inc"); +require_once(KT_LIB_DIR . '/documentmanagement/Document.inc'); +require_once(KT_LIB_DIR . '/documentmanagement/DocumentType.inc'); +require_once(KT_LIB_DIR . '/documentmanagement/DocumentFieldLink.inc'); +require_once(KT_LIB_DIR . '/documentmanagement/documentmetadataversion.inc.php'); +require_once(KT_LIB_DIR . '/documentmanagement/documentcontentversion.inc.php'); +require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php'); +require_once(KT_LIB_DIR . '/security/Permission.inc'); // widget includes. -require_once(KT_LIB_DIR . "/widgets/portlet.inc.php"); -require_once(KT_LIB_DIR . "/widgets/fieldsetDisplay.inc.php"); -require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php"); -require_once(KT_LIB_DIR . "/actions/documentaction.inc.php"); -require_once(KT_LIB_DIR . "/browse/browseutil.inc.php"); +require_once(KT_LIB_DIR . '/widgets/portlet.inc.php'); +require_once(KT_LIB_DIR . '/widgets/fieldsetDisplay.inc.php'); +require_once(KT_LIB_DIR . '/widgets/FieldsetDisplayRegistry.inc.php'); +require_once(KT_LIB_DIR . '/actions/documentaction.inc.php'); +require_once(KT_LIB_DIR . '/browse/browseutil.inc.php'); class ViewDocumentDispatcher extends KTStandardDispatcher { var $sName = 'ktcore.actions.document.displaydetails'; - var $sSection = "view_details"; + var $sSection = 'view_details'; var $sHelpPage = 'ktcore/browse.html'; var $actions; @@ -77,21 +77,21 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { function check() { if (!parent::check()) { return false; } - + $this->persistParams(array('fDocumentId')); - + return true; } // FIXME identify the current location somehow. function addPortlets($currentaction = null) { $currentaction = $this->sName; - + $actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser, 'documentinfo'); $oPortlet = new KTActionPortlet(sprintf(_kt('Document info'))); $oPortlet->setActions($actions, $currentaction); - $this->oPage->addPortlet($oPortlet); - + $this->oPage->addPortlet($oPortlet); + $this->actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser); $oPortlet = new KTActionPortlet(sprintf(_kt('Document actions'), $this->oDocument->getName())); $oPortlet->setActions($this->actions, $currentaction); @@ -100,9 +100,9 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { function do_main() { // fix legacy, broken items. - if (KTUtil::arrayGet($_REQUEST, "fDocumentID", true) !== true) { - $_REQUEST["fDocumentId"] = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, "fDocumentID")); - unset($_REQUEST["fDocumentID"]); + if (KTUtil::arrayGet($_REQUEST, 'fDocumentID', true) !== true) { + $_REQUEST['fDocumentId'] = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fDocumentID')); + unset($_REQUEST['fDocumentID']); } $document_data = array(); @@ -118,7 +118,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { return $this->do_error(); } $document_id = $oDocument->getId(); - $document_data["document_id"] = $oDocument->getId(); + $document_data['document_id'] = $oDocument->getId(); if (!KTBrowseUtil::inAdminMode($this->oUser, $oDocument->getFolderId())) { @@ -143,20 +143,20 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { $this->oPage->setSecondaryTitle($oDocument->getName()); $aOptions = array( - "documentaction" => "viewDocument", - "folderaction" => "browse", + 'documentaction' => 'viewDocument', + 'folderaction' => 'browse', ); $this->oDocument =& $oDocument; $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($oDocument, $aOptions)); - $this->oPage->setBreadcrumbDetails(_kt("document details")); - $this->addPortlets("Document Details"); + $this->oPage->setBreadcrumbDetails(_kt('document details')); + $this->addPortlets('Document Details'); - $document_data["document"] = $oDocument; - $document_data["document_type"] =& DocumentType::get($oDocument->getDocumentTypeID()); + $document_data['document'] = $oDocument; + $document_data['document_type'] =& DocumentType::get($oDocument->getDocumentTypeID()); $is_valid_doctype = true; - if (PEAR::isError($document_data["document_type"])) { + if (PEAR::isError($document_data['document_type'])) { $this->oPage->addError(_kt('The document you requested has an invalid document type. Unfortunately, this means that we cannot effectively display it.')); $is_valid_doctype = false; } @@ -171,7 +171,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { //var_dump($field_values); - $document_data["field_values"] = $field_values; + $document_data['field_values'] = $field_values; // Fieldset generation. // @@ -186,7 +186,9 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); - foreach (KTMetadataUtil::fieldsetsForDocument($oDocument) as $oFieldset) { + $aDocFieldsets = KTMetadataUtil::fieldsetsForDocument($oDocument); + + foreach ($aDocFieldsets as $oFieldset) { $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); array_push($fieldsets, new $displayClass($oFieldset)); } @@ -216,35 +218,35 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { $aViewletActions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser, 'documentviewlet'); foreach ($aViewletActions as $oAction) { $aInfo = $oAction->getInfo(); - + if ($aInfo !== null) { - $aViewlets[] = $oAction->display_viewlet(); // use the action, since we display_viewlet() later. + $aViewlets[] = $oAction->display_viewlet(); // use the action, since we display_viewlet() later. } - } - - $viewlet_data = implode(" ", $aViewlets); + } + + $viewlet_data = implode(' ', $aViewlets); $viewlet_data = trim($viewlet_data); - + $content_class = 'view'; if (!empty($viewlet_data)) { $content_class = 'view withviewlets'; - } + } $this->oPage->setContentClass($content_class); - - + + $oTemplating =& KTTemplating::getSingleton(); - $oTemplate = $oTemplating->loadTemplate("ktcore/document/view"); + $oTemplate = $oTemplating->loadTemplate('ktcore/document/view'); $aTemplateData = array( - "context" => $this, - "sCheckoutUser" => $checkout_user, - "isCheckoutUser" => ($this->oUser->getId() == $oDocument->getCheckedOutUserId()), - "canCheckin" => $bCanCheckin, - "document_id" => $document_id, - "document" => $oDocument, - "documentName" => $oDocument->getName(), - "document_data" => $document_data, - "fieldsets" => $fieldsets, + 'context' => $this, + 'sCheckoutUser' => $checkout_user, + 'isCheckoutUser' => ($this->oUser->getId() == $oDocument->getCheckedOutUserId()), + 'canCheckin' => $bCanCheckin, + 'document_id' => $document_id, + 'document' => $oDocument, + 'documentName' => $oDocument->getName(), + 'document_data' => $document_data, + 'fieldsets' => $fieldsets, 'viewlet_data' => $viewlet_data, ); //return '
' . print_r($aTemplateData, true) . '
'; @@ -256,86 +258,86 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { // fDocumentId (document to compare against) // fComparisonVersion (the metadata_version of the appropriate document) function do_viewComparison() { - + $document_data = array(); $document_id = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fDocumentId')); if ($document_id === null) { $this->oPage->addError(sprintf(_kt("No document was requested. Please browse for one."), KTBrowseUtil::getBrowseBaseUrl())); return $this->do_error(); } - - $document_data["document_id"] = $document_id; - + + $document_data['document_id'] = $document_id; + $base_version = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fBaseVersion')); - + // try get the document. $oDocument =& Document::get($document_id, $base_version); if (PEAR::isError($oDocument)) { $this->oPage->addError(sprintf(_kt("The base document you attempted to retrieve is invalid. Please browse for one."), KTBrowseUtil::getBrowseBaseUrl())); return $this->do_error(); } - + if (!Permission::userHasDocumentReadPermission($oDocument)) { // FIXME inconsistent. $this->oPage->addError(_kt('You are not allowed to view this document')); return $this->permissionDenied(); } - + $this->oDocument =& $oDocument; $this->oPage->setSecondaryTitle($oDocument->getName()); $aOptions = array( - "documentaction" => "viewDocument", - "folderaction" => "browse", + 'documentaction' => 'viewDocument', + 'folderaction' => 'browse', ); - + $this->aBreadcrumbs = kt_array_merge($this->aBreadcrumbs, KTBrowseUtil::breadcrumbsForDocument($oDocument, $aOptions)); - $this->oPage->setBreadcrumbDetails(_kt("compare versions")); - + $this->oPage->setBreadcrumbDetails(_kt('compare versions')); + $comparison_version = sanitizeForSQL(KTUtil::arrayGet($_REQUEST, 'fComparisonVersion')); if ($comparison_version=== null) { $this->oPage->addError(sprintf(_kt("No comparison version was requested. Please select a version."), KTUtil::addQueryStringSelf('action=history&fDocumentId=' . $document_id))); return $this->do_error(); } - + $oComparison =& Document::get($oDocument->getId(), $comparison_version); if (PEAR::isError($oComparison)) { $this->errorRedirectToMain(_kt('Invalid document to compare against.')); } $comparison_data = array(); $comparison_data['document_id'] = $oComparison->getId(); - - $document_data["document"] = $oDocument; + + $document_data['document'] = $oDocument; $comparison_data['document'] = $oComparison; - - $document_data["document_type"] =& DocumentType::get($oDocument->getDocumentTypeID()); - $comparison_data["document_type"] =& DocumentType::get($oComparison->getDocumentTypeID()); - + + $document_data['document_type'] =& DocumentType::get($oDocument->getDocumentTypeID()); + $comparison_data['document_type'] =& DocumentType::get($oComparison->getDocumentTypeID()); + // follow twice: once for normal, once for comparison. $is_valid_doctype = true; - - if (PEAR::isError($document_data["document_type"])) { + + if (PEAR::isError($document_data['document_type'])) { $this->oPage->addError(_kt('The document you requested has an invalid document type. Unfortunately, this means that we cannot effectively display it.')); $is_valid_doctype = false; } - + // we want to grab all the md for this doc, since its faster that way. $mdlist =& DocumentFieldLink::getList(array('metadata_version_id = ?', array($oDocument->getMetadataVersionId()))); - + $field_values = array(); foreach ($mdlist as $oFieldLink) { $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue(); } - - $document_data["field_values"] = $field_values; + + $document_data['field_values'] = $field_values; $mdlist =& DocumentFieldLink::getList(array('metadata_version_id = ?', array($comparison_version))); - + $field_values = array(); foreach ($mdlist as $oFieldLink) { $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue(); } - - $comparison_data["field_values"] = $field_values; - + + $comparison_data['field_values'] = $field_values; + // Fieldset generation. // // we need to create a set of FieldsetDisplay objects @@ -343,47 +345,47 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { // to the view (i.e. ZX3). Unfortunately, we don't have // any of the plumbing to do it, so we handle this here. $fieldsets = array(); - + // we always have a generic. array_push($fieldsets, new GenericFieldsetDisplay()); - + // FIXME can we key this on fieldset namespace? or can we have duplicates? // now we get the other fieldsets, IF there is a valid doctype. - + if ($is_valid_doctype) { // these are the _actual_ fieldsets. $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); - + // and the generics $activesets = KTFieldset::getGenericFieldsets(); foreach ($activesets as $oFieldset) { $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); array_push($fieldsets, new $displayClass($oFieldset)); } - + $activesets = KTFieldset::getForDocumentType($oDocument->getDocumentTypeID()); foreach ($activesets as $oFieldset) { $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); array_push($fieldsets, new $displayClass($oFieldset)); } } - + // FIXME handle ad-hoc fieldsets. $this->addPortlets(); - $oTemplate = $this->oValidator->validateTemplate("ktcore/document/compare"); + $oTemplate = $this->oValidator->validateTemplate('ktcore/document/compare'); $aTemplateData = array( - "context" => $this, - "document_id" => $document_id, - "document" => $oDocument, - "document_data" => $document_data, - "comparison_data" => $comparison_data, - "comparison_document" => $oComparison, - "fieldsets" => $fieldsets, + 'context' => $this, + 'document_id' => $document_id, + 'document' => $oDocument, + 'document_data' => $document_data, + 'comparison_data' => $comparison_data, + 'comparison_document' => $oComparison, + 'fieldsets' => $fieldsets, ); - //var_dump($aTemplateData["comparison_data"]); + //var_dump($aTemplateData['comparison_data']); return $oTemplate->render($aTemplateData); } - + function do_error() { return ' '; // don't actually do anything. } @@ -399,4 +401,4 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { $oDispatcher = new ViewDocumentDispatcher; $oDispatcher->dispatch(); -?> +?> \ No newline at end of file