Id()); if ($Mapping == "Title" && strlen($Resource->GetMapped("Url"))) { DisplayUrlField($Resource, $Field, $Data); } else { DisplayResourceField($Resource, $Field, $Data); } } /** * Display a Paragraph field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayParagraphField(Resource $Resource, MetadataField $Field) { $Data = GetResourceFieldValue($Resource, $Field); $Data = nl2br(StripXSSThreats($Data)); DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } /** * Display a Number field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayNumberField(Resource $Resource, MetadataField $Field) { # don't display the rating field if ($Field->Name() == "Cumulative Rating") { return; } $Data = GetResourceFieldValue($Resource, $Field); $Data = defaulthtmlentities($Data); DisplayResourceField($Resource, $Field, $Data); } /** * Display a Date field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayDateField(Resource $Resource, MetadataField $Field) { $Data = GetResourceFieldValue($Resource, $Field); $Data = defaulthtmlentities($Data->Formatted()); DisplayResourceField($Resource, $Field, $Data); } /** * Display a Timestamp field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayTimestampField(Resource $Resource, MetadataField $Field) { $Data = GetResourceFieldValue($Resource, $Field); $Data = defaulthtmlentities($Data); DisplayResourceField($Resource, $Field, $Data); } /** * Display a Flag field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayFlagField(Resource $Resource, MetadataField $Field) { $Data = GetResourceFieldValue($Resource, $Field); $Data = ($Data > 0) ? $Field->FlagOnLabel() : $Field->FlagOffLabel(); $Data = defaulthtmlentities($Data); DisplayResourceField($Resource, $Field, $Data); } /** * Display a Tree field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayTreeField(Resource $Resource, MetadataField $Field) { $Names = GetResourceFieldValue($Resource, $Field); # only output tree fields with values if (count($Names) < 1) { return; } $Data = NULL; foreach ($Names as $Id => $Name) { $LinkAttributes = array( "href" => "index.php?P=AdvancedSearch&Q=Y&G".EscapeParam($Field->Id()) ."=".EscapeParam($Id), "title" => "Search for all resources also classified as \"" .defaulthtmlentities($Name->Name())."\""); $Data .= PrepareNameValue($Resource, $Field, $Name, $LinkAttributes); } $ListAttributes = array("class" => "cw-list cw-list-dematte cw-list-unmarked"); $Data = CreateHtmlElement("ul", $ListAttributes, $Data); DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } /** * Display a Controlled Name field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayControlledNameField(Resource $Resource, MetadataField $Field) { $Names = GetResourceFieldValue($Resource, $Field); # only output controlled name fields with values if (count($Names) < 1) { return; } $Data = NULL; foreach ($Names as $Id => $Name) { $LinkAttributes = array( "href" => "index.php?P=AdvancedSearch&Q=Y&F" .EscapeParam($Field->Id())."=".EscapeParam("=".$Name->Name()), "title" => "Search for all resources also classified as \"" .defaulthtmlentities($Name->Name())."\""); $Data .= PrepareNameValue($Resource, $Field, $Name, $LinkAttributes); } $ListAttributes = array("class" => "cw-list cw-list-dematte cw-list-unmarked"); $Data = CreateHtmlElement("ul", $ListAttributes, $Data); DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } /** * Display an Option field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayOptionField(Resource $Resource, MetadataField $Field) { $Names = GetResourceFieldValue($Resource, $Field); # only output option fields with values if (count($Names) < 1) { return; } $Data = NULL; foreach ($Names as $Id => $Name) { $LinkAttributes = array( "href" => "index.php?P=AdvancedSearch&Q=Y&G".EscapeParam($Field->Id()) ."=".EscapeParam($Id), "title" => "Search for all resources also classified as \"" .defaulthtmlentities($Name->Name())."\""); $Data .= PrepareNameValue($Resource, $Field, $Name, $LinkAttributes); } $ListAttributes = array("class" => "cw-list cw-list-dematte cw-list-unmarked"); $Data = CreateHtmlElement("ul", $ListAttributes, $Data); DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } /** * Display an User field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayUserField(Resource $Resource, MetadataField $Field) { global $User; # don't show user field if not a resource administrator if (!$User->HasPriv(PRIV_RESOURCEADMIN)) { return; } $Data = GetResourceFieldValue($Resource, $Field); $Data = (is_null($Data->Get("UserId"))) ? "Unknown" : $Data->Get("UserName"); $Data = defaulthtmlentities($Data); DisplayResourceField($Resource, $Field, $Data); } /** * Display an Image field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayStillImageField(Resource $Resource, MetadataField $Field) { $Image = GetResourceFieldValue($Resource, $Field); # only display image fields with an image available if (is_null($Image) || !is_readable($Image->PreviewUrl())) { return; } $ImageAttributes = array( "src" => $Image->PreviewUrl(), "alt" => $Image->AltText(), "title" => $Image->AltText()); if ($Image->PreviewWidth() > 0) { $ImageAttributes["width"] = $Image->PreviewWidth(); } if ($Image->PreviewHeight() > 0) { $ImageAttributes["height"] = $Image->PreviewHeight(); } $Image = CreateHtmlElement("img", $ImageAttributes); $LinkAttributes = array( "href" => "index.php?P=FullImage&ResourceId=".$Resource->Id() ."&FieldName=".$Field->Name()."&edit=0"); $Data = CreateHtmlElement("a", $LinkAttributes, $Image); DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } /** * Display a File field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayFileField(Resource $Resource, MetadataField $Field) { $Files = GetResourceFieldValue($Resource, $Field); # only display file fields with at least one file if (count($Files) < 1) { return; } $Data = NULL; foreach ($Files as $Id => $File) { $Item = defaulthtmlentities($File->Name()); $Attributes = array( "href" => $File->GetLink(), "title" => "Download \"".$File->Name()."\""); $Item = CreateHtmlElement("a", $Attributes, $Item); $Data .= CreateHtmlElement("li", array(), $Item); } $ListAttributes = array("class" => "cw-list cw-list-dematte cw-list-unmarked"); $Data = CreateHtmlElement("ul", $ListAttributes, $Data); DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } /** * Display an Url field. * @param $Resource Resource object * @param $Field MetadataField object * @param $Value optional value for the URL */ function DisplayUrlField(Resource $Resource, MetadataField $Field, $Value=NULL) { global $SysConfig; $Data = GetResourceFieldValue($Resource, $Field); # only display URLs with a set value if (strlen($Data) < 1) { return; } $TruncData = (!is_null($Value)) ? $Value : defaulthtmlentities(NeatlyTruncateString($Data, 70, TRUE)); $LinkAttributes = array( "href" => "index.php?P=GoTo&ID=".$Resource->Id()."&MF=".$Field->Id(), "title" => $Data); if ($SysConfig->ResourceLaunchesNewWindowEnabled()) { $LinkAttributes["target"] = "_blank"; } # only link to sensible-looking URLs if (IsSensibleUrl($Data)) { $Link = CreateHtmlElement("a", $LinkAttributes, $TruncData); } else { $Link = $TruncData; } DisplayResourceField($Resource, $Field, $Link); } /** * Display a Point field. * @param $Resource Resource object * @param $Field MetadataField object */ function DisplayPointField(Resource $Resource, MetadataField $Field) { $Data = GetResourceFieldValue($Resource, $Field); # reduce to a single value $X = $Data["X"]; $Y = $Data["Y"]; $Data = (!is_null($X)) ? $X . ", " . $Y : NULL; DisplayResourceField($Resource, $Field, $Data, array("IsTall" => TRUE)); } # star rating functions function PrintRatingGraphic0() { ?> " alt="This resource has a 1 star rating" /> " alt="This resource has a 1 star rating" /> " alt="This resource has a 1 star rating" /> " alt="This resource has a 1.5 star rating" /> " alt="This resource has a 2 star rating" /> " alt="This resource has a 2.5 star rating" /> " alt="This resource has a 3 star rating" /> " alt="This resource has a 3.5 star rating" /> " alt="This resource has a 4 star rating" /> " alt="This resource has a 4.5 star rating" /> " alt="This resource has a 5 star rating" /> (not yet rated)"; } # ----- LOCAL FUNCTIONS ------------------------------------------------------ /** * Determine if a MetadataField value can be displayed, depending on whether * it's enabled and the user has the necessary privileges. * @param $Field MetadataField object * return TRUE if the field can be displayed, FALSE otherwise */ function CanDisplayField(MetadataField $Field=NULL) { global $User; # field not set or not enabled if (is_null($Field) || !$Field->Enabled()) { return FALSE; } $ViewingPrivilege = $Field->ViewingPrivilege(); # insufficient privileges if ($ViewingPrivilege != 0 && !$User->HasPriv($ViewingPrivilege)) { return FALSE; } return TRUE; } /** * Generate an HTML element. * @param $Name a valid HTML element name (is not escaped) * @param $Attributes array of attributes and values (only values are escaped) * @param $Inner inner HTML elements or text (is not escaped) * return HTML element string */ function CreateHtmlElement($Name, $Attributes=array(), $Inner=NULL) { $Element = "<" . $Name; foreach ($Attributes as $Attribute => $Value) { $Value = defaulthtmlentities($Value); $Element .= " " . $Attribute . '="' . $Value . '"'; } $Element .= (is_null($Inner)) ? " />" : ">".$Inner.""; return $Element; } /** * Display a resource field value. * @param $Resource Resource object * @param $Field MetadataField object * @param $Data the field value with any alterations made * @param $Options array of options */ function DisplayResourceField( Resource $Resource, MetadataField $Field, $Data, array $Options=array()) { # only display fields with a value if (is_null($Data) || (is_string($Data) && strlen($Data) < 1)) { return; } $Header = defaulthtmlentities($Field->Name()); $Description = defaulthtmlentities($Field->Description()); $IsTall = GetArrayValue($Options, "IsTall", FALSE); # vertically align to the top if more than 100 characters $RowClass = ($IsTall) ? ' class="cw-content-tallrow"' : ""; ?> > Name()); $Value = CreateHtmlElement("a", $LinkAttributes, $Value); $Qualifier = GetFieldQualifier($Resource, $Field, $Name->Id()); if (!is_null($Qualifier) && $Field->ShowQualifiers()) { $Url = defaulthtmlentities($Qualifier->Url()); $Name = defaulthtmlentities($Qualifier->Name()); $Value .= " (".$Name.")"; } $Value = CreateHtmlElement("li", array(), $Value) . "\n"; return $Value; } /** * Default field filter used when display resource field values. * @param $Resource Resource object * @param $Field MetadataField object * @return TRUE if the field should be filtered out, FALSE otherwise */ function FieldFilter(Resource $Resource, MetadataField $Field) { global $User, $FieldsShownSeparately; # filter fields that aren't enabled or the user can't see if (!$Field->Enabled() || !$Resource->UserCanViewField($User, $Field)) { return TRUE; } # filter resources that are displayed outside of the main list if (in_array($Field->Name(), $FieldsShownSeparately)) { return TRUE; } return FALSE; } /** * Encode an URL parameter and then escape any HTML entities it may contain. * @param $Param URL parameter * @return the URL parameter after encoding and escaping */ function EscapeParam($Param) { return defaulthtmlentities(urlencode($Param)); } /** * Get the URL field, its URL, its HREF, and its label for a resource. * @param $Resource Resource object * @return array(URL Field, URL, HREF, Label) */ function GetUrlFieldInfo(Resource $Resource) { global $SysConfig; $Schema = new MetadataSchema(); $UrlField = $Schema->GetFieldByMappedName("Url"); $FileField = $Schema->GetFieldByMappedName("File"); $Url = (IsValidMetadataField($UrlField)) ? GetResourceFieldValue($Resource, $UrlField) : ""; $Files = (IsValidMetadataField($FileField)) ? GetResourceFieldValue($Resource, $FileField) : array(); if (count($Files) > 0 && ($SysConfig->Value("PreferredLinkValue") == "FILE" || !$SysConfig->Value("PreferredLinkValue"))) { $File = array_shift($Files); return array($FileField, OurBaseUrl().$File->GetLink(), $File->GetLink(), defaulthtmlentities($File->Name())); } if (strlen($Url) > 0) { return array( $UrlField, $Url, "index.php?P=GoTo&ID=".$Resource->Id()."&MF=".$UrlField->Id(), defaulthtmlentities($Url)); } return array(NULL, NULL, NULL, NULL); } /** * Determine if the given URL could be a valid URL, but gives no guarantee * that it is valid. * @param $Url URL * @return TRUE if the given URL could be a valid URL, FALSE otherwise */ function IsSensibleUrl($Url) { return (bool) preg_match('/^\s*[a-zA-Z]+:\/\//', $Url); } # ----- MAIN ----------------------------------------------------------------- global $FieldsShownSeparately; # get fields that are displayed apart from the main list $Schema = new MetadataSchema(); $TitleField = $Schema->GetFieldByMappedName("Title"); $DescriptionField = $Schema->GetFieldByMappedName("Description"); $ScreenshotField = $Schema->GetFieldByMappedName("Screenshot"); $DateRecordCheckedField = $Schema->GetFieldByName("Date Record Checked"); # special handling for the URL field list($UrlField, $Url, $Href, $Label) = GetUrlFieldInfo($Resource); # format and escape the field values $Title = StripXSSThreats(GetResourceFieldValue($Resource, $TitleField)); $Description = nl2br(StripXSSThreats(GetResourceFieldValue($Resource, $DescriptionField))); $DateRecordChecked = GetResourceFieldValue($Resource, $DateRecordCheckedField); if (is_object($DateRecordChecked)) { $DateRecordChecked = $DateRecordChecked->Formatted(); } $Screenshot = GetResourceFieldValue($Resource, $ScreenshotField); $Href = defaulthtmlentities($Href); $Label = defaulthtmlentities($Label); # fields that are show separately and shouldn't be included in the main list $FieldsShownSeparately = array(); $TestFields = array($TitleField, $DescriptionField, $DateRecordCheckedField, $ScreenshotField); # since a File field used as the URL field might have more than one file, it # should always be displayed if (IsValidMetadataField($UrlField) && $UrlField->Type() == MetadataSchema::MDFTYPE_URL) { $TestFields[] = $UrlField; } foreach ($TestFields as $Field) { if (IsValidMetadataField($Field)) { $FieldsShownSeparately[] = $Field->Name(); } } ?> Status() !== 1) { ?>

# Error

No resource was found with the specified ID.

#

UserCanEdit($G_User)) { ?> Edit
ResourceLaunchesNewWindowEnabled() ? " target=\"_blank\"" : ""); ?>>

ResourceRatingsEnabled() && CumulativeRatingEnabled()) { ?>
Cumulative Rating: (based on response)
Your Rating: NOT USEFUL VERY USEFUL

Date Record Checked:
Report a Problem with this Resource
ResourceCommentsEnabled()) { ?>

## Resource Comments

HasPriv(PRIV_SYSADMIN, PRIV_POSTCOMMENTS)) { ?>
Add Comment

(no comments available yet for this resource)

HasPriv(PRIV_SYSADMIN, PRIV_POSTCOMMENTS)) { ?>
Add Comment