Changeset 325


Ignore:
Timestamp:
03/22/10 12:23:31 (10 years ago)
Author:
sander
Message:

Manually add results

Location:
trunk/server/www/app
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/server/www/app/controllers/jobs_controller.php

    r324 r325  
    4646 
    4747        /** 
     48         * Manually add a job and result to a request 
     49         */ 
     50        public function add($request_id = null) 
     51        { 
     52                if (!empty($this->data)) { 
     53                        // Load the request 
     54                        $request = $this->Job->Request->find('first', array( 
     55                                'conditions' => array('Request.id' => $this->data['Job']['request_id']), 
     56                                'recursive' => -1, 
     57                        )); 
     58 
     59                        // Create a new job 
     60                        $this->Job->create(); 
     61                        $this->Job->set($this->data); 
     62                        $this->Job->save(); 
     63 
     64                        // Load the new job from the database 
     65                        $this->Job->contain(array('Application', 'Platform')); 
     66                        $job = $this->Job->read(); 
     67 
     68                        // Find out where to store the result 
     69                        $path  = $request['Request']['root'] . DS; 
     70                        $path .= Inflector::slug($job['Application']['name']) . '_'; 
     71                        $path .= Inflector::slug($job['Job']['version']) . '_'; 
     72                        $path .= Inflector::slug($job['Platform']['name']); 
     73 
     74                        // Create a new result 
     75                        $this->Job->Result->create(); 
     76                        $this->Job->Result->set(array( 
     77                                'path' => $path, 
     78                                'state' => Result::STATE_UPLOADING, 
     79                        )); 
     80 
     81                        // Add the file upload 
     82                        $errors = array(); 
     83                        if (!$this->Job->Result->addUpload($this->data, $errors)) { 
     84                                $this->Job->delete(); 
     85                                $this->Session->setFlash(__('Error uploading:<br />', true) . implode("<br />\n", $errors)); 
     86                                $this->redirect(array('action'=>'add')); 
     87                        } 
     88                         
     89                        // Fill in the format_id in the job 
     90                        $mimetype = $this->Job->Result->Mimetype->find('first', array( 
     91                                'conditions' => array('Mimetype.id' => $this->Job->Result->data['Result']['mimetype_id']), 
     92                                'recursive' => -1, 
     93                        )); 
     94                        $this->Job->Result->set('format_id', $mimetype['Mimetype']['format_id']); 
     95 
     96                        $this->log('Result: ' . print_r($this->Job->Result->data, true), LOG_DEBUG); 
     97                        $this->log('Mimetype: ' . print_r($mimetype, true), LOG_DEBUG); 
     98 
     99                        // Save the result 
     100                        $this->Job->Result->save(); 
     101                        $this->Job->save(array( 
     102                                'result_id' => $this->Job->Result->id, 
     103                                'format_id' => $mimetype['Mimetype']['format_id'], 
     104                        )); 
     105 
     106                        // All done! 
     107                        $this->redirect(array('controller' => 'requests', 'action' => 'view', $this->data['Job']['request_id'])); 
     108                } 
     109 
     110                if (empty($this->data)) { 
     111                        $this->data = array('Job' => array( 
     112                                'request_id' => $request_id, 
     113                        )); 
     114                } 
     115 
     116                $platforms = $this->Job->Platform->find('list'); 
     117                $applications = $this->Job->Application->find('list'); 
     118 
     119                $this->set(compact('platforms', 'applications')); 
     120                $this->render('edit'); 
     121        } 
     122 
     123        /** 
    48124         * View one of your own jobs 
    49125         * 
     
    79155 
    80156                $this->set('job', $job); 
     157        } 
     158 
     159        /** 
     160         * Edit a job 
     161         * @param string $id The Job ID 
     162         */ 
     163        public function edit($id = null) 
     164        { 
     165                if (!empty($this->data)) { 
     166                        if (!$this->Job->Request->checkAccess($this->AuthCert->user('id'), 'write', $this->data['Job']['request_id'])) { 
     167                                $this->Session->setFlash(__('Invalid Job.', true)); 
     168                                $this->redirect(array('controller' => 'requests', 'action'=>'view', $this->data['Job']['request_id'])); 
     169                        } 
     170 
     171                        if ($this->Job->save($this->data)) { 
     172                                $this->Session->setFlash(__('The Job has been saved', true)); 
     173                                $this->redirect(array('controller' => 'requests', 'action'=>'view', $this->data['Job']['request_id'])); 
     174                        } else { 
     175                                $this->Session->setFlash(__('The Job could not be saved. Please, try again.', true)); 
     176                        } 
     177                } 
     178 
     179                if (empty($this->data)) { 
     180                        $this->Job->id = $id; 
     181                        $this->Job->contain('Request'); 
     182                        $this->data = $this->Job->read(); 
     183                } 
     184 
     185                $platforms = $this->Job->Platform->find('list'); 
     186                $applications = $this->Job->Application->find('list'); 
     187                $this->set(compact('platforms', 'applications')); 
     188        } 
     189 
     190        /** 
     191         * Delete a job 
     192         * @param string $id The Job ID 
     193         */ 
     194        public function delete($id = null) 
     195        { 
     196                if (!$id) { 
     197                        $this->Session->setFlash(__('Invalid Job.', true)); 
     198                        $this->redirect(array('controller' => 'requests', 'action'=>'index')); 
     199                } 
     200 
     201                $this->Job->id = $id; 
     202                $this->Job->contain('Request'); 
     203                $job = $this->Job->read(); 
     204 
     205                if (!$this->Job->Request->checkAccess($this->AuthCert->user('id'), 'write', $job['Request']['id'])) { 
     206                        $this->Session->setFlash(__('Invalid Job.', true)); 
     207                        $this->redirect(array('controller' => 'requests', 'action'=>'view', $job['Request']['id'])); 
     208                } 
     209 
     210                $this->Job->delete(); 
     211                $this->redirect(array('controller' => 'requests', 'action'=>'view', $job['Request']['id'])); 
    81212        } 
    82213 
  • trunk/server/www/app/controllers/requests_controller.php

    r305 r325  
    9191                } 
    9292 
     93                $request['Job'] = Set::sort($request['Job'], '{n}.Application.name', 'asc'); 
    9394                return $request; 
    9495        } 
     
    106107 
    107108                $request = $this->_getRequest($id, 'read'); 
    108                 $this->set(array( 
    109                         'request' => $request, 
    110                         'canDeleteResults' => $this->__permitted('results', 'delete'), 
    111                 )); 
     109                $writeAccess = $this->Request->checkAccess($this->AuthCert->user('id'), 'write', $id); 
     110 
     111                $this->set(compact('request', 'writeAccess')); 
    112112        } 
    113113 
  • trunk/server/www/app/controllers/results_controller.php

    r294 r325  
    100100 
    101101                $result = $this->_getResult($id); 
    102                 $this->set(array( 
    103                         'result' => $result, 
    104                         'canDelete' => $this->__permitted('results', 'delete'), 
    105                 )); 
     102                $writeAccess = $this->Result->Job->Request->checkAccess($this->AuthCert->user('id'), 'write', $result['Job']['Request']['id']); 
     103 
     104                $this->set(compact('result', 'writeAccess')); 
    106105        } 
    107106 
  • trunk/server/www/app/models/behaviors/file.php

    r308 r325  
    115115 
    116116                $destination = FILES . $model->data[$model->name][$this->settings['fields']['path']] . DS . $file['name']; 
    117                 if (!mkdir(dirname($destination), 0775, true)) { 
     117                if (!file_exists(dirname($destination)) && !mkdir(dirname($destination), 0775, true)) { 
    118118                        $this->errors[] = __('Could not create the destination directory.', true); 
    119119                        return false; 
  • trunk/server/www/app/models/result.php

    r294 r325  
    106106 
    107107        /** 
     108         * Add an upload to the result 
     109         * 
     110         * If the add fails, &$errors contains the error messages 
     111         * 
     112         * @param array $data The data to save if not saving $this->data, including a file and the jobs 
     113         * @param array &$errors The errors 
     114         * @return boolean Success 
     115         */ 
     116        public function addUpload($data, &$errors = array()) 
     117        { 
     118                if (empty($data)) { 
     119                        $errors[] = __('The result was empty.', true); 
     120                        return false; 
     121                } 
     122 
     123                // Check that we have a file and jobs 
     124                if ((!isset($data['Result']['FileUpload']) || !is_array($data['Result']['FileUpload']))) { 
     125                        $errors[] = __('You did not submit a file.', true); 
     126                        return false; 
     127                } 
     128 
     129                if (!$this->setFileUpload($data['Result']['FileUpload'])) { 
     130                        $errors[] = __('The file upload failed. Please try again.', true); 
     131                        $errors = array_merge($errors, $this->Behaviors->File->errors); 
     132                        return false; 
     133                } 
     134 
     135                return true; 
     136        } 
     137 
     138        /** 
    108139         * When deleting a result, find the Job that has it's ID and clear it. 
    109140         */ 
     
    113144                $this->Job->id = $data['Job']['id']; 
    114145                $this->Job->saveField('result_id', ''); 
     146                $this->deleteFile(); 
     147 
    115148                return true; 
    116149        } 
  • trunk/server/www/app/views/requests/view.ctp

    r284 r325  
    5353 
    5454                        ?> 
    55                         - <?php echo $html->link(__('Edit description', true), array('action' => 'edit', $request['Request']['id']));?> 
     55                        <?php if ($writeAccess) { 
     56                                echo ' - ' . $html->link(__('Edit description', true), array('action' => 'edit', $request['Request']['id'])); 
     57                        } ?> 
    5658                </dd> 
    5759        </dl> 
     
    8385                                </p> 
    8486                        <?php endif;?> 
    85                         <?php if (!empty($job['Result']) && $canDeleteResults) { 
    86                                 echo '<p>' . $html->link(__('Delete', true), array('controller' => 'results', 'action' => 'delete', $job['Result']['id'])) . '</p>'; 
    87                         }?> 
    8887                </div> 
    8988        <?php endforeach; ?> 
    9089</div> 
    91 <?php endif; ?> 
     90<?php endif;?> 
     91 
     92<?php if ($writeAccess):?> 
     93        <div class="actions" style="clear: both;"> 
     94                <ul> 
     95                        <li><?php echo $html->link(__('Add a manual result', true), array('controller' => 'jobs', 'action' => 'add', $request['Request']['id']));?></li> 
     96                </ul> 
     97        </div> 
     98<?php endif;?> 
  • trunk/server/www/app/views/results/view.ctp

    r281 r325  
    99                ) 
    1010));?></span><br /><br /> 
     11 
    1112        <?php if ($result['Result']['state'] == Result::STATE_SCAN_FOUND): ?> 
    1213                <img src="/img/icons/virus.png" alt="" style="float: left;" /> 
     
    1415                <img src="/img/icons/<?php echo $result['Mimetype']['icon'];?>" alt="" style="float: left;" /> 
    1516        <?php endif; ?> 
    16         <dl style="margin-left: 10em;"><?php $i = 0; $class = ' class="altrow"';?> 
     17        <dl style="margin-left: 10em;"> 
    1718                <dt><?php __('Filename'); ?></dt> 
    1819                <dd> 
     
    6465                                        echo $html->link(__('Download', true), array('action' => 'download', $result['Result']['id'])); 
    6566                                } 
     67 
     68                                if ($writeAccess) { 
     69                                        if (!$result['Factory']['id']) { 
     70                                                echo ' - ' . $html->link(__('Edit', true), array('controller' => 'jobs', 'action' => 'edit', $result['Job']['id'])); 
     71                                        } 
     72                                        echo ' - ' . $html->link(__('Delete', true), array('controller' => 'jobs', 'action' => 'delete', $result['Job']['id'])); 
     73                                } 
    6674                        ?> 
    67                         <?php if ($canDelete == true) { 
    68                                 echo ' - ' . $html->link(__('Delete', true), array('action' => 'delete', $result['Result']['id'])); 
    69                         }?> 
    7075                        &nbsp; 
    7176                </dd> 
     
    7378</div> 
    7479 
     80<?php if ($result['Factory']['id']):?> 
    7581<div class="related"> 
    7682        <h3><?php printf(__('Rendered by %s', true), $result['Factory']['User']['name']);?></h3> 
     
    100106        </dl> 
    101107</div> 
     108<?php endif;?> 
Note: See TracChangeset for help on using the changeset viewer.