/**
  * Get all commits related to a project object
  *
  * @param integer $object_id
  * @return array
  */
 function findCommitsByObject($object)
 {
     $parent_object_ids = array();
     $parent_object_ids[] = $object->getId();
     /**
      * Try to find commits related to children objects
      */
     $task_ids = array();
     if (instance_of($object, 'Ticket')) {
         $tasks = db_execute_all("SELECT id FROM " . TABLE_PREFIX . "project_objects WHERE parent_id = " . $object->getid() . " AND `type` = 'Task'");
         if (is_foreachable($tasks)) {
             foreach ($tasks as $task) {
                 $task_ids[] = $task['id'];
             }
             // foreach
         }
         // if
     }
     // if
     $objects_ids = array_merge($parent_object_ids, $task_ids);
     $commit_project_objects = CommitProjectObjects::find(array('conditions' => array("object_id IN(" . implode(',', $objects_ids) . ")"), 'order' => 'repository_id ASC, revision DESC'));
     if (is_foreachable($commit_project_objects)) {
         $commits = array();
         $revisions = array();
         foreach ($commit_project_objects as $commit_project_object) {
             if (!in_array($commit_project_object->getRevision(), $revisions)) {
                 // prevent commits from showing more than once
                 $revisions[] = $commit_project_object->getRevision();
                 $commit = Commits::findByRevision($commit_project_object->getRevision(), Repositories::findById($commit_project_object->getRepositoryId()));
                 if (instance_of($commit, 'Commit')) {
                     $commit->repository = Repositories::findById($commit->getProjectId());
                     $commits[] = $commit;
                 }
                 // if
             }
             // if
         }
         // foreach
         return group_by_date($commits);
     } else {
         return false;
     }
     // if
 }
 /**
  * Compare two revisions of a file
  *
  * @param null
  * @return void
  */
 function compare()
 {
     if (!$this->active_repository->canView($this->logged_user)) {
         $this->httpError(HTTP_ERR_FORBIDDEN);
     }
     // if
     // wireframe
     $this->wireframe->addPageAction(lang('Commit history'), $this->active_repository->getHistoryUrl());
     $compare_to = $this->request->get('compare_to');
     $compared = Commits::findByRevision($compare_to, $this->active_repository);
     if (!instance_of($compared, 'Commit')) {
         flash_error('Revision does not exist');
         $this->redirectToReferer($this->active_repository->getFileHistoryUrl($this->active_revision, $this->active_file, $this->request->get('peg')));
     }
     // if
     // path info
     $path_info = $this->repository_engine->getInfo($this->active_file, $this->active_revision, false, $this->request->get('peg'));
     $latest_revision = $path_info['revision'];
     $file_latest_revision = Commits::findByRevision($latest_revision, $this->active_repository);
     if (!instance_of($file_latest_revision, 'Commit')) {
         $file_latest_revision = $this->active_commit;
     }
     // if
     $diff_data = $this->repository_engine->compareToRevision($this->active_file, $compared->getRevision(), $this->active_revision, $this->request->get('peg'));
     $diff_changes = $this->repository_engine->parseDiff($diff_data);
     $this->smarty->assign(array('compared' => $compared, 'diff' => $diff_changes, 'navigation' => $this->repository_engine->linkify($this->active_revision, $this->active_file), 'latest_revision' => $file_latest_revision));
     js_assign('compare_url', $this->active_repository->getFileCompareUrl($this->active_commit, $this->active_file, $this->request->get('peg')));
 }