Changeset 330


Ignore:
Timestamp:
03/24/10 15:14:25 (10 years ago)
Author:
sander
Message:

Add descriptions and manual verification to results

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

Legend:

Unmodified
Added
Removed
  • trunk/server/www/app/config/sql/schema.php

    r329 r330  
    11<?php  
    22/* SVN FILE: $Id$ */ 
    3 /* App schema generated on: 2010-03-23 15:03:08 : 1269352928*/ 
     3/* App schema generated on: 2010-03-24 14:03:22 : 1269436882*/ 
    44class AppSchema extends CakeSchema { 
    55        var $name = 'App'; 
     
    182182                        'state' => array('type' => 'integer', 'null' => false, 'default' => '1'), 
    183183                        'state_info' => array('type' => 'string', 'null' => false, 'default' => NULL), 
     184                        'verified' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 4), 
     185                        'description' => array('type' => 'text', 'null' => false, 'default' => NULL), 
     186                        'description_html' => array('type' => 'text', 'null' => false, 'default' => NULL), 
    184187                        'created' => array('type' => 'datetime', 'null' => true, 'default' => NULL), 
    185188                        'updated' => array('type' => 'datetime', 'null' => true, 'default' => NULL), 
  • trunk/server/www/app/controllers/jobs_controller.php

    r329 r330  
    5050        public function add($request_id = null) 
    5151        { 
     52                $this->helpers[] = 'Javascript'; 
     53 
    5254                if (!empty($this->data)) { 
    5355                        // Load the request 
     
    104106                        )); 
    105107 
     108                        // Finally add the description to the result. 
     109                        $this->Job->Result->set($this->data['Result']); 
     110                        $this->Job->Result->save(); 
     111 
    106112                        // All done! 
    107113                        $this->redirect(array('controller' => 'requests', 'action' => 'view', $this->data['Job']['request_id'])); 
     
    109115 
    110116                if (empty($this->data)) { 
    111                         $this->data = array('Job' => array( 
    112                                 'request_id' => $request_id, 
    113                         )); 
     117                        $this->data = array( 
     118                                'Job' => array( 
     119                                        'request_id' => $request_id, 
     120                                ), 
     121                                'Result' => array( 
     122                                        'verified' => 0, 
     123                                        'description' => '', 
     124                                ), 
     125                        ); 
    114126                } 
    115127 
     
    117129                $applications = $this->Job->Application->find('list'); 
    118130 
    119                 $this->set(compact('platforms', 'applications')); 
     131                $verify = array( 
     132                        Result::VERIFY_PENDING => __('Not manually verified', true), 
     133                        Result::VERIFY_PASS    => __('Correct result', true), 
     134                        Result::VERIFY_FAIL    => __('Incorrect result', true), 
     135                ); 
     136 
     137                $this->set(compact('platforms', 'applications', 'verify')); 
    120138                $this->render('edit'); 
    121139        } 
     
    163181        public function edit($id = null) 
    164182        { 
     183                $this->helpers[] = 'Javascript'; 
     184 
    165185                if (!empty($this->data)) { 
    166186                        if (!$this->Job->Request->checkAccess($this->AuthCert->user('id'), 'write', $this->data['Job']['request_id'])) { 
     
    170190 
    171191                        if ($this->Job->save($this->data)) { 
     192                                $this->data['Result']['id'] = $this->Job->field('result_id'); 
     193                                $this->Job->Result->save($this->data); 
     194 
    172195                                $this->Session->setFlash(__('The Job has been saved', true)); 
    173                                 $this->redirect(array('controller' => 'requests', 'action'=>'view', $this->data['Job']['request_id'])); 
     196                                $this->redirect(array('controller' => 'results', 'action'=>'view', $this->data['Result']['id'])); 
    174197                        } else { 
    175198                                $this->Session->setFlash(__('The Job could not be saved. Please, try again.', true)); 
     
    179202                if (empty($this->data)) { 
    180203                        $this->Job->id = $id; 
    181                         $this->Job->contain('Request'); 
     204                        $this->Job->contain('Request', 'Result'); 
    182205                        $this->data = $this->Job->read(); 
    183206                } 
     
    185208                $platforms = $this->Job->Platform->find('list'); 
    186209                $applications = $this->Job->Application->find('list'); 
    187                 $this->set(compact('platforms', 'applications')); 
     210 
     211                $verify = array( 
     212                        Result::VERIFY_PENDING => __('Not manually verified', true), 
     213                        Result::VERIFY_PASS    => __('Correct result', true), 
     214                        Result::VERIFY_FAIL    => __('Incorrect result', true), 
     215                ); 
     216 
     217                $this->set(compact('platforms', 'applications', 'verify')); 
    188218        } 
    189219 
  • trunk/server/www/app/controllers/requests_controller.php

    r325 r330  
    112112        } 
    113113 
    114  
    115114        /** 
    116115         * Edit a request description 
     
    136135                )); 
    137136        } 
     137 
    138138        /** 
    139139         * Add a new request 
  • trunk/server/www/app/controllers/results_controller.php

    r325 r330  
    4040        { 
    4141                parent::beforeFilter(); 
    42                 $this->AuthCert->allow('view', 'download'); 
     42                $this->AuthCert->allow('view', 'edit', 'download'); 
    4343        } 
    4444 
     
    4949         * 
    5050         * @param string $id The result ID 
     51         * @param string $type The access type. Should be 'read' or 'write' 
    5152         * @param return array An array containing the result. 
    5253         */ 
    53         private function _getResult($id) 
     54        private function _getResult($id, $type = 'read') 
    5455        { 
    5556                if (!$id) { 
     
    5960                 
    6061                $result = $this->Result->read(null, $id); 
    61                 if (empty($result) || !$this->Result->checkAccess($this->AuthCert->user('id'), 'read', $id)) { 
     62                if (empty($result) || !$this->Result->checkAccess($this->AuthCert->user('id'), $type, $id)) { 
    6263                        $this->Session->setFlash(__('Invalid Result.', true)); 
    6364                        $this->redirect(array('controller' => 'requests', 'action'=>'add')); 
     
    106107 
    107108        /** 
     109         * Edit a result description 
     110         * 
     111         * @param string $id The result ID 
     112         * @return void 
     113         */ 
     114        public function edit($id = null) 
     115        { 
     116                $this->helpers[] = 'ResultModel'; 
     117                $this->helpers[] = 'Javascript'; 
     118 
     119                $this->Result->contain(array( 
     120                        'Job', 
     121                        'Job.Application', 
     122                        'Job.Platform', 
     123                        'Mimetype', 
     124                        'Mimetype.Format', 
     125                )); 
     126                $result = $this->_getResult($id, 'write'); 
     127 
     128                if (!empty($this->data)) { 
     129                        $this->data['Result']['id'] = $id; 
     130                        if (!$this->Result->save($this->data)) { 
     131                                $this->Session->setFlash(__('Unable to save the description', true)); 
     132                        } else { 
     133                                $this->redirect(array('action' => 'view', $id)); 
     134                        } 
     135                } 
     136 
     137                $verify = array( 
     138                        Result::VERIFY_PENDING => __('Not manually verified', true), 
     139                        Result::VERIFY_PASS    => __('Correct result', true), 
     140                        Result::VERIFY_FAIL    => __('Incorrect result', true), 
     141                ); 
     142 
     143                $this->set(compact('result', 'verify')); 
     144        } 
     145 
     146        /** 
    108147         * Action to download a single result 
    109148         * 
  • trunk/server/www/app/models/result.php

    r325 r330  
    2929         * Request states 
    3030         */ 
    31         const STATE_UPLOADING   = 1; 
    32         const STATE_POSTPROCESSOR_QUEUED = 2; 
    33         const STATE_SCAN_FOUND  = 4; 
    34         const STATE_POSTPROCESSOR_FAILED = 8; 
    35         const STATE_FINISHED    = 16; 
     31        const STATE_UPLOADING            = 1; 
     32        const STATE_POSTPROCESSOR_QUEUED =  2; 
     33        const STATE_SCAN_FOUND           = 4; 
     34        const STATE_POSTPROCESSOR_FAILED =  8; 
     35        const STATE_FINISHED             = 16; 
    3636        /**#@-*/ 
    3737         
     38        /**#@+ 
     39         * Manual verification states 
     40         */ 
     41        const VERIFY_PENDING = 0; 
     42        const VERIFY_PASS    = 1; 
     43        const VERIFY_FAIL    = 2; 
     44        /**#@-*/ 
     45 
    3846        /** @var array A result belongs to a job and a factory that created it */ 
    3947        public $belongsTo = array('Factory', 'Format'); 
     
    145153                $this->Job->saveField('result_id', ''); 
    146154                $this->deleteFile(); 
     155 
     156                return true; 
     157        } 
     158 
     159        /** 
     160         * Convert the Markdown description to HTML before saving 
     161         * @return boolean True to continue saving 
     162         */ 
     163        public function beforeSave() 
     164        { 
     165                if (isset($this->data['Result']['description'])) { 
     166                        // Convert the description to HTML 
     167                        App::import('Vendor', 'markdown'); 
     168                        App::import('Vendor', 'HTMLPurifier', array('file' => 'htmlpurifier/HTMLPurifier.standalone.php')); 
     169 
     170                        $config = HTMLPurifier_Config::createDefault(); 
     171                        $config->set('Cache.SerializerPath', CACHE . DS . 'htmlpurifier'); 
     172                        $purifier = new HTMLPurifier($config); 
     173 
     174                        $desc_html = Markdown($this->data['Result']['description']); 
     175                        $this->data['Result']['description_html'] = $purifier->purify($desc_html); 
     176 
     177                        // Save the Markdown version to file 
     178                        $path = FILES . $this->field('path') . DS . 'description.txt'; 
     179                        file_put_contents($path, $this->data['Result']['description']); 
     180                } 
    147181 
    148182                return true; 
  • trunk/server/www/app/views/elements/testsuite.ctp

    r315 r330  
    2020                <td><?php foreach ($request['Validator'] as $validator) { echo $validatorModel->getStateIcon($validator) . ' '; } ?></td> 
    2121                <?php foreach ($applications as $application):?> 
    22                         <td> 
    23                                 <?php 
    24                                         foreach ($request['Job'] as $job) { 
    25                                                 $match = ( 
    26                                                         $job['Application']['name'] == $application['Application']['name'] 
    27                                                         && $job['version'] == $application['Application']['version'] 
    28                                                         && $job['Format']['code'] == 'odf' 
    29                                                 ); 
     22                        <?php 
     23                                foreach ($request['Job'] as $job) { 
     24                                        $match = ( 
     25                                                $job['Application']['name'] == $application['Application']['name'] 
     26                                                && $job['version'] == $application['Application']['version'] 
     27                                                && $job['Format']['code'] == 'odf' 
     28                                        ); 
    3029 
    31                                                 if ($match) { 
    32                                                         if (!$job['Result'] || !$job['Result']['id']) { 
    33                                                                 echo $html->image('/img/icons/validator-pending.png'); 
    34                                                                 break; 
     30                                        if ($match) { 
     31                                                $class = 'white'; 
     32                                                if ($job['Result']) { 
     33                                                        switch($job['Result']['verified']) { 
     34                                                                case Result::VERIFY_PASS: $class = 'green'; break; 
     35                                                                case Result::VERIFY_FAIL: $class = 'red'; break; 
    3536                                                        } 
     37                                                } 
     38                                                echo '<td class="' . $class . '">'; 
    3639 
    37                                                         if (isset($job['Result']['Validator'])) { 
    38                                                                 foreach ($job['Result']['Validator'] as $validator) { 
    39                                                                         echo $validatorModel->getStateIcon($validator) . ' '; 
    40                                                                 } 
    41                                                         } 
    42  
    43                                                         $request['result_count']--; 
     40                                                if (!$job['Result'] || !$job['Result']['id']) { 
     41                                                        echo $html->image('/img/icons/validator-pending.png'); 
    4442                                                        break; 
    4543                                                } 
     44 
     45                                                if (isset($job['Result']['Validator'])) { 
     46                                                        foreach ($job['Result']['Validator'] as $validator) { 
     47                                                                echo $validatorModel->getStateIcon($validator) . ' '; 
     48                                                        } 
     49                                                } 
     50 
     51                                                $request['result_count']--; 
     52                                                break; 
    4653                                        } 
     54                                } 
    4755 
    48                                         if (!$match) { 
    49                                                 echo '-'; 
    50                                         } 
    51                                 ?> 
    52                         </td> 
     56                                if (!$match) { 
     57                                        echo '<td> -'; 
     58                                } 
     59                        ?></td> 
    5360                <?php endforeach;?> 
    5461                <td> 
  • trunk/server/www/app/views/helpers/result_model.php

    r292 r330  
    2626class ResultModelHelper extends AppHelper 
    2727{ 
     28        public $helpers = array('Html'); 
     29 
    2830        /** 
    2931         * Convert Result state to a human readable message 
     
    6062                } 
    6163        } 
     64 
     65        /** 
     66         * Convert the verification state to a human readable message 
     67         */ 
     68        public function getVerified($result) 
     69        { 
     70                if (!is_array($result)) { 
     71                        return ''; 
     72                } 
     73 
     74                if (!isset($result['Result'])) { 
     75                        $result = array('Result' => $result); 
     76                } 
     77 
     78                switch ($result['Result']['verified']) { 
     79                case Result::VERIFY_PASS: 
     80                        return $this->output($this->Html->image('icons/validator-valid.png') . ' ' . __('Correct result', true)); 
     81                case Result::VERIFY_FAIL: 
     82                        return $this->output($this->Html->image('icons/validator-invalid.png') . ' ' . __('Incorrect result', true)); 
     83                default: 
     84                        return $this->output(''); 
     85                } 
     86        } 
    6287} 
    6388 
  • trunk/server/www/app/views/jobs/edit.ctp

    r325 r330  
     1<?php 
     2        $html->css('wmd', null, array(), false); 
     3        $javascript->link('showdown', false); 
     4        $javascript->link('wmd', false); 
     5?> 
     6 
    17<div class="jobs form"> 
    28        <?php echo $form->create('Job', array('type' => 'file'));?> 
    3         <fieldset> 
    4                 <legend> 
     9                <h3> 
    510                        <?php if ($this->action == 'add' || $this->action == 'admin_add') { 
    611                                __('Add a manual result'); 
    712                        } else { 
    8                                 __('Edit this result'); 
     13                                __('Settings for this result'); 
    914                        } 
    1015                        ?> 
    11                 </legend> 
     16                </h3> 
    1217                <?php 
    1318                        if ($this->action == 'edit' || $this->action == 'admin_edit') { 
     
    2732                        echo $form->input('version'); 
    2833                ?> 
    29         </fieldset> 
     34 
     35                <h3><?php __('Manual verification');?></h3> 
     36                <p><?php __('Have you manually checked if this conversion result is correct?');?></p> 
     37                <div class="input"> 
     38                        <?php echo $form->radio('Result.verified', $verify, array('legend' => false, 'default' => $this->data['Result']['verified']));?> 
     39                </div> 
     40 
     41                <h3><?php __('Description');?></h3> 
     42                <div id="wmd-button-bar"></div> 
     43                <textarea id="wmd-input" name="data[Result][description]"><?php echo h($this->data['Result']['description']);?></textarea> 
     44                <div id="wmd-preview" class="polaroid"></div> 
    3045        <?php echo $form->submit();?> 
    3146</div> 
  • trunk/server/www/app/views/results/view.ctp

    r325 r330  
    2121                        &nbsp; 
    2222                </dd> 
     23                <dt><?php __('Application'); ?></dt> 
     24                <dd> 
     25                        <?php echo $result['Job']['Application']['name'];?> <?php echo $result['Job']['version'];?> 
     26                        (<?php echo $result['Job']['Platform']['name'];?>) 
     27                        &nbsp; 
     28                </dd> 
    2329                <dt><?php __('Format'); ?></dt> 
    2430                <dd> 
     
    2935                <dd> 
    3036                        <?php echo $resultModel->getState($result); ?> 
     37                        &nbsp; 
     38                </dd> 
     39                <dt><?php __('Manual verification'); ?></dt> 
     40                <dd> 
     41                        <?php echo $resultModel->getVerified($result); ?> 
    3142                        &nbsp; 
    3243                </dd> 
     
    6778 
    6879                                if ($writeAccess) { 
    69                                         if (!$result['Factory']['id']) { 
     80                                        if ($result['Factory']['id']) { 
     81                                                echo ' - ' . $html->link(__('Edit', true), array('controller' => 'results', 'action' => 'edit', $result['Result']['id'])); 
     82                                        } else { 
    7083                                                echo ' - ' . $html->link(__('Edit', true), array('controller' => 'jobs', 'action' => 'edit', $result['Job']['id'])); 
    7184                                        } 
     
    7790        </dl> 
    7891</div> 
     92 
     93<?php 
     94        if (!empty($result['Result']['description_html'])) { 
     95                echo '<h3>' . __('Description', true) . '</h3>'; 
     96                echo $result['Result']['description_html']; 
     97        } 
     98?> 
    7999 
    80100<?php if ($result['Factory']['id']):?> 
  • trunk/server/www/app/webroot/css/cake.override.css

    r329 r330  
    222222 
    223223.galleries.view h2 a { font-weight: normal; color: #006bbe; } 
     224 
     225td.red { background-color: #faa; } 
     226td.green { background-color: #af8; } 
    224227 
    225228/* Mailinglist registration callout */ 
Note: See TracChangeset for help on using the changeset viewer.