3 # FILE: ControlledName.php
5 # Part of the Collection Workflow Integration System (CWIS)
6 # Copyright 2001-2013 Edward Almasy and Internet Scout Research Group
7 # http://scout.wisc.edu/cwis/
16 # ---- PUBLIC INTERFACE --------------------------------------------------
40 $QualifierId =
"NULL", $VariantName = NULL)
42 # assume everything will turn out okay
43 $this->ErrorStatus = self::STATUS_OK;
45 # create DB handle for our use
49 # remove whitespace padding
51 $VariantName = trim($VariantName);
53 # look for passed in name and type
54 if (!empty($Name) && !empty($FieldId))
56 $DB->Query(
"SELECT * FROM ControlledNames".
57 " WHERE ControlledName = \"".addslashes($Name).
"\"".
58 " AND FieldId = ".intval($FieldId));
60 while ($this->DBFields = $DB->FetchRow())
62 # this controlled name already exists
63 if ($this->DBFields[
"ControlledName"] == $Name)
65 $this->ErrorStatus = self::STATUS_EXISTS;
66 $NameId = $this->DBFields[
"ControlledNameId"];
68 # cache the variant name separately
69 $VN = $DB->Query(
"SELECT VariantName FROM VariantNames".
70 " WHERE ControlledNameId = ".
71 $this->DBFields[
"ControlledNameId"],
"VariantName");
73 $this->DBFields[
"VariantName"] = $VN;
77 # controlled name not found, create it
78 if ($this->ErrorStatus == self::STATUS_OK)
80 # add new controlled name
81 $DB->Query(
"INSERT INTO ControlledNames ".
82 "(FieldId, ControlledName, QualifierId)".
83 " VALUES (".intval($FieldId).
", '".addslashes($Name)
84 .
"', ".intval($QualifierId).
")");
86 # get name ID for new controlled name
87 $NameId = $DB->LastInsertId();
90 if (!empty($VariantName))
92 $DB->Query(
"INSERT INTO VariantNames ".
93 "(ControlledNameId, VariantName) ".
94 "VALUES (".intval($NameId).
", '"
95 .addslashes($VariantName).
"') ");
99 # Name Id passed in, look it up
100 if (!empty($NameId) && $NameId != -1)
102 $DB->Query(
"SELECT * FROM ControlledNames".
103 " WHERE ControlledNameId = ".intval($NameId));
104 $this->DBFields = $DB->FetchRow();
106 # cache the variant name separately
107 $VN = $DB->Query(
"SELECT VariantName FROM VariantNames".
108 " WHERE ControlledNameId = ".intval($NameId),
"VariantName");
110 $this->DBFields[
"VariantName"] = $VN;
113 # save supplied or generated controlled name ID
114 $this->
Id = intval($NameId);
116 # set error status if controlled name info not loaded
117 if (!array_key_exists(
"ControlledNameId", $this->DBFields)
118 || ($this->DBFields[
"ControlledNameId"] != $this->
Id))
120 $this->ErrorStatus = self::STATUS_INVALID_ID;
128 function Status() {
return $this->ErrorStatus; }
134 function Id() {
return $this->Id; }
142 {
return $this->UpdateValue(
"ControlledName", $NewValue); }
150 {
return $this->UpdateVariantValue(
"VariantName", $NewValue); }
158 {
return $this->UpdateValue(
"FieldId", $NewValue); }
166 {
return $this->UpdateValue(
"QualifierId", $NewValue); }
183 # if new qualifier supplied
186 # set new qualifier ID
189 # use new qualifier for return value
190 $Qualifier = $NewValue;
194 # if qualifier is available
197 # create qualifier object using stored ID
200 # if ID was zero and no name available for qualifieR
201 # (needed because some controlled name records in DB
202 # have 0 instead of NULL when no controlled name assigned)
203 # (NOTE: this is problematic if there is a qualifier with an
205 if (($this->
QualifierId() == 0) && !strlen($Qualifier->Name()))
207 # return NULL to indicate no qualifier
213 # return NULL to indicate no qualifier
218 # return qualifier to caller
232 # query for the controlled name
234 SELECT ControlledNameId FROM
235 ControlledNames WHERE FieldId='".addslashes($FieldId).
"'
236 AND ControlledName='".addslashes($ControlledName).
"'");
238 # return the controlled name IDs found, if any
239 return $Database->FetchColumn(
"ControlledNameId");
248 return $this->DB->Query(
"SELECT COUNT(*) AS Count FROM ".
249 "ResourceNameInts WHERE ControlledNameId = ".$this->
Id,
"Count");
259 # Get a list of resources associated with the new name
260 $this->DB->Query(
"SELECT ResourceId FROM ResourceNameInts "
261 .
"WHERE ControlledNameId = ".intval($NewNameId));
262 $NewNameResources = array();
263 while ($Row = $this->DB->FetchRow())
265 $NewNameResources[$Row[
"ResourceId"]]=1;
268 # Get a list of resources associated with the old name
269 $this->DB->Query(
"SELECT ResourceId FROM ResourceNameInts "
270 .
"WHERE ControlledNameId = ".intval($this->
Id));
271 $OldNameResources = array();
272 while ($Row = $this->DB->FetchRow())
274 $OldNameResources []= $Row[
"ResourceId"];
277 # Foreach of the old name resources, check to see if it's already
278 # associated with the new name. If not, associate it.
279 foreach ($OldNameResources as $ResourceId)
281 if (!isset($NewNameResources[$ResourceId]))
283 $this->DB->Query(
"INSERT INTO ResourceNameInts "
284 .
"(ResourceId, ControlledNameId) VALUES "
285 .
"(".intval($ResourceId).
",".intval($NewNameId).
")");
289 # Clear out all the associations to the old name
290 $this->DB->Query(
"DELETE FROM ResourceNameInts WHERE ControlledNameId = "
300 function Delete($DeleteIfHasResources = FALSE)
304 if ($DeleteIfHasResources || !$this->
InUse())
306 # delete this controlled name
307 $DB->Query(
"DELETE FROM ControlledNames WHERE ControlledNameId=".
310 # delete associated variant name
311 $DB->Query(
"DELETE FROM VariantNames WHERE ControlledNameId=".
314 if ($DeleteIfHasResources)
316 $DB->Query(
"DELETE FROM ResourceNameInts WHERE ".
317 "ControlledNameId=".$this->
Id);
322 # ---- PRIVATE INTERFACE -------------------------------------------------
327 private $ErrorStatus;
336 private function UpdateValue($FieldName, $NewValue)
338 return $this->DB->UpdateValue(
"ControlledNames", $FieldName,
339 $NewValue,
"ControlledNameId = ".$this->
Id,
340 $this->DBFields, TRUE);
350 private function UpdateVariantValue($FieldName, $NewValue)
352 if (!empty($NewValue))
354 # see if variant name exists for the controlled Name
355 $this->DB->Query(
"SELECT * from VariantNames WHERE ".
356 "ControlledNameId = ".$this->
Id);
358 # variant name exists so do an update
359 if ($this->DB->NumRowsSelected() > 0)
361 return $this->DB->UpdateValue(
"VariantNames",
362 $FieldName, $NewValue,
363 "ControlledNameId = ".$this->
Id,
364 $this->DBFields, TRUE);
366 # no variant name so do an insert
369 $this->DB->Query(
"INSERT into VariantNames ".
370 "(VariantName, ControlledNameId) VALUES ".
371 "('".addslashes($NewValue).
"', ".$this->
Id.
")");
374 # delete variant name
377 $this->DB->Query(
"Delete from VariantNames where ".
378 "ControlledNameId = ".$this->
Id);
RemapTo($NewNameId)
Change all currently associated Resources to be instead associated with another ControlledName.
Name($NewValue=DB_NOVALUE)
Get or set the controlled vocabulary term.
ControlledName($NameId, $Name=NULL, $FieldId=NULL, $QualifierId="NULL", $VariantName=NULL)
Class constructor.
Delete($DeleteIfHasResources=FALSE)
Remove ControlledName (and any accompanying associations from database.
static SearchForControlledName($ControlledName, $FieldId)
Check if the given controlled name already exists for a given field ID.
SQL database abstraction object with smart query caching.
VariantName($NewValue=DB_NOVALUE)
Get or set any variant terms for this controlled name .
Metadata type representing non-hierarchical controlled vocabulary values.
Qualifier($NewValue=DB_NOVALUE)
Get or set the Qualifier associated with this term via object.
const STATUS_OK
Successful execution.
FieldId($NewValue=DB_NOVALUE)
Get or set the MetadataField associated with this term.
Variant($NewValue=DB_NOVALUE)
Get or set the controlled name variant.
const STATUS_INVALID_ID
No ControlledName exists with specified ID.
QualifierId($NewValue=DB_NOVALUE)
Get or set the Qualifier associated with this term via ID.
const STATUS_EXISTS
ControlledName already exists with this term.
InUse()
See if ControlledName is currently associated with any Resources.
Status()
Check success of constructor.