/**
  * Return parent folder instance
  *
  * @param void
  * @return ProjectFolder
  */
 function getFolder()
 {
     if (is_null($this->folder)) {
         $this->folder = ProjectFolders::findById($this->getFolderId());
         if ($this->folder instanceof ProjectFolder && $this->folder->getProjectId() != $this->getProjectId()) {
             $this->folder = null;
         }
         // if
     }
     // if
     return $this->folder;
 }
 /**
  * Return paged project files
  *
  * @param Project $project
  * @param ProjectFolder $folder
  * @param boolean $hide_private Don't show private files
  * @param string $order Order files by name or by posttime (desc)
  * @param integer $page Current page
  * @param integer $files_per_page Number of files that will be showed per single page
  * @param boolean $group_by_order Group files by order field
  * @return array
  */
 static function getProjectFiles(Project $project, $folder = null, $hide_private = false, $order = null, $page = null, $files_per_page = null, $group_by_order = false)
 {
     trace(__FILE__, 'getProjectFiles()');
     if ($order == self::ORDER_BY_POSTTIME) {
         $order_by = '`created_on` DESC';
     } else {
         $order_by = '`filename`';
     }
     // if
     // #PAGE# is reserved as a placeholder
     //if (!($page == '#PAGE#')) {
     if ((int) $page < 1) {
         $page = 1;
     }
     if ((int) $files_per_page < 1) {
         $files_per_page = 10;
     }
     //} // if
     $folder_ids = array();
     if ($folder instanceof ProjectFolder && $folder->getProjectId() == $project->getId()) {
         if ($hide_private) {
             $conditions = array('`project_id` = ? AND `folder_id` = ? AND `is_private` = ? AND `is_visible` = ?', $project->getId(), $folder->getId(), false, true);
         } else {
             $conditions = array('`project_id` = ? AND `folder_id` = ? AND `is_visible` = ?', $project->getId(), $folder->getId(), true);
         }
         // if
     } else {
         if ($hide_private) {
             $conditions = array('`project_id` = ? AND `is_private` = ? AND `is_visible` = ?', $project->getId(), false, true);
         } else {
             $conditions = array('`project_id` = ? AND `is_visible` = ?', $project->getId(), true);
         }
         // if
     }
     // if
     list($files, $pagination) = ProjectFiles::paginate(array('conditions' => $conditions, 'order' => $order_by), $files_per_page, $page);
     if ($group_by_order) {
         $grouped_files = array();
         if (is_array($files) && count($files)) {
             $today = DateTimeValueLib::now();
             foreach ($files as $file) {
                 $group_by_str = '';
                 if ($order == self::ORDER_BY_POSTTIME) {
                     $created_on = $file->getCreatedOn();
                     if ($created_on->getYear() == $today->getYear()) {
                         $group_by_str = format_descriptive_date($created_on);
                     } else {
                         $group_by_str = format_date($created_on);
                     }
                     // if
                 } else {
                     $group_by_str = strtoupper(substr_utf($file->getFilename(), 0, 1));
                 }
                 // if
                 if (!isset($grouped_files[$group_by_str]) || !is_array($grouped_files[$group_by_str])) {
                     $grouped_files[$group_by_str] = array();
                 }
                 $grouped_files[$group_by_str][] = $file;
             }
             // foreach
         }
         // if
         $files = is_array($grouped_files) ? $grouped_files : null;
     }
     // if
     return array($files, $pagination);
 }