phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] [18589] feature: move file or folder


From: Pascal Vilarem
Subject: [Phpgroupware-cvs] [18589] feature: move file or folder
Date: Tue, 03 Jun 2008 12:23:25 +0000

Revision: 18589
          
http://svn.sv.gnu.org/viewvc/?view=rev&root=phpgroupware&revision=18589
Author:   maat
Date:     2008-06-03 12:23:24 +0000 (Tue, 03 Jun 2008)

Log Message:
-----------
feature: move file or folder

Modified Paths:
--------------
    trunk/ged/inc/class.ged_dm.inc.php
    trunk/ged/inc/class.ged_ui.inc.php
    trunk/ged/templates/base/browse.tpl

Added Paths:
-----------
    trunk/ged/templates/base/move_element.tpl

Modified: trunk/ged/inc/class.ged_dm.inc.php
===================================================================
--- trunk/ged/inc/class.ged_dm.inc.php  2008-06-03 12:22:18 UTC (rev 18588)
+++ trunk/ged/inc/class.ged_dm.inc.php  2008-06-03 12:23:24 UTC (rev 18589)
@@ -362,6 +362,28 @@
                
        }
        
+       function move_element($element_id,$new_parent_id)
+       {
+               $element_info=$this->get_element_info($element_id);
+               $new_parent_info=$this->get_element_info($new_parent_id);
+               
+               $sql="UPDATE ".$this->tables['elements']." SET ";
+               $sql.="parent_id='".$new_parent_id."' ";
+               $sql.="WHERE element_id=".$element_id;
+               
+               $this->db->query($sql, __LINE__, __FILE__);
+               $this->db->unlock();            
+               
+               if ( $new_parent_id == 0)
+               {
+                       $new_parent_info['project_root']=null;
+               }
+               
+               if ( $element_info['project_root'] != 
$new_parent_info['project_root'] )
+               {
+                       $this->set_project ($element_id, 
$new_parent_info['project_name'], $new_parent_info['project_root']);
+               }
+       }
        function delete_element ( $element_id )
        {
                $element_info=$this->get_element_info($element_id);
@@ -1614,7 +1636,7 @@
        }
        
        // DONE acl management 
-       function list_elements($parent_id=0, $type='', $order='name')
+       function list_elements($parent_id=0, $type='', $order='name', 
$criteria='readable')
        {
 
                if ( ! $this->can_read($parent_id))
@@ -1646,7 +1668,10 @@
                        }
                        elseif ( $the_element_type == "folder" )
                        {
-                               $go=true;
+                               if (($criteria == 'writable' && 
$this->can_write($the_element_id)) || $criteria == 'readable')
+                               {
+                                       $go=true;       
+                               }
                        }
                        elseif ( $the_element_type == "file" )
                        {
@@ -1702,9 +1727,9 @@
 
        }
        
-       function list_sub_folders ( $element_id )
+       function list_sub_folders ( $element_id, $criteria='readable' )
        {
-               return( $this->list_elements($element_id, 'folder'));
+               return( $this->list_elements($element_id, 'folder', 'name', 
$criteria));
        }
 
        function list_versions($element_id)

Modified: trunk/ged/inc/class.ged_ui.inc.php
===================================================================
--- trunk/ged/inc/class.ged_ui.inc.php  2008-06-03 12:22:18 UTC (rev 18588)
+++ trunk/ged/inc/class.ged_ui.inc.php  2008-06-03 12:23:24 UTC (rev 18589)
@@ -31,11 +31,13 @@
                'browse'=>true, 
                'add_file'=>true, 
                'add_folder'=>true, 
-               'update_folder'=>true, 
+               'update_folder'=>true,
+               'move_folder' => true,
                'delete_folder'=>true, 
                'download'=>true, 
                'package_download' => true, 
-               'view'=>true, 
+               'view'=>true,
+               'move_file'=>true,
                'delete_file'=>true, 
                'change_acl'=>true, 
                'search' => true, 
@@ -48,8 +50,8 @@
        var $icons;
 
        /* TODO document my code in English :P */
+
        /* Constructor method called when ged_ui object is created */
-
        function ged_ui()
        {
                //$this->theme = $GLOBALS['phpgw_info']['theme'];
@@ -64,7 +66,6 @@
                //$this->users=$this->acct->get_list('accounts');
                //_debug_array($this->users);
                
-               
                $this->ged_dm=CreateObject('ged.ged_dm', True);
                $this->categories=CreateObject('phpgwapi.categories');
                $this->browser=CreateObject('phpgwapi.browser');
@@ -77,7 +78,6 @@
                }
                $GLOBALS['phpgw']->css->validate_file('default','ged');
                
-               
                //TODO Move this to a function, maybe an api mime class ?
                $this->icons["txt"]="txt";
                $this->icons["doc"]="word";
@@ -216,6 +216,7 @@
                $this->t->set_var('lang_update_file', lang('Update file'));
                $this->t->set_var('lang_update_folder', lang('Update folder'));
                $this->t->set_var('lang_confirm_deletion', lang('Confirm 
deletion'));
+               $this->t->set_var('lang_confirm_move', lang('Confirm move'));
 
                $this->t->set_var('lang_informations', 'Informations');
                $this->t->set_var('lang_versions', 'Versions');
@@ -1038,6 +1039,14 @@
                                        $link_data['element_id']=$focused_id;
                                        
$delete_file_url=$GLOBALS['phpgw']->link('/index.php', $link_data);
                                        $this->t->set_var('delete_file', "<a 
href=\"".$delete_file_url."\">".lang('Delete file')."</a>");
+                                       
+                                       $link_data=array
+                                       (
+                                               'menuaction' => 
'ged.ged_ui.move_file',
+                                               'element_id' => $focused_id
+                                       );
+                                       
$delete_file_url=$GLOBALS['phpgw']->link('/index.php', $link_data);
+                                       $this->t->set_var('move_file', "<a 
href=\"".$delete_file_url."\">".lang('move file')."</a>");           
                                }
                                
                                break;
@@ -1088,6 +1097,14 @@
                                        $link_data['element_id']=$focused_id;
                                        
$delete_folder_url=$GLOBALS['phpgw']->link('/index.php', $link_data);
                                        $this->t->set_var('delete_folder', "<a 
href=\"".$delete_folder_url."\">".lang('Delete folder')."</a>");
+
+                                       $link_data=array
+                                       (
+                                               'menuaction' => 
'ged.ged_ui.move_folder',
+                                               'element_id' => $focused_id
+                                       );
+                                       
$delete_file_url=$GLOBALS['phpgw']->link('/index.php', $link_data);
+                                       $this->t->set_var('move_folder', "<a 
href=\"".$delete_file_url."\">".lang('move folder')."</a>");               
                                }
                                        
                                break;
@@ -1246,7 +1263,12 @@
                $this->t->pfp('out', 'add_file_tpl');
 
        }
-
+       
+       function move_file()
+       {
+               $this->move_element();
+       }
+       
        function delete_file()
        {
                
@@ -1479,6 +1501,134 @@
 
        }
        
+       function move_folder()
+       {
+               $this->move_element();
+       }
+
+       function gen_subfolder_select ( $element_id, $field_name, 
$selected_element_id='', $get_root=false, $recursion_level=0)
+       {       
+               if ( isset( $this->cached_gen_subfolders[$element_id]))
+               {
+                       
$my_sub_folders=$this->cached_gen_subfolders[$element_id];
+               }
+               else
+               {
+                       
$my_sub_folders=$this->ged_dm->list_sub_folders($element_id,'writable');
+                       
$this->cached_gen_subfolder[$element_id]=$my_sub_folders;
+               }       
+
+               if ( $recursion_level == 0)
+               {
+                       $select_sub_folders_html="<select 
name=\"".$field_name."\">\n";
+               }
+               else
+               {
+                       $select_sub_folders_html="";
+               }
+               
+               if ( $get_root )
+               {
+                       
$element_info=$this->ged_dm->get_element_info($element_id);
+
+                       $selected="";
+                       if ( $element_id == $selected_element_id)
+                       {
+                               $selected="selected ";
+                       }
+                       $project_style="style=\"font-weight:bold;\"";
+                       
+                       $select_sub_folders_html.="<option ".$project_style." 
value=\"".$element_id."\" $selected>".$element_info['name']."</option>\n";
+                       $recursion_level=1;
+               }
+               
+               $indent=str_repeat("&nbsp;", $recursion_level*4)."-";
+               
+               foreach ( $my_sub_folders as $my_sub_folder )
+               {
+                       $selected="";
+                       if ( $my_sub_folder['element_id'] == 
$selected_element_id)
+                       {
+                               $selected="selected ";
+                       }
+                       
+                       $project_style="";
+                       if ( $my_sub_folder['element_id'] == 
$my_sub_folder['project_root'])
+                       {
+                               $project_style="style=\"font-weight:bold;\"";
+                       }
+                       
+                       $select_sub_folders_html.="<option ".$project_style." 
value=\"".$my_sub_folder['element_id']."\" 
$selected>".$indent.$my_sub_folder['name']."</option>\n";
+                       
+                       $select_sub_folders_html.=$this->gen_subfolder_select ( 
$my_sub_folder['element_id'], $field_name, $selected_element_id, false, 
$recursion_level+1);
+               }
+               
+               if ( $recursion_level == 0)
+               {
+                       $select_sub_folders_html.="</select>\n";
+               }       
+                                       
+               return ( $select_sub_folders_html );            
+       }
+
+       function move_element()
+       {
+               $element_id=$this->get_var('element_id', array('GET', 'POST'));
+               $move=$this->get_var('move', array('GET', 'POST'));
+               $destination=$this->get_var('destination', array('GET', 
'POST'));
+               
+               $element_info=$this->ged_dm->get_element_info($element_id);
+               $parent_id=$element_info['parent_id'];
+               $project_root_id=$element_info['project_root'];
+
+               // Access control       
+               if ( ! $this->ged_dm->can_delete($element_id) || $element_id==0 
)
+               {
+                       $link_data=array
+                       (
+                               'menuaction' => 'ged.ged_ui.browse',
+                               'focused_id' => $element_id
+                       );
+                       $GLOBALS['phpgw']->redirect_link('/index.php', 
$link_data);
+               }
+               
+               // Confirmation and action
+               if ($move==lang('Confirm move') )
+               {
+                       
$parent_id=$this->ged_dm->move_element($element_id,$destination);
+
+                       $link_data=array
+                       (
+                               'menuaction' => 'ged.ged_ui.browse',
+                               'focused_id' => $element_id
+                       );
+                       $GLOBALS['phpgw']->redirect_link('/index.php', 
$link_data);
+               }
+               
+               // Display form
+                               
+               $this->set_template_defaults();
+               $this->display_app_header();
+
+               
$this->t->set_file(array('move_element_tpl'=>'move_element.tpl'));
+
+               $this->t->set_var('element_name', $element_info['name']);
+               $this->t->set_var('element_type', lang($element_info['type']));
+               $this->t->set_var('element_id_value', $element_id);
+               $this->t->set_var('confirm_move_field', 'move');
+               $this->t->set_var('confirm_move_value', lang('Confirm move'));
+               
+               // TODO : Select box of possible destinations
+               if ( $this->ged_dm->admin )
+               {
+                       $project_root_id=0;
+               }
+               $this->t->set_var('select', 
$this->gen_subfolder_select($project_root_id,"destination", $destination, 
true));
+
+               $this->t->pfp('out', 'move_element_tpl');
+               
+       }
+
        // DONE : gerer la confirmation 
        // TODO : Afficher quelques details... nom etc.
        function delete_folder()

Modified: trunk/ged/templates/base/browse.tpl
===================================================================
--- trunk/ged/templates/base/browse.tpl 2008-06-03 12:22:18 UTC (rev 18588)
+++ trunk/ged/templates/base/browse.tpl 2008-06-03 12:23:24 UTC (rev 18589)
@@ -1,4 +1,4 @@
-<div id="ged_top_menu">{top_link} {up_link} {update_folder} {add_folder} 
{delete_folder} {add_file} {edit_file} {update_file} {lock_file} <!-- BEGIN 
flow_actions_list --><a href="{flow_do_link}">{flow_do}</a>&nbsp;<!-- END 
flow_actions_list --> {delete_file} {change_acl} {search} {stats} {chrono} 
{dico}</div>
+<div id="ged_top_menu">{top_link} {up_link} {update_folder} {add_folder} 
{move_folder} {delete_folder} {add_file} {edit_file} {update_file} {lock_file} 
<!-- BEGIN flow_actions_list --><a 
href="{flow_do_link}">{flow_do}</a>&nbsp;<!-- END flow_actions_list --> 
{move_file} {delete_file} {change_acl} {search} {stats} {chrono} {dico}</div>
 <br/>
 <div id="ged_info">
 {main_content}

Added: trunk/ged/templates/base/move_element.tpl
===================================================================
--- trunk/ged/templates/base/move_element.tpl                           (rev 0)
+++ trunk/ged/templates/base/move_element.tpl   2008-06-03 12:23:24 UTC (rev 
18589)
@@ -0,0 +1,9 @@
+<h1>{lang_confirm_move} ?</h1>
+
+<h2>{element_type} : {element_name}</h2>
+
+<form method="POST">
+{lang_move_to} : {select}
+<input type="hidden" name="{element_id_field}" value="{element_id_value}">
+<input type="submit" name="{confirm_move_field}" value="{confirm_move_value}">
+</form>
\ No newline at end of file


Property changes on: trunk/ged/templates/base/move_element.tpl
___________________________________________________________________
Name: svn:mime-type
   + text/plain






reply via email to

[Prev in Thread] Current Thread [Next in Thread]