Commit 89cc83c2169e0fb3d2de9616bb04b5756bab1752
Merge branch 'edge' of git@github.com:ktgit/knowledgetree into edge
Showing
16 changed files
with
438 additions
and
55 deletions
ktwebdav/lib/KTWebDAVServer.inc.php
| ... | ... | @@ -361,8 +361,19 @@ class KTWebDAVServer extends HTTP_WebDAV_Server |
| 361 | 361 | |
| 362 | 362 | $this->ktwebdavLog("Exiting $method request", 'info', true); |
| 363 | 363 | |
| 364 | - } | |
| 364 | + if (method_exists($this, $wrapper) && ($method == 'options' || method_exists($this, $method))) { | |
| 365 | + $this->$wrapper(); // call method by name | |
| 366 | + } else { // method not found/implemented | |
| 367 | + if ($_SERVER['REQUEST_METHOD'] == 'LOCK') { | |
| 368 | + $this->http_status('412 Precondition failed'); | |
| 369 | + } else { | |
| 370 | + $this->http_status('405 Method not allowed'); | |
| 371 | + header('Allow: '.join(', ', $this->_allow())); // tell client what's allowed | |
| 372 | + } | |
| 373 | + } | |
| 365 | 374 | |
| 375 | +$this->ktwebdavLog("Exiting $method request", 'info', true); | |
| 376 | +} | |
| 366 | 377 | |
| 367 | 378 | /** |
| 368 | 379 | * check authentication if check is implemented | ... | ... |
lib/documentmanagement/DocumentField.inc
100644 → 100755
| ... | ... | @@ -70,6 +70,8 @@ class DocumentField extends KTEntity { |
| 70 | 70 | var $bHasLookupTree; |
| 71 | 71 | var $bIsMandatory; |
| 72 | 72 | var $iPosition; |
| 73 | + var $bIsHTML; | |
| 74 | + var $iMax; | |
| 73 | 75 | |
| 74 | 76 | var $_aFieldToSelect = array( |
| 75 | 77 | 'iId' => 'id', |
| ... | ... | @@ -82,10 +84,12 @@ class DocumentField extends KTEntity { |
| 82 | 84 | 'iParentFieldset' => 'parent_fieldset', |
| 83 | 85 | 'bIsMandatory' => 'is_mandatory', |
| 84 | 86 | 'iPosition' => 'position', |
| 87 | + 'bIsHTML' => 'is_html', | |
| 88 | + 'iMax' => 'max_length', | |
| 85 | 89 | ); |
| 86 | 90 | |
| 87 | 91 | // FIXME deprecate constructor use. Use DocumentField::createFromArray instead. |
| 88 | - function DocumentField($sNewName = null, $sNewDataType = null, $bNewIsGeneric = null, $bNewHasLookup = null, $iParentFieldset = null, $bHasLookupTree = null) { | |
| 92 | + function DocumentField($sNewName = null, $sNewDataType = null, $bNewIsGeneric = null, $bNewHasLookup = null, $iParentFieldset = null, $bHasLookupTree = null, $bNewIsHTML = null, $iNewMaxLength = null) { | |
| 89 | 93 | |
| 90 | 94 | $this->iId = -1; |
| 91 | 95 | $this->sName = $sNewName; |
| ... | ... | @@ -95,6 +99,8 @@ class DocumentField extends KTEntity { |
| 95 | 99 | $this->iParentFieldset = $iParentFieldset; |
| 96 | 100 | $this->bHasLookupTree = $bHasLookupTree; |
| 97 | 101 | $this->iPosition = $this->getNextFieldPosition($iParentFieldset); |
| 102 | + $this->bIsHTML = $bNewIsHTML; | |
| 103 | + $this->iMax = $iNewMaxLength; | |
| 98 | 104 | } |
| 99 | 105 | |
| 100 | 106 | function getID() { return $this->iId; } |
| ... | ... | @@ -118,6 +124,10 @@ class DocumentField extends KTEntity { |
| 118 | 124 | function setIsMandatory($iNewValue) { $this->bIsMandatory = KTUtil::anyToBool($iNewValue); } |
| 119 | 125 | function getPosition() { return $this->iPosition; } |
| 120 | 126 | function setPosition($iNewValue) { $this->iPosition = $iNewValue; } |
| 127 | + function getIsHTML() { return $this->bIsHTML; } | |
| 128 | + function setIsHTML($iNewValue) { $this->bIsHTML = $iNewValue; } | |
| 129 | + function getMaxLength() { return $this->iMax; } | |
| 130 | + function setMaxLength($iNewValue) { $this->iMax = $iNewValue; } | |
| 121 | 131 | |
| 122 | 132 | function _fieldValues () { |
| 123 | 133 | return array( |
| ... | ... | @@ -130,6 +140,8 @@ class DocumentField extends KTEntity { |
| 130 | 140 | 'has_lookuptree' => KTUtil::anyToBool($this->bHasLookupTree), |
| 131 | 141 | 'is_mandatory' => KTUtil::anyToBool($this->bIsMandatory), |
| 132 | 142 | 'position' => $this->iPosition, |
| 143 | + 'is_html' => KTUtil::anyToBool($this->bIsHTML), | |
| 144 | + 'max_length' => $this->iMax, | |
| 133 | 145 | ); |
| 134 | 146 | } |
| 135 | 147 | ... | ... |
lib/metadata/fieldsetregistry.inc.php
100644 → 100755
| ... | ... | @@ -172,6 +172,16 @@ class KTFieldsetRegistry { |
| 172 | 172 | } else { |
| 173 | 173 | $type = 'ktcore.fields.string'; |
| 174 | 174 | } |
| 175 | + | |
| 176 | + /* ------------------------------------ | |
| 177 | + ---- Changes for Custom Fields ----- | |
| 178 | + ------------------------------------ */ | |
| 179 | + | |
| 180 | + if ($oField->getDataType() == 'LARGE TEXT') { | |
| 181 | + $type = 'ktcore.fields.largetext'; | |
| 182 | + } else if ($oField->getDataType() == 'DATE') { | |
| 183 | + $type = 'ktcore.fields.date'; | |
| 184 | + } | |
| 175 | 185 | |
| 176 | 186 | if ($type == 'ktcore.fields.string') { |
| 177 | 187 | $widgets[] = $this->oWF->get('ktcore.widgets.string', array( |
| ... | ... | @@ -204,6 +214,29 @@ class KTFieldsetRegistry { |
| 204 | 214 | 'vocab' => MetaData::getEnabledByDocumentField($oField), |
| 205 | 215 | 'field_id' => $oField->getId(), |
| 206 | 216 | )); |
| 217 | + } else if ($type == 'ktcore.fields.largetext') { | |
| 218 | + /* ------------------------------------ | |
| 219 | + ---- Changes for Custom Fields ----- | |
| 220 | + ------------------------------------ */ | |
| 221 | + $widgets[] = $this->oWF->get('ktcore.widgets.textarea', array( | |
| 222 | + 'label' => $oField->getName(), | |
| 223 | + 'required' => $oField->getIsMandatory(), | |
| 224 | + 'name' => $fname, | |
| 225 | + 'value' => $value, | |
| 226 | + 'description' => $oField->getDescription(), | |
| 227 | + 'field' => $oField, | |
| 228 | + )); | |
| 229 | + } else if ($type == 'ktcore.fields.date') { | |
| 230 | + /* ------------------------------------ | |
| 231 | + ---- Changes for Custom Fields ----- | |
| 232 | + ------------------------------------ */ | |
| 233 | + $widgets[] = $this->oWF->get('ktcore.widgets.date', array( | |
| 234 | + 'label' => $oField->getName(), | |
| 235 | + 'required' => $oField->getIsMandatory(), | |
| 236 | + 'name' => $fname, | |
| 237 | + 'value' => $value, | |
| 238 | + 'description' => $oField->getDescription(), | |
| 239 | + )); | |
| 207 | 240 | } |
| 208 | 241 | } |
| 209 | 242 | ... | ... |
plugins/ktcore/KTCorePlugin.php
100644 → 100755
| ... | ... | @@ -190,6 +190,10 @@ class KTCorePlugin extends KTPlugin { |
| 190 | 190 | $this->registerWidget('KTCoreTreeMetadataWidget', 'ktcore.widgets.treemetadata', 'KTWidgets.php'); |
| 191 | 191 | $this->registerWidget('KTDescriptorSelectionWidget', 'ktcore.widgets.descriptorselection', 'KTWidgets.php'); |
| 192 | 192 | $this->registerWidget('KTCoreFolderCollectionWidget', 'ktcore.widgets.foldercollection', 'KTWidgets.php'); |
| 193 | + $this->registerWidget('KTCoreFolderCollectionWidget', 'ktcore.widgets.foldercollection', 'KTWidgets.php'); | |
| 194 | + | |
| 195 | + $this->registerWidget('KTCoreTextAreaWidget', 'ktcore.widgets.textarea', 'KTWidgets.php'); | |
| 196 | + $this->registerWidget('KTCoreDateWidget', 'ktcore.widgets.date', 'KTWidgets.php'); | |
| 193 | 197 | |
| 194 | 198 | $this->registerWidget('KTCoreConditionalSelectionWidget', 'ktcore.widgets.conditionalselection', 'KTWidgets.php'); |
| 195 | 199 | |
| ... | ... | @@ -280,6 +284,13 @@ class KTCorePlugin extends KTPlugin { |
| 280 | 284 | _kt('Document Fieldsets'), |
| 281 | 285 | _kt('Manage the different types of information that can be associated with classes of documents.'), |
| 282 | 286 | 'admin/documentFieldsv2.php', null); |
| 287 | + if(KTPluginUtil::pluginIsActive('ktdms.wintools')) | |
| 288 | + { | |
| 289 | + $this->registerAdminPage('emailtypemanagement', 'KTEmailDocumentTypeDispatcher', 'documents', | |
| 290 | + _kt('Email Document Types'), | |
| 291 | + _kt('Manage the addition of Email document types to the system.'), | |
| 292 | + '../wintools/email/emailDocumentTypes.php', null); | |
| 293 | + } | |
| 283 | 294 | $this->registerAdminPage('workflows_2', 'KTWorkflowAdminV2', 'documents', |
| 284 | 295 | _kt('Workflows'), _kt('Configure automated Workflows that map to document life-cycles.'), |
| 285 | 296 | 'admin/workflowsv2.php', null); | ... | ... |
plugins/ktcore/KTWidgets.php
100644 → 100755
| ... | ... | @@ -927,9 +927,30 @@ class KTCoreConditionalSelectionWidget extends KTCoreSelectionWidget { |
| 927 | 927 | ); |
| 928 | 928 | return $oTemplate->render($aTemplateData); |
| 929 | 929 | } |
| 930 | +} | |
| 930 | 931 | |
| 932 | +class KTCoreTextAreaWidget extends KTWidget { | |
| 933 | + var $sNamespace = 'ktcore.widgets.textarea'; | |
| 934 | + var $sTemplate = 'ktcore/forms/widgets/textarea'; | |
| 931 | 935 | |
| 936 | + function configure($aOptions) { | |
| 937 | + $res = parent::configure($aOptions); | |
| 938 | + if (PEAR::isError($res)) { | |
| 939 | + return $res; | |
| 940 | + } | |
| 932 | 941 | |
| 933 | -} | |
| 942 | + // FIXME make required *either* per-action property | |
| 943 | + // FIXME or a global pref. | |
| 944 | + $global_required_default = true; | |
| 945 | + $this->bRequired = KTUtil::arrayGet($aOptions, 'required', $global_required_default, false); | |
| 934 | 946 | |
| 947 | + $this->aOptions['cols'] = KTUtil::arrayGet($aOptions, 'cols', 60); | |
| 948 | + $this->aOptions['rows'] = KTUtil::arrayGet($aOptions, 'rows', 3); | |
| 949 | + $this->aOptions['field'] = KTUtil::arrayGet($aOptions, 'field'); | |
| 950 | + } | |
| 951 | +} | |
| 935 | 952 | |
| 953 | +class KTCoreDateWidget extends KTWidget { | |
| 954 | + var $sNamespace = 'ktcore.widgets.date'; | |
| 955 | + var $sTemplate = 'ktcore/forms/widgets/date'; | |
| 956 | +} | |
| 936 | 957 | \ No newline at end of file | ... | ... |
plugins/ktcore/admin/fieldsets/basic.inc.php
100644 → 100755
| ... | ... | @@ -84,6 +84,8 @@ class BasicFieldsetManagementDispatcher extends KTAdminDispatcher { |
| 84 | 84 | 'normal' => _kt("Normal (String)"), |
| 85 | 85 | 'lookup' => _kt("Lookup"), |
| 86 | 86 | 'tree' => _kt("Tree"), |
| 87 | + 'largetextbox' => _kt("Large Textbox"), | |
| 88 | + 'date' => _kt("Date"), | |
| 87 | 89 | ); |
| 88 | 90 | return $types; |
| 89 | 91 | } |
| ... | ... | @@ -185,17 +187,27 @@ class BasicFieldsetManagementDispatcher extends KTAdminDispatcher { |
| 185 | 187 | $lookup = false; |
| 186 | 188 | $tree = false; |
| 187 | 189 | |
| 190 | + //$largeField = false; | |
| 191 | + | |
| 192 | + $DataType = 'STRING'; | |
| 193 | + | |
| 188 | 194 | if ($data['field_type'] == 'lookup') { |
| 189 | 195 | $lookup = true; |
| 190 | 196 | } else if ($data['field_type'] == 'tree') { |
| 191 | 197 | $lookup = true; |
| 192 | 198 | $tree = true; |
| 193 | - } | |
| 194 | - | |
| 199 | + } else if ($data['field_type'] == 'largetextbox') { | |
| 200 | + //$largeField = true; | |
| 201 | + $DataType = 'LARGE TEXT'; | |
| 202 | + } else if ($data['field_type'] == 'date') { | |
| 203 | + //$largeField = true; | |
| 204 | + $DataType = 'DATE'; | |
| 205 | + } | |
| 206 | + | |
| 195 | 207 | $oField = DocumentField::createFromArray(array( |
| 196 | 208 | 'Name' => $data['name'], |
| 197 | 209 | 'Description' => $data['description'], |
| 198 | - 'DataType' => 'STRING', | |
| 210 | + 'DataType' => $DataType, | |
| 199 | 211 | 'IsGeneric' => false, |
| 200 | 212 | 'HasLookup' => $lookup, |
| 201 | 213 | 'HasLookupTree' => $tree, |
| ... | ... | @@ -276,6 +288,31 @@ class BasicFieldsetManagementDispatcher extends KTAdminDispatcher { |
| 276 | 288 | )); |
| 277 | 289 | return $oTemplate->render(); |
| 278 | 290 | } |
| 291 | + | |
| 292 | + function do_updatelargetextoptions() { | |
| 293 | + | |
| 294 | + $this->oField = DocumentField::get(KTUtil::arrayGet($_REQUEST, 'fFieldId')); | |
| 295 | + | |
| 296 | + $oValues = KTUtil::arrayGet($_REQUEST, 'largefield'); | |
| 297 | + | |
| 298 | + if($oValues['size'] != "") | |
| 299 | + $this->oField->setMaxLength($oValues['size']); | |
| 300 | + | |
| 301 | + $this->oField->setIsHTML($oValues['html']); | |
| 302 | + //$this->oField->setIsHTML(true); | |
| 303 | + | |
| 304 | + //$oValue = $this->oField->_fieldValues(); | |
| 305 | + //$this->successRedirectTo('managefield',_kt("Field updated. -> ") . $this->oField->getMaxLength() . " -> " . $oValue['max_length']); | |
| 306 | + | |
| 307 | + //$this->successRedirectTo('managefield',_kt("Field updated. -> ") . $oValues['html']); | |
| 308 | + | |
| 309 | + $res = $this->oField->update(); | |
| 310 | + if (PEAR::isError($res)) { | |
| 311 | + return $oForm->handleError(sprintf(_kt("Failed to update field: %s"), $res->getMessage())); | |
| 312 | + } | |
| 313 | + | |
| 314 | + $this->successRedirectTo('managefield',_kt("Field updated.")); | |
| 315 | + } | |
| 279 | 316 | |
| 280 | 317 | function do_updatefield() { |
| 281 | 318 | $oForm = $this->form_editfield($this->oField); |
| ... | ... | @@ -287,7 +324,7 @@ class BasicFieldsetManagementDispatcher extends KTAdminDispatcher { |
| 287 | 324 | // check that the field name either hasn't changed, or doesn't exist. |
| 288 | 325 | if ($data['name'] != $this->oField->getName()) { |
| 289 | 326 | $oOldField = DocumentField::getByFieldsetAndName($this->oFieldset, $data['name']); |
| 290 | - // If the field exists throw an error. Mysql doesn't distinguish between Ž and e so check the names are different in php. | |
| 327 | + // If the field exists throw an error. Mysql doesn't distinguish between é and e so check the names are different in php. | |
| 291 | 328 | if (!PEAR::isError($oOldField) && $oOldField->getName() == $data['name']) { |
| 292 | 329 | $extra_errors['name'] = _kt("That name is already in use in this fieldset. Please specify a unique name."); |
| 293 | 330 | } | ... | ... |
plugins/ktcore/admin/workflowsv2.php
| ... | ... | @@ -2367,11 +2367,10 @@ class KTWorkflowAdminV2 extends KTAdminDispatcher { |
| 2367 | 2367 | $allowed = array(); |
| 2368 | 2368 | // Modified Jarrett Jordaan Only notify enabled users |
| 2369 | 2369 | $q = sprintf('name like "%%%s%%" AND disabled = 0', DBUtil::escapeSimple($sFilter)); |
| 2370 | - | |
| 2371 | 2370 | $aUsers = User::getList($q); |
| 2371 | + $q = sprintf('name like "%%%s%%"', DBUtil::escapeSimple($sFilter)); | |
| 2372 | 2372 | $aGroups = Group::getList($q); |
| 2373 | 2373 | $aRoles = Role::getList($q); |
| 2374 | - | |
| 2375 | 2374 | $empty = true; |
| 2376 | 2375 | |
| 2377 | 2376 | if (!PEAR::isError($aUsers)) { | ... | ... |
plugins/ktcore/document/edit.php
100644 → 100755
| ... | ... | @@ -217,6 +217,14 @@ class KTDocumentEditAction extends KTDocumentAction { |
| 217 | 217 | foreach ($fields as $oField) { |
| 218 | 218 | $val = KTUtil::arrayGet($values, 'metadata_' . $oField->getId()); |
| 219 | 219 | |
| 220 | + if($oField->getDataType() == "LARGE TEXT") | |
| 221 | + { | |
| 222 | + if(strlen(strip_tags($val)) > $oField->getMaxLength()) | |
| 223 | + { | |
| 224 | + $oForm->handleError(sprintf(_kt("Value exceeds max allowed length of %d characters for %s. Current value is %d characters."), $oField->getMaxLength(), $oField->getName(), strlen(strip_tags($val)))); | |
| 225 | + } | |
| 226 | + } | |
| 227 | + | |
| 220 | 228 | // FIXME "null" has strange meanings here. |
| 221 | 229 | if (!is_null($val)) { |
| 222 | 230 | $MDPack[] = array( | ... | ... |
search2/search/expr.inc.php
| ... | ... | @@ -298,6 +298,10 @@ class Expr |
| 298 | 298 | return $this instanceof MetadataField; |
| 299 | 299 | } |
| 300 | 300 | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 301 | 305 | public function toViz(&$str, $phase) |
| 302 | 306 | { |
| 303 | 307 | throw new Exception('To be implemented' . get_class($this)); |
| ... | ... | @@ -494,6 +498,7 @@ class DBFieldExpr extends FieldExpr |
| 494 | 498 | protected $matchfield; |
| 495 | 499 | protected $quotedvalue; |
| 496 | 500 | |
| 501 | + | |
| 497 | 502 | /** |
| 498 | 503 | * Constructor for the database field |
| 499 | 504 | * |
| ... | ... | @@ -546,6 +551,7 @@ class DBFieldExpr extends FieldExpr |
| 546 | 551 | return $value; |
| 547 | 552 | } |
| 548 | 553 | |
| 554 | + | |
| 549 | 555 | public function getJoinTable() { return $this->jointable; } |
| 550 | 556 | public function getJoinField() { return $this->joinfield; } |
| 551 | 557 | public function getMatchingField() { return $this->matchfield; } |
| ... | ... | @@ -679,6 +685,9 @@ class ValueExpr extends Expr |
| 679 | 685 | } |
| 680 | 686 | } |
| 681 | 687 | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 682 | 691 | public function getSQL($field, $fieldname, $op, $not=false) |
| 683 | 692 | { |
| 684 | 693 | $val = $this->getValue(); |
| ... | ... | @@ -761,7 +770,7 @@ class ValueExpr extends Expr |
| 761 | 770 | default: |
| 762 | 771 | throw new Exception(sprintf(_kt('Unknown op: %s'), $op)); |
| 763 | 772 | } |
| 764 | - | |
| 773 | + | |
| 765 | 774 | return $sql; |
| 766 | 775 | } |
| 767 | 776 | |
| ... | ... | @@ -792,6 +801,7 @@ class ValueListExpr extends Expr |
| 792 | 801 | $this->values[] = $value; |
| 793 | 802 | } |
| 794 | 803 | |
| 804 | + | |
| 795 | 805 | public function getValue($param=null) |
| 796 | 806 | { |
| 797 | 807 | if (!empty($param)) |
| ... | ... | @@ -837,6 +847,8 @@ class ValueListExpr extends Expr |
| 837 | 847 | } |
| 838 | 848 | } |
| 839 | 849 | |
| 850 | + | |
| 851 | + | |
| 840 | 852 | public function rewrite(&$left, &$op, &$right, &$not) |
| 841 | 853 | { |
| 842 | 854 | if (count($this->values) == 1) |
| ... | ... | @@ -866,6 +878,7 @@ class ValueListExpr extends Expr |
| 866 | 878 | |
| 867 | 879 | } |
| 868 | 880 | |
| 881 | + | |
| 869 | 882 | class BetweenValueExpr extends ValueExpr |
| 870 | 883 | { |
| 871 | 884 | protected $endvalue; |
| ... | ... | @@ -1018,7 +1031,7 @@ class TextQueryBuilder implements QueryBuilder |
| 1018 | 1031 | else |
| 1019 | 1032 | $query .= "$not$fieldname:$value"; |
| 1020 | 1033 | } |
| 1021 | - | |
| 1034 | + | |
| 1022 | 1035 | return $query; |
| 1023 | 1036 | } |
| 1024 | 1037 | |
| ... | ... | @@ -1089,7 +1102,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1089 | 1102 | 'tag_words'=>'tw', |
| 1090 | 1103 | 'document_fields_link'=>'pdfl' |
| 1091 | 1104 | ); |
| 1092 | - break; | |
| 1105 | + break; | |
| 1093 | 1106 | case ExprContext::FOLDER: |
| 1094 | 1107 | $this->used_tables = array( |
| 1095 | 1108 | 'folders'=>1, |
| ... | ... | @@ -1098,7 +1111,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1098 | 1111 | $this->aliases = array( |
| 1099 | 1112 | 'folders'=>'f', |
| 1100 | 1113 | ); |
| 1101 | - break; | |
| 1114 | + break; | |
| 1102 | 1115 | default: |
| 1103 | 1116 | throw new Exception('This was not expected - Context = ' . $context); |
| 1104 | 1117 | } |
| ... | ... | @@ -1123,7 +1136,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1123 | 1136 | /** |
| 1124 | 1137 | * This looks up a table name to find the appropriate alias. |
| 1125 | 1138 | * |
| 1126 | - * @access private | |
| 1139 | + * @access private | |
| 1127 | 1140 | * @param string $tablename |
| 1128 | 1141 | * @return string |
| 1129 | 1142 | */ |
| ... | ... | @@ -1147,7 +1160,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1147 | 1160 | */ |
| 1148 | 1161 | private function exploreExprs($expr, $parent=null) |
| 1149 | 1162 | { |
| 1150 | - if ($expr->isMetadataField()) | |
| 1163 | + if ($expr->isMetadataField()) | |
| 1151 | 1164 | { |
| 1152 | 1165 | $this->metadata[] = & $parent; |
| 1153 | 1166 | } |
| ... | ... | @@ -1180,7 +1193,6 @@ class SQLQueryBuilder implements QueryBuilder |
| 1180 | 1193 | } |
| 1181 | 1194 | } |
| 1182 | 1195 | } |
| 1183 | - | |
| 1184 | 1196 | /** |
| 1185 | 1197 | * Determine table usage for a simple (metadata) query |
| 1186 | 1198 | * |
| ... | ... | @@ -1284,7 +1296,6 @@ class SQLQueryBuilder implements QueryBuilder |
| 1284 | 1296 | $query = $right->getSQL($left, $left->modifyName($fieldname), $expr->op(), $isNot); |
| 1285 | 1297 | } |
| 1286 | 1298 | } |
| 1287 | - | |
| 1288 | 1299 | return $query; |
| 1289 | 1300 | } |
| 1290 | 1301 | |
| ... | ... | @@ -1374,11 +1385,10 @@ class SQLQueryBuilder implements QueryBuilder |
| 1374 | 1385 | // . 'ON dmv.id=pdfl' . $counter . '.metadata_version_id ' . "\n"; |
| 1375 | 1386 | // } |
| 1376 | 1387 | // } |
| 1377 | - | |
| 1378 | 1388 | if ($this->used_tables['tag_words'] > 0) |
| 1379 | 1389 | { |
| 1380 | - $sql .= ' LEFT OUTER JOIN document_tags dt ON dt.document_id=d.id ' . "\n" | |
| 1381 | - . ' LEFT OUTER JOIN tag_words tw ON dt.tag_id = tw.id ' . "\n"; | |
| 1390 | + $sql .= ' LEFT OUTER JOIN document_tags dt ON dt.document_id=d.id ' . "\n" . | |
| 1391 | + ' LEFT OUTER JOIN tag_words tw ON dt.tag_id = tw.id ' . "\n"; | |
| 1382 | 1392 | } |
| 1383 | 1393 | } |
| 1384 | 1394 | else |
| ... | ... | @@ -1452,7 +1462,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1452 | 1462 | $sql .= "f.linked_folder_id is null"; |
| 1453 | 1463 | } |
| 1454 | 1464 | $sql .= ' AND '; |
| 1455 | - | |
| 1465 | + | |
| 1456 | 1466 | return $sql; |
| 1457 | 1467 | } |
| 1458 | 1468 | |
| ... | ... | @@ -1515,7 +1525,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1515 | 1525 | $query = 'false'; |
| 1516 | 1526 | } |
| 1517 | 1527 | } |
| 1518 | - | |
| 1528 | + | |
| 1519 | 1529 | return $query; |
| 1520 | 1530 | } |
| 1521 | 1531 | |
| ... | ... | @@ -1537,7 +1547,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1537 | 1547 | { |
| 1538 | 1548 | return ''; |
| 1539 | 1549 | } |
| 1540 | - | |
| 1550 | + | |
| 1541 | 1551 | $expr = $this->buildCoreSQLExpr($expr); |
| 1542 | 1552 | $sql .= $expr; |
| 1543 | 1553 | |
| ... | ... | @@ -1546,7 +1556,7 @@ class SQLQueryBuilder implements QueryBuilder |
| 1546 | 1556 | |
| 1547 | 1557 | $sql .= " limit $maxSqlResults"; |
| 1548 | 1558 | |
| 1549 | - return $sql; | |
| 1559 | + return $sql; | |
| 1550 | 1560 | } |
| 1551 | 1561 | |
| 1552 | 1562 | /** |
| ... | ... | @@ -1573,17 +1583,18 @@ class SQLQueryBuilder implements QueryBuilder |
| 1573 | 1583 | $field = $expr->left(); |
| 1574 | 1584 | |
| 1575 | 1585 | if (is_null($field->getJoinTable())) |
| 1576 | - { | |
| 1577 | - $alias = $this->resolveTableToAlias($field->getTable()); | |
| 1578 | - $fieldname = $alias . '.' . $field->getField(); | |
| 1579 | - } | |
| 1580 | - else | |
| 1581 | - { | |
| 1582 | - $offset = $this->resolveJoinOffset($expr); | |
| 1583 | - $matching = $field->getMatchingField(); | |
| 1584 | - $tablename = $field->getJoinTable(); | |
| 1585 | - $fieldname = "$tablename$offset.$matching"; | |
| 1586 | - } | |
| 1586 | + { | |
| 1587 | + $alias = $this->resolveTableToAlias($field->getTable()); | |
| 1588 | + $fieldname = $alias . '.' . $field->getField(); | |
| 1589 | + } | |
| 1590 | + else | |
| 1591 | + { | |
| 1592 | + $offset = $this->resolveJoinOffset($expr); | |
| 1593 | + $matching = $field->getMatchingField(); | |
| 1594 | + $tablename = $field->getJoinTable(); | |
| 1595 | + $fieldname = "$tablename$offset.$matching"; | |
| 1596 | + } | |
| 1597 | + | |
| 1587 | 1598 | |
| 1588 | 1599 | $value = $expr->right(); |
| 1589 | 1600 | $sql .= $value->getSQL($field, $left->modifyName($fieldname), $expr->op(), $expr->not()); |
| ... | ... | @@ -1688,6 +1699,8 @@ class SQLQueryBuilder implements QueryBuilder |
| 1688 | 1699 | } |
| 1689 | 1700 | } |
| 1690 | 1701 | |
| 1702 | + | |
| 1703 | + | |
| 1691 | 1704 | class OpExpr extends Expr |
| 1692 | 1705 | { |
| 1693 | 1706 | /** |
| ... | ... | @@ -2323,6 +2336,107 @@ class OpExpr extends Expr |
| 2323 | 2336 | $this->exploreItem($right, $group, $interest); |
| 2324 | 2337 | } |
| 2325 | 2338 | |
| 2339 | + public function checkComplexQuery($expr) | |
| 2340 | + { | |
| 2341 | + $left = $expr->left(); | |
| 2342 | + $right = $expr->right(); | |
| 2343 | + | |
| 2344 | + $oCriteria = array(); | |
| 2345 | + | |
| 2346 | + if (DefaultOpCollection::isBoolean($expr)) | |
| 2347 | + { | |
| 2348 | + //$query = '(' . $this->buildComplexQuery($left) . ' ' . $expr->op() . ' ' . $this->buildComplexQuery($right) . ')'; | |
| 2349 | + $iCriteria = $this->checkComplexQuery($left); | |
| 2350 | + if(!empty($iCriteria)) | |
| 2351 | + //$oCriteria = $iCriteria; | |
| 2352 | + $oCriteria[] = $iCriteria; | |
| 2353 | + | |
| 2354 | + $iCriteria = $this->checkComplexQuery($right); | |
| 2355 | + if(!empty($iCriteria)) | |
| 2356 | + //$oCriteria = array_merge($oCriteria, $iCriteria); | |
| 2357 | + $oCriteria[] = $iCriteria; | |
| 2358 | + | |
| 2359 | + /*if ($expr->not()) | |
| 2360 | + { | |
| 2361 | + $query = "NOT $query"; | |
| 2362 | + }*/ | |
| 2363 | + } | |
| 2364 | + else | |
| 2365 | + { | |
| 2366 | + $fieldname = $left->getField(); | |
| 2367 | + $value = addslashes($right->getValue()); | |
| 2368 | + | |
| 2369 | + //$not = $expr->not()?' NOT ':''; | |
| 2370 | + if (empty($value)) | |
| 2371 | + { | |
| 2372 | + // minor hack to prevent the case of 'field:'. results are no 'field:""' | |
| 2373 | + $value = ' '; | |
| 2374 | + } | |
| 2375 | + | |
| 2376 | + $rsField = DBUtil::getResultArray("SELECT * FROM document_fields WHERE name = \"$fieldname\";"); | |
| 2377 | + | |
| 2378 | + if($rsField[0]['data_type'] == 'LARGE TEXT') | |
| 2379 | + { | |
| 2380 | + $iCriteria = array(); | |
| 2381 | + | |
| 2382 | + $iCriteria[0] = array(); | |
| 2383 | + | |
| 2384 | + $iCriteria[0]['field'] = $fieldname; | |
| 2385 | + $iCriteria[0]['value'] = $value; | |
| 2386 | + $iCriteria[0]['not'] = $expr->not(); | |
| 2387 | + | |
| 2388 | + $oCriteria[] = $iCriteria[0]; | |
| 2389 | + } | |
| 2390 | + | |
| 2391 | + //global $default; | |
| 2392 | + //$default->log->debug("FIELD-TYPE: " . $iCriteria[0]['field']); | |
| 2393 | + //$default->log->debug("FIELD-TYPE: " . $oCriteria[0]['field']); | |
| 2394 | + | |
| 2395 | + /*if (strpos($value, ' ') === false) | |
| 2396 | + { | |
| 2397 | + $query = "$not$fieldname:$value"; | |
| 2398 | + } | |
| 2399 | + else | |
| 2400 | + { | |
| 2401 | + $query = "$not$fieldname:\"$value\""; | |
| 2402 | + }*/ | |
| 2403 | + } | |
| 2404 | + | |
| 2405 | + return $oCriteria; | |
| 2406 | + } | |
| 2407 | + | |
| 2408 | + public function checkValues($document_id, $oColumns) | |
| 2409 | + { | |
| 2410 | + | |
| 2411 | + foreach($oColumns as $column) | |
| 2412 | + { | |
| 2413 | + $rsField = DBUtil::getResultArray("SELECT df.name, dfl.value FROM documents d | |
| 2414 | + INNER JOIN document_metadata_version dmv ON d.metadata_version_id=dmv.id | |
| 2415 | + INNER JOIN document_fields_link dfl ON dfl.metadata_version_id=d.metadata_version_id | |
| 2416 | + INNER JOIN document_fields df ON df.id = dfl.document_field_id AND df.name = '" . $column['field'] . "' | |
| 2417 | + WHERE d.id = $document_id;"); | |
| 2418 | + | |
| 2419 | + /*global $default; | |
| 2420 | + $default->log->debug("MATCH QUERY: SELECT df.name, dfl.value FROM documents d | |
| 2421 | + INNER JOIN document_metadata_version dmv ON d.metadata_version_id=dmv.id | |
| 2422 | + INNER JOIN document_fields_link dfl ON dfl.metadata_version_id=d.metadata_version_id | |
| 2423 | + INNER JOIN document_fields df ON df.id = dfl.document_field_id AND df.name = '" . $column['field'] . "' | |
| 2424 | + WHERE d.id = $document_id;"); | |
| 2425 | + | |
| 2426 | + $default->log->debug("MATCH: $document_id, " . $column['field'] . ", " . $rsField[0]['value'] . ", " . $column['value'] . " - " | |
| 2427 | + . strip_tags($rsField[0]['value']));*/ | |
| 2428 | + | |
| 2429 | + $position = strpos(strtolower(strip_tags($rsField[0]['value'])), strtolower($column['value'])); | |
| 2430 | + | |
| 2431 | + //$default->log->debug("POSITION: " . $position); | |
| 2432 | + | |
| 2433 | + if($position === false) | |
| 2434 | + return false; | |
| 2435 | + } | |
| 2436 | + | |
| 2437 | + return true; | |
| 2438 | + } | |
| 2439 | + | |
| 2326 | 2440 | /** |
| 2327 | 2441 | * Executes a database query |
| 2328 | 2442 | * |
| ... | ... | @@ -2337,7 +2451,7 @@ class OpExpr extends Expr |
| 2337 | 2451 | if (empty($group)) { return array(); } |
| 2338 | 2452 | |
| 2339 | 2453 | $exprbuilder = new SQLQueryBuilder($this->getContext()); |
| 2340 | - $exprbuilder->setIncludeStatus($this->incl_status); | |
| 2454 | + $exprbuilder->setIncludeStatus($this->incl_status); | |
| 2341 | 2455 | |
| 2342 | 2456 | if (count($group) == 1) |
| 2343 | 2457 | { |
| ... | ... | @@ -2363,15 +2477,66 @@ class OpExpr extends Expr |
| 2363 | 2477 | throw new Exception($rs->getMessage()); |
| 2364 | 2478 | } |
| 2365 | 2479 | |
| 2480 | + if (count($group) == 1) | |
| 2481 | + { | |
| 2482 | + //$default->log->debug("CASE 1"); | |
| 2483 | + | |
| 2484 | + $oCriteria = $this->checkComplexQuery($group[0]); | |
| 2485 | + } | |
| 2486 | + else | |
| 2487 | + { | |
| 2488 | + //$default->log->debug("CASE 2"); | |
| 2489 | + | |
| 2490 | + foreach($group as $expr) | |
| 2491 | + { | |
| 2492 | + $left = $expr->left(); | |
| 2493 | + $right = $expr->right(); | |
| 2494 | + | |
| 2495 | + $default->log->debug("FIELD-IS: " . $left->isOpExpr()); | |
| 2496 | + | |
| 2497 | + $fieldname = $left->getField(); | |
| 2498 | + $value = addslashes($right->getValue()); | |
| 2499 | + | |
| 2500 | + $rsField = DBUtil::getResultArray("SELECT * FROM document_fields WHERE name = \"$fieldname\";"); | |
| 2501 | + | |
| 2502 | + if($rsField[0]['data_type'] == 'LARGE TEXT') | |
| 2503 | + { | |
| 2504 | + $iCriteria = array(); | |
| 2505 | + | |
| 2506 | + $iCriteria[0] = array(); | |
| 2507 | + | |
| 2508 | + $iCriteria[0]['field'] = $fieldname; | |
| 2509 | + $iCriteria[0]['value'] = $value; | |
| 2510 | + $iCriteria[0]['not'] = $expr->not(); | |
| 2511 | + | |
| 2512 | + $oCriteria[] = $iCriteria[0]; | |
| 2513 | + | |
| 2514 | + /*$not = $expr->not()?' NOT ':''; | |
| 2515 | + | |
| 2516 | + if (strpos($value, ' ') !== false) | |
| 2517 | + $default->log->debug("CRITERION: $not$fieldname:\"$value\""); | |
| 2518 | + else | |
| 2519 | + $default->log->debug("CRITERION: $not$fieldname:$value");*/ | |
| 2520 | + } | |
| 2521 | + | |
| 2522 | + //$default->log->debug("FIELD-TYPE: " . $oCriteria[0]['field']); | |
| 2523 | + } | |
| 2524 | + } | |
| 2525 | + | |
| 2526 | + //$default->log->debug("TOTAL CRITERIA: " . count($oCriteria)); | |
| 2527 | + | |
| 2366 | 2528 | foreach($rs as $item) |
| 2367 | 2529 | { |
| 2368 | 2530 | $id = $item['id']; |
| 2369 | 2531 | $rank = $exprbuilder->getRanking($item); |
| 2370 | 2532 | if (!array_key_exists($id, $results) || $rank > $results[$id]->Rank) |
| 2371 | 2533 | { |
| 2372 | - if ($this->context == ExprContext::DOCUMENT) | |
| 2534 | + if ($this->context == ExprContext::DOCUMENT) | |
| 2373 | 2535 | { |
| 2374 | - $results[$id] = new DocumentResultItem($id, $rank, $item['title'], $exprbuilder->getResultText($item), null, $this->incl_status); | |
| 2536 | + if((count($oCriteria) > 0 && $this->checkValues($id, $oCriteria)) || count($oCriteria) == 0) | |
| 2537 | + { | |
| 2538 | + $results[$id] = new DocumentResultItem($id, $rank, $item['title'], $exprbuilder->getResultText($item), null, $this->incl_status); | |
| 2539 | + } | |
| 2375 | 2540 | } |
| 2376 | 2541 | else |
| 2377 | 2542 | { |
| ... | ... | @@ -2379,9 +2544,8 @@ class OpExpr extends Expr |
| 2379 | 2544 | } |
| 2380 | 2545 | } |
| 2381 | 2546 | } |
| 2382 | - | |
| 2547 | + | |
| 2383 | 2548 | return $results; |
| 2384 | - | |
| 2385 | 2549 | } |
| 2386 | 2550 | |
| 2387 | 2551 | /** |
| ... | ... | @@ -2425,6 +2589,7 @@ class OpExpr extends Expr |
| 2425 | 2589 | $indexer = Indexer::get(); |
| 2426 | 2590 | $indexer->setIncludeStatus($this->incl_status); |
| 2427 | 2591 | |
| 2592 | + global $default; | |
| 2428 | 2593 | $default->log->debug("SEARCH LUCENE: $query"); |
| 2429 | 2594 | |
| 2430 | 2595 | $results = $indexer->query($query); |
| ... | ... | @@ -2446,8 +2611,12 @@ class OpExpr extends Expr |
| 2446 | 2611 | */ |
| 2447 | 2612 | public function evaluate($context = ExprContext::DOCUMENT_AND_FOLDER) |
| 2448 | 2613 | { |
| 2449 | - if ($context == ExprContext::DOCUMENT_AND_FOLDER) | |
| 2450 | - { | |
| 2614 | + | |
| 2615 | + global $default; | |
| 2616 | + $default->log->debug("START EVALUATE"); | |
| 2617 | + | |
| 2618 | + if ($context == ExprContext::DOCUMENT_AND_FOLDER) | |
| 2619 | + { | |
| 2451 | 2620 | $docs = $this->evaluate(ExprContext::DOCUMENT); |
| 2452 | 2621 | $folders = $this->evaluate(ExprContext::FOLDER); |
| 2453 | 2622 | |
| ... | ... | @@ -2455,7 +2624,8 @@ class OpExpr extends Expr |
| 2455 | 2624 | 'docs' => $docs['docs'], |
| 2456 | 2625 | 'folders' => $folders['folders']); |
| 2457 | 2626 | } |
| 2458 | - $this->setContext($context); | |
| 2627 | + | |
| 2628 | + $this->setContext($context); | |
| 2459 | 2629 | |
| 2460 | 2630 | $left = $this->left(); |
| 2461 | 2631 | $left->setIncludeStatus($this->incl_status); |
| ... | ... | @@ -2469,7 +2639,7 @@ class OpExpr extends Expr |
| 2469 | 2639 | $point = 'point'; |
| 2470 | 2640 | } |
| 2471 | 2641 | $resultContext = ($this->getContext() == ExprContext::DOCUMENT)?'docs':'folders'; |
| 2472 | - | |
| 2642 | + | |
| 2473 | 2643 | if ($point == 'merge') |
| 2474 | 2644 | { |
| 2475 | 2645 | $leftres = $left->evaluate($context); |
| ... | ... | @@ -2572,4 +2742,4 @@ class OpExpr extends Expr |
| 2572 | 2742 | } |
| 2573 | 2743 | } |
| 2574 | 2744 | |
| 2575 | 2745 | -?> |
| 2746 | +?> | |
| 2576 | 2747 | \ No newline at end of file | ... | ... |
sql/mysql/install/data.sql
| ... | ... | @@ -313,7 +313,9 @@ INSERT INTO `data_types` VALUES |
| 313 | 313 | (2,'CHAR'), |
| 314 | 314 | (3,'TEXT'), |
| 315 | 315 | (4,'INT'), |
| 316 | -(5,'FLOAT'); | |
| 316 | +(5,'FLOAT'), | |
| 317 | +(6,'LARGE TEXT'), | |
| 318 | +(7,'DATE'); | |
| 317 | 319 | /*!40000 ALTER TABLE `data_types` ENABLE KEYS */; |
| 318 | 320 | UNLOCK TABLES; |
| 319 | 321 | |
| ... | ... | @@ -360,10 +362,10 @@ UNLOCK TABLES; |
| 360 | 362 | LOCK TABLES `document_fields` WRITE; |
| 361 | 363 | /*!40000 ALTER TABLE `document_fields` DISABLE KEYS */; |
| 362 | 364 | INSERT INTO `document_fields` VALUES |
| 363 | -(2,'Tag','STRING',0,0,0,2,0,'Tag Words',0), | |
| 364 | -(3,'Document Author','STRING',0,0,0,3,0,'Please add a document author',0), | |
| 365 | -(4,'Category','STRING',0,1,0,3,0,'Please select a category',1), | |
| 366 | -(5,'Media Type','STRING',0,1,0,3,0,'Please select a media type',2); | |
| 365 | +(2,'Tag','STRING',0,0,0,2,0,'Tag Words',0,null,null), | |
| 366 | +(3,'Document Author','STRING',0,0,0,3,0,'Please add a document author',0,null,null), | |
| 367 | +(4,'Category','STRING',0,1,0,3,0,'Please select a category',1,null,null), | |
| 368 | +(5,'Media Type','STRING',0,1,0,3,0,'Please select a media type',2,null,null); | |
| 367 | 369 | /*!40000 ALTER TABLE `document_fields` ENABLE KEYS */; |
| 368 | 370 | UNLOCK TABLES; |
| 369 | 371 | |
| ... | ... | @@ -1758,8 +1760,10 @@ INSERT INTO `upgrades` VALUES |
| 1758 | 1760 | (219,'upgrade*3.6.0*99*upgrade3.6.0','Upgrade from version 3.5.4a to 3.6.0','2009-01-01 00:00:00',1,'upgrade*3.6.0*99*upgrade3.6.0'), |
| 1759 | 1761 | (220, 'sql*3.6.1*0*3.6.1/search_ranking.sql', 'Database upgrade to version 3.6.1: Search ranking','2009-04-01 00:00:00',1,'upgrade*3.6.1*99*upgrade3.6.1'), |
| 1760 | 1762 | (221,'upgrade*3.6.1*99*upgrade3.6.1','Upgrade from version 3.6.0 to 3.6.1','2009-04-01 00:00:00',1,'upgrade*3.6.1*99*upgrade3.6.1'), |
| 1761 | -(222,'upgrade*3.6.2*99*upgrade3.6.2','Upgrade from version 3.6.1 to 3.6.2','2009-05-01 00:00:00',1,'upgrade*3.6.2*99*upgrade3.6.2'), | |
| 1762 | -(223,'upgrade*3.6.3*99*upgrade3.6.3','Upgrade from version 3.6.2 to 3.6.3','2009-06-01 00:00:00',1,'upgrade*3.6.3*99*upgrade3.6.3'); | |
| 1763 | +(222, 'sql*3.6.2*0*3.6.2/folders.sql', 'Folder created and modified timestamp fix','2009-05-01 00:00:00',1,'upgrade*3.6.2*99*upgrade3.6.2'), | |
| 1764 | +(223, 'sql*3.6.2*0*3.6.2/data_types.sql', 'Add large text and date fields','2009-05-01 00:00:00',1,'upgrade*3.6.2*99*upgrade3.6.2'), | |
| 1765 | +(224,'upgrade*3.6.2*99*upgrade3.6.2','Upgrade from version 3.6.1 to 3.6.2','2009-05-01 00:00:00',1,'upgrade*3.6.2*99*upgrade3.6.2'), | |
| 1766 | +(225,'upgrade*3.6.3*99*upgrade3.6.3','Upgrade from version 3.6.2 to 3.6.3','2009-06-01 00:00:00',1,'upgrade*3.6.3*99*upgrade3.6.3'); | |
| 1763 | 1767 | /*!40000 ALTER TABLE `upgrades` ENABLE KEYS */; |
| 1764 | 1768 | UNLOCK TABLES; |
| 1765 | 1769 | |
| ... | ... | @@ -2690,7 +2694,7 @@ UNLOCK TABLES; |
| 2690 | 2694 | LOCK TABLES `zseq_upgrades` WRITE; |
| 2691 | 2695 | /*!40000 ALTER TABLE `zseq_upgrades` DISABLE KEYS */; |
| 2692 | 2696 | INSERT INTO `zseq_upgrades` VALUES |
| 2693 | -(223); | |
| 2697 | +(225); | |
| 2694 | 2698 | /*!40000 ALTER TABLE `zseq_upgrades` ENABLE KEYS */; |
| 2695 | 2699 | UNLOCK TABLES; |
| 2696 | 2700 | ... | ... |
sql/mysql/install/structure.sql
| ... | ... | @@ -314,6 +314,8 @@ CREATE TABLE `document_fields` ( |
| 314 | 314 | `is_mandatory` tinyint(1) NOT NULL default '0', |
| 315 | 315 | `description` mediumtext NOT NULL, |
| 316 | 316 | `position` int(11) NOT NULL default '0', |
| 317 | + `is_html` tinyint(1) default null, | |
| 318 | + `max_length` int default null, | |
| 317 | 319 | PRIMARY KEY (`id`), |
| 318 | 320 | KEY `parent_fieldset` (`parent_fieldset`), |
| 319 | 321 | CONSTRAINT `document_fields_ibfk_1` FOREIGN KEY (`parent_fieldset`) REFERENCES `fieldsets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE | ... | ... |
sql/mysql/upgrade/3.6.2/data_types.sql
0 → 100755
templates/kt3/fieldsets/simple.smarty
100644 → 100755
templates/ktcore/forms/widgets/selection.smarty
| 1 | 1 | {if empty($vocab)} |
| 2 | 2 | <div class="ktInfoMessage"><span>{$context->sEmptyMessage}</span></div> |
| 3 | 3 | {else} |
| 4 | - <select name="{$name}" | |
| 4 | + <select name="{$name}{if $options.multi}[]{/if}" | |
| 5 | 5 | {if $has_id}id="{$id}"{/if} |
| 6 | 6 | {if $options.multi}multiple="true"{/if} |
| 7 | 7 | > |
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | {/if} |
| 11 | 11 | {foreach item=lookup key=lookup_key from=$vocab} |
| 12 | 12 | |
| 13 | - <option value="{$lookup_key|sanitize}" {if ($value == $lookup_key)}selected="selected"{/if}>{$lookup|sanitize}</option> | |
| 13 | + <option value="{$lookup_key|sanitize}" {if $context->selected($lookup_key)}selected="selected"{/if}>{$lookup|sanitize}</option> | |
| 14 | 14 | {/foreach} |
| 15 | 15 | </select> |
| 16 | 16 | {/if} | ... | ... |
templates/ktcore/forms/widgets/textarea.smarty
0 → 100755
| 1 | +<!-------------------------------------- | |
| 2 | + ---- Changes for Custom Fields ----- | |
| 3 | + --------------------------------------> | |
| 4 | +<div name="div_{$name}" id="div_{$name}"></div> | |
| 5 | + | |
| 6 | +{literal} | |
| 7 | +<link rel="stylesheet" type="text/css" href="/thirdpartyjs/extjs/resources/css/ext-all.css"> | |
| 8 | + | |
| 9 | +<script type="text/javascript" src="/thirdpartyjs/extjs/adapter/ext/ext-base.js"></script> | |
| 10 | +<script type="text/javascript" src="/thirdpartyjs/extjs/ext-all.js"></script> | |
| 11 | +<script type="text/javascript"> | |
| 12 | + | |
| 13 | +Ext.BLANK_IMAGE_URL = '/thirdpartyjs/extjs/resources/images/default/s.gif'; | |
| 14 | + | |
| 15 | +Ext.onReady(function(){ | |
| 16 | + | |
| 17 | + Ext.QuickTips.init(); | |
| 18 | + | |
| 19 | + var dp = new Ext.form.DateField({ | |
| 20 | + name: '{/literal}{$name}{literal}', | |
| 21 | + allowBlank:false, | |
| 22 | + size:10, | |
| 23 | + format: 'Y-m-d', | |
| 24 | + fieldClass: 'metadatadate' | |
| 25 | + {/literal}{if $has_value},value: '{$value|sanitize_input}'{/if}{literal} | |
| 26 | + }); | |
| 27 | + | |
| 28 | + dp.render('div_{/literal}{$name}{literal}'); | |
| 29 | +}); | |
| 30 | + | |
| 31 | +</script> | |
| 32 | + | |
| 33 | +{/literal} | |
| 0 | 34 | \ No newline at end of file | ... | ... |
templates/ktcore/metadata/admin/manage_field.smarty
100644 → 100755
| ... | ... | @@ -24,6 +24,9 @@ aspects of this particular field.{/i18n}</p> |
| 24 | 24 | {if ($field->getHasLookup())} |
| 25 | 25 | <div class="twocolumn"> |
| 26 | 26 | {/if} |
| 27 | +{if ($field->getDataType() == "LARGE TEXT")} | |
| 28 | +<div class="twocolumn"> | |
| 29 | +{/if} | |
| 27 | 30 | {$form->render()} |
| 28 | 31 | {if ($field->getHasLookup())} |
| 29 | 32 | </div> |
| ... | ... | @@ -48,4 +51,38 @@ available.{/i18n}</p> |
| 48 | 51 | </fieldset> |
| 49 | 52 | </div> |
| 50 | 53 | {/if} |
| 54 | +{if ($field->getDataType() == "LARGE TEXT")} | |
| 55 | +</div> | |
| 56 | +<div class="twocolumn second"> | |
| 57 | +<fieldset> | |
| 58 | +<legend>{i18n}Extra Options{/i18n}</legend> | |
| 59 | + | |
| 60 | +<p class="descriptiveText">{i18n}Different fields have different actions and options | |
| 61 | +available.{/i18n}</p> | |
| 62 | + | |
| 63 | +<form method="POST" action="/admin.php?kt_path_info=documents/fieldmanagement2&fieldset_action=updatelargetextoptions&fFieldId={$field_id}&fFieldsetId={$field->getParentFieldsetId()}&action=edit"> | |
| 64 | + | |
| 65 | +<div class="field"> | |
| 66 | +<label for="largefield[size]">Max Length</label> | |
| 67 | +<p class="descriptiveText">Maximum length allowed for the field.</p> | |
| 68 | +<p class="errorMessage"></p> | |
| 69 | +<input type="text" name="largefield[size]" value="{$field->getMaxLength()}" size="3" /> | |
| 70 | +</div> | |
| 71 | + | |
| 72 | +<div class="field "> | |
| 73 | +<label for="largefield[html]">HTML</label> | |
| 74 | +<p class="descriptiveText">Defines the format of the field.</p> | |
| 75 | +<p class="errorMessage"></p> | |
| 76 | +<input type="checkbox" name="largefield[html]" {if $field->getIsHTML()==1}checked="true"{/if} class="noborder"/> | |
| 77 | +</div> | |
| 78 | + | |
| 79 | +<div class="form_actions"> | |
| 80 | +<input type="submit" name="" value="Update Options" /> | |
| 81 | +</div> | |
| 82 | + | |
| 83 | +</form> | |
| 84 | + | |
| 85 | +</fieldset> | |
| 86 | +</div> | |
| 87 | +{/if} | |
| 51 | 88 | <hr class="floatClear" /> | ... | ... |