CWIS Developer Documentation
FolderFactory.php
Go to the documentation of this file.
1 <?PHP
2 #
3 # FILE: FolderFactory.php
4 #
5 # Part of the Collection Workflow Information System (CWIS)
6 # Copyright 2012-2013 Edward Almasy and Internet Scout Research Group
7 # http://scout.wisc.edu/cwis/
8 #
9 
15 {
16 
17  # ---- PUBLIC INTERFACE --------------------------------------------------
18 
25  public function __construct($OwnerId = NULL)
26  {
27  # set up item factory base class
28  parent::__construct("Folder", "Folders", "FolderId", "FolderName", TRUE);
29 
30  # set up filtering to only folders by specified owner (if given)
31  if ($OwnerId !== NULL)
32  {
33  $this->OwnerId = intval($OwnerId);
34  $this->SetOrderOpsCondition("OwnerId = ".$this->OwnerId);
35  }
36  }
37 
45  public function CreateFolder($ItemType, $FolderName = NULL, $OwnerId = NULL)
46  {
47  # retrieve numerical item type
48  $ItemTypeId = ($ItemType === Folder::MIXEDCONTENT)
49  ? $ItemType : Folder::GetItemTypeId($ItemType);
50 
51  # use default owner if available and none specified
52  if (($OwnerId === NULL) & ($this->OwnerId !== NULL))
53  { $OwnerId = $this->OwnerId; }
54 
55  # add new folder to database
56  $this->DB->Query("INSERT INTO Folders SET"
57  ." ContentType = ".$ItemTypeId
58  .($FolderName ? ", FolderName = '".addslashes($FolderName)."'" : "")
59  .(($OwnerId !== NULL) ? ", OwnerId = ".intval($OwnerId) : ""));
60 
61  # retrieve ID of new folder
62  $Id = $this->DB->LastInsertId();
63 
64  # create new folder object and return it to caller
65  return new Folder($Id);
66  }
67 
75  public function CreateMixedFolder($FolderName = NULL, $OwnerId = NULL)
76  {
77  # create new mixed-content folder and return it to caller
78  return $this->CreateFolder(Folder::MIXEDCONTENT, $FolderName, $OwnerId);
79  }
80 
85  public function GetFolderCount()
86  {
87  return $this->GetItemCount(isset($this->OwnerId)
88  ? "OwnerId = ".intval($this->OwnerId) : NULL);
89  }
90 
100  public function GetFolderByNormalizedName($NormalizedName, $OwnerId = NULL)
101  {
102  # use default owner if available and none specified
103  if (($OwnerId === NULL) & ($this->OwnerId !== NULL))
104  { $OwnerId = $this->OwnerId; }
105 
106  # query database for folder ID
107  $FolderId = $this->DB->Query("SELECT FolderId FROM Folders"
108  ." WHERE NormalizedName = '".addslashes($NormalizedName)."'"
109  .(($OwnerId !== NULL) ? " AND OwnerId = ".$this->OwnerId : "")
110  ." ORDER BY FolderId ASC",
111  "FolderId");
112 
113  # if folder found with specified name and owner
114  if ($FolderId !== FALSE && !is_null($FolderId))
115  {
116  # create folder object and return it to caller
117  return new Folder($FolderId);
118  }
119  else
120  {
121  # return NULL to caller to indicate folder not found
122  return NULL;
123  }
124  }
125 
134  public function GetFoldersContainingItem($Item, $ItemType, $OwnerId = NULL,
135  $SharedFoldersOnly = FALSE)
136  {
137  # assume we won't find any folders
138  $Folders = array();
139 
140  # retrieve item ID
141  $ItemId = is_object($Item) ? $Item->Id() : $Item;
142 
143  # retrieve numerical item type
144  $ItemTypeId = ($ItemType === Folder::MIXEDCONTENT)
145  ? $ItemType : Folder::GetItemTypeId($ItemType);
146 
147  # use default owner if available and none specified
148  if (($OwnerId === NULL) & ($this->OwnerId !== NULL))
149  { $OwnerId = $this->OwnerId; }
150 
151  # query database for IDs of all folders that contain item
152  $this->DB->Query("
153  SELECT DISTINCT FolderItemInts.FolderId
154  FROM FolderItemInts
155  LEFT JOIN Folders
156  ON FolderItemInts.FolderId = Folders.FolderId
157  WHERE FolderItemInts.ItemId = '".intval($ItemId)."'
158  AND (FolderItemInts.ItemTypeId = '".intval($ItemTypeId)."'
159  OR Folders.ContentType = '".intval($ItemTypeId)."')
160  ".(($OwnerId !== NULL) ? " AND Folders.OwnerId = ".intval($OwnerId) : "")."
161  ".(($SharedFoldersOnly) ? " AND Folders.IsShared = 1" : ""));
162  $FolderIds = $this->DB->FetchColumn("FolderId");
163 
164  # create array of folders from folder IDs
165  foreach ($FolderIds as $Id)
166  {
167  $Folders[$Id] = new Folder($Id);
168  }
169 
170  # return folders (if any) to caller
171  return $Folders;
172  }
173 
190  public function GetFolders($ItemType = NULL, $OwnerId = NULL, $Name = NULL,
191  $Offset = 0, $Count = NULL)
192  {
193  # retrieve numerical item type
194  $ItemTypeId = ($ItemType === Folder::MIXEDCONTENT)
195  ? $ItemType : Folder::GetItemTypeId($ItemType);
196 
197  # retrieve IDs of all folders that match specified parameters
198  $Condition = ($ItemTypeId !== NULL) ? "ContentType = ".intval($ItemTypeId) : NULL;
199  if (($OwnerId !== NULL) || ($this->OwnerId !== NULL))
200  {
201  $Condition .= ($Condition ? " AND " : "")."OwnerId = "
202  .intval(($OwnerId !== NULL) ? $OwnerId : $this->OwnerId);
203  }
204  if ($Name !== NULL)
205  {
206  $Condition .= ($Condition ? " AND " : "")."FolderName = '"
207  .addslashes($Name)."'";
208  }
209  $FolderIds = $this->GetItemIds($Condition, FALSE, "FolderId");
210 
211  # pare down list to requested range
212  if ($Offset || $Count)
213  {
214  $FolderIds = $Count ? array_slice($FolderIds, $Offset, $Count)
215  : array_slice($FolderIds, $Offset);
216  }
217 
218  # create array of folders based on IDs
219  $Folders = array();
220  foreach ($FolderIds as $FolderId)
221  {
222  $Folders[$FolderId] = new Folder($FolderId);
223  }
224 
225  # return folders (if any) to caller
226  return $Folders;
227  }
228 
229 
230  # ---- PRIVATE INTERFACE -------------------------------------------------
231 
232  private $OwnerId;
233 }
__construct($OwnerId=NULL)
Constructor for FolderFactory.
const MIXEDCONTENT
Definition: Folder.php:461
GetFolders($ItemType=NULL, $OwnerId=NULL, $Name=NULL, $Offset=0, $Count=NULL)
Retrieve folders with specified name, owner, or default content type.
GetItemCount($Condition=NULL, $IncludeTempItems=FALSE)
Get count of items.
Factory object for Folder class, used to retrieve and manage Folders and groups of Folders...
Folder object used to create and manage groups of items.
Definition: Folder.php:17
static GetItemTypeId($TypeName)
Definition: Folder.php:470
CreateMixedFolder($FolderName=NULL, $OwnerId=NULL)
Create new folder that can contain multiple types of items.
CreateFolder($ItemType, $FolderName=NULL, $OwnerId=NULL)
Create new folder that will contain only one type of item.
GetFolderByNormalizedName($NormalizedName, $OwnerId=NULL)
Retrieve folder with specified normalized name (as generated by Folder::NormalizeFolderName() method)...
SetOrderOpsCondition($Condition)
Set SQL condition (added to WHERE clause) used to select items for ordering operations.
Common factory class for item manipulation.
Definition: ItemFactory.php:17
GetItemIds($Condition=NULL, $IncludeTempItems=FALSE, $SortField=NULL, $SortAscending=TRUE)
Return array of item IDs.
GetFolderCount()
Get total number of folders currently existing.
GetFoldersContainingItem($Item, $ItemType, $OwnerId=NULL, $SharedFoldersOnly=FALSE)
Retrieve folders containing specified item.