Changeset 35

Show
Ignore:
Timestamp:
09/02/08 22:46:29 (3 months ago)
Author:
laurentj
Message:

worked on the save of a ticket

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/app/install/migration_from_trac.mysql.sql

    r32 r35  
    693693  SELECT ticket_id, `id`, createtime, author, 'attachment','', filename, ipnr FROM ticket_attachment ; 
    694694 
     695UPDATE `ticket_change` SET field='component_id' WHERE field='component'; 
     696UPDATE `ticket_change` SET field='milestone_id' WHERE field='milestone'; 
     697 
    695698ALTER TABLE `ticket_attachment` DROP `ipnr`; 
    696699 
  • trunk/app/modules/tickets/classes/ticketService.class.php

    r34 r35  
    180180 
    181181    function saveTicketForm($form, $id) { 
    182         $ticket = jDao::get('ticket')->get($id); 
    183         if(!$ticket) 
    184             return false; 
    185  
    186         // event bugtrack.ticket.beforecheck 
    187  
    188  
    189         // ignore this field : product_id, type_id, type_label 
    190  
    191         // manage the newstatus field 
    192  
    193  
    194         // save this simple fields : 
     182 
     183        // ignore this field : id, product_id, type_id, type_label, reporter 
     184 
     185        $inError = false; 
     186        // save simple fields : 
    195187        // summary, description, priority, milestone_id, component_id 
    196188        // version, severity, keywords 
     189        extract($form->prepareDaoFromControls('tickets~ticket',$id)); 
     190        $ticket = $daorec; 
     191 
     192        jEvent::notify('bugtrack.ticket.update.beforecheck',array('ticket'=>$ticket, 'form'=>$form)); 
     193 
     194        // update changetime 
     195        $ticket->changetime = date('Y-m-d H:i:s'); 
     196 
     197        // manage the newstatus field 
     198        $newstatus = $form->getData('newstatus'); 
     199        $resolution_changed = false; 
     200        $owner_changed = false; 
     201        $duplicate_changed = false; 
     202        $oldstatus = false; 
     203         
     204        if ($newstatus != 0) { 
     205            // change owner, status, resolution, duplicate_of_id if ok 
     206 
     207            $workflow = jDao::get('tickets~ticket_workflow'); 
     208            $statuslist = $workflow->findByTypeAndStatus($ticket->type, $ticket->status); 
     209            foreach ($statuslist as $nextstatus) { 
     210                if ($newstatus != $nextstatus->id) 
     211                    continue; 
     212 
     213                $new_status_rec = jDao::get('tickets~ticket_status')->get($ticket->type, $nextstatus->status_new); 
     214                $oldstatus = $ticket->status; 
     215                $ticket->status = $nextstatus->status_new; 
     216 
     217                if ($new_status_rec->resolution_set == 1  && $nextstatus->resolution_value != '') { 
     218                    $resolution_changed = $ticket->resolution; 
     219                    if($nextstatus->resolution_value == '?' || $nextstatus->resolution_value{0} == '{') { 
     220                        $ticket->resolution = $form->getData('resolution_'.$nextstatus->id); 
     221                    } 
     222                    elseif($nextstatus->resolution_value{0} == '=') { 
     223                        $ticket->resolution = substr($nextstatus->resolution_value, 1); 
     224                        $resolution_changed = true; 
     225                    } 
     226                } 
     227                else if ($new_status_rec->resolution_set == -1) { 
     228                    $resolution_changed = $ticket->resolution; 
     229                    $ticket->resolution = null; 
     230                } 
     231                 
     232                if ($new_status_rec->owner_set == 1 && $nextstatus->owner_value != '') { 
     233                    if($nextstatus->owner_value == '?') { 
     234                        $login = $form->getData('owner_'.$nextstatus->id); 
     235                        if(jAuth::getUser($login)) { 
     236                            $owner_changed = $ticket->owner; 
     237                            $ticket->owner = $login; 
     238                        } 
     239                        else { 
     240                            $form->setErrorOn('owner_'.$nextstatus->id, 'Unknow login'); 
     241                            $inError = true; 
     242                        } 
     243                    } 
     244                    elseif($nextstatus->owner_value{0} == '=') { 
     245                        $owner_changed = $ticket->owner; 
     246                        $ticket->owner = substr($nextstatus->owner_value, 1); 
     247                    } 
     248                    elseif($nextstatus->owner_value == 'current-user') { 
     249                        $owner_changed = $ticket->owner; 
     250                        $ticket->owner = jAuth::getUserSession()->login; 
     251                    } 
     252                } 
     253                elseif ($new_status_rec->owner_set == -1) { 
     254                    $owner_changed = $ticket->owner; 
     255                    $ticket->owner = null; 
     256                } 
     257 
     258                if ($new_status_rec->duplicate_set && $nextstatus->duplicate_value != '') { 
     259                    if($nextstatus->duplicate_value == '?') { 
     260                        $dupid = $form->getData('duplicate_'.$nextstatus->id); 
     261                        if ($dao->get($dupid)) { 
     262                            $duplicate_changed = $ticket->duplicate_of_id; 
     263                            $ticket->duplicate_of_id = $dupid; 
     264                        } 
     265                        else { 
     266                            $form->setErrorOn('duplicate_'.$nextstatus->id, 'Unknow ticket'); 
     267                            $inError = true; 
     268                        } 
     269                    } 
     270                } 
     271                elseif ($new_status_rec->duplicate_set == -1) { 
     272                    $duplicate_changed = $ticket->duplicate_of_id; 
     273                    $ticket->duplicate_of_id = null; 
     274                } 
     275                break; 
     276            } // foreach 
     277        } 
     278 
     279        $mc = $form->getModifiedControls(); 
     280        $dependents = false; 
     281        $blockers = false; 
    197282 
    198283        // save the "blocking" ticket list 
     284        if (isset($mc['blocking'])) { 
     285            $dependents = array(); 
     286            if (trim($mc['blocking']) != '') { 
     287                $dependents = preg_split("/[\s,]+/", $mc['blocking']); 
     288                $deperr=array(); 
     289                foreach ($dependents as $d) { 
     290                    if(!$dao->get($d)) 
     291                        $deperr[]=$d; 
     292                } 
     293                if (count($deperr)) { 
     294                    $form->setErrorOn('blocking', 'Unknow tickets: '.implode(',',$deperr)); 
     295                    $inError = true; 
     296                } 
     297            } 
     298        } 
    199299 
    200300        // save the "blockedby" ticket list 
     301        if (isset($mc['blockedby'])) { 
     302            $blockers = array(); 
     303            if (trim($mc['blockedby']) != '') { 
     304                $blockers = preg_split("/[\s,]+/", $mc['blockedby']); 
     305                $deperr=array(); 
     306                foreach ($blockers as $d) { 
     307                    if(!$dao->get($d)) 
     308                        $deperr[]=$d; 
     309                } 
     310                if (count($deperr)) { 
     311                    $form->setErrorOn('blockedby', 'Unknow tickets: '.implode(',',$deperr)); 
     312                    $inError = true; 
     313                } 
     314            } 
     315        } 
     316 
     317        if ($inError) { 
     318            return false; 
     319        } 
     320         
     321        jEvent::notify('bugtrack.ticket.update.beforesave',array('ticket'=>$ticket, 'form'=>$form)); 
     322 
     323        $changedao = jDao::get('tickets~ticket_change'); 
     324        $change = jDao::createRecord('tickets~ticket_change'); 
     325        $change->ticket = $id; 
     326        $change->changetime = $ticket->changetime; 
     327        $change->author = jAuth::getUserSession()->login; 
     328 
     329 
     330        if(isset($mc['summary'])) { 
     331            $change->field='summary'; 
     332            $change->oldvalue=$mc['summary']; 
     333            $change->newvalue=$ticket->summary; 
     334            $changedao->insert($change); 
     335        } 
     336 
     337        if(isset($mc['description'])) { 
     338            $change->field='description'; 
     339            $change->oldvalue=$mc['description']; 
     340            $change->newvalue=$ticket->description; 
     341            $changedao->insert($change); 
     342        } 
     343 
     344        if(isset($mc['priority'])) { 
     345            $change->field='priority'; 
     346            $change->oldvalue=$mc['priority']; 
     347            $change->newvalue=$ticket->priority; 
     348            $changedao->insert($change); 
     349        } 
     350 
     351        if(isset($mc['milestone_id'])) { 
     352            $change->field='milestone_id'; 
     353            $change->oldvalue=$mc['milestone_id']; 
     354            $change->newvalue=$ticket->milestone_id; 
     355            $changedao->insert($change); 
     356        } 
     357 
     358        if(isset($mc['component_id'])) { 
     359            $change->field='component_id'; 
     360            $change->oldvalue=$mc['component_id']; 
     361            $change->newvalue=$ticket->component_id; 
     362            $changedao->insert($change); 
     363        } 
     364 
     365        if(isset($mc['version'])) { 
     366            $change->field='version'; 
     367            $change->oldvalue=$mc['version']; 
     368            $change->newvalue=$ticket->version; 
     369            $changedao->insert($change); 
     370        } 
     371 
     372        if(isset($mc['severity'])) { 
     373            $change->field='severity'; 
     374            $change->oldvalue=$mc['severity']; 
     375            $change->newvalue=$ticket->severity; 
     376            $changedao->insert($change); 
     377        } 
     378 
     379        if(isset($mc['keywords'])) { 
     380            $change->field='keywords'; 
     381            $change->oldvalue=$mc['keywords']; 
     382            $change->newvalue=$ticket->keywords; 
     383            $changedao->insert($change); 
     384        } 
     385 
     386        if(isset($mc['newstatus'])) { 
     387            $change->field='status'; 
     388            $change->oldvalue= $oldstatus; 
     389            $change->newvalue=$ticket->status; 
     390            $changedao->insert($change); 
     391        } 
     392 
     393        if(isset($mc['comment'])) { 
     394            $change->field='comment'; 
     395            $change->oldvalue=$mc['comment']; 
     396            $change->newvalue=$form->getData('comment'); 
     397            $changedao->insert($change); 
     398        } 
     399 
     400        if($resolution_changed !== false) { 
     401            $change->field='resolution'; 
     402            $change->oldvalue=$resolution_changed; 
     403            $change->newvalue=$ticket->resolution; 
     404            $changedao->insert($change); 
     405        } 
     406 
     407        if($owner_changed !== false) { 
     408            $change->field='owner'; 
     409            $change->oldvalue=$owner_changed; 
     410            $change->newvalue=$ticket->owner; 
     411            $changedao->insert($change); 
     412        } 
     413 
     414        if($duplicate_changed !== false) { 
     415            $change->field='duplicate_of_id'; 
     416            $change->oldvalue=$duplicate_changed; 
     417            $change->newvalue=$ticket->duplicate_of_id; 
     418            $changedao->insert($change); 
     419        } 
     420 
     421        // save into the database 
     422        $dao->update($ticket); 
     423 
     424        if ($dependents !== false) { 
     425            $depdao = jDao::get('tickets~ticket_dependencies'); 
     426            $depdao->deleteDependents($ticket->id); 
     427            $rec = jDao::createRecord ('tickets~ticket_dependencies'); 
     428            $rec->blocker = $id; 
     429            foreach ($dependents as $d) { 
     430                $rec->dependent = $d; 
     431                $depdao->insert($rec); 
     432            } 
     433//TODO  ticket_change 'blockedby' 
     434        } 
     435 
     436        if ($blockers !== false) { 
     437            $depdao = jDao::get('tickets~ticket_dependencies'); 
     438            $depdao->deleteBlockers($ticket->id); 
     439            $rec = jDao::createRecord ('tickets~ticket_dependencies'); 
     440            $rec->dependent = $id; 
     441            foreach ($blockers as $d) { 
     442                $rec->blocker = $d; 
     443                $depdao->insert($rec); 
     444            } 
     445//TODO  ticket_change 'blocking' 
     446        } 
    201447 
    202448        // manage the cc fields (addcc/removecc) 
    203  
    204  
    205         // TODO save all changes + comment into the ticket_change 
    206         if(($comment=$form->getData('comment')) != '') { 
    207  
    208         } 
    209  
    210         // event bugtrack.ticket.beforesave 
    211  
    212         // save into the database 
     449        if ($form->getData('addcc')) { 
     450            $ccdao = jDao::get('tickets~ticket_cc'); 
     451            $login = jAuth::getUserSession()->login; 
     452            if(!$ccdao->get($id, $login)) { 
     453                $cc = jDao::createRecord('tickets~ticket_cc'); 
     454                $cc->ticket_id = $id; 
     455                $cc->user = $login; 
     456                $ccdao->insert($cc); 
     457            } 
     458//TODO  ticket_change cc 
     459        } else if ($form->getData('removecc')) { 
     460            jDao::get('tickets~ticket_cc')->delete($id, jAuth::getUserSession()->login); 
     461//TODO  ticket_change cc 
     462        } 
     463 
     464        jEvent::notify('bugtrack.ticket.update.aftersave',array('ticket'=>$ticket, 'form'=>$form)); 
     465        return true; 
     466    } 
     467 
     468 
     469    protected function addChange(){ 
    213470         
    214         // event bugtrack.ticket.aftersave 
    215          
     471 
     472 
     473 
     474 
     475        <property name="field" fieldname="field" datatype="string" required="true" maxlength="40"/> 
     476        <property name="oldvalue" fieldname="oldvalue" datatype="text" default=""/> 
     477        <property name="newvalue" fieldname="newvalue" datatype="text" default=""/> 
    216478    } 
    217479} 
  • trunk/app/modules/tickets/controllers/ticket.classic.php

    r34 r35  
    8787        } 
    8888 
     89        // TODO tenir compte du type de submit ici 
     90 
     91 
    8992        $rep->action='tickets~default:index'; 
    9093        $rep->params=array('id'=>$id); 
    91  
     94         
    9295        $form = jForms::fill('ticket', $id); 
    9396        if ($form === null || !$form->check()){ 
    9497            return $rep; 
    9598        } 
    96          
    97         // TODO tenir compte du type de submit ici 
    9899 
    99      
    100100        $ticketService = jClasses::getService('tickets~ticketService'); 
    101101        if ($ticketService->saveTicketForm($form, $id)) { 
  • trunk/app/modules/tickets/daos/ticket_dependencies.dao.xml

    r1 r35  
    5353            </order> 
    5454        </method> 
     55        <method name="deleteBlockers" type="delete"> 
     56            <parameter name="tid" /> 
     57            <conditions> 
     58                <eq property="dependent" expr="$tid" /> 
     59            </conditions> 
     60        </method> 
     61        <method name="deleteDependents" type="delete"> 
     62            <parameter name="tid" /> 
     63            <conditions> 
     64                <eq property="blocker" expr="$tid" /> 
     65            </conditions> 
     66        </method> 
     67 
    5568    </factory> 
    5669</dao> 
Download in other formats: Unified Diff Zip Archive