source: branches/2.2/filemanager/inc/class.uifilemanager.inc.php @ 3591

Revision 3591, 48.9 KB checked in by alexandrecorreia, 14 years ago (diff)

Ticket #1395 - Padronizacao das janelas do filemanager com as do Expresso ( Criação das Pastas ).

Line 
1<?php
2        /**************************************************************************\
3        * -------------------------------------------------------------------------*
4        * This library is free software; you can redistribute it and/or modify it  *
5        * under the terms of the GNU Lesser General Public License as published by *
6        * the Free Software Foundation; either version 2.1 of the License,         *
7        * or any later version.                                                    *
8        * This library is distributed in the hope that it will be useful, but      *
9        * WITHOUT ANY WARRANTY; without even the implied warranty of               *
10        * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     *
11        * See the GNU Lesser General Public License for more details.              *
12        * You should have received a copy of the GNU Lesser General Public License *
13        * along with this library; if not, write to the Free Software Foundation,  *
14        * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA            *
15        \**************************************************************************/
16
17        /* $Id: class.uifilemanager.inc.php 17511 2004-12-12 06:35:24Z dawnlinux $ */
18
19        class uifilemanager
20        {
21                var $public_functions = array(
22                        'index' => True,
23                        'help'  => True,
24                        'view'  => True,
25                        'export'=> True,
26                        'touch' => True,
27                        'history' => True,
28                        'edit' => True,
29                        'fileModels'=>True,
30                        'getReturnExecuteForm' => True,
31                        'dir_ls' => True,
32                        'search' => True,
33                        'get_folders_list' => True,
34                        'showUploadboxes' => True,
35                        'createdir' => True,
36                        'removedir' => True,
37                        'uploadModel'=>True
38                );
39
40                //keep
41                var $bo;
42                var $vfs_functions;
43                var $t; //template object
44                var $dispath;
45                var $cwd;
46                var $lesspath;
47                var $readable_groups;
48                var $files_array;
49                var $numoffiles;
50                var $dispsep;
51
52                var $target;
53
54                var $prefs;//array
55
56                var $groups_applications;
57
58                var $current_config;
59                var $dirs;
60                var $to;
61                var $changedir; // for switching dir.
62                var $cdtodir; // for switching dir.
63                var $newfile_or_dir;
64                var $newfile_x;
65                var $createfile_var;
66                var $move_to_x;
67                var $copy_to_x;
68                var $edit_x;
69                var $edit_file;
70                var $edit_preview_x;
71                var $edit_save_x;
72                var $edit_save_done_x;
73                var $edit_cancel_x;
74
75                // this ones must be checked thorougly;
76                var $fileman = Array();
77                //var $fileman;
78                var $path;
79                var $file; // FIXME WHERE IS THIS FILLED?
80                var $sortby;
81                var $messages;
82                var $limit; //for paging (paginacao)
83                var $offset; //for paging (paginacao)
84
85                var $now;
86
87                function uifilemanager()
88                {
89                        $this->messages = &$_SESSION['phpgw_info']['filemanager']['user']['messages'];
90
91                        $GLOBALS['phpgw']->browser = CreateObject('phpgwapi.browser');
92
93                        $this->now = date('Y-m-d');
94
95                        $this->bo = CreateObject('filemanager.bofilemanager');
96
97                        $this->vfs_functions = CreateObject('filemanager.vfs_functions');
98
99                        $this->t = $GLOBALS['phpgw']->template;
100                        $c = CreateObject('phpgwapi.config','filemanager');
101                        $c->read_repository();
102                        $this->current_config = $c->config_data;
103
104
105                        // here local vars are created from the HTTP vars
106                        @reset($GLOBALS['HTTP_POST_VARS']);
107                        while(list($name,) = @each($GLOBALS['HTTP_POST_VARS']))
108                        {
109                                $this->$name = $GLOBALS['HTTP_POST_VARS'][$name];
110                        }
111
112                        @reset($GLOBALS['HTTP_GET_VARS']);
113                        while(list($name,) = @each($GLOBALS['HTTP_GET_VARS']))
114                        {
115                                $$name = $GLOBALS['HTTP_GET_VARS'][$name];
116                                $this->$name = $GLOBALS['HTTP_GET_VARS'][$name];
117
118                        }
119
120                        $to_decode = array
121                        (
122                                'op'    => array('op' => ''),
123                                'path'  => array('path' => ''),
124                                'filename' => array('filename' => ''),
125                                'file'  => array('file' => ''),
126                                'sortby'        => array('sortby' => ''),
127                                'messages'      => array('messages'     => ''),
128                                'show_upload_boxes'     => array('show_upload_boxes' => ''),
129                                'from'  =>      array('from' => ''),
130                                'to' => array('to' => '')
131
132                        );
133
134                        reset($to_decode);
135                        while(list($var, $conditions) = each($to_decode))
136                        {
137                                while(list($condvar, $condvalue) = each($conditions))
138                                {
139                                        if(isset($$condvar) && ($condvar == $var || $$condvar == $condvalue))
140                                        {
141                                                $this->$var = stripslashes(base64_decode($$var));
142                                        }
143                                }
144                        }
145
146                        // get appl. and user prefs
147                        $pref = CreateObject('phpgwapi.preferences', $this->bo->userinfo['username']);
148                        $pref->read_repository();
149                        //$GLOBALS['phpgw']->hooks->single('add_def_pref', $GLOBALS['appname']);
150                        $pref->save_repository(True);
151                        $pref_array = $pref->read_repository();
152                        $this->prefs = $pref_array[$this->bo->appname]; //FIXME check appname var in _debug_array
153
154                        //always show name
155
156                        $this->prefs[name] =1;
157
158
159                        if($this->prefs['viewinnewwin'])
160                        {
161                                $this->target = '_blank';
162                        }
163
164
165                        /*
166                                Check for essential directories
167                                admin must be able to disable these tests
168                        */
169                       
170                        // check if basedir exist
171                        $test=$this->bo->vfs->get_real_info(array('string' => $this->bo->basedir, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
172                        if($test[mime_type]!='Directory')
173                        {
174                                die('Base directory does not exist, Ask adminstrator to check the global configuration.');
175                        }
176
177                        $test=$this->bo->vfs->get_real_info(array('string' => $this->bo->basedir.$this->bo->fakebase, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
178                        if($test[mime_type]!='Directory')
179                        {
180                                $this->bo->vfs->override_acl = 1;
181
182                                $this->bo->vfs->mkdir(array(
183                                        'string' => $this->bo->fakebase,
184                                        'relatives' => array(RELATIVE_NONE)
185                                ));
186                               
187                                $this->bo->vfs->override_acl = 0;
188
189                                //test one more time
190                                $test=$this->bo->vfs->get_real_info(array('string' => $this->bo->basedir.$this->bo->fakebase, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
191
192                                if($test[mime_type]!='Directory')
193                                {
194                                        die('Fake Base directory does not exist and could not be created, please ask the administrator to check the global configuration.');
195                                }
196                                else
197                                {
198                                        $this->messages[]= lang('Fake Base Dir did not exist, created a new one.');
199                                }
200                        }
201
202                        $test=$this->bo->vfs->get_real_info(array('string' => $this->bo->basedir.$this->bo->homedir, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
203                        if($test[mime_type]!='Directory')
204                        {
205                                $this->bo->vfs->override_acl = 1;
206
207                                $this->bo->vfs->mkdir(array(
208                                        'string' => $this->bo->homedir,
209                                        'relatives' => array(RELATIVE_NONE)
210                                ));
211                                $this->bo->vfs->set_quota(array(
212                                        'string' => $this->bo->homedir,
213                                        'relatives' => array(RELATIVE_NONE),
214                                        'new_quota' => $this->current_config['filemanager_quota_size']
215                                ));
216       
217                                $this->bo->vfs->override_acl = 0;
218
219                                //test one more time
220                                $test=$this->bo->vfs->get_real_info(array('string' => $this->bo->basedir.$this->bo->homedir, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
221
222                                if($test[mime_type]!='Directory')
223                                {
224                                        die('Your Home Dir does not exist and could not be created, please ask the adminstrator to check the global configuration.');
225                                }
226                                else
227                                {
228                                        $this->messages[]= lang('Your Home Dir did not exist, eGroupWare created a new one.');
229                                        // FIXME we just created a fresh home dir so we know there nothing in it so we have to remove all existing content
230                                }
231
232
233                        }
234                }
235                function fileModels()
236                {
237                        $GLOBALS['phpgw_info']['flags'] = array
238                                (
239                                        'currentapp'    => 'filemanager',
240                                        'noheader'      => False,
241                                        'nonavbar' => False,
242                                        'nofooter'      => False,
243                                        'noappheader'   => False,
244                                        'enable_browser_class'  => True
245                                );
246
247                        $GLOBALS['phpgw']->common->phpgw_header();
248                        $this->t->set_file(array('models' => 'fileModels.tpl'));
249                        $this->t->set_block('models','header','header');
250                        $this->t->set_block('models','body','body');
251                        $this->t->set_block('models','footer','footer');
252                        $this->t->set_var('url_1', './index.php?menuaction=filemanager.uifilemanager.uploadModel&model=article');
253                        $this->t->set_var('model_1','article');
254                        $this->t->set_var('lang_1',lang('article'));
255
256                        $this->t->set_var('url_2','./index.php?menuaction=filemanager.uifilemanager.uploadModel&model=calendar');
257                        $this->t->set_var('model_2','calendar');
258                        $this->t->set_var('lang_2',lang('calendar'));
259
260                        $this->t->set_var('url_3','./index.php?menuaction=filemanager.uifilemanager.uploadModel&model=todo');
261                        $this->t->set_var('model_3','todo');
262                        $this->t->set_var('lang_3',lang('todo'));
263
264                        $this->t->set_var('url_4','./index.php?menuaction=filemanager.uifilemanager.uploadModel&model=slide');
265                        $this->t->set_var('model_4','slide');
266                        $this->t->set_var('lang_4',lang('slide'));
267
268                        $this->t->set_var('url_5','./index.php?menuaction=filemanager.uifilemanager.uploadModel&model=cards');
269                        $this->t->set_var('model_5','cards');
270                        $this->t->set_var('lang_5',lang('cards'));
271
272                        $this->t->set_var('url_6','./index.php?menuaction=filemanager.uifilemanager.uploadModel&model=resume');
273                        $this->t->set_var('model_6','resume');
274                        $this->t->set_var('lang_6',lang('resume'));
275
276
277                        $this->t->pparse('out','models');
278
279
280                }
281                function uploadModel(){
282                        $GLOBALS['phpgw_info']['flags'] = array
283                                (
284                                        'currentapp'    => 'filemanager',
285                                        'noheader'      => False,
286                                        'nonavbar' => False,
287                                        'nofooter'      => False,
288                                        'noappheader'   => False,
289                                        'enable_browser_class'  => True
290                                );
291
292                        $GLOBALS['phpgw']->common->phpgw_header();
293
294                        $filename = lang('new')."_".lang($this->model).rand(0,1000).".html";
295                        $this->bo->vfs->cp(array(
296                                'from'=> PHPGW_SERVER_ROOT . '/filemanager/templates/default/'.$this->model.'.html',
297                                'to'=> $filename,
298                                'relatives'     => array(RELATIVE_NONE|VFS_REAL, RELATIVE_ALL)
299                        ));
300
301                        $this->bo->vfs->set_attributes(array(
302                                'string'=> $filename,
303                                'relatives'     => array(RELATIVE_ALL),
304                                'attributes'=> array(
305                                        'mime_type' => "text/html",
306                                        'comment' => ""
307                                )
308                        ));
309                        $this->filename = $filename;
310                        $this->edit();
311
312                }
313                function index()
314                {
315                        $GLOBALS['phpgw_info']['flags'] = array
316                        (
317                                'currentapp'    => 'filemanager',
318                                'noheader'      => False,
319                                'nonavbar' => False,
320                                'nofooter'      => False,
321                                'noappheader'   => False,
322                                'enable_browser_class'  => True
323                        );
324
325                        $GLOBALS['phpgw']->common->phpgw_header();
326                       
327                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/global.js'></script>";
328                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/main.js'></script>";
329                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/common_functions.js'></script>";
330                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/connector.js'></script>";
331                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/draw_api.js'></script>";
332                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/drag_area.js'></script>";
333                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/js/handler.js'></script>";
334
335
336                        // Temas Expresso
337                        $theme = "window_" . $GLOBALS['phpgw_info']['user']['preferences']['common']['theme'] . ".css";
338
339                        if( !file_exists('filemanager/tp/expressowindow/css/'.$theme) )
340                                $theme = "window_default.css";
341
342                        // Path FileManager
343                        $webserver_url = $GLOBALS['phpgw_info']['server']['webserver_url'];
344                        $webserver_url = ( !empty($webserver_url) ) ? $webserver_url : '/';
345               
346                        if(strrpos($webserver_url,'/') === false || strrpos($webserver_url,'/') != (strlen($webserver_url)-1))
347                                $webserver_url .= '/';
348               
349                        $webserver_url  = $webserver_url . 'filemanager/';
350                       
351                        $js   = "var path_filemanager   = '".$webserver_url."';";
352                        $js      .= "var my_home_filemanager    = '".trim($GLOBALS['uifilemanager']->bo->vfs->my_home)."';";
353                       
354                        echo "<script type='text/javascript'>".$js."</script>";
355
356                        // Expresso Window - CSS
357                        print '<link rel="stylesheet" type="text/css" href="' . $webserver_url . 'tp/expressowindow/css/'.$theme.'" >';
358
359                        // Expresso Window - JS
360                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/tp/expressowindow/js/xtools.js'></script>";
361                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/tp/expressowindow/js/jsloader.js'></script>";
362                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/tp/expressowindow/js/makeW.js'></script>";
363                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/tp/expressowindow/js/dragdrop.js'></script>";
364                        echo "<script src='".$GLOBALS['phpgw_info']['flags']['currentapp']."/tp/expressowindow/js/show_hidden.js'></script>";
365
366                        echo "<script src='./phpgwapi/js/dftree/dftree.js'></script>";
367
368                        include('load_lang.php');
369
370                        # Page to process users
371                        # Code is fairly hackish at the beginning, but it gets better
372                        # Highly suggest turning wrapping off due to long SQL queries
373
374                        ###
375                        # Some hacks to set and display directory paths correctly
376                        ###
377                        // new method for switching to a new dir.
378                        if($this->changedir=='true' && $this->cdtodir || $this->goto_x)
379                        {
380                                $this->path = $this->cdtodir;
381                        }
382
383                        if(!$this->path)
384                        {
385                                $this->path = $this->bo->vfs->pwd();
386
387                                if(!$this->path || $this->bo->vfs->pwd(array('full' => False)) == '')
388                                {
389                                        $this->path = $this->bo->homedir;
390                                }
391                        }
392
393                        $this->bo->vfs->cd(array('string' => False, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
394                        $this->bo->vfs->cd(array('string' => $this->path, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
395
396                        $pwd = $this->bo->vfs->pwd();
397
398                        if(!$this->cwd = substr($this->path, strlen($this->bo->homedir) + 1)) 
399                        {
400                                $this->cwd = '/';
401                        }
402                        else
403                        {
404                                $this->cwd = substr($pwd, strrpos($pwd, '/') + 1);
405                        }
406
407                        $this->disppath = $this->path;
408
409                        /* This just prevents // in some cases */
410                        if($this->path == '/')
411                        {
412                                $this->dispsep = '';
413                        }
414                        else
415                        {
416                                $this->dispsep = '/';
417                        }
418
419                        if(!($this->lesspath = substr($this->path, 0, strrpos($this->path, '/'))))
420                        {
421                                $this->lesspath = '/';
422                        }
423
424                        /*Check permission*/
425                        if($this->bo->vfs->acl_check(array(
426                                'string' => $this->path,
427                                'relatives' => array(RELATIVE_NONE),
428                                'operation' => PHPGW_ACL_READ
429                        )))
430                        {
431                                $this->can_read = True;
432                        }
433
434
435                        if ($_SESSION['phpgw_info']['user']['filemanager']['flush'] != 'flushed')
436                        {
437                                /*Flush journal-deleted*/
438                                $this->bo->vfs->flush_journal(array(
439                                        'string' => $this->path,
440                                        'relatives' => array(RELATIVE_NONE),
441                                        'deleteall' => True
442                                ));
443                                $_SESSION['phpgw_info']['user']['filemanager']['flush'] = 'flushed';
444                        }
445
446
447
448                        # if is different path than home and no permission allowed
449                        if($this->path != $this->bo->homedir && $this->path != $this->bo->fakebase && $this->path != '/' && !$this->can_read)
450                        {
451                                $this->messages[] = lang('You do not have access to %1', $this->path);
452                                $this->path = $this->homedir;
453                                $this->bo->vfs->cd(array('string' => $this->path, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
454                                $GLOBALS['phpgw']->common->phpgw_footer();
455                                $GLOBALS['phpgw']->common->phpgw_exit();
456                        }
457
458                        $this->bo->userinfo['working_id'] = $this->bo->vfs->working_id;
459                        $this->bo->userinfo['working_lid'] = $GLOBALS['phpgw']->accounts->id2name($this->bo->userinfo['working_id']);
460
461                        # Verify path is real
462                        if($this->path != $this->bo->homedir && $this->path != '/' && $this->path != $this->bo->fakebase)
463                        {
464                                if(!$this->bo->vfs->file_exists(array(
465                                        'string' => $this->path,
466                                        'relatives' => array(RELATIVE_NONE)
467                                )))
468                                {
469                                        $this->messages[] = lang('Error:').lang('Directory %1 does not exist', $this->path);
470                                        $this->path = $this->homedir;
471                                        $this->bo->vfs->cd(array('string' => $this->path, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
472                                        $GLOBALS['phpgw']->common->phpgw_footer();
473                                        $GLOBALS['phpgw']->common->phpgw_exit();
474                                }
475                        }
476
477
478                        # Default is to sort by name
479                        if(!$this->sortby)
480                        {
481                                $this->sortby = 'name';
482                        }
483                        if($this->update_x == 1){
484                                $this->bo->vfs->update_real(array(
485                                        'string'        => $this->path,
486                                        'relatives'     => array(RELATIVE_NONE)
487                                ));
488                                header('Location:'.$this->encode_href('index.php?menuaction=filemanager.uifilemanager.index','&path='.base64_encode($this->bo->homedir)));
489                        }
490                        elseif($this->newfile_x && $this->newfile_or_dir) // create new textfile
491                        {
492                                $this->createfile();
493                        }
494                        elseif($this->edit_cancel_x)
495                        {
496                                $this->readFilesInfo();
497                                $this->fileListing();
498                        }
499                        elseif($this->edit_x || $this->edit_preview_x || $this->edit_save_x || $this->edit_save_done_x)
500                        {
501                                $this->edit();
502                        }
503                        else
504                        {
505                                //$this->readFilesInfo();
506                                $this->fileListing();
507                        }
508                }
509                function get_permissions(){
510                        /* get permissions */
511                        if((preg_match('+^'.$this->bo->fakebase.'\/(.*)(\/|$)+U', $this->path, $matches)) && $matches[1] != $this->bo->userinfo['account_lid']) //FIXME matches not defined
512
513                        {
514                                $this->bo->vfs->working_id = $GLOBALS['phpgw']->accounts->name2id($matches[1]);//FIXME matches not defined
515
516                        }
517                        else
518                        {
519                                $this->bo->vfs->working_id = $this->bo->userinfo['username'];
520                        }
521
522                        # Check available permissions for $this->path, so we can disable unusable operations in user interface
523                        $path = explode('/',$this->path);
524                        $owner_id = $this->bo->vfs->ownerOf($this->bo->fakebase,$path[2]);
525                        $user_id = $GLOBALS['phpgw_info']['user']['account_id'];
526                        if ($owner_id == $user_id)
527                        {
528                                $rights = 31;
529                        }else
530                        {
531                                $acl = CreateObject ('phpgwapi.acl', $owner_id);
532                                $acl->account_id = $owner_id;
533                                $acl->read_repository();
534                                $rights = $acl->get_rights($user_id);
535                        }
536                        return $rights;
537                }
538                function dir_ls()
539                {
540                        // change dir to this->path
541                        $this->bo->vfs->cd(array('string' => $this->path, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
542                        $return['permissions'] = $this->get_permissions();
543                        $return['quota']['usedSpace'] = $this->bo->vfs->get_size(array(
544                                        'string'        => $this->path,
545                                        'relatives'     => array(RELATIVE_NONE)
546                        ));
547                        $return['files_count'] = $this->bo->vfs->count_files(array(
548                                        'string'        => $this->path,
549                        ));
550                        $quota = $this->bo->vfs->get_quota(array(
551                                'string'        => $this->path
552                        ));
553                        reset($this->files_array);
554                        $this->readFilesInfo();
555
556                        for($i = 0; $i != $this->numoffiles; $i++)
557                        {
558                                $files = $this->files_array[$i];
559
560                                if($files['mime_type'] == "Directory")
561                                {
562                                        continue;
563                                }
564                                /* small keys to safe bandwidth */
565                                $tuple['name'] = htmlentities($files['name']);
566                                if ($_SESSION['phpgw_info']['user']['preferences']['filemanager']['viewIcons'] == 1){
567                                        if ($files['mime_type'] == 'image/png' ||
568                                                $files['mime_type'] == 'image/gif' ||
569                                                $files['mime_type'] == 'image/jpg')
570                                        {
571                                                $filename = str_replace('=','',base64_encode($tuple['name']));
572                                                $pathname = str_replace('=','',base64_encode($this->path));
573                                                $tuple['icon'] = './index.php?menuaction=filemanager.vfs_functions.summary&file='.$filename.'&path='.$pathname;
574                                        }
575                                        else
576                                                $tuple['icon'] =  $this->mime_icon($files['mime_type'],64);
577                                }
578                                else
579                                        $tuple['icon'] = $this->mime_icon($files['mime_type']);
580                                $tuple['type'] = $files['type'];
581                                $tuple['created'] = $this->vfs_functions->dateString2timeStamp($files['created']);
582                                $tuple['modified'] = $this->vfs_functions->dateString2timeStamp($files['modified']);
583                                $tuple['size'] = $files['size'];
584                                $tuple['mime_type'] = $files['mime_type'];
585                                $tuple['pub'] = $files['type'];
586                                $tuple['createdby_id'] = $GLOBALS['phpgw']->accounts->id2name($files['createdby_id']);
587                                $tuple['modifiedby_id'] = $files['modifiedby_id']?$GLOBALS['phpgw']->accounts->id2name($files['modifiedby_id']):'';
588                                $tuple['owner'] = $GLOBALS['phpgw']->accounts->id2name($files['owner_id']);
589                                $tuple['comment'] = $files['comment'];
590                                $tuple['version'] = $files['version'];
591                                $output[] = $tuple;
592
593                        }
594                        $return['files'] = $output;
595                        $return['quota']['quotaSize'] = ($quota*1024*1024);
596                        echo serialize($return);
597                }
598                function get_folders_list()
599                {
600                        $this->update_groups();
601                        $this->groups_applications = array();
602
603                        $user_groups = $GLOBALS['phpgw']->accounts->membership();
604                        foreach($user_groups as $val){
605                                $account_name = $GLOBALS['phpgw']->accounts->id2name($val['account_id']);
606                                $this->readable_groups[$account_name] = array(
607                                        'account_id' => $val['account_id'],
608                                        'account_name' => $account_name
609                                );
610                        }
611
612                        foreach ($this->readable_groups as $value)
613                        {
614                                $applications = CreateObject('phpgwapi.applications', $value['account_id']);
615                                $this->groups_applications[$value['account_name']] = $applications->read_account_specific();
616                        }
617
618
619                        // selectbox for change/move/and copy to
620                        $this->dirs = $this->all_other_directories();
621                        foreach($this->dirs as $dir)
622                                $return[] = $dir['directory'] . $dir['name'];
623                        sort(&$return, SORT_STRING);
624                        echo serialize($return);
625                }
626                function fileListing()
627                {
628                        $this->t->set_file(array('filemanager_list_t' => 'main.tpl'));
629                        $this->t->set_block('filemanager_list_t','filemanager_header','filemanager_header');
630                        $this->t->set_block('filemanager_list_t','filemanager_footer','filemanager_footer');
631
632                        if($this->numoffiles || $this->cwd)
633                        {
634                                $vars[path]='<input type="hidden" id="currentPath" value="'.$this->path.'">';
635                                $vars[css]='<link rel="stylesheet" type="text/css" href="filemanager/templates/default/main.css">';
636                                $vars[css].='<link rel="stylesheet" type="text/css" href="phpgwapi/js/dftree/dftree.css">';
637                                $_SESSION['phpgw_info']['user']['preferences']['filemanager']['lid'] = $GLOBALS['phpgw_info']['user']['account_lid'];
638                                $vars[preferences]='<input type="hidden" id="userPreferences" value=\''.serialize($_SESSION['phpgw_info']['user']['preferences']['filemanager']).'\'>';
639                                // Used for important operations that needs security
640                                for ($key = ""; strlen($key) < 150; $key .= chr(rand(48,95)));
641                                $_SESSION['phpgw_info']['filemanager']['user']['sec_key'] = $key;
642                                $vars[sec_key]='<input type="hidden" id="userKey" value=\''.$key.'\'>';
643                                $vars[script]='<script>initDrawApi();</script>';
644                               
645                                $vars[new_button]=$this->toolButton('new','createfile',lang('New...'));
646                                $vars[new_button].='<input type="hidden" id="newfile_or_dir" name="newfile_or_dir" value="" />';
647                               
648                                // reload button with this url
649                                $vars[refresh_button]=$this->toolButton('reload','reload',lang('reload'));
650
651                                // go up icon when we're not at the top, dont allow to go outside /home = fakebase
652                                if($this->path != '/' && $this->path != $this->bo->fakebase)
653                                {
654                                        $vars[tools_button] = $this->toolButton('tools','tools',lang('tools'));
655                                }
656                                else
657                                        $vars[tools_button] = "";
658
659                                $vars[toolbar1]=$toolbar;
660
661                                if(count($this->messages)>0)
662                                {
663                                        foreach($this->messages as $msg)
664                                        {
665                                                $messages.='<span>'.$msg.'</span>';
666                                        }
667                                }
668                                $this->messages = NULL;
669                               
670                                $vars[messages]=$messages;
671
672                                $this->t->set_var($vars);
673                                $this->t->pparse('out','filemanager_header');
674                        }
675
676                        $this->t->set_var($vars);
677                        $this->t->pparse('out','filemanager_footer');
678
679                        $GLOBALS['phpgw']->common->phpgw_footer();
680                        $GLOBALS['phpgw']->common->phpgw_exit();
681                }
682
683                function readFilesInfo()
684                {
685                        // start files info
686
687                        # Read in file info from database to use in the rest of the script
688                        # $fakebase is a special directory.  In that directory, we list the user's
689                        # home directory and the directories for the groups they're in
690                        $this->numoffiles = 0;
691                        if($this->path == $this->bo->fakebase)
692                        {
693                                // FIXME this test can be removed
694                                if(!$this->bo->vfs->file_exists(array('string' => $this->bo->homedir, 'relatives' => array(RELATIVE_NONE))))
695                                {
696                                        $this->bo->vfs->mkdir(array('string' => $this->bo->homedir, 'relatives' => array(RELATIVE_NONE)));
697                                }
698
699                                $ls_array = $this->bo->vfs->ls(array(
700                                        'string' => $this->bo->homedir,
701                                        'relatives' => array(RELATIVE_NONE),
702                                        'checksubdirs' => False,
703                                        'nofiles' => True
704                                ));
705
706                                $this->files_array[] = $ls_array[0];
707                                $this->numoffiles++;
708
709                                reset($this->readable_groups);
710                                while(list($num, $group_array) = each($this->readable_groups))
711                                {
712                                        # If the group doesn't have access to this app, we don't show it
713                                        /*if(!$this->groups_applications[$group_array['account_name']][$this->bo->appname]['enabled'])
714                                        {
715                                                continue;
716                                        }
717                                        */
718
719
720                                        if(!$this->bo->vfs->file_exists(array('string' => $this->bo->fakebase.'/'.$group_array['account_name'],'relatives'      => array(RELATIVE_NONE))))
721                                        {
722                                                $this->bo->vfs->override_acl = 1;
723                                                $this->bo->vfs->mkdir(array(
724                                                        'string' => $this->bo->fakebase.'/'.$group_array['account_name'],
725                                                        'relatives' => array(RELATIVE_NONE)
726                                                ));
727
728                                                // FIXME we just created a fresh group dir so we know there nothing in it so we have to remove all existing content
729                                               
730                                               
731                                                $this->bo->vfs->override_acl = 0;
732
733                                                $this->bo->vfs->set_attributes(array('string' => $this->bo->fakebase.'/'.$group_array['account_name'],'relatives'       => array(RELATIVE_NONE),'attributes' => array('owner_id' => $group_array['account_id'],'createdby_id' => $group_array['account_id'])));
734                                        }
735
736                                        $ls_array = $this->bo->vfs->ls(array('string' => $this->bo->fakebase.'/'.$group_array['account_name'],'relatives'       => array(RELATIVE_NONE),'checksubdirs' => False,'nofiles' => True));
737
738                                        $this->files_array[] = $ls_array[0];
739
740                                        $this->numoffiles++;
741                                }
742                        }
743                        else
744                        {
745                                $ls_array = $this->bo->vfs->ls(array(
746                                        'string' => $this->path,
747                                        'relatives'     => array(RELATIVE_NONE),
748                                        'checksubdirs' => False,
749                                        'nofiles'       => False,
750                                        'orderby'       => $this->criteria,
751                                        'otype'         => $this->otype,
752                                        'limit'         => $this->limit,
753                                        'offset'        => $this->offset
754                                ));
755
756                                while(list($num, $file_array) = each($ls_array))
757                                {
758                                        $this->numoffiles++;
759                                        $this->files_array[] = $file_array;
760                                }
761                        }
762
763                        if(!is_array($this->files_array))
764                        {
765                                $this->files_array = array();
766                        }
767                        // end file count
768                }
769               
770                function removedir()
771                {
772                        //$toRemove = $this->path ^ $_SESSION['phpgw_info']['filemanager']['user']['sec_key'];
773                        $toRemove = $this->path;
774                       
775                        if ( $this->bo->vfs->rm(array( 'string' => $toRemove, 'relatives' => array (RELATIVE_NONE) )) )
776                                echo "True";
777                        else
778                                echo "False";
779                }
780               
781                function createdir()
782                {
783                        if( $this->bo->badchar = $this->bo->bad_chars($this->filename, True, True) )
784                        {
785                                echo lang('Error:').$this->bo->html_encode(lang('Directory names cannot contain "%1"', $badchar), 1);
786                                return;
787                        }
788                        /* TODO is this right or should it be a single $ ? */
789                        if($this->filename[strlen($this->filename)-1] == ' ' || $this->filename[0] == ' ')
790                        {
791                                echo lang('Error:').lang('Cannot create directory because it begins or ends in a space');
792                        }
793                       
794                        $ls_array = $this->bo->vfs->ls(array(
795                                'string'        => $this->path . '/' . $this->filename,
796                                'relatives'     => array(RELATIVE_NONE),
797                                'checksubdirs'  => False,
798                                'nofiles'       => True
799                        ));
800
801                        $fileinfo = $ls_array[0];
802
803                        if($fileinfo['name'])
804                        {
805                                if($fileinfo['mime_type'] != 'Directory')
806                                {
807                                        echo lang('Error:').lang('%1 already exists as a file',$fileinfo['name']);
808                                }
809                                else
810                                {
811                                        echo lang('Error:').lang('Directory %1 already exists', $fileinfo['name']);
812                                }
813                        }
814                        else
815                        {
816                                $this->bo->vfs->cd(array('string' => $this->path, 'relatives' => array(RELATIVE_NONE), 'relative' => False));
817                               
818                                if( $this->bo->vfs->mkdir(array('string' => $this->filename )) )
819                                {
820                                        echo lang('Created directory %1', $this->disppath.'/'.$this->filename);
821                                }
822                                else
823                                {
824                                        echo lang('Error:').lang('Could not create %1', $this->disppath.'/'.$this->filename);
825                                }
826                        }
827                        echo lang('Directory created');
828                }
829               
830                function getReturnExecuteForm()
831                {
832                        $response = $_SESSION['response'];
833                        $_SESSION['response'] = null;
834                        echo $response;
835                        return;
836                }
837               
838                function showUploadboxes()
839                {
840                        $GLOBALS['phpgw_info']['flags'] = array
841                                (
842                                        'currentapp'    => 'filemanager',
843                                        'noheader'      => True,
844                                        'nonavbar' => True,
845                                        'nofooter'      => True,
846                                        'noappheader'   => True
847                                );
848                        $GLOBALS['phpgw']->common->phpgw_header();
849
850                        $this->t->set_file(array('upload' => 'upload.tpl'));
851                        $this->t->set_block('upload','upload_header','upload_header');
852                        $this->t->set_block('upload','row','row');
853                        $this->t->set_block('upload','upload_footer','upload_footer');
854
855                        if($this->path != '/' && $this->path != $this->bo->fakebase)
856                        {
857                                $vars[max_size]=lang('Note: Uploaded is limited to %1MB',($this->current_config['filemanager_Max_file_size']));
858                                $vars[form_action]=$GLOBALS[phpgw]->link('/filemanager/inc/upload.php');
859                                //$vars[form_action]=$GLOBALS[phpgw]->link('/index.php','menuaction=filemanager.uifilemanager.index');
860                                $vars[path]=$this->path;
861                                $vars[lang_file]=lang('File');
862                                $vars[lang_comment]=lang('Comment');
863                                $vars[lang_advanced_upload]=lang('Advanced Upload');
864                                $vars[num_upload_boxes]=1;
865                                $this->t->set_var($vars);
866                                $this->t->pparse('out','upload_header');
867
868                                $this->t->set_var('row_tr_color',$tr_color);
869                                $this->t->parse('rows','row');
870                                $this->t->pparse('out','row');
871
872                                $vars[lang_upload]=lang('Upload files');
873                                $vars[change_upload_boxes].=lang('Show') . '&nbsp;';
874                                $this->t->set_var($vars);
875                                $this->t->pparse('out','upload_footer');
876                        }
877                }
878
879                /* create textfile */
880                function createfile()
881                {
882                        $this->filename=$this->newfile_or_dir;
883                        if($this->filename)
884                        {
885                                if($badchar = $this->bo->bad_chars($this->filename, True, True))
886                                {
887                                        $this->messages[] = lang('Error:').lang('File names cannot contain "%1"',$badchar);
888
889                                        $this->fileListing();
890                                }
891
892                                if($this->bo->vfs->file_exists(array(
893                                        'string'=> $this->filename,
894                                        'relatives'     => array(RELATIVE_ALL)
895                                )))
896                                {
897                                        $this->messages[]= lang('Error:').lang('File %1 already exists. Please edit it or delete it first.', $this->filename);
898                                        $this->fileListing();
899                                }
900
901                                if($this->bo->vfs->touch(array(
902                                        'string'        => $this->filename,
903                                        'relatives'     => array(RELATIVE_ALL)
904                                )))
905                                {
906                                        $this->edit = 1;
907                                        $this->numoffiles++;
908                                        $this->edit();
909                                }
910                                else
911                                {
912                                        $this->messages[]= lang('Error:').lang('File %1 could not be created.', $this->filename);
913                                        $this->fileListing();
914                                }
915                        }
916                }
917
918                # Handle Editing files
919                function edit()
920                {
921                        if($this->filename)
922                        {
923                                if (! $this->vfs_functions->verifyLock($this->path.'/'.$this->filename,RELATIVE_NONE)){
924                                        $GLOBALS['phpgw']->redirect('/index.php');
925                                }
926                                $ls_array = $this->bo->vfs->ls(array(
927                                        'string'        => $this->path.'/'.$this->filename,
928                                        'relatives'     => array(RELATIVE_NONE),
929                                        'checksubdirs'  => False,
930                                        'nofiles'       => True
931                                ));
932                                $this->bo->vfs->touch(array(
933                                        'string'=> $this->path.'/'.$this->filename,
934                                        'relatives'     => array(RELATIVE_NONE)
935                                ));
936
937
938                                if($ls_array[0]['mime_type'])
939                                {
940                                        $mime_type = $ls_array[0]['mime_type'];
941                                }
942                                elseif($this->prefs['viewtextplain'])
943                                {
944                                        $mime_type = 'text/plain';
945                                }
946                                $editable = array('','text/plain','text/csv','text/html','text/text','message/rfc822');
947
948                                if(!in_array($mime_type,$editable)){
949                                        $this->messages[] = lang('Error:').lang('Impossible to edit this file');
950                                        $this->readFilesInfo();
951                                        $this->fileListing();
952                                        return;
953                                }
954                        }
955
956                        $this->readFilesInfo();
957
958                        if ($mime_type == 'text/html')
959                                $this->t->set_file(array('filemanager_edit' => 'edit_html.tpl'));
960                        else
961                                $this->t->set_file(array('filemanager_edit' => 'edit_file.tpl'));
962
963                        $this->t->set_block('filemanager_edit','row','row');
964
965
966                        $vars[refresh_script] = "<script src='filemanager/js/refresh.js'></script>";
967
968                        $vars[preview_content]='';
969                        if($this->edit_file)
970                        {
971                                $this->edit_file_content = stripslashes($this->edit_file_content);
972                        }
973
974                        if($this->edit_preview_x)
975                        {
976                                $content = $this->edit_file_content;
977
978                                $vars[lang_preview_of]=lang('Preview of %1', $this->path.'/'.$edit_file);
979
980                                $vars[preview_content]=nl2br($content);
981                        }
982                        elseif($this->edit_save_x || $this->edit_save_done_x)
983                        {
984                                $content = $this->edit_file_content;
985                                //die( $content);
986                                if($this->bo->vfs->write(array(
987                                        'string'        => $this->path.'/'.$this->edit_file,
988                                        'relatives'     => array(RELATIVE_NONE),
989                                        'content'       => $content
990                                )))
991                                {
992                                        $this->messages[]=lang('Saved %1', $this->path.'/'.$this->edit_file);
993
994                                        if($this->edit_save_done_x)
995                                        {
996                                                $this->readFilesInfo();
997                                                $this->fileListing();
998                                                exit;
999                                        }
1000                                }
1001                                else
1002                                {
1003                                        $this->messages[]=lang('Could not save %1', $this->path.'/'.$this->edit_file);
1004                                }
1005                        }
1006
1007                        # If we're in preview or save mode, we only show the file
1008                        # being previewed or saved
1009                        if($this->edit_file &&($this->filename != $this->edit_file))
1010                        {
1011                                continue;
1012                        }
1013
1014                        if($this->filename && $this->bo->vfs->file_exists(array(
1015                                'string'        => $this->filename,
1016                                'relatives'     => array(RELATIVE_ALL)
1017                        )))
1018                        {
1019                                if($this->edit_file)
1020                                {
1021                                        $content = stripslashes($this->edit_file_content);
1022                                }
1023                                else
1024                                {
1025                                        $content = $this->bo->vfs->read(array('string' => $this->filename));
1026                                }
1027                                $vars[form_action]= $GLOBALS['phpgw']->link('/index.php','menuaction=filemanager.uifilemanager.index','path='.$this->path);
1028                                $vars[edit_file]=$this->filename;
1029                                # We need to include all of the fileman entries for each file's form,
1030                                # so we loop through again
1031                                for($i = 0; $i != $this->numoffiles; $i++)
1032                                {
1033                                        if($this->filename) $value='value="'.$this->filename.'"';
1034                                        $vars[filemans_hidden]='<input type="hidden" name="filename" '.$value.' />';
1035                                }
1036                                $vars[file_content]=$content;
1037
1038                                $vars[buttonPreview]=$this->inputButton('edit_preview','edit_preview',lang('Preview %1', $this->bo->html_encode($this->fileman[0], 1)));
1039                                $vars[buttonSave]=$this->inputButton('edit_save','save',lang('Save %1', $this->bo->html_encode($this->filename, 1)));
1040                                $vars[buttonDone]=$this->inputButton('edit_save_done','ok',lang('Save %1, and go back to file listing ', $this->bo->html_encode($this->filename, 1)));
1041                                $vars[buttonCancel]=$this->inputButton('edit_cancel','cancel',lang('Cancel editing %1 without saving', $this->bo->html_encode($this->filename, 1)));
1042
1043                                if ($mime_type == 'text/html'){
1044                                        $vars[fck_edit] = '<script type="text/javascript" src="filemanager/tp/ckeditor/ckeditor.js"></script>
1045                                                <textarea cols="80" id="edit_file_content" name="edit_file_content" rows="10">'.$content.'</textarea>
1046                                                <script type="text/javascript"> CKEDITOR.replace( \'edit_file_content\',{
1047removePlugins : \'elementspath\',
1048skin : \'office2003\',
1049toolbar : [["Source","Preview","-","Cut","Copy","Paste","-","Print",
1050"Undo","Redo","-","Find","Replace","-","SelectAll" ],
1051["Table","HorizontalRule","Smiley","SpecialChar","PageBreak","-","Bold",
1052"Italic","Underline","Strike","-","Subscript","Superscript",
1053"NumberedList","BulletedList","-","Outdent","Indent","Blockquote",
1054"JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock",
1055"Link", "TextColor","BGColor","Maximize"],
1056["Styles","Format","Font","FontSize"]]
1057                                });</script>';
1058
1059                                }
1060
1061
1062                                $this->t->set_var($vars);
1063                                $this->t->parse('rows','row');
1064                                $this->t->pparse('out','row');
1065
1066                        }
1067
1068                }
1069
1070                function history()
1071                {
1072                        if($this->file) // FIXME this-file is never defined
1073                        {
1074                                $journal_array = $this->bo->vfs->get_journal(array(
1075                                        'string'        => $this->file,//FIXME
1076                                        'relatives'     => array(RELATIVE_ALL)
1077                                ));
1078
1079                                if(is_array($journal_array))
1080                                {
1081                                        $this->html_table_begin();
1082                                        $this->html_table_row_begin();
1083                                        $this->html_table_col_begin();
1084                                        echo lang('Date');
1085                                        $this->html_table_col_end();
1086                                        $this->html_table_col_begin();
1087                                        echo lang('Version');
1088                                        $this->html_table_col_end();
1089                                        $this->html_table_col_begin();
1090                                        echo lang('Who');
1091                                        $this->html_table_col_end();
1092                                        $this->html_table_col_begin();
1093                                        echo lang('Operation');
1094                                        $this->html_table_col_end();
1095                                        $this->html_table_row_end();
1096
1097                                        while(list($num, $journal_entry) = each($journal_array))
1098                                        {
1099                                                $this->html_table_row_begin();
1100                                                $this->html_table_col_begin();
1101                                                $this->bo->html_text($journal_entry['created'] . '&nbsp;&nbsp;&nbsp;');
1102                                                $this->html_table_col_end();
1103                                                $this->html_table_col_begin();
1104                                                $this->bo->html_text($journal_entry['version'] . '&nbsp;&nbsp;&nbsp;' );
1105                                                $this->html_table_col_end();
1106                                                $this->html_table_col_begin();
1107                                                $this->bo->html_text($GLOBALS['phpgw']->accounts->id2name($journal_entry['owner_id']) . '&nbsp;&nbsp;&nbsp;');
1108                                                $this->html_table_col_end();
1109                                                $this->html_table_col_begin();
1110                                                $this->bo->html_text($journal_entry['comment']);
1111                                                $this->html_table_col_end();
1112                                        }
1113
1114                                        $this->html_table_end();
1115                                        $GLOBALS['phpgw']->common->phpgw_footer();
1116                                        $GLOBALS['phpgw']->common->phpgw_exit();
1117                                }
1118                                else
1119                                {
1120                                        echo lang('No version history for this file/directory');
1121                                }
1122                        }
1123                }
1124                function view()
1125                {
1126                        if (!$this->bo->vfs->acl_check(array(
1127                                'string'        => $this->path,
1128                                'relatives'     => array(RELATIVE_NONE),
1129                                'operation'     => PHPGW_ACL_READ
1130                        )))
1131                        {
1132                                $this->messages[] = lang("You have no permission to access this file");
1133                                header('Location:'.$this->encode_href('inc/index.php?menuaction=filemanager.uifilemanager.index','&path='.base64_encode($this->bo->homedir)));
1134
1135                                return;
1136                        }
1137                        if($this->file) //FIXME
1138                        {
1139                                $ls_array = $this->bo->vfs->ls(array(
1140                                        'string'        => $this->path.'/'.$this->file,//FIXME
1141                                        'relatives'     => array(RELATIVE_NONE),
1142                                        'checksubdirs'  => False,
1143                                        'nofiles'       => True
1144                                ));
1145                                if($ls_array[0]['mime_type'])
1146                                {
1147                                        $mime_type = $ls_array[0]['mime_type'];
1148                                }
1149                                elseif($this->prefs['viewtextplain'])
1150                                {
1151                                        $mime_type = 'text/plain';
1152                                }
1153                                $viewable = array('text/plain','text/csv','text/html',
1154                                        'text/text','image/jpeg','image/png','image/gif',
1155                                        'audio/mpeg','video/mpeg');
1156
1157                                if(in_array($mime_type,$viewable))
1158                                {
1159                                        /*Note: if you put application/octet-stream you force download */
1160                                        header('Content-type: ' . $mime_type);
1161                                        header('Content-disposition: filename="' . addslashes($this->file) . '"');
1162                                        Header("Pragma: public");
1163                                }
1164                                else
1165                                {
1166                                        $GLOBALS['phpgw']->browser->content_header($this->file,$mime_type,$ls_array[0]['size']);
1167                                }
1168                                if ($ls_array[0]['size'] < 10240)
1169                                {
1170                                        echo $this->bo->vfs->read(array(
1171                                                'string'    => $this->path.'/'.$this->file,//FIXME
1172                                                'relatives'    => array(RELATIVE_NONE)
1173                                        ));
1174                                }
1175                                else
1176                                {
1177                                        $this->bo->vfs->print_content(array(
1178                                                'string' => $this->path.'/'.$this->file,
1179                                                'relatives' => array(RELATIVE_NONE)
1180                                        )
1181                                );
1182                                }
1183                                $GLOBALS['phpgw']->common->phpgw_exit();
1184                        }
1185                }
1186
1187                function export(){
1188                        if($this->file)
1189                        {
1190                                $ls_array = $this->bo->vfs->ls(array(
1191                                        'string'        => $this->path.'/'.$this->file,
1192                                        'relatives'     => array(RELATIVE_NONE),
1193                                        'checksubdirs'  => False,
1194                                        'nofiles'       => True
1195                                ));
1196                                /*$timestamp = $this->vfs_functions->dateString2timeStamp($ls_array[0]['modified']);
1197                                if (time() - $timestamp < 60 && $ls_array[0]['modifiedby_id'] != $GLOBALS['phpgw_info']['user']['account_id']);
1198                                {
1199                                        // recently than last minute: someone is editing
1200                                }*/
1201                                $mime_type = $ls_array[0]['mime_type'];
1202                                $formats = array('text/html');
1203                                if(!in_array($mime_type,$formats)){
1204                                        echo lang('Impossible to export this file');
1205                                        return False;
1206                                }
1207                                $content = $this->bo->vfs->read(array('string' => $this->path.'/'.$this->file,
1208                                               'relatives'     => array(RELATIVE_NONE)
1209                                       ));
1210
1211                                include_once('filemanager/tp/dompdf/dompdf_config.inc.php');
1212                                $dompdf = new DOMPDF();
1213                                $dompdf->load_html($content);
1214                                $dompdf->set_paper($this->prefs['pdf_paper_type'], $this->prefs['pdf_type']);
1215                                /* Would be nice to implement 'Title','Subject','Author','Creator','CreationDate'*/
1216                                $dompdf->render();
1217                                $dompdf->stream(strtok($this->file,'.').".pdf");
1218                                $GLOBALS['phpgw']->common->phpgw_exit();
1219                        }
1220                }
1221
1222                //give back an array with all directories except current and dirs that are not accessable
1223                function all_other_directories()
1224                {
1225                        # First we get the directories in their home directory
1226                        $dirs = array();
1227                        $dirs[] = array('directory' => $this->bo->fakebase, 'name' => $this->bo->userinfo['account_lid']);
1228
1229                        $tmp_arr=array(
1230                                'string'        => $this->bo->homedir,
1231                                'relatives'     => array(RELATIVE_NONE),
1232                                'checksubdirs'  => True,
1233                                'mime_type'     => 'Directory'
1234                        );
1235
1236                        $ls_array = $this->bo->vfs->ls($tmp_arr,True);
1237
1238                        while(list($num, $dir) = each($ls_array))
1239                        {
1240                                $dirs[] = $dir;
1241                        }
1242
1243
1244                        # Then we get the directories in their readable groups' home directories
1245                        reset($this->readable_groups);
1246                        while(list($num, $group_array) = each($this->readable_groups))
1247                        {
1248                                // Don't list directories for groups that don't exists
1249                                $test=$this->bo->vfs->get_real_info(array('string' => $this->bo->fakebase.'/'.$group_array['account_name'],
1250                                        'relatives' => array(RELATIVE_NONE), 'relative' => False));
1251                                if($test[mime_type]!='Directory')
1252                                {
1253                                        continue;
1254                                }
1255
1256                                $dirs[] = array('directory' => $this->bo->fakebase, 'name' => $group_array['account_name']);
1257
1258                                $tmp_arr=array(
1259                                        'string'        => $this->bo->fakebase.'/'.$group_array['account_name'],
1260                                        'relatives'     => array(RELATIVE_NONE),
1261                                        'checksubdirs'  => True,
1262                                        'mime_type'     => 'Directory'
1263                                );
1264
1265                                $ls_array = $this->bo->vfs->ls($tmp_arr,True);
1266                                while(list($num, $dir) = each($ls_array))
1267                                {
1268                                        $dirs[] = $dir;
1269                                }
1270                        }
1271                        reset($dirs);
1272                        while(list($num, $dir) = each($dirs))
1273                        {
1274                                if(!$dir['directory'])
1275                                {
1276                                        continue;
1277                                }
1278
1279                                # So we don't display //
1280                                if($dir['directory'] != '/')
1281                                {
1282                                        $dir['directory'] .= '/';
1283                                }
1284                                $return[] = $dir;
1285                        }
1286                        return $return;
1287                }
1288
1289                function update_groups()
1290                {
1291                        # Get their readable groups to be used throughout the script
1292                        $acl = array();
1293                        $groups = array();
1294                        $acl = $GLOBALS['phpgw']->acl->get_ids_for_location($GLOBALS['phpgw_info']['user']['account_id'],1,'filemanager');
1295                        if (is_array($acl))
1296                                foreach($acl as $key => $value){
1297                                        $info = array();
1298                                        $info = $GLOBALS['phpgw']->accounts->get_account_data($value);
1299                                        $groups[$key]['account_id'] = $value;
1300                                        $groups[$key]['account_lid'] = $info[$value]['lid'];
1301                                        $groups[$key]['account_name'] = $info[$value]['firstname'];
1302                                        $groups[$key]['account_lastname'] = $info[$value]['lastname'];
1303                                        $groups[$key]['account_fullname'] = $info[$value]['fullname'];
1304                                }
1305                        $this->readable_groups = array();
1306                        while(list($num, $account) = each($groups))
1307                        {
1308                                if($this->bo->vfs->acl_check(array('owner_id' => $account['account_id'],'operation' => PHPGW_ACL_READ)))
1309                                {
1310                                        $this->readable_groups[$account['account_lid']] = Array('account_id' => $account['account_id'], 'account_name' => $account['account_lid']);
1311                                }
1312                        }
1313
1314                }
1315                function search()
1316                {
1317                        /* TODO this is a primitive search */
1318                        $this->update_groups();
1319                        $this->dirs = $this->all_other_directories();
1320                        $path = $this->path;
1321                        if (strlen($this->text) > 3)
1322                        {                                                               
1323                                $this->text = strtoupper($this->text);
1324                                foreach($this->dirs as $elem)
1325                                {
1326                                        $this->path = $elem['directory'].$elem['name'];
1327                                        reset($this->files_array);
1328                                        $this->readFilesInfo();
1329                                        for($i = 0; $i < count($this->files_array); $i++)
1330                                        {
1331                                                $comment = strtoupper($this->files_array[$i]['comment']);
1332                                                $name = strtoupper($this->files_array[$i]['name']);
1333                                                if (strstr($name,$this->text) ||
1334                                                strstr($comment,$this->text) ){
1335                                                        $return[$this->files_array[$i]['directory'].$name] = $this->files_array[$i];
1336                                                        $return[$this->files_array[$i]['directory'].$name]['icon'] = $this->mime_icon($this->files_array[$i]['mime_type']);
1337                                                }
1338                                        }
1339                                        if (count($return) > 50)
1340                                        {
1341                                                $return = array_slice($return,0,50);
1342                                                break;
1343                                        }
1344                                }       
1345                        }
1346                        echo serialize(array_values($return));
1347                }
1348
1349                /* seek icon for mimetype else return an unknown icon */
1350                function mime_icon($mime_type, $size=16)
1351                {
1352                        if(!$mime_type) $mime_type='unknown';
1353
1354                        $mime_type=str_replace  ('/','_',$mime_type);
1355
1356                        $img=$GLOBALS['phpgw']->common->image('filemanager','mime'.$size.'_'.strtolower($mime_type));
1357                        if(!$img) $img=$GLOBALS['phpgw']->common->image('filemanager','mime'.$size.'_unknown');
1358
1359                        return $img;
1360                }
1361
1362                function toolButton($link,$img='',$description='')
1363                {
1364                        $image=$GLOBALS['phpgw']->common->image('filemanager','button_'.strtolower($img));
1365
1366                        if($img)
1367                        {
1368                                return '<span name="'.$link.'" class="toolButton" onclick="toolbar.control(\''.$link.'\',this);" title="'.$description.'"><img src="'.$image.'" alt="'.$description.'"/></a><small>'.$description.'</small></span>';
1369                        }
1370                }
1371
1372                function inputButton($name,$img='',$description='')
1373                {
1374                        $image=$GLOBALS['phpgw']->common->image('filemanager','button_'.strtolower($img));
1375
1376                        if($img)
1377                        {
1378                                return '<td class="" align="center" valign="middle" height="28" width="70">
1379                                <input title="'.$description.'" name="'.$name.'" type="image" alt="'.$name.'" src="'.$image.'" value="clicked" /><br><small>'.$description.'</small>
1380                                </td>';
1381                        }
1382                }
1383
1384
1385                function html_form_input($type = NULL, $name = NULL, $value = NULL, $maxlength = NULL, $size = NULL, $checked = NULL, $string = '', $return = 1)
1386                {
1387                        $text = ' ';
1388                        if($type != NULL && $type)
1389                        {
1390                                if($type == 'checkbox')
1391                                {
1392                                        $value = $this->bo->string_encode($value, 1);
1393                                }
1394                                $text .= 'type="'.$type.'" ';
1395                        }
1396                        if($name != NULL && $name)
1397                        {
1398                                $text .= 'name="'.$name.'" ';
1399                        }
1400                        if($value != NULL && $value)
1401                        {
1402                                $text .= 'value="'.$value.'" ';
1403                        }
1404                        if(is_int($maxlength) && $maxlength >= 0)
1405                        {
1406                                $text .= 'maxlength="'.$maxlength.'" ';
1407                        }
1408                        if(is_int($size) && $size >= 0)
1409                        {
1410                                $text .= 'size="'.$size.'" ';
1411                        }
1412                        if($checked != NULL && $checked)
1413                        {
1414                                $text .= 'checked ';
1415                        }
1416
1417                        return '<input'.$text.$string.'>';
1418                }
1419
1420                function html_form_option($value = NULL, $displayed = NULL, $selected = NULL, $return = 0)
1421                {
1422                        $text = ' ';
1423                        if($value != NULL && $value)
1424                        {
1425                                $text .= ' value="'.$value.'" ';
1426                        }
1427                        if($selected != NULL && $selected)
1428                        {
1429                                $text .= ' selected';
1430                        }
1431                        return  '<option'.$text.'>'.$displayed.'</option>';
1432                }
1433
1434                function encode_href($href = NULL, $args = NULL , $extra_args)
1435                {
1436                        $href = $this->bo->string_encode($href, 1);
1437                        $all_args = $args.'&'.$this->bo->string_encode($extra_args, 1);
1438
1439                        $address = $GLOBALS['phpgw']->link($href, $all_args);
1440
1441                        return $address;
1442                }
1443
1444                function html_link($href = NULL, $args = NULL , $extra_args, $text = NULL, $return = 1, $encode = 1, $linkonly = 0, $target = NULL)
1445                {
1446                        //      unset($encode);
1447                        if($encode)
1448                        {
1449                                $href = $this->bo->string_encode($href, 1);
1450                                $all_args = $args.'&'.$this->bo->string_encode($extra_args, 1);
1451                        }
1452                        else
1453                        {
1454                                //                              $href = $this->bo->string_encode($href, 1);
1455                                $all_args = $args.'&'.$extra_args;
1456                        }
1457                        ###
1458                        # This decodes / back to normal
1459                        ###
1460                        //                      $all_args = preg_replace("/%2F/", "/", $all_args);
1461                        //                      $href = preg_replace("/%2F/", "/", $href);
1462
1463                        /* Auto-detect and don't disturb absolute links */
1464                        if(!preg_match("|^http(.{0,1})://|", $href))
1465                        {
1466                                //Only add an extra / if there isn't already one there
1467
1468                                // die(SEP);
1469                                if(!($href[0] == SEP))
1470                                {
1471                                        $href = SEP . $href;
1472                                }
1473
1474                                /* $phpgw->link requires that the extra vars be passed separately */
1475                                //                              $link_parts = explode("?", $href);
1476                                $address = $GLOBALS['phpgw']->link($href, $all_args);
1477                                //                              $address = $GLOBALS['phpgw']->link($href);
1478                        }
1479                        else
1480                        {
1481                                $address = $href;
1482                        }
1483
1484                        /* If $linkonly is set, don't add any HTML */
1485                        if($linkonly)
1486                        {
1487                                $rstring = $address;
1488                        }
1489                        else
1490                        {
1491                                if($target)
1492                                {
1493                                        $target = 'target='.$target;
1494                                }
1495
1496                                $text = trim($text);
1497                                $rstring = '<a href="'.$address.'" '.$target.'>'.$text.'</a>';
1498                        }
1499
1500                        return($this->bo->eor($rstring, $return));
1501                }
1502
1503                function html_table_begin($width = NULL, $border = NULL, $cellspacing = NULL, $cellpadding = NULL, $rules = NULL, $string = '', $return = 0)
1504                {
1505                        if($width != NULL && $width)
1506                        {
1507                                $width = "width=$width";
1508                        }
1509                        if(is_int($border) && $border >= 0)
1510                        {
1511                                $border = "border=$border";
1512                        }
1513                        if(is_int($cellspacing) && $cellspacing >= 0)
1514                        {
1515                                $cellspacing = "cellspacing=$cellspacing";
1516                        }
1517                        if(is_int($cellpadding) && $cellpadding >= 0)
1518                        {
1519                                $cellpadding = "cellpadding=$cellpadding";
1520                        }
1521                        if($rules != NULL && $rules)
1522                        {
1523                                $rules = "rules=$rules";
1524                        }
1525
1526                        $rstring = "<table $width $border $cellspacing $cellpadding $rules $string>";
1527                        return($this->bo->eor($rstring, $return));
1528                }
1529
1530                function html_table_end($return = 0)
1531                {
1532                        $rstring = "</table>";
1533                        return($this->bo->eor($rstring, $return));
1534                }
1535
1536                function html_table_row_begin($align = NULL, $halign = NULL, $valign = NULL, $bgcolor = NULL, $string = '', $return = 0)
1537                {
1538                        if($align != NULL && $align)
1539                        {
1540                                $align = "align=$align";
1541                        }
1542                        if($halign != NULL && $halign)
1543                        {
1544                                $halign = "halign=$halign";
1545                        }
1546                        if($valign != NULL && $valign)
1547                        {
1548                                $valign = "valign=$valign";
1549                        }
1550                        if($bgcolor != NULL && $bgcolor)
1551                        {
1552                                $bgcolor = "bgcolor=$bgcolor";
1553                        }
1554                        $rstring = "<tr $align $halign $valign $bgcolor $string>";
1555                        return($this->bo->eor($rstring, $return));
1556                }
1557
1558                function html_table_row_end($return = 0)
1559                {
1560                        $rstring = "</tr>";
1561                        return($this->bo->eor($rstring, $return));
1562                }
1563
1564                function html_table_col_begin($align = NULL, $halign = NULL, $valign = NULL, $rowspan = NULL, $colspan = NULL, $string = '', $return = 0)
1565                {
1566                        if($align != NULL && $align)
1567                        {
1568                                $align = "align=$align";
1569                        }
1570                        if($halign != NULL && $halign)
1571                        {
1572                                $halign = "halign=$halign";
1573                        }
1574                        if($valign != NULL && $valign)
1575                        {
1576                                $valign = "valign=$valign";
1577                        }
1578                        if(is_int($rowspan) && $rowspan >= 0)
1579                        {
1580                                $rowspan = "rowspan=$rowspan";
1581                        }
1582                        if(is_int($colspan) && $colspan >= 0)
1583                        {
1584                                $colspan = "colspan=$colspan";
1585                        }
1586
1587                        $rstring = "<td $align $halign $valign $rowspan $colspan $string>";
1588                        return($this->bo->eor($rstring, $return));
1589                }
1590
1591                function html_table_col_end($return = 0)
1592                {
1593                        $rstring = "</td>";
1594                        return($this->bo->eor($rstring, $return));
1595                }
1596        }
Note: See TracBrowser for help on using the repository browser.