[ Index ]

Source Code Reference for V1.00

title

Body

[close]

/modules/files/ -> folders_table.php (source)

   1  <?php /* $Id: folders_table.php 192 2008-07-24 02:13:49Z pedroix $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/trunk/modules/files/folders_table.php $ */
   2  if (!defined('W2P_BASE_DIR')) {
   3      die('You should not access this file directly.');
   4  }
   5  global $AppUI, $deny1, $canRead, $canEdit, $allowed_folders_ary, $denied_folders_ary, $tab, $folder, $cfObj, $m, $a, $company_id, $allowed_companies, $showProject;
   6  
   7  // modified later by Pablo Roca (proca) in 18 August 2003 - added page support
   8  // Files modules: index page re-usable sub-table
   9  
  10  // add to allow for returning to other modules besides Files
  11  $current_uriArray = parse_url($_SERVER['REQUEST_URI']);
  12  $current_uri = $current_uriArray['query'] . $current_uriArray['fragment'];
  13  
  14  // ****************************************************************************
  15  // Page numbering variables
  16  // Pablo Roca (pabloroca@Xmvps.org) (Remove the X)
  17  // 19 August 2003
  18  //
  19  // $folder          - current folder
  20  // $page            - actual page to show
  21  // $xpg_pagesize    - max rows per page
  22  // $xpg_min         - initial record in the SELECT LIMIT
  23  // $xpg_totalrecs   - total rows selected
  24  // $xpg_sqlrecs     - total rows from SELECT LIMIT
  25  // $xpg_total_pages - total pages
  26  // $xpg_next_page   - next pagenumber
  27  // $xpg_prev_page   - previous pagenumber
  28  // $xpg_break       - stop showing page numbered list?
  29  // $xpg_sqlcount    - SELECT for the COUNT total
  30  // $xpg_sqlquery    - SELECT for the SELECT LIMIT
  31  // $xpg_result      - pointer to results from SELECT LIMIT
  32  function showfnavbar($xpg_totalrecs, $xpg_pagesize, $xpg_total_pages, $page, $folder) {
  33      global $AppUI, $tab, $m, $a;
  34      $xpg_break = false;
  35      $xpg_prev_page = $xpg_next_page = 1;
  36  
  37      $s = '<table width="100%" cellspacing="0" cellpadding="0" border="0"><tr>';
  38  
  39      if ($xpg_totalrecs > $xpg_pagesize) {
  40          $xpg_prev_page = $page - 1;
  41          $xpg_next_page = $page + 1;
  42          // left buttoms
  43          if ($xpg_prev_page > 0) {
  44              $s .= '<td align="left" width="15%"><a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&amp;folder=' . $folder . '&amp;page=1"><img src="' . w2PfindImage('navfirst.gif') . '" border="0" Alt="First Page"></a>&nbsp;&nbsp;';
  45              $s .= '<a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&amp;folder=' . $folder . '&amp;page=' . $xpg_prev_page . '"><img src="' . w2PfindImage('navleft.gif') . '" border="0" Alt="Previous page (' . $xpg_prev_page . ')"></a></td>';
  46          } else {
  47              $s .= '<td width="15%">&nbsp;</td>';
  48          }
  49  
  50          // central text (files, total pages, ...)
  51          $s .= '<td align="center" width="70%">';
  52          //$s .= "$xpg_totalrecs " . $AppUI->_('File(s)') . " ($xpg_total_pages " . $AppUI->_('Page(s)') . ")";
  53          $s .= $xpg_totalrecs . ' ' . $AppUI->_('File(s)') . ' ' . $AppUI->_('Pages') . ': [ ';
  54  
  55          // begin page numbers
  56          for ($n = $page > 16 ? $page - 16 : 1; $n <= $xpg_total_pages; $n++) {
  57              if ($n == $page) {
  58                  $s .= '<b>' . $n . '</b></a>';
  59              } else {
  60                  $s .= '<a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&amp;folder=' . $folder . '&amp;page=' . $n . '"></a>';
  61              }
  62              if ($n >= 30 + $page - 15) {
  63                  $xpg_break = true;
  64                  break;
  65              } else
  66                  if ($n < $xpg_total_pages) {
  67                      $s .= ' | ';
  68                  }
  69          }
  70  
  71          if (!isset($xpg_break)) { // are we supposed to break ?
  72              if ($n == $page) {
  73                  $s .= '<' . $n . '</a>';
  74              } else {
  75                  $s .= '<a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&amp;page=' . $xpg_total_pages . '"></a>';
  76              }
  77          }
  78          $s .= ' ] </td>';
  79  
  80          // right buttoms
  81          if ($xpg_next_page <= $xpg_total_pages) {
  82              $s .= '<td align="right" width="15%"><a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&amp;folder=' . $folder . '&amp;page=' . $xpg_next_page . '"><img src="' . w2PfindImage('navright.gif') . '" border="0" Alt="Next Page (' . $xpg_next_page . ')"></a>&nbsp;&nbsp;';
  83              $s .= '<a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&amp;folder=' . $folder . '&amp;page=' . $xpg_total_pages . '"><img src="' . w2PfindImage('navlast.gif') . '" border="0" Alt="Last Page"></a></td>';
  84          } else {
  85              $s .= '<td width="15%">&nbsp;</td></tr>';
  86          }
  87      } else { // or we dont have any files..
  88          $s .= '<td align="center">';
  89          if ($xpg_next_page > $xpg_total_pages) {
  90              $s .= $xpg_sqlrecs . ' ' . $AppUI->_('Files') . ' ';
  91          }
  92          $s .= '</td></tr>';
  93      }
  94      $s .= '</table>';
  95      return $s;
  96  }
  97  
  98  $page = w2PgetParam($_GET, 'page', 1);
  99  
 100  if (!isset($project_id)) {
 101      $project_id = w2PgetParam($_REQUEST, 'project_id', 0);
 102  }
 103  if (!$project_id) {
 104      $showProject = true;
 105  }
 106  
 107  // get company to filter files by
 108  //if (isset( $_POST['company_id'] )) {
 109  //    $AppUI->setState( 'FileIdxCompany', intval( $_POST['company_id'] ) );
 110  //}
 111  //$company_id = $AppUI->getState( 'FileIdxCompany' ) !== NULL ? $AppUI->getState( 'FileIdxCompany' ) : $AppUI->user_company;
 112  if (!isset($company_id)) {
 113      $company_id = w2PgetParam($_REQUEST, 'company_id', 0);
 114  }
 115  
 116  $obj = new CCompany();
 117  $allowed_companies_ary = $obj->getAllowedRecords($AppUI->user_id, 'company_id,company_name', 'company_name');
 118  $allowed_companies = implode(',', array_keys($allowed_companies_ary));
 119  
 120  if (!isset($task_id)) {
 121      $task_id = w2PgetParam($_REQUEST, 'task_id', 0);
 122  }
 123  
 124  global $xpg_min, $xpg_pagesize;
 125  $xpg_pagesize = 30;
 126  $xpg_min = $xpg_pagesize * ($page - 1); // This is where we start our record set from
 127  
 128  // load the following classes to retrieved denied records
 129  include_once ($AppUI->getModuleClass('projects'));
 130  include_once ($AppUI->getModuleClass('tasks'));
 131  
 132  $project = new CProject();
 133  $deny1 = $project->getDeniedRecords($AppUI->user_id);
 134  
 135  $task = new CTask();
 136  $deny2 = $task->getDeniedRecords($AppUI->user_id);
 137  
 138  global $file_types;
 139  $file_types = w2PgetSysVal('FileType');
 140  
 141  $folder = $folder ? $folder : 0;
 142  
 143  // SQL text for count the total recs from the selected option
 144  $q = new DBQuery();
 145  $q->addTable('files');
 146  $q->addQuery('count(files.file_id)');
 147  $q->addJoin('projects', 'p', 'p.project_id = file_project');
 148  $q->addJoin('users', 'u', 'u.user_id = file_owner');
 149  $q->addJoin('tasks', 't', 't.task_id = file_task');
 150  $q->addJoin('file_folders', 'ff', 'ff.file_folder_id = file_folder');
 151  $q->addWhere('file_folder = ' . (int)$folder);
 152  if (count($deny1) > 0) {
 153      $q->addWhere('file_project NOT IN (' . implode(',', $deny1) . ')');
 154  }
 155  if (count($deny2) > 0) {
 156      $q->addWhere('file_task NOT IN (' . implode(',', $deny2) . ')');
 157  }
 158  if ($project_id) {
 159      $q->addWhere('file_project = ' . (int)$project_id);
 160  }
 161  if ($task_id) {
 162      $q->addWhere('file_task = ' . (int)$task_id);
 163  }
 164  if ($company_id) {
 165      $q->innerJoin('companies', 'co', 'co.company_id = p.project_company');
 166      $q->addWhere('company_id = ' . (int)$company_id);
 167      $q->addWhere('company_id IN (' . $allowed_companies . ')');
 168  }
 169  
 170  $q->addGroup('file_folder_name');
 171  $q->addGroup('project_name');
 172  $q->addGroup('file_name');
 173  
 174  // counts total recs from selection
 175  $xpg_totalrecs = count($q->loadList());
 176  $q->clear();
 177  
 178  // How many pages are we dealing with here ??
 179  $xpg_total_pages = ($xpg_totalrecs > $xpg_pagesize) ? ceil($xpg_totalrecs / $xpg_pagesize) : 1;
 180  
 181  //shownavbar($xpg_totalrecs, $xpg_pagesize, $xpg_total_pages, $page, $folder);
 182  
 183  
 184  ?>
 185  <script type="text/JavaScript">
 186  function expand(id){
 187      var element = document.getElementById(id);
 188      element.style.display = (element.style.display == '' || element.style.display == 'none') ? 'block' : 'none';
 189  }
 190  function addBulkComponent(li) {
 191  //IE
 192      if (document.all || navigator.appName == 'Microsoft Internet Explorer') {
 193          var form = document.frm_bulk;
 194          var ni = document.getElementById('tbl_bulk');
 195          var newitem = document.createElement('input');
 196          var htmltxt = '';
 197          newitem.id = 'bulk_selected_file['+li+']';
 198          newitem.name = 'bulk_selected_file['+li+']';
 199          newitem.type = 'hidden';
 200          ni.appendChild(newitem);
 201      } else {
 202  //Non IE
 203          var form = document.frm_bulk;
 204          var ni = document.getElementById('tbl_bulk');
 205          var newitem = document.createElement('input');
 206          newitem.setAttribute('id', 'bulk_selected_file['+li+']');
 207          newitem.setAttribute('name', 'bulk_selected_file['+li+']');
 208          newitem.setAttribute('type', 'hidden');
 209          ni.appendChild(newitem);
 210      }
 211  }
 212  
 213  function removeBulkComponent(li) {
 214      var t = document.getElementById('tbl_bulk');
 215      var old = document.getElementById('bulk_selected_file['+li+']');
 216      t.removeChild(old);
 217  }
 218  </script>
 219  <style>
 220  #folder-list {
 221  /*  margin-left: -25px;*/
 222  }
 223  #folder-list ul {
 224      padding: 0;
 225      margin: 0;
 226  }
 227  #folder-list ul li {
 228      list-style: none;
 229      margin-top: -1px;
 230      margin-bottom: 0px;
 231      border: 0px solid #CCC;
 232  }
 233  #folder-list ul li ul li {
 234      margin-left: 25px;
 235  }
 236  
 237  .folder-name {
 238      display: block;
 239      height: 16px;
 240      padding-top: 0px;
 241      background: white;
 242      border-bottom: 1px solid #333;
 243      border-right: 1px solid #333;
 244      margin-bottom: 0px;
 245  }
 246  
 247  .folder-name-current {
 248      display: block;
 249      margin-bottom: 5px;
 250      font-weight: bold;
 251      border-bottom: 1px solid #333;
 252  }
 253  
 254  .has-files {
 255      font-weight: bold;
 256  }
 257  
 258  #folder-list .tbl {
 259      margin-top: 2px;
 260  }
 261  #folder-list .tbl th {
 262      border: none;
 263  }
 264  
 265  #folder-list p {
 266      padding: 3px 5px;
 267      margin-top: -5px;
 268      margin-left: 25px;
 269      margin-right: 25px;
 270      border: 1px solid #CCC;
 271      border-top: none;
 272      background: #F9F9F9;
 273  }
 274  </style>
 275  
 276  <?php
 277  // $parent is the parent of the children we want to see
 278  // $level is increased when we go deeper into the tree,
 279  //        used to display a nice indented tree
 280  function getFolders($parent, $level = 0) {
 281      global $AppUI, $allowed_folders_ary, $denied_folders_ary, $tab, $m, $a, $company_id, $allowed_companies, $project_id, $task_id, $current_uri, $file_types;
 282      // retrieve all children of $parent
 283  
 284      $folder_where = 'file_folder_parent = \'' . $parent . '\'';
 285      //   $folder_where .= (count($denied_folders_ary) > 0) ? "\nAND file_folder_id NOT IN (" . implode(',', $denied_folders_ary) . ")" : "";
 286  
 287      $q = new DBQuery();
 288      $q->addTable('file_folders');
 289      $q->addQuery('*');
 290      $q->addWhere($folder_where);
 291      $q->addOrder('file_folder_name');
 292      $folders = $q->loadList();
 293      $q->clear();
 294  
 295      $s = '';
 296      // display each child
 297      foreach ($folders as $row) {
 298          if (array_key_exists($row['file_folder_id'], $allowed_folders_ary) or array_key_exists($parent, $allowed_folders_ary)) {
 299              // indent and display the title of this child
 300              $file_count = countFiles($row['file_folder_id']);
 301              $s .= '<ul><li><table width="100%"><tr><td><span class="folder-name">';
 302              if ($m == 'files') {
 303                  $s .= '<a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&folder=' . $row['file_folder_id'] . '" name="ff' . $row['file_folder_id'] . '">';
 304              }
 305  
 306              $s .= w2PshowImage('folder5_small.png', '16', '16', 'folder icon', 'show only this folder', 'files');
 307              if ($m == 'files') {
 308                  '</a>' . '<a href="./index.php?m=' . $m . '&amp;a=' . $a . '&amp;tab=' . $tab . '&folder=' . $row['file_folder_id'] . '" name="ff' . $row['file_folder_id'] . '">';
 309              }
 310              $s .= $row['file_folder_name'];
 311              if ($m == 'files') {
 312                  '</a>';
 313              }
 314              if ($file_count > 0) {
 315                  $s .= ' <a href="javascript: void(0);" onClick="expand(\'files_' . $row['file_folder_id'] . '\')" class="has-files">(' . $file_count . ' files) +</a>';
 316              }
 317              $s .= '</td><form name="frm_remove_folder_' . $row['file_folder_id'] . '" action="?m=files" method="post">
 318                  <input type="hidden" name="dosql" value="do_folder_aed" />
 319                  <input type="hidden" name="del" value="1" />
 320                  <input type="hidden" name="file_folder_id" value="' . $row['file_folder_id'] . '" />
 321                  <input type="hidden" name="redirect" value="' . $current_uri . '" />
 322                  </form>';
 323              $s .= '<td align="right" width="64" nowrap="nowrap">';
 324              $s .= '<a href="./index.php?m=files&amp;a=addedit_folder&amp;folder=' . $row['file_folder_id'] . '">' . w2PshowImage('filesaveas.png', '16', '16', 'edit icon', 'edit this folder', 'files') . '</a>' . '<a href="./index.php?m=files&amp;a=addedit_folder&amp;file_folder_parent=' . $row['file_folder_id'] . '&amp;file_folder_id=0">' . w2PshowImage('edit_add.png', '', '', 'new folder', 'add a new subfolder', 'files') . '</a>' . '<a href="javascript: void(0);" onclick="if (confirm(\'Are you sure you want to delete this folder?\')) {document.frm_remove_folder_' . $row['file_folder_id'] . '.submit()}">' . w2PshowImage('remove.png', '', '', 'delete icon', 'delete this folder', 'files') . '</a>' . '<a href="./index.php?m=files&amp;a=addedit&amp;folder=' . $row['file_folder_id'] . '&amp;project_id=' . $project_id .
 325                  '&amp;file_id=0">' . w2PshowImage('folder_new.png', '', '', 'new file', 'add new file to this folder', 'files') . '</a>';
 326              $s .= '</td></tr></table></span>';
 327              if ($file_count > 0) {
 328                  $s .= '<div class="files-list" id="files_' . $row['file_folder_id'] . '" style="display: none;">';
 329                  $s .= displayFiles($row['file_folder_id']);
 330                  $s .= "</div>";
 331              }
 332          }
 333          // call this function again to display this
 334          // child's children
 335          if (!getFolders($row['file_folder_id'], $level + 1)) {
 336              $s .= '</li>';
 337          } else {
 338              $s .= '</li></ul>';
 339          }
 340      }
 341      echo $s;
 342      return true;
 343  }
 344  
 345  function countFiles($folder) {
 346      global $AppUI, $company_id, $allowed_companies, $tab;
 347      global $deny1, $deny2, $project_id, $task_id, $showProject, $file_types;
 348  
 349      $q = new DBQuery();
 350      $q->addTable('files');
 351      $q->addQuery('count(files.file_id)', 'file_in_folder');
 352      $q->addJoin('projects', 'p', 'p.project_id = file_project');
 353      $q->addJoin('users', 'u', 'u.user_id = file_owner');
 354      $q->addJoin('tasks', 't', 't.task_id = file_task');
 355      $q->addJoin('file_folders', 'ff', 'ff.file_folder_id = file_folder');
 356      $q->addWhere('file_folder = ' . (int)$folder);
 357      if (count($deny1) > 0) {
 358          $q->addWhere('file_project NOT IN (' . implode(',', $deny1) . ')');
 359      }
 360      if (count($deny2) > 0) {
 361          $q->addWhere('file_task NOT IN (' . implode(',', $deny2) . ')');
 362      }
 363      if ($project_id) {
 364          $q->addWhere('file_project = ' . (int)$project_id);
 365      }
 366      if ($task_id) {
 367          $q->addWhere('file_task = ' . (int)$task_id);
 368      }
 369      if ($company_id) {
 370          $q->innerJoin('companies', 'co', 'co.company_id = p.project_company');
 371          $q->addWhere('company_id = ' . (int)$company_id);
 372          $q->addWhere('company_id IN (' . $allowed_companies . ')');
 373      }
 374  
 375      $files_in_folder = $q->loadResult();
 376      $q->clear();
 377  
 378      return $files_in_folder;
 379  }
 380  
 381  function displayFiles($folder) {
 382      global $m, $a, $tab, $AppUI, $xpg_min, $xpg_pagesize;
 383      global $deny1, $deny2, $project_id, $task_id, $showProject, $file_types, $cfObj;
 384      global $xpg_totalrecs, $xpg_total_pages, $page;
 385      global $company_id, $allowed_companies, $current_uri, $w2Pconfig, $canEdit, $canRead;
 386  
 387      $df = $AppUI->getPref('SHDATEFORMAT');
 388      $tf = $AppUI->getPref('TIMEFORMAT');
 389  
 390      // SETUP FOR FILE LIST
 391      $q = new DBQuery();
 392      $q->addTable('files');
 393      $q->addQuery('files.*,count(file_version) as file_versions,round(max(file_version), 2) as file_lastversion,file_folder_id, file_folder_name,project_name, project_color_identifier,contact_first_name, contact_last_name,task_name,task_id');
 394      $q->addJoin('projects', 'p', 'p.project_id = file_project');
 395      $q->addJoin('users', 'u', 'u.user_id = file_owner');
 396      $q->addJoin('contacts', 'c', 'c.contact_id = u.user_contact');
 397      $q->addJoin('tasks', 't', 't.task_id = file_task');
 398      $q->addJoin('file_folders', 'ff', 'ff.file_folder_id = file_folder');
 399      $q->addWhere('file_folder = ' . (int)$folder);
 400      if (count($deny1) > 0) {
 401          $q->addWhere('file_project NOT IN (' . implode(',', $deny1) . ')');
 402      }
 403      if (count($deny2) > 0) {
 404          $q->addWhere('file_task NOT IN (' . implode(',', $deny2) . ')');
 405      }
 406      if ($project_id) {
 407          $q->addWhere('file_project = ' . (int)$project_id);
 408      }
 409      if ($task_id) {
 410          $q->addWhere('file_task = ' . (int)$task_id);
 411      }
 412      if ($company_id) {
 413          $q->innerJoin('companies', 'co', 'co.company_id = p.project_company');
 414          $q->addWhere('company_id = ' . (int)$company_id);
 415          $q->addWhere('company_id IN (' . $allowed_companies . ')');
 416      }
 417  
 418      $q->addGroup('file_folder');
 419      $q->addGroup('project_name');
 420      $q->addGroup('file_version_id');
 421  
 422      $q->addOrder('file_folder');
 423      $q->addOrder('project_name');
 424      $q->addOrder('file_name');
 425  
 426      $q->setLimit($xpg_pagesize, $xpg_min);
 427  
 428      $qv = new DBQuery();
 429      $qv->addTable('files');
 430      $qv->addQuery('files.file_id, file_version, file_project, file_name, file_task, file_description, user_username as file_owner, file_size, file_category, file_type, file_date, file_folder_name, file_co_reason, contact_first_name, contact_last_name');
 431      $qv->addJoin('projects', 'p', 'p.project_id = file_project');
 432      $qv->addJoin('users', 'u', 'u.user_id = file_owner');
 433      $qv->addJoin('contacts', 'c', 'c.contact_id = u.user_contact');
 434      $qv->addJoin('tasks', 't', 't.task_id = file_task');
 435      $qv->addJoin('file_folders', 'ff', 'ff.file_folder_id = file_folder');
 436      $qv->addWhere('file_folder = ' . (int)$folder);
 437      if ($project_id) {
 438          $qv->addWhere('file_project = ' . (int)$project_id);
 439      }
 440      if ($task_id) {
 441          $qv->addWhere('file_task = ' . (int)