Commit 3abb1e3b1132f9304931d319cc4bb02264c81a04

Authored by Mark Holtzhausen
2 parents e6499c69 211722fd

Merge branch 'edge' of github.com:ktgit/knowledgetree into edge

ktapi/KTAPIDocument.inc.php
... ... @@ -2211,6 +2211,7 @@ class KTAPI_Document extends KTAPI_FolderItem
2211 2211 $version['user'] = $username;
2212 2212 $version['metadata_version'] = $document->getMetadataVersion();
2213 2213 $version['content_version'] = $document->getVersion();
  2214 + $version['datetime'] = $document->getVersionCreated();
2214 2215 if ($wsversion >= 2)
2215 2216 {
2216 2217 $version['metadata_version'] = (int) $version['metadata_version'];
... ...
lib/documentmanagement/documentutil.inc.php 100644 → 100755
... ... @@ -581,9 +581,100 @@ $sourceDocument->getName(),
581 581 }
582 582 // }}}
583 583  
  584 + /*
  585 + * Function to sanitize the date input from any textual date representation to a valid KT date format
  586 + * - Will check for any string supported by strtotime which can be any US English date format.
  587 + * - Further corrects any quote descrepancies and checks the textual description again.
  588 + * - If still no valid date then takes the integers and separators to produce a best guess.
  589 + */
  590 + function sanitizeDate($sDate) {
  591 +
  592 + //Checking for Normal Strings, e.g. 13 August 2009 etc. All formats accepted by strtotime()
  593 + $datetime = date_create($sDate);
  594 + $resDate = date_format($datetime, 'Y-m-d');
  595 +
  596 + if (!trim($resDate) == '') {
  597 + return $resDate;
  598 + } else {
  599 + //If null then removing quotes e.g. 14'th doesn't yield a valid date but 14th does
  600 + $sDate = str_replace("'", '', $sDate);
  601 + $sDate = str_replace('"', '', $sDate);
  602 +
  603 + $datetime = date_create($sDate);
  604 + $resDate = date_format($datetime, 'Y-m-d');
  605 +
  606 + if (!trim($resDate) == '') {
  607 + return $resDate;
  608 + } else {
  609 + //If null then trying with numeric data
  610 + //Stripping non-numerics
  611 + $sDate = preg_replace('/[^0-9]/', '-', $sDate);
  612 + $token = strpos($sDate, '--');
  613 +
  614 + while ($token != 0)
  615 + {
  616 + $sDate = str_replace('--', '-', $sDate);
  617 + $token = strpos($sDate, '--');
  618 + }
  619 +
  620 + $datetime = date_create($sDate);
  621 + $resDate = date_format($datetime, 'Y-m-d');
  622 +
  623 + return $resDate;
  624 +
  625 + }
  626 + }
  627 + }
  628 +
  629 + // Forcefully sanitize metadata, specifically date values, to account for client tools that submit unvalidated date input
  630 + // Will produce a best effort match to a valid date format.
  631 + function sanitizeMetadata($oDocument, $aMetadata){
  632 + $aFieldsets =& KTFieldset::getGenericFieldsets();
  633 + $aFieldsets =& kt_array_merge($aFieldsets,
  634 + KTFieldset::getForDocumentType($oDocument->getDocumentTypeId()));
  635 + $aSimpleMetadata = array();
  636 + foreach ($aMetadata as $aSingleMetadatum) {
  637 + list($oField, $sValue) = $aSingleMetadatum;
  638 + if (is_null($oField)) {
  639 + continue;
  640 + }
  641 + $aSimpleMetadata[$oField->getId()] = $sValue;
  642 + }
  643 +
  644 + foreach ($aFieldsets as $oFieldset) {
  645 + $aFields =& $oFieldset->getFields();
  646 + $aFieldValues = array();
  647 + foreach ($aFields as $oField) {
  648 + $val = KTUtil::arrayGet($aSimpleMetadata, $oField->getId());
  649 + if (!empty($v)) {
  650 + $aFieldValues[$oField->getId()] = $val;
  651 + }
  652 +
  653 + //Sanitizing Date Values
  654 + if ($oField->getDataType() == 'DATE') {
  655 + $val = KTDocumentUtil::sanitizeDate($val);
  656 + }
  657 +
  658 + if (!is_null($val)) {
  659 + $MDPack[] = array(
  660 + $oField,
  661 + $val
  662 + );
  663 + }
  664 +
  665 + }
  666 + }
  667 +
  668 + return $MDPack;
  669 + }
  670 +
584 671 // {{{ saveMetadata
585 672 function saveMetadata(&$oDocument, $aMetadata, $aOptions = null) {
586 673 $table = 'document_fields_link';
  674 +
  675 + //Sanitizing Date Fields
  676 + $aMetadata = KTDocumentUtil::sanitizeMetadata($oDocument, $aMetadata);
  677 +
587 678 $bNoValidate = KTUtil::arrayGet($aOptions, 'novalidate', false);
588 679 if ($bNoValidate !== true)
589 680 {
... ...