gitprep / templates / network.html.ep /
783cc7b 7 years ago
1 contributor
120 lines | 4.092kb
<%
  # API
  my $api = gitprep_api;
  
  my $user_id = param('user');
  my $project_id = param('project');
  
  my $rep_info = $self->app->rep_info($user_id, $project_id);
  
  # Branches
  my $branches = [map { $_->{name} } @{app->git->branches($rep_info)}];
  
  # Original project id
  my $original_project_id = app->dbi->model('project')->select(
    'original_project',
    where => {'user.id' => $user_id, 'project.id' => $project_id}
  )->value;
  
  # Original project
  my $original_project;
  if ($original_project_id) {
    $original_project = app->dbi->model('project')->select(
      [
        {__MY__ => '*'},
        {user => ['id']}
      ],
      where => {'project.row_id' => $original_project_id}
    )->one;
  }
  else {
    $original_project = app->dbi->model('project')->select(
      [
        {__MY__ => '*'},
        {user => ['id']}
      ],
      where => {'user.id' => $user_id, 'project.id' => $project_id}
    )->one;
  }
  
  # Members
  my $member_projects = app->manager->member_projects($original_project->{'user.id'}, $original_project->{id});
  unshift @$member_projects, $original_project;
  
  # Members branches
  for my $member_project (@$member_projects) {
    my $member_rep_info = $self->app->rep_info($member_project->{'user.id'}, $member_project->{id});
    
    my $branches = app->git->branches($member_rep_info);
    $branches = [map { $_->{name} } @$branches];

    $member_project->{branches} = $branches;
  }
  
  # Default branch
  my $default_branch = app->manager->default_branch($user_id, $project_id);

  layout 'common', title => "Network \x{30fb} $user_id/$project_id";
%>

  %= javascript begin
    $(document).ready(function () {
      // Click compare button
      $('[name=compare-btn]').on('click', function () {
        var branch = $('[name=branch]').val();
        var remote = $(this).closest('[name=remote]');
        var remote_member = remote.find('[name=remote-member]').text();
        var remote_project = remote.find('[name=remote-project]').text();
        var remote_branch = remote.find('[name=remote-branch]').val();
        
        location.href = '<%= url_for("/$user_id/$project_id/network/graph/") %>' + branch + '...'
          + remote_member + '/' + remote_project + '/' + remote_branch;
      });
    });
  % end
  
  %= include '/include/header';

  <div class="container">
    <div class="topic1">Members of the <%= $project_id %> Network</div>
    <div class="network-mybranch">
      <span class="network-mybranch-label">My branch</span>
      <a href="<%= url_for("/$user_id") %>"><%= $user_id %></a>
      <span>/</span>
      <a href="<%= url_for("/$user_id/$project_id") %>"><%= $project_id %></a>
      <span>/</span>
      % param('branch', $default_branch);
      %= select_field 'branch' => $branches, style => 'margin-top:5px;width:150px';
    </div>
    <ul class="network-member-branch">
      % if (@$member_projects) {
        % for my $member_project (@$member_projects) {
          <%
            my $member_project_id = $member_project->{id};
            my $member_id = $member_project->{'user.id'};
            my $member_branches = $member_project->{branches};
            
            next if $member_id eq $user_id;
          %>
          <li name="remote">
            <div>
              <span class="network-member-branch-label">Member branch</span>
              <a name="remote-member" href="<%= url_for("/$member_id") %>"><%= $member_id %></a>
              <span>/</span>
              <a name="remote-project" href="<%= url_for("/$member_id/$member_project_id") %>"><%= $member_project_id %></a>
              <span>/</span>
              %= select_field 'remote-branch' => $member_branches, style => 'margin-top:5px;margin-bottom:7px;width:150px';
            </div>
            <div class="last-child">
              <button name="compare-btn" class="btn" style="margin-top:5px">Compare</button>
            </div>
          </li>
        % }
      % } else {
        <li>
          No Members.
        </li>
      % }
    </ul>
  </div>
  %= include '/include/footer';