CWIS Developer Documentation
HumanMetadataField.php
Go to the documentation of this file.
1 <?PHP
2 #
3 # FILE: ItemFactory.php
4 #
5 # Part of the Collection Workflow Integration System (CWIS)
6 # Copyright 2013 Edward Almasy and Internet Scout Research Group
7 # http://scout.wisc.edu/cwis/
8 #
9 
15 {
16 
21  public function __construct(MetadataField $Field)
22  {
23  $this->Field = $Field;
24  }
25 
30  public function Status()
31  {
32  switch ($this->Field->Status())
33  {
35  return "OK";
37  return "Error";
39  return "Duplicate field name";
41  return "Duplicate database column";
43  return "Field does not exist";
45  return "Illegal field name";
47  return "Duplicate label name";
49  return "Illegal label name";
50  }
51 
52  return $this->NotSetText;
53  }
54 
59  public function Type()
60  {
61  return MetadataField::$FieldTypeDBEnums[$this->Field->Type()];
62  }
63 
68  public function TypeAsName()
69  {
70  return $this->Field->TypeAsName();
71  }
72 
77  public function GetDisplayName()
78  {
79  return $this->Field->GetDisplayName();
80  }
81 
86  public function Name()
87  {
88  return $this->Field->Name();
89  }
90 
95  public function Label()
96  {
97  return $this->GetValueCheckingLength($this->Field->Label());
98  }
99 
104  public function GetAllowedConversionTypes()
105  {
106  $Value = $this->Field->GetAllowedConversionTypes();
107 
108  return count($Value) ? implode(", ", $Value) : $this->NotSetText;
109  }
110 
116  public function IsTempItem()
117  {
118  return $this->GetYesNo($this->Field->IsTempItem());
119  }
120 
125  public function Id()
126  {
127  return $this->Field->Id();
128  }
129 
134  public function DBFieldName()
135  {
136  return $this->Field->DBFieldName();
137  }
138 
143  public function Description()
144  {
145  # for our purposes, HTML code and some whitespace are not human-readable
146  $Value = strip_tags($this->Field->Description());
147  $Value = trim(str_replace(array("\r", "\n", "\t"), " ", $Value));
148  $Value = preg_replace('/ +/', " ", $Value);
149 
150  return $this->GetValueCheckingLength($Value);
151  }
152 
157  public function Instructions()
158  {
159  # for our purposes, HTML code and some whitespace are not human-readable
160  $Value = strip_tags($this->Field->Instructions());
161  $Value = trim(str_replace(array("\r", "\n", "\t"), " ", $Value));
162  $Value = preg_replace('/ +/', " ", $Value);
163 
164  return $this->GetValueCheckingLength($Value);
165  }
166 
171  public function Owner()
172  {
173  return $this->GetValueCheckingLength($this->Field->Owner());
174  }
175 
181  public function RequiredBySPT()
182  {
183  return $this->GetYesNo($this->Field->RequiredBySPT());
184  }
185 
190  public function Enabled()
191  {
192  return $this->GetYesNo($this->Field->Enabled());
193  }
194 
199  public function Optional()
200  {
201  return $this->GetYesNo($this->Field->Optional());
202  }
203 
208  public function Editable()
209  {
210  return $this->GetYesNo($this->Field->Editable());
211  }
212 
217  public function Viewable()
218  {
219  return $this->GetYesNo($this->Field->Viewable());
220  }
221 
228  public function AllowMultiple()
229  {
230  return $this->GetYesNo($this->Field->AllowMultiple());
231  }
232 
239  public function IncludeInKeywordSearch()
240  {
241  return $this->GetYesNo($this->Field->IncludeInKeywordSearch());
242  }
243 
250  public function IncludeInAdvancedSearch()
251  {
252  return $this->GetYesNo($this->Field->IncludeInAdvancedSearch());
253  }
254 
261  public function IncludeInFacetedSearch()
262  {
263  return $this->GetYesNo($this->Field->IncludeInFacetedSearch());
264  }
265 
272  public function IncludeInSortOptions()
273  {
274  return $this->GetYesNo($this->Field->IncludeInSortOptions());
275  }
276 
283  public function IncludeInRecommender()
284  {
285  return $this->GetYesNo($this->Field->IncludeInRecommender());
286  }
287 
292  public function TextFieldSize()
293  {
294  return $this->GetValueCheckingLength($this->Field->TextFieldSize());
295  }
296 
301  public function MaxLength()
302  {
303  return $this->GetValueCheckingLength($this->Field->MaxLength());
304  }
305 
310  public function ParagraphRows()
311  {
312  return $this->GetValueCheckingLength($this->Field->ParagraphRows());
313  }
314 
319  public function ParagraphCols()
320  {
321  return $this->GetValueCheckingLength($this->Field->ParagraphCols());
322  }
323 
328  public function MinValue()
329  {
330  return $this->GetValueCheckingLength($this->Field->MinValue());
331  }
332 
337  public function MaxValue()
338  {
339  return $this->GetValueCheckingLength($this->Field->MaxValue());
340  }
341 
346  public function FlagOnLabel()
347  {
348  return $this->GetValueCheckingLength($this->Field->FlagOnLabel());
349  }
350 
355  public function FlagOffLabel()
356  {
357  return $this->GetValueCheckingLength($this->Field->FlagOffLabel());
358  }
359 
364  public function DateFormat()
365  {
366  return $this->GetValueCheckingLength($this->Field->DateFormat());
367  }
368 
373  public function SearchWeight()
374  {
375  return $this->GetValueCheckingLength($this->Field->SearchWeight());
376  }
377 
382  public function RecommenderWeight()
383  {
384  return $this->GetValueCheckingLength($this->Field->RecommenderWeight());
385  }
386 
391  public function MaxHeight()
392  {
393  return $this->GetValueCheckingLength($this->Field->MaxHeight());
394  }
395 
400  public function MaxWidth()
401  {
402  return $this->GetValueCheckingLength($this->Field->MaxWidth());
403  }
404 
410  public function MaxPreviewHeight()
411  {
412  return $this->GetValueCheckingLength($this->Field->MaxPreviewHeight());
413  }
414 
420  public function MaxPreviewWidth()
421  {
422  return $this->GetValueCheckingLength($this->Field->MaxPreviewWidth());
423  }
424 
431  public function MaxThumbnailHeight()
432  {
433  return $this->GetValueCheckingLength($this->Field->MaxThumbnailHeight());
434  }
435 
441  public function MaxThumbnailWidth()
442  {
443  return $this->GetValueCheckingLength($this->Field->MaxThumbnailWidth());
444  }
445 
451  public function DefaultAltText()
452  {
453  return $this->GetValueCheckingLength($this->Field->DefaultAltText());
454  }
455 
461  public function UsesQualifiers()
462  {
463  return $this->GetYesNo($this->Field->UsesQualifiers());
464  }
465 
472  public function ShowQualifiers()
473  {
474  return $this->GetYesNo($this->Field->ShowQualifiers());
475  }
476 
481  public function DefaultQualifier()
482  {
483  $DefaultQualifier = $this->Field->DefaultQualifier();
484 
485  if ($DefaultQualifier > 0)
486  {
487  $Qualifier = new Qualifier($DefaultQualifier);
488 
489  return $Qualifier->Name();
490  }
491 
492  return $this->NotSetText;
493  }
494 
500  public function AllowHTML()
501  {
502  return $this->GetYesNo($this->Field->AllowHTML());
503  }
504 
511  public function UseWysiwygEditor()
512  {
513  return $this->GetYesNo($this->Field->UseWysiwygEditor());
514  }
515 
522  public function UseForOaiSets()
523  {
524  return $this->GetYesNo($this->Field->UseForOaiSets());
525  }
526 
532  public function NumAjaxResults()
533  {
534  return $this->Field->NumAjaxResults();
535  }
536 
541  public function ViewingPrivilege()
542  {
543  $Value = $this->MapPrivilege($this->Field->ViewingPrivilege());
544 
545  return $this->GetValueCheckingLength($Value);
546  }
547 
552  public function AuthoringPrivilege()
553  {
554  $Value = $this->MapPrivilege($this->Field->AuthoringPrivilege());
555 
556  return $this->GetValueCheckingLength($Value);
557  }
558 
563  public function EditingPrivilege()
564  {
565  $Value = $this->MapPrivilege($this->Field->EditingPrivilege());
566 
567  return $this->GetValueCheckingLength($Value);
568  }
569 
575  public function ImagePreviewPrivilege()
576  {
577  $Value = $this->MapPrivilege($this->Field->ImagePreviewPrivilege());
578 
579  return $this->GetValueCheckingLength($Value);
580  }
581 
588  public function EnableOnOwnerReturn()
589  {
590  return $this->GetYesNo($this->Field->EnableOnOwnerReturn());
591  }
592 
597  public function ViewingUserIsValue()
598  {
599  $Value = $this->MapUserIsValue($this->Field->ViewingUserIsValue());
600 
601  return $this->GetValueCheckingLength($Value);
602  }
603 
608  public function AuthoringUserIsValue()
609  {
610  $Value = $this->MapUserIsValue($this->Field->AuthoringUserIsValue());
611 
612  return $this->GetValueCheckingLength($Value);
613  }
614 
619  public function EditingUserIsValue()
620  {
621  $Value = $this->MapUserIsValue($this->Field->EditingUserIsValue());
622 
623  return $this->GetValueCheckingLength($Value);
624  }
625 
630  public function ViewingUserValue()
631  {
632  $Value = $this->MapUserValue($this->Field->ViewingUserValue());
633 
634  return $this->GetValueCheckingLength($Value);
635  }
636 
641  public function AuthoringUserValue()
642  {
643  $Value = $this->MapUserValue($this->Field->AuthoringUserValue());
644 
645  return $this->GetValueCheckingLength($Value);
646  }
647 
652  public function EditingUserValue()
653  {
654  $Value = $this->MapUserValue($this->Field->EditingUserValue());
655 
656  return $this->GetValueCheckingLength($Value);
657  }
658 
663  public function UserPrivilegeRestrictions()
664  {
665  $Value = $this->Field->UserPrivilegeRestrictions();
666  $Values = array();
667 
668  # need to map each privilege ID to its text
669  foreach ($Value as $Id)
670  {
671  $Values[] = $this->MapPrivilege($Id);
672  }
673 
674  return count($Values) ? implode(", ", $Values) : $this->NotSetText;
675  }
676 
681  public function PointPrecision()
682  {
683  return $this->GetValueCheckingLength($this->Field->PointPrecision());
684  }
685 
690  public function PointDecimalDigits()
691  {
692  return $this->GetValueCheckingLength($this->Field->PointDecimalDigits());
693  }
694 
699  public function DefaultValue()
700  {
701  $Type = $this->Field->Type();
702  $Value = $this->Field->DefaultValue();
703 
704  if ($Type == MetadataSchema::MDFTYPE_POINT)
705  {
706  $XText = NULL;
707  $X = $Value["X"];
708  $Y = $Value["Y"];
709 
710  if (strlen($X))
711  {
712  $XText = "X: " . $X;
713  }
714 
715  if (strlen($Y))
716  {
717  return (strlen($XText) ? $XText . ", " : "") . "Y: " . $Y;
718  }
719 
720  return $this->NotSetText;
721  }
722 
723  if ($Type == MetadataSchema::MDFTYPE_OPTION)
724  {
725  # multiple default values are set
726  if (is_array($Value))
727  {
728  foreach ($Value as $Id)
729  {
730  $ControlledName = new ControlledName($Id);
731 
732  $Names[] = $ControlledName->Name();
733  }
734 
735  return implode(", ", $Names);
736  }
737 
738  # only one default value
739  else if ($Value)
740  {
741  $ControlledName = new ControlledName($Value);
742 
743  return $ControlledName->Name();
744  }
745 
746  return $this->NotSetText;
747  }
748 
749  if ($Type == MetadataSchema::MDFTYPE_FLAG)
750  {
751  return $Value ? $this->FlagOnLabel() : $this->FlagOffLabel();
752  }
753 
754  return $this->GetValueCheckingLength($Value);
755  }
756 
761  public function UpdateMethod()
762  {
763  $Value = $this->Field->UpdateMethod();
764  $String = $this->GetArrayValue(MetadataField::$UpdateTypes, $Value);
765 
766  return $this->GetValueCheckingLength($String);
767  }
768 
774  public function GetPossibleValues()
775  {
776  $Value = $this->Field->GetPossibleValues();
777 
778  return count($Value) ? implode(", ", $Value) : $this->NotSetText;
779  }
780 
786  public function GetCountOfPossibleValues()
787  {
788  return $this->GetValueCheckingLength($this->Field->GetCountOfPossibleValues());
789  }
790 
797  public function HasItemLevelQualifiers()
798  {
799  return $this->GetYesNo($this->Field->HasItemLevelQualifiers());
800  }
801 
806  public function AssociatedQualifierList()
807  {
808  $Value = $this->Field->AssociatedQualifierList();
809 
810  return count($Value) ? implode(", ", $Value) : $this->NotSetText;
811  }
816  public function UnassociatedQualifierList()
817  {
818  $Value = $this->Field->UnassociatedQualifierList();
819 
820  return count($Value) ? implode(", ", $Value) : $this->NotSetText;
821  }
822 
828  public function GetViewingPrivilegeString()
829  {
830  return $this->GetPrivilegeString("Viewing");
831  }
832 
839  public function GetAuthoringPrivilegeString()
840  {
841  return $this->GetPrivilegeString("Authoring");
842  }
843 
849  public function GetEditingPrivilegeString()
850  {
851  return $this->GetPrivilegeString("Editing");
852  }
853 
858  public function GetNotSetText()
859  {
860  return $this->NotSetText;
861  }
862 
867  public function SetNotSetText($Text)
868  {
869  $this->NotSetText = $Text;
870  }
871 
877  protected function GetYesNo($Value)
878  {
879  return $Value ? "Yes" : "No";
880  }
881 
888  protected function GetValueCheckingLength($Value)
889  {
890  return strlen($Value) ? $Value : $this->NotSetText;
891  }
892 
899  protected function GetPrivilegeString($Mode)
900  {
901  $Privilege = $this->MapPrivilege($this->Field->{$Mode."Privileges"}());
902  $UserIsValue = $this->MapUserIsValue($this->Field->{$Mode."UserIsValue"}());
903  $UserValue = $this->MapUserValue($this->Field->{$Mode."UserValue"}());
904 
905  $String = NULL;
906 
907  # add the user privilege constraint first, if set
908  if (!is_null($Privilege))
909  {
910  $String = $Privilege;
911  }
912 
913  # then add the "user is value of field" constraint, if set
914  if (!is_null($UserIsValue) && !is_null($UserValue))
915  {
916  if (is_null($String))
917  {
918  $String = "User is value of " . $UserValue;
919  }
920 
921  else
922  {
923  $String .= " " . $UserIsValue . " user is value of ";
924  $String .= $UserValue;
925  }
926  }
927 
928  return is_null($String) ? $this->NotSetText : $String;
929  }
930 
936  protected function MapPrivilege($Value)
937  {
938  if (!isset(self::$PrivilegeList))
939  {
940  $this->LoadPrivilegeList();
941  }
942 
943  return $this->GetArrayValue(self::$PrivilegeList, $Value);
944  }
945 
949  protected function LoadPrivilegeList()
950  {
951  $PrivilegeFactory = new PrivilegeFactory();
952 
953  self::$PrivilegeList = $PrivilegeFactory->GetPrivileges(TRUE, FALSE);
954  }
955 
961  protected function MapUserIsValue($Value)
962  {
963  return $this->GetArrayValue(self::$UserIsValueList, $Value);
964  }
965 
971  protected function MapUserValue($Value)
972  {
973  if (!isset(self::$UserFieldList))
974  {
975  $this->LoadUserFieldList();
976  }
977 
978  return $this->GetArrayValue(self::$UserFieldList, $Value);
979  }
980 
984  protected function LoadUserFieldList()
985  {
986  $Schema = new MetadataSchema($this->Field->SchemaId());
987  $UserFields = $Schema->GetFields(MetadataSchema::MDFTYPE_USER);
988 
989  # make sure the list is set to something even if there are no user
990  # fields
991  self::$UserFieldList = array();
992 
993  foreach ($UserFields as $Field)
994  {
995  self::$UserFieldList[$Field->Id()] = $Field->GetDisplayName();
996  }
997  }
998 
1009  protected function GetArrayValue(array $Array, $Key, $Default=NULL)
1010  {
1011  return array_key_exists($Key, $Array) ? $Array[$Key] : $Default;
1012  }
1013 
1019  protected $Field;
1020 
1025  protected $NotSetText = "--";
1026 
1031  protected static $PrivilegeList;
1032 
1037  protected static $UserIsValueList = array(
1040 
1045  protected static $UserFieldList;
1046 
1047 }
const MDFSTAT_ILLEGALLABEL
PointDecimalDigits()
Get the human-readable point decimal digits of point fields.
MapUserIsValue($Value)
Map a UserIsValue value to a name.
static $FieldTypeDBEnums
MaxHeight()
Get the human-readable maximum height of images of image fields.
$NotSetText
The text used when a value is not set.
DBFieldName()
Get the human-readable database field name of the field.
MaxPreviewHeight()
Get the human-readable maximum height of preview images of image fields.
static $UserIsValueList
A static array of UserIsValue strings.
GetYesNo($Value)
Get the human-readable string for a boolean-like value.
AuthoringUserIsValue()
Get the human-readable authoring user is value of the field.
GetPossibleValues()
Get the human-readable possible values of the field.
Metadata schema (in effect a Factory class for MetadataField).
DefaultAltText()
Get the human-readable default alternate text of images of image fields.
DefaultQualifier()
Get the human-readable default qualifier of the field.
SetNotSetText($Text)
Set the text that is used when a value is not set.
EditingUserValue()
Get the human-readable editing user value of the field.
EditingPrivilege()
Get the human-readable editing privilege of the field.
HasItemLevelQualifiers()
Get the human-readable string that indicates if the field has item-level qualifiers.
Given a metadata field, this class returns human-readable values for each value of the field...
Instructions()
Get the human-readable instructions of the field.
AssociatedQualifierList()
Get the human-readable list of associated qualifiers of the field.
MaxLength()
Get the human-readable maximum size of text field values.
Factory which extracts all defined privileges from the database.
DefaultValue()
Get the human-readable default value of the field.
const MDFSTAT_FIELDDOESNOTEXIST
const USERISVALUE_OR
UnassociatedQualifierList()
Get the human-readable list of unassociated qualifiers of the field.
MapPrivilege($Value)
Map a privilege value to a privilege name.
const USERISVALUE_AND
FlagOffLabel()
Get the human-readable flag-off label for flag fields.
ViewingUserValue()
Get the human-readable viewing user value of the field.
LoadUserFieldList()
Load the static user field list.
EditingUserIsValue()
Get the human-readable editing user is value of the field.
ViewingUserIsValue()
Get the human-readable viewing user is value of the field.
MaxValue()
Get the human-readable maximum value for number fields.
AllowMultiple()
Get the human-readable string that indicates if multiple field values are permitted.
ParagraphRows()
Get the human-readable number of rows of paragraph field inputs.
FlagOnLabel()
Get the human-readable flag-on label for flag fields.
AllowHTML()
Get the human-readable string indicating if HTML is allowed as the value.
SearchWeight()
Get the human-readable search weight of the field.
Metadata type representing non-hierarchical controlled vocabulary values.
ShowQualifiers()
Get the human-readable string indicating if qualifiers are shown for the field.
IncludeInSortOptions()
Get the human-readable string that indicates if the field is included in sort options.
UserPrivilegeRestrictions()
Get the human-readable user privilege restrictions of user fields.
Name()
Get the human-readable name of the field.
MaxPreviewWidth()
Get the human-readable maximum width of preview images of image fields.
ViewingPrivilege()
Get the human-readable viewing privilege of the field.
GetEditingPrivilegeString()
Get the human-readable editing privilege string that includes the editing privilege required...
UseWysiwygEditor()
Get the human-readable string indicating if a WYSIWYG editor should be used when editing the field va...
IncludeInAdvancedSearch()
Get the human-readable string that indicates if the field is included in advanced search options...
RequiredBySPT()
Get the human-readable string that indicates if the field is required by SPT.
MinValue()
Get the human-readable minimum value for number fields.
NumAjaxResults()
Get the human-readable number of AJAX search results to display for the field.
const MDFSTAT_DUPLICATEDBCOLUMN
MaxThumbnailWidth()
Get the human-readable maximum width of thumbnail images of image fields.
UseForOaiSets()
Get the human-readable string indicating if the field should be used for OAI sets.
PointPrecision()
Get the human-readable point precision of point fields.
GetValueCheckingLength($Value)
Get the value or the not-set text depending on the length of the value.
Id()
Get the human-readable field ID.
RecommenderWeight()
Get the human-readable recommender weight of the field.
Type()
Get the human-readable field type of the field.
Optional()
Get the human-readable string that indicates if the field is optional.
const MDFSTAT_DUPLICATELABEL
AuthoringPrivilege()
Get the human-readable authoring privilege of the field.
TypeAsName()
Get the human-readable field type of the field.
MapUserValue($Value)
Map a UserValue value to a field display name.
GetFields($FieldTypes=NULL, $OrderType=NULL, $IncludeDisabledFields=FALSE, $IncludeTempFields=FALSE)
Retrieve array of fields.
TextFieldSize()
Get the human-readable size of text field inputs.
LoadPrivilegeList()
Load the static privilege list.
MaxThumbnailHeight()
Get the human-readable maximum height of thumbnail images of image fields.
MaxWidth()
Get the human-readable maximum width of images of image fields.
Object representing a locally-defined type of metadata field.
Viewable()
Get the human-readable string that indicates if the field is viewable.
GetArrayValue(array $Array, $Key, $Default=NULL)
Get the value from an array with a given index or a default value if it does not exist.
ImagePreviewPrivilege()
THIS FUNCTION HAS BEEN DEPRECATED Get the human-readable image preview privilege of image fields...
IsTempItem()
Get the human-readable string that indicates if the field is a temporary field.
DateFormat()
Get the human-readable field date format.
IncludeInRecommender()
Get the human-readable string that indicates if the field is included in the recommender system...
const MDFSTAT_ILLEGALNAME
GetPrivilegeString($Mode)
This method makes getting privilege strings for viewing, authoring, and editing a little more conveni...
GetNotSetText()
Get the text that is used when a value is not set.
static $UserFieldList
A static array of user fields.
UsesQualifiers()
Get the human-readable string indicating if the field uses qualifiers.
Enabled()
Get the human-readable string that indicates if the field is enabled.
GetAllowedConversionTypes()
Get the human-readable allowed conversion types of the field.
static $PrivilegeList
A static array of privilege values and names.
$Field
The metadata field that is having its values returned in human-readable form.
UpdateMethod()
Get the human-readable update method of the field.
Editable()
Get the human-readable string that indicates if the field is editable.
const MDFSTAT_DUPLICATENAME
IncludeInFacetedSearch()
Get the human-readable string that indicates if the field is included in faceted search options...
GetViewingPrivilegeString()
Get the human-readable viewing privilege string that includes the viewing privilege required...
GetDisplayName()
Get the human-readable display name of the field.
GetCountOfPossibleValues()
Get the human-readable count of possible values of the field.
Status()
Get the human-readable error status of the field.
Label()
Get the human-readable label of the field.
Owner()
Get the human-readable field owner.
IncludeInKeywordSearch()
Get the human-readable string that indicates if the field is included in keyword searches.
__construct(MetadataField $Field)
Save the field that will be used to generate the human-readable values.
Description()
Get the human-readable description of the field.
ParagraphCols()
Get the human-readable number of columns of paragraph field inputs.
EnableOnOwnerReturn()
Get the human-readable string indicating if the field should be enabled when the owner/plugin is avai...
AuthoringUserValue()
Get the human-readable authoring user value of the field.
GetAuthoringPrivilegeString()
Get the human-readable authoring privilege string that includes the authoring privilege required...