[Summary view]
[Print]
[Text view]
1 <?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
8
9
10
11 $current_uriArray = parse_url($_SERVER['REQUEST_URI']);
12 $current_uri = $current_uriArray['query'] . $current_uriArray['fragment'];
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
43 if ($xpg_prev_page > 0) {
44 $s .= '<td align="left" width="15%"><a href="./index.php?m=' . $m . '&a=' . $a . '&tab=' . $tab . '&folder=' . $folder . '&page=1"><img src="' . w2PfindImage('navfirst.gif') . '" border="0" Alt="First Page"></a> ';
45 $s .= '<a href="./index.php?m=' . $m . '&a=' . $a . '&tab=' . $tab . '&folder=' . $folder . '&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%"> </td>';
48 }
49
50
51 $s .= '<td align="center" width="70%">';
52
53 $s .= $xpg_totalrecs . ' ' . $AppUI->_('File(s)') . ' ' . $AppUI->_('Pages') . ': [ ';
54
55
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 . '&a=' . $a . '&tab=' . $tab . '&folder=' . $folder . '&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 . '&a=' . $a . '&tab=' . $tab . '&page=' . $xpg_total_pages . '"></a>';
76 }
77 }
78 $s .= ' ] </td>';
79
80
81 if ($xpg_next_page <= $xpg_total_pages) {
82 $s .= '<td align="right" width="15%"><a href="./index.php?m=' . $m . '&a=' . $a . '&tab=' . $tab . '&folder=' . $folder . '&page=' . $xpg_next_page . '"><img src="' . w2PfindImage('navright.gif') . '" border="0" Alt="Next Page (' . $xpg_next_page . ')"></a> ';
83 $s .= '<a href="./index.php?m=' . $m . '&a=' . $a . '&tab=' . $tab . '&folder=' . $folder . '&page=' . $xpg_total_pages . '"><img src="' . w2PfindImage('navlast.gif') . '" border="0" Alt="Last Page"></a></td>';
84 } else {
85 $s .= '<td width="15%"> </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
108
109
110
111
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);
127
128
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
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
175 $xpg_totalrecs = count($q->loadList());
176 $q->clear();
177
178
179 $xpg_total_pages = ($xpg_totalrecs > $xpg_pagesize) ? ceil($xpg_totalrecs / $xpg_pagesize) : 1;
180
181
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
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
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
221
222 }
223
224 padding: 0;
225 margin: 0;
226 }
227
228 list-style: none;
229 margin-top: -1px;
230 margin-bottom: 0px;
231 border: 0px solid #CCC;
232 }
233
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
259 margin-top: 2px;
260 }
261
262 border: none;
263 }
264
265
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
278
279
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
283
284 $folder_where = 'file_folder_parent = \'' . $parent . '\'';
285
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
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
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 . '&a=' . $a . '&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 . '&a=' . $a . '&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&a=addedit_folder&folder=' . $row['file_folder_id'] . '">' . w2PshowImage('filesaveas.png', '16', '16', 'edit icon', 'edit this folder', 'files') . '</a>' . '<a href="./index.php?m=files&a=addedit_folder&file_folder_parent=' . $row['file_folder_id'] . '&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&a=addedit&folder=' . $row['file_folder_id'] . '&project_id=' . $project_id .
325 '&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
334
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
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)