Changeset 286


Ignore:
Timestamp:
01/04/10 16:14:33 (11 years ago)
Author:
sander
Message:

Add support for the iTools ODF Anonymiser

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

Legend:

Unmodified
Added
Removed
  • trunk/server/www/app/config/core.php.default

    r284 r286  
    342342 */ 
    343343        Configure::write('Validator.ODFToolkit', 'http://tools.odftoolkit.org/odfvalidator/'); 
     344/** 
     345 * Path to the iTools greeking utility 
     346 */ 
     347        Configure::write('Anonymiser.path', '/usr/bin/iodf-greek.py'); 
    344348?> 
  • trunk/server/www/app/controllers/requests_controller.php

    r281 r286  
    198198                        } 
    199199 
     200                        // Check that the user marked any applications 
     201                        if (!isset($this->data['Request']['App']) || !is_array($this->data['Request']['App']) || sizeof($this->data['Request']['App']) == 0) { 
     202                                $this->Session->setFlash(__('You did not mark any applications.', true)); 
     203                                $this->redirect(array('action'=>'add')); 
     204                        } 
     205 
    200206                        // Create a new request 
    201207                        $this->Request->create(); 
  • trunk/server/www/app/models/behaviors/file.php

    r277 r286  
    281281        public function getContents(&$model) 
    282282        { 
    283                 if (!isset($model->id)) { 
     283                if (!$model->id) { 
    284284                        return null; 
    285285                } 
     
    301301        public function getPath(&$model) 
    302302        { 
    303                 if (!isset($model->id)) { 
    304                         return false; 
    305                 } 
    306                  
    307                 $path = $model->field($this->settings['fields']['path']); 
    308                 if (!$path && !is_file($this->settings['directory'] . DS . $path)) { 
     303                if ($model->id) { 
     304                        $path = $model->field($this->settings['fields']['path']); 
     305                } elseif (isset($model->data[$model->name][$this->settings['fields']['path']])) { 
     306                        $path = $model->data[$model->name][$this->settings['fields']['path']]; 
     307                } else { 
     308                        return false; 
     309                } 
     310                 
     311                if (!$path || !is_file($this->settings['directory'] . DS . $path)) { 
    309312                        return false; // There is no file 
    310313                } 
  • trunk/server/www/app/models/request.php

    r278 r286  
    127127                } 
    128128 
     129                // Run the ODF anonymiser if requested 
     130                if ($this->data['Request']['anonymise']) { 
     131                        if (!$this->anonymise()) { 
     132                                $errors[] = __('The Anonymiser failed to run', true); 
     133                                return false; 
     134                        } 
     135                } 
     136                unset($this->data['Request']['anonymise']); 
     137 
    129138                // Save the request 
    130139                if (($this->data = $this->save()) === false) { 
     
    363372                return true; // To continue the rest of the pipeline 
    364373        } 
     374 
     375        /** 
     376         * Run the request through the iTools greeking utility 
     377         * @return boolean Success 
     378         */ 
     379        public function anonymise() 
     380        { 
     381                $bin = Configure::read('Anonymiser.path'); 
     382                if (!$bin || !is_executable($bin)) { 
     383                        $this->log('Anonymiser not configured'); 
     384                        return false; 
     385                } 
     386 
     387                $path = $this->getPath(); 
     388                $this->log('Anonymiser path: ' . $path, LOG_DEBUG); 
     389                if (!is_readable($path) || !is_writeable($path)) { 
     390                        $this->log('Anonymiser target file not readable or writeable'); 
     391                        return false; 
     392                } 
     393 
     394                $spec = array( 
     395                        0 => array('pipe', 'r'), // STDIN 
     396                        1 => array('pipe', 'w'), // STDOUT 
     397                        2 => array('pipe', 'w')  // STDERR 
     398                ); 
     399 
     400                $proc = proc_open($bin . ' -o ' . $path . ' ' . $path, $spec, $pipes); 
     401                if (!is_resource($proc)) { 
     402                        $this->log('Anonymiser failed to run'); 
     403                        return false; 
     404                } 
     405 
     406                $stdout = stream_get_contents($pipes[1]); 
     407                $stderr = stream_get_contents($pipes[2]); 
     408                fclose($pipes[0]); 
     409                fclose($pipes[1]); 
     410                fclose($pipes[2]); 
     411                proc_close($proc); 
     412 
     413                $this->log('Anonymiser STDOUT: ' . $stdout, LOG_DEBUG); 
     414                $this->log('Anonymiser STDERR: ' . $stderr, LOG_DEBUG); 
     415 
     416                if (trim($stderr)) { 
     417                        return false; 
     418                } 
     419 
     420                return true; 
     421        } 
    365422} 
    366423 
  • trunk/server/www/app/views/requests/add.ctp

    r249 r286  
    113113                </div> 
    114114                <?php 
     115                        echo $form->input('anonymise', array( 
     116                                'type' => 'checkbox', 
     117                                'label' => sprintf(__('Anonymise this document first. <span class="help">(<a href="%s">What is this?</a>)</span>', true), '/pages/anonymiser') 
     118                        )); 
     119 
    115120                        if ($can_have_factories) { 
    116121                                echo $form->input('own_factory', array('label' => __('Only use my own factories to process this request.', true))); 
  • trunk/server/www/app/webroot/css/cake.override.css

    r282 r286  
    122122        margin: 0; 
    123123} 
     124 
     125#upload .help { font-size: small; } 
     126#upload .help a { font-weight: normal; } 
    124127 
    125128#RequestAddForm div.radio label { 
Note: See TracChangeset for help on using the changeset viewer.