Advertisement
Guest User

public function executeExport(sfWebRequest $request)

a guest
Aug 4th, 2013
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.63 KB | None | 0 0
  1. public function executeExport(sfWebRequest $request)
  2.   {
  3.     /*check access*/
  4.     if($request->hasParameter('projects_id'))
  5.     {
  6.       $this->forward404Unless($this->projects = Doctrine_Core::getTable('Projects')->createQuery()->addWhere('id=?',$request->getParameter('projects_id'))->fetchOne(), sprintf('Object projects does not exist (%s).', $request->getParameter('projects_id')));
  7.      
  8.       $this->checkProjectsAccess($this->projects);
  9.       $this->checkTasksAccess('view',false,$this->projects);
  10.     }
  11.     else
  12.     {
  13.       $this->checkTasksAccess('view');
  14.     }
  15.  
  16.     $this->columns = array(
  17.                            'Projects'       => t::__('Project Name'),
  18.                            'id'             => t::__('Id'),
  19.                            'TasksGroups'    => t::__('Group'),
  20.                            'Versions'        => t::__('Version'),
  21.                            'ProjectsPhases' => t::__('Phase'),                
  22.                            'TasksPriority'  => t::__('Priority'),
  23.                            'TasksLabels'     => t::__('Label'),                                  
  24.                            'name'     => t::__('Name'),
  25.                            'TasksStatus'    => t::__('Status'),
  26.                            'TasksTypes'      => t::__('Type'),                
  27.                            'assigned_to'    => t::__('Assigned To'),
  28.                            'Users'     => t::__('Created By'),
  29.                            'estimated_time' => t::__('Est. Time'),
  30.                            'work_hours'     => t::__('Work Hours'),                                                      
  31.                            'start_date'     => t::__('Start Date'),
  32.                            'due_date'       => t::__('Due Date'),
  33.                            'progress'       => t::__('Progress'),
  34.                            'created_at'     => t::__('Created At'),
  35.                            
  36.                           );
  37.                            
  38.     $extra_fields = ExtraFieldsList::getFieldsByType('tasks',$this->getUser(),false,array('all'=>true));
  39.    
  40.     foreach($extra_fields as $v)
  41.     {
  42.       $this->columns['extra_field_' . $v['id']]=$v['name'];
  43.     }  
  44.                                        
  45.     $this->columns['url']=t::__('Url');
  46.    
  47.     if($fields = $request->getParameter('fields'))
  48.     {
  49.       $separator = "\t";
  50.       $format = $request->getParameter('format','.csv');
  51.       $filename = $request->getParameter('filename','tasks');
  52.            
  53.             header("Content-type: Application/octet-stream");      
  54.             header("Content-disposition: attachment; filename=" . $filename . "." . $format);
  55.             header("Pragma: no-cache");
  56.             header("Expires: 0");
  57.    
  58.       $content = '';
  59.       foreach($fields as $f)
  60.       {
  61.         $content .= str_replace(array("\n\r","\r","\n",$separator),' ',$this->columns[$f]) . $separator;
  62.       }
  63.       $content .= "\n";
  64.      
  65.       if($format=='csv')
  66.       {
  67.         echo chr( 0xFF ) . chr( 0xFE ) . mb_convert_encoding( $content, 'UTF-16LE', 'UTF-8' );
  68.       }
  69.       else
  70.       {
  71.         echo $content;
  72.       }
  73.    
  74.       if(strlen($request->getParameter('selected_items')==0)) exit();
  75.      
  76.        $q = Doctrine_Core::getTable('Tasks')->createQuery('t')
  77.           ->leftJoin('t.TasksPriority tp')
  78.           ->leftJoin('t.TasksStatus ts')
  79.           ->leftJoin('t.TasksLabels tl')
  80.           ->leftJoin('t.TasksTypes tt')
  81.           ->leftJoin('t.TasksGroups tg')
  82.           ->leftJoin('t.ProjectsPhases pp')
  83.           ->leftJoin('t.Versions v')
  84.           ->leftJoin('t.Projects p')
  85.           ->leftJoin('t.Users')    
  86.           )                          
  87.           ->whereIn('t.id',explode(',',$request->getParameter('selected_items')));
  88.          
  89.       if($request->hasParameter('projects_id'))
  90.       {
  91.         $q->addWhere('projects_id=?',$request->getParameter('projects_id'));
  92.        
  93.         if(Users::hasAccess('view_own','tasks',$this->getUser(),$request->getParameter('projects_id')))
  94.         {                
  95.           $q->addWhere("find_in_set('" . $this->getUser()->getAttribute('id') . "',t.assigned_to) or t.created_by='" . $this->getUser()->getAttribute('id') . "'");
  96.         }                
  97.       }
  98.       else
  99.       {
  100.         if(Users::hasAccess('view_own','projects',$this->getUser()))
  101.         {      
  102.           $q->addWhere("find_in_set('" . $this->getUser()->getAttribute('id') . "',team) or p.created_by='" . $this->getUser()->getAttribute('id') . "'");
  103.         }
  104.        
  105.         if(Users::hasAccess('view_own','tasks',$this->getUser()))
  106.         {                
  107.           $q->addWhere("find_in_set('" . $this->getUser()->getAttribute('id') . "',t.assigned_to) or t.created_by='" . $this->getUser()->getAttribute('id') . "'");
  108.         }
  109.        
  110.       }
  111.      
  112.      
  113.       $tree_order = false;
  114.                        
  115.       if($request->hasParameter('projects_id'))
  116.       {
  117.         $q = app::addListingOrder($q,'tasks',$this->getUser(), (int)$request->getParameter('projects_id'));
  118.       }
  119.       else
  120.       {
  121.         $q->orderBy('LTRIM(p.name), ts.group desc, ts.sort_order, LTRIM(ts.name), LTRIM(t.name)');
  122.       }  
  123.                
  124.          
  125.       $tasks = $q->fetchArray();
  126.            
  127.      
  128.       $totals = array();
  129.       $projects_totals = array();
  130.       $current_project_id = 0;
  131.          
  132.       foreach($tasks as $t)
  133.       {
  134.         $content = '';
  135.        
  136.         //
  137.         if($current_project_id==0) $current_project_id = $t['projects_id'];
  138.          
  139.         if($current_project_id!=$t['projects_id'])
  140.         {
  141.          
  142.            //adding totals
  143.           if(isset($projects_totals[$current_project_id]))
  144.           {          
  145.             foreach($fields as $f)
  146.             {
  147.               $v = '';          
  148.              
  149.               if(in_array($f,array('estimated_time','work_hours')))
  150.               {            
  151.                 $v = $projects_totals[$current_project_id][$f];          
  152.               }
  153.               elseif(strstr($f,'extra_field_'))
  154.               {          
  155.                 if(isset($projects_totals[$current_project_id][str_replace('extra_field_','',$f)])) $v = $projects_totals[$current_project_id][str_replace('extra_field_','',$f)];                        
  156.               }
  157.                      
  158.               $content .= str_replace(array("\n\r","\r","\n",$separator),' ',$v) . $separator;
  159.             }
  160.                      
  161.             $content .= "\n\n";
  162.           }          
  163.          
  164.           $current_project_id=$t['projects_id'];
  165.         }
  166.      
  167.         //
  168.         $name_adding = '';
  169.      
  170.         $ex_values = ExtraFieldsList::getValuesList($extra_fields,$t['id']);                
  171.                                        
  172.         foreach($fields as $f)
  173.         {
  174.           $v = '';          
  175.          
  176.           if($f=='name')
  177.           {
  178.             $v=$name_adding . $t[$f];
  179.           }          
  180.           elseif(in_array($f,array('id','description','estimated_time','work_hours')))
  181.           {  
  182.            
  183.             if($f=='work_hours')
  184.             {
  185.               $v = TasksComments::getTotalWorkHours($t['id']);
  186.             }
  187.             else
  188.             {      
  189.               $v=$t[$f];
  190.             }
  191.            
  192.             if(in_array($f,array('estimated_time','work_hours')))
  193.             {
  194.               if(!isset($totals[$f])) $totals[$f] = 0;
  195.               if(!isset($projects_totals[$t['projects_id']][$f])) $projects_totals[$t['projects_id']][$f] = 0;
  196.                                            
  197.               $totals[$f]+=$v;
  198.               $projects_totals[$t['projects_id']][$f]+=$v;
  199.             }
  200.           }
  201.           elseif(in_array($f,array('start_date','due_date','created_at')))
  202.           {            
  203.             $v=app::dateTimeFormat($t[$f]);
  204.           }
  205.           elseif($f=='progress')
  206.           {
  207.             $v = (int)$t['progress'] . '%';
  208.           }
  209.           elseif(strstr($f,'extra_field_'))
  210.           {
  211.             if($ex = Doctrine_Core::getTable('ExtraFields')->find(str_replace('extra_field_','',$f)))
  212.             {
  213.               $v = ExtraFieldsList::renderFieldValueByType($ex,$ex_values,array(),true);
  214.                            
  215.               if(in_array($ex->getType(),array('number','formula')))
  216.               {
  217.                 if(!isset($totals[$ex->getId()])) $totals[$ex->getId()] = 0;
  218.                 if(!isset($projects_totals[$t['projects_id']][$ex->getId()])) $projects_totals[$t['projects_id']][$ex->getId()] = 0;
  219.                
  220.                 $totals[$ex->getId()]+= $v;
  221.                 $projects_totals[$t['projects_id']][$ex->getId()]+=$v;
  222.               }
  223.              
  224.               $v = str_replace('<br>',', ',$v);
  225.             }
  226.           }
  227.           elseif($f=='assigned_to')
  228.           {
  229.             $v = Users::getNameById($t[$f],', ');            
  230.           }
  231.           elseif($f=='url')
  232.           {
  233.             $v = app::public_url('tasksComments/index?projects_id=' . $t['projects_id'] . '&tasks_id=' . $t['id']);
  234.           }
  235.           elseif($f=='actual_time')
  236.           {
  237.          
  238.             if($t['work_hours']>0 and $t['togo_hours']==0)
  239.             {
  240.               $v = $t['work_hours'];
  241.             }
  242.             else
  243.             {
  244.               $v = (float)$t['estimated_time']-(float)$t['work_hours']+(float)$t['togo_hours'];
  245.             }
  246.            
  247.             if(!isset($totals[$f])) $totals[$f] = 0;
  248.              
  249.             $totals[$f]+=$v;
  250.             $projects_totals[$t['projects_id']][$f]+=$v;
  251.           }
  252.           else
  253.           {            
  254.             $v=app::getArrayName($t,$f);
  255.           }
  256.          
  257.           $content .= str_replace(array("\n\r","\r","\n",$separator),' ',$v) . $separator;
  258.         }
  259.        
  260.         $content .= "\n";
  261.      
  262.         if($format=='csv')
  263.         {
  264.           echo chr( 0xFF ) . chr( 0xFE ) . mb_convert_encoding( $content, 'UTF-16LE', 'UTF-8' );
  265.         }
  266.         else
  267.         {
  268.           echo $content;
  269.         }        
  270.       }
  271.      
  272.       $content = '';
  273.      
  274.       //adding totals
  275.       if(isset($projects_totals[$current_project_id]) and !$request->hasParameter('projects_id'))
  276.       {
  277.         foreach($fields as $f)
  278.         {
  279.           $v = '';          
  280.          
  281.           if(in_array($f,array('estimated_time','work_hours')))
  282.           {            
  283.             $v = $projects_totals[$current_project_id][$f];            
  284.           }
  285.           elseif(strstr($f,'extra_field_'))
  286.           {          
  287.             if(isset($projects_totals[$current_project_id][str_replace('extra_field_','',$f)])) $v = $projects_totals[$current_project_id][str_replace('extra_field_','',$f)];            
  288.           }
  289.                  
  290.           $content .= str_replace(array("\n\r","\r","\n",$separator),' ',$v) . $separator;
  291.         }
  292.                  
  293.         $content .= "\n\n";
  294.       }
  295.      
  296.       foreach($fields as $f)
  297.       {
  298.         $v = '';          
  299.        
  300.         if(in_array($f,array('estimated_time','work_hours')))
  301.         {            
  302.           $v = $totals[$f];
  303.         }
  304.         elseif(strstr($f,'extra_field_'))
  305.         {          
  306.           if(isset($totals[str_replace('extra_field_','',$f)])) $v = $totals[str_replace('extra_field_','',$f)];          
  307.         }
  308.                
  309.         $content .= str_replace(array("\n\r","\r","\n",$separator),' ',$v) . $separator;
  310.       }
  311.      
  312.       $content .= "\n";
  313.      
  314.       if($format=='csv')
  315.       {
  316.         echo chr( 0xFF ) . chr( 0xFE ) . mb_convert_encoding( $content, 'UTF-16LE', 'UTF-8' );
  317.       }
  318.       else
  319.       {
  320.         echo $content;
  321.       }
  322.                        
  323.       exit();
  324.     }
  325.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement