コード例 #1
0
 function add()
 {
     if ($this->RequestHandler->isPost() && !empty($this->data['Watcher']['user_id'])) {
         $Model =& ClassRegistry::init($this->params['named']['object_type']);
         if ($Model->read(null, $this->params['named']['object_id']) && $this->Watcher->User->read(null, $this->data['Watcher']['user_id'])) {
             $Model->add_watcher($this->Watcher->User->data);
         }
     }
     Configure::write('debug', 0);
     extract($this->params['named']);
     $Model =& ClassRegistry::init(Inflector::camelize($object_type));
     $data = $Model->read(null, $object_id);
     $project_id = $Model->get_watched_project_id();
     $project = $this->Project->read('identifier', $project_id);
     $this->params['project_id'] = $project['Project']['identifier'];
     parent::_findProject();
     $members = $this->Project->members($project_id);
     if (!empty($data['Watcher'])) {
         foreach ($data['Watcher'] as $value) {
             if (array_key_exists($value['user_id'], $members)) {
                 unset($members[$value['user_id']]);
             }
         }
     }
     $this->set(array_merge(compact('members', 'object_type', 'object_id', 'data')));
     if ($this->RequestHandler->isAjax()) {
         $this->render('_watchers');
         $this->layout = 'ajax';
     } else {
         $this->redirect(env('HTTP_REFERER'));
     }
 }
コード例 #2
0
 function _findProject()
 {
     $this->version = $this->Version->find('first', array('conditions' => array('Version.id' => $this->params['pass'][0])));
     $this->params['project_id'] = $this->version['Project']['identifier'];
     return parent::_findProject();
     #    @version = Version.find(params[:id])
     #    @project = @version.project
     #  rescue ActiveRecord::RecordNotFound
     #    render_404
     #  end
 }
コード例 #3
0
 function _find_project()
 {
     $this->Attachment->read(null, $this->params['id']);
     $this->set('attachment', $this->Attachment->data[$this->Attachment->alias]);
     $this->set('author', $this->Attachment->data['Author']);
     # Show 404 if the filename in the url is wrong
     if (!empty($this->params['filename']) && $this->params['filename'] != $this->Attachment->data[$this->Attachment->name]['filename']) {
         $this->cakeError('error404');
     }
     $project = $this->Attachment->project();
     if (!empty($project['Project']['identifier'])) {
         $this->params['project_id'] = $project['Project']['identifier'];
         parent::_findProject();
     } else {
         $this->cakeError('error404');
     }
 }
コード例 #4
0
 function _find_optional_project()
 {
     if ($this->_get_param('issue_id')) {
         $issue_id = $this->_get_param('issue_id');
         $this->Issue->read(null, $issue_id);
         $this->params['project_id'] = $this->Issue->data['Project']['identifier'];
     } elseif (!empty($this->params['project_id'])) {
         // parent::beforeFilter
     }
     parent::_findProject();
     parent::user_setup();
     if (!$this->TimeEntry->User->is_allowed_to($this->current_user, 'view_time_entries', $this->_project, array('global' => true))) {
         return parent::deny_access();
     }
 }
コード例 #5
0
 /**
  * Find a project
  *
  * @return void
  * @access private
  */
 function _find_project()
 {
     $attachment = $this->Attachment->read(null, $this->request->params['id']);
     $this->set('attachment', $attachment[$this->Attachment->alias]);
     $this->set('author', $attachment[$this->Attachment->Author->alias]);
     // Show 404 if the filename in the url is wrong
     if (!empty($this->request->params['filename']) && $this->request->params['filename'] != $attachment[$this->Attachment->alias]['filename']) {
         throw new NotFoundException();
     }
     $project = $this->Attachment->project();
     if (!empty($project['Project']['identifier'])) {
         $this->request->params['project_id'] = $project['Project']['identifier'];
         parent::_findProject();
     } else {
         throw new NotFoundException();
     }
 }
コード例 #6
0
ファイル: IssuesController.php プロジェクト: ha1t/candycane
 /**
  * Edit action
  *
  * Attributes that can be updated on workflow transition (without :edit permission)
  *
  * /projects/test/issues/edit/25?backto=url&issue[status_id]=3
  * Array
  * (
  *     [url] => projects/test/issues/edit/25
  *     [backto] => url
  *     [issue] => Array
  *        (
  *           [status_id] => 3
  *       )
  * )
  *
  * @return void
  * @todo Make it configurable (at least per role)
  */
 public function edit()
 {
     static $UPDATABLE_ATTRS_ON_TRANSITION = array('status_id', 'assigned_to_id', 'fixed_version_id', 'done_ratio');
     if (empty($this->request->params['issue_id'])) {
         return $this->cakeError('error', array('message' => "Not exists issue."));
     }
     $issue = $this->_find_issue($this->request->params['issue_id']);
     if (empty($this->_project)) {
         $this->request->params['project_id'] = $issue['Project']['identifier'];
         parent::_findProject();
     }
     $statuses = $this->Issue->findStatusList($this->User->role_for_project($this->current_user, $this->_project));
     if (empty($statuses)) {
         $this->Session->setFlash(__('No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'), 'default', array('class' => 'flash flash_error'));
         $this->redirect('index');
     }
     $this->request->data['Issue']['tracker_id'] = $issue['Issue']['tracker_id'];
     $this->set(compact('statuses'));
     $this->_set_edit_form_values();
     $notes = "";
     if ($this->_get_param('notes')) {
         $notes = $this->_get_param('notes');
     }
     unset($this->request->data['Issue']['notes']);
     $journal = $this->Issue->init_journal($issue, $this->current_user, $notes);
     $this->Issue->Journal->available_custom_fields = $this->Issue->cached_available_custom_fields();
     # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
     $edit_allowed = $this->User->is_allowed_to($this->current_user, ':edit_issues', $this->_project);
     if ($edit_allowed || !empty($statuses) && (!empty($this->request->params['url']['issue']) || !empty($this->request->data['Issue']))) {
         $attrs = empty($this->request->params['url']['issue']) ? $this->request->data['Issue'] : $this->request->params['url']['issue'];
         if (!$edit_allowed) {
             foreach ($attrs as $k => $v) {
                 if (!in_array($k, $UPDATABLE_ATTRS_ON_TRANSITION)) {
                     unset($attrs[$k]);
                 }
             }
         }
         if (!empty($attrs['status_id'])) {
             if (!array_key_exists($attrs['status_id'], $statuses)) {
                 unset($attrs['status_id']);
             }
         }
         $issue['Issue'] = array_merge($issue['Issue'], $attrs);
     }
     if (($this->RequestHandler->isPost() || $this->RequestHandler->isPut()) && !empty($this->request->data)) {
         $this->Issue->TimeEntry->create();
         $time_entry = array('project_id' => $this->_project['Project']['id'], 'issue_id' => $issue['Issue']['id'], 'user_id' => $this->current_user['id'], 'spent_on' => date('Y-m-d'));
         if (isset($this->request->data['TimeEntry'])) {
             $time_entry = array_merge($time_entry, $this->request->data['TimeEntry']);
         }
         $this->Issue->TimeEntry->set($time_entry);
         if (!empty($this->request->data['custom_field_values'])) {
             $this->Issue->TimeEntry->data['TimeEntry']['custom_field_values'] = $this->Issue->TimeEntry->filterCustomFieldValue($this->request->data['custom_field_values']);
         }
         $save_data = array();
         $save_data['Issue'] = $this->request->data['Issue'];
         $save_data['Issue']['id'] = $issue['Issue']['id'];
         $save_data['Issue']['project_id'] = $this->_project['Project']['id'];
         $save_data['Issue']['tracker_id'] = $issue['Issue']['tracker_id'];
         if (!empty($this->request->data['custom_field_values'])) {
             $save_data['Issue']['custom_field_values'] = $this->Issue->filterCustomFieldValue($this->request->data['custom_field_values']);
         }
         if ($this->User->is_allowed_to($this->current_user, ':log_time', $this->_project) && !empty($this->Issue->TimeEntry->data['TimeEntry']['hours']) && $this->Issue->TimeEntry->validates()) {
             # Log spend time
             $save_data['TimeEntry'] = array($this->Issue->TimeEntry->data['TimeEntry']);
         }
         if (!empty($this->request->params['form'])) {
             $attachments = $this->Issue->attach_files($this->request->params['form'], $this->current_user);
             if (!empty($attachments['unsaved'])) {
                 $this->Session->setFlash(sprintf(__("%d file(s) could not be saved."), count($attachments['unsaved'])), 'default', array('class' => 'flash flash_warning'));
             }
             foreach ($attachments['attached'] as $a) {
                 $this->Issue->attachJournalDetails[] = array('property' => 'attachment', 'prop_key' => $a['id'], 'value' => $a['filename']);
             }
         }
         $event = new CakeEvent('Controller.Candy.issuesEditBeforeSave', $this, array('issue' => $this->Issue, 'journal' => $journal));
         $this->getEventManager()->dispatch($event);
         if ($this->Issue->saveAll($save_data)) {
             if ($this->Issue->actually_changed) {
                 $event = new CakeEvent('Controller.Candy.issuesEditAfterSave', $this, array('project' => $this->_project, 'issue' => $this->Issue, 'save_data' => $save_data, 'journal' => $journal, 'notes' => $notes));
                 $this->getEventManager()->dispatch($event);
                 # Only send notification if something was actually changed
                 $this->Session->setFlash(__('Successful update.'), 'default', array('class' => 'flash flash_notice'));
                 $this->Mailer->deliver_issue_edit($journal, $this->Issue);
             }
             if (!empty($this->request->params['url']['back_to'])) {
                 $this->redirect($this->request->params['url']['back_to']);
             }
             $this->redirect(array('action' => 'show', $issue['Issue']['id']));
         }
         $this->request->data['Issue']['notes'] = $notes;
     } else {
         $this->request->data = $issue;
     }
     if ($this->RequestHandler->isAjax()) {
         $this->layout = 'ajax';
     }
     #  rescue ActiveRecord::StaleObjectError
     #    # Optimistic locking exception
     #    flash.now[:error] = l(:notice_locking_conflict)
     #  end
 }