Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/30/18 11:32:56 (6 years ago)
Author:
jkarder
Message:

#2839: merged [15377-16116/branches/2839_HiveProjectManagement] into trunk

Location:
trunk
Files:
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/HeuristicLab.Clients.Hive.Administrator

  • trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs

    r15760 r16117  
    3535    private readonly object locker = new object();
    3636
     37    private Guid persistedOwnerUserId;
     38
    3739    public new Project Content {
    3840      get { return (Project)base.Content; }
    39       set { base.Content = value; }
     41      set { base.Content = value; persistedOwnerUserId = Content != null ? Content.OwnerUserId : Guid.Empty; }
    4042    }
    4143
     
    6466    }
    6567
     68    protected void RegisterControlEvents() {
     69      nameTextBox.TextChanged += nameTextBox_TextChanged;
     70      nameTextBox.Validating += nameTextBox_Validating;
     71      descriptionTextBox.TextChanged += descriptionTextBox_TextChanged;
     72      ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
     73      startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged;
     74      endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged;
     75      indefiniteCheckBox.CheckedChanged += indefiniteCheckBox_CheckedChanged;
     76    }
     77
     78    protected void DeregisterControlEvents() {
     79      nameTextBox.TextChanged -= nameTextBox_TextChanged;
     80      nameTextBox.Validating -= nameTextBox_Validating;
     81      descriptionTextBox.TextChanged -= descriptionTextBox_TextChanged;
     82      ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;
     83      startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged;
     84      endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged;
     85      indefiniteCheckBox.CheckedChanged -= indefiniteCheckBox_CheckedChanged;
     86    }
     87
    6688    protected override void OnContentChanged() {
    6789      base.OnContentChanged();
     90      DeregisterControlEvents();
    6891      if (Content == null) {
    6992        idTextBox.Clear();
     
    79102        nameTextBox.Text = Content.Name;
    80103        descriptionTextBox.Text = Content.Description;
    81         ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups.FirstOrDefault(x => x.Id == Content.OwnerUserId);
     104
     105        ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;
     106        var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
     107        if (!Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
     108        ownerComboBox.DataSource = users.ToList();
     109        ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == Content.OwnerUserId);
     110        ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
     111
    82112        createdTextBox.Text = Content.DateCreated.ToString("ddd, dd.MM.yyyy, HH:mm:ss");
    83113        startDateTimePicker.Value = Content.StartDate;
    84         if (indefiniteCheckBox.Checked = !Content.EndDate.HasValue) {
    85           endDateTimePicker.Value = startDateTimePicker.Value;
    86         } else {
    87           endDateTimePicker.Value = Content.EndDate.Value;
    88         }
    89       }
     114
     115        indefiniteCheckBox.Checked = !Content.EndDate.HasValue;
     116        if (!indefiniteCheckBox.Checked) endDateTimePicker.Value = Content.EndDate.Value;
     117        else endDateTimePicker.Value = Content.StartDate;
     118        endDateTimePicker.Enabled = !indefiniteCheckBox.Checked;
     119      }
     120      RegisterControlEvents();
    90121    }
    91122
     
    101132      endDateTimePicker.Enabled = enabled && Content.EndDate.HasValue;
    102133      indefiniteCheckBox.Enabled = enabled;
     134
     135      if (Content != null) {
     136        var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault();
     137        if (parentProject == null || parentProject.EndDate.HasValue) {
     138          indefiniteCheckBox.Enabled = false;
     139        }
     140
     141        if (!IsAdmin() && !HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) {
     142          ownerComboBox.Enabled = false;
     143          startDateTimePicker.Enabled = false;
     144          endDateTimePicker.Enabled = false;
     145          indefiniteCheckBox.Enabled = false;
     146        }
     147      }
    103148    }
    104149    #endregion
     
    106151    #region Event Handlers
    107152    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
    108       OnContentChanged();
     153      if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)Content_PropertyChanged, sender, e);
     154      else OnContentChanged();
    109155    }
    110156
     
    132178        finallyCallback: () => {
    133179          ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;
    134           ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().ToList();
     180          var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
     181          if (Content != null && !Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
     182          ownerComboBox.DataSource = users.ToList();
    135183          ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
    136184        });
     
    147195        finallyCallback: () => {
    148196          ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;
    149           ownerComboBox.DataSource = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>().ToList();
    150           ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups.FirstOrDefault(x => x.Id == Content.OwnerUserId);
     197          var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
     198          if (Content != null && !Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
     199          ownerComboBox.DataSource = users.ToList();
     200          ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == persistedOwnerUserId);
    151201          ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
    152202          refreshButton.Enabled = true;
     
    166216
    167217    private void nameTextBox_TextChanged(object sender, EventArgs e) {
    168       if (Content != null && Content.Name != nameTextBox.Text)
     218      if (Content != null && Content.Name != nameTextBox.Text) {
     219        DeregisterContentEvents();
    169220        Content.Name = nameTextBox.Text;
     221        RegisterContentEvents();
     222      }
    170223    }
    171224
    172225    private void descriptionTextBox_TextChanged(object sender, EventArgs e) {
    173       if (Content != null && Content.Description != descriptionTextBox.Text)
     226      if (Content != null && Content.Description != descriptionTextBox.Text) {
     227        DeregisterContentEvents();
    174228        Content.Description = descriptionTextBox.Text;
     229        RegisterContentEvents();
     230      }
    175231    }
    176232
     
    178234      var selectedItem = (LightweightUser)ownerComboBox.SelectedItem;
    179235      var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty;
    180       if (Content != null && Content.OwnerUserId != selectedOwnerUserId)
     236      if (Content != null && Content.OwnerUserId != selectedOwnerUserId) {
     237        DeregisterContentEvents();
    181238        Content.OwnerUserId = selectedOwnerUserId;
     239        RegisterContentEvents();
     240      }
    182241    }
    183242
    184243    private void startDateTimePicker_ValueChanged(object sender, EventArgs e) {
    185244      if (Content == null) return;
     245      startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged;
     246
     247      if (!IsAdmin()) {
     248        var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault();
     249        if (parentProject != null) {
     250          if (startDateTimePicker.Value < parentProject.StartDate)
     251            startDateTimePicker.Value = parentProject.StartDate;
     252        } else {
     253          startDateTimePicker.Value = Content.StartDate;
     254        }
     255      }
     256
    186257      if (!Content.EndDate.HasValue || startDateTimePicker.Value > Content.EndDate)
    187258        endDateTimePicker.Value = startDateTimePicker.Value;
    188       if (Content.StartDate != startDateTimePicker.Value)
     259      if (Content.StartDate != startDateTimePicker.Value) {
     260        DeregisterContentEvents();
    189261        Content.StartDate = startDateTimePicker.Value;
     262        RegisterContentEvents();
     263      }
     264
     265      startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged;
    190266    }
    191267
    192268    private void endDateTimePicker_ValueChanged(object sender, EventArgs e) {
    193269      if (Content == null) return;
     270      endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged;
     271
     272      if (!IsAdmin()) {
     273        var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault();
     274        if (parentProject != null) {
     275          if (parentProject.EndDate.HasValue && endDateTimePicker.Value > parentProject.EndDate.Value) {
     276            endDateTimePicker.Value = parentProject.EndDate.Value;
     277          }
     278        } else if (Content.EndDate.HasValue) {
     279          endDateTimePicker.Value = Content.EndDate.Value;
     280        }
     281      }
     282
    194283      if (endDateTimePicker.Value < startDateTimePicker.Value)
    195284        endDateTimePicker.Value = startDateTimePicker.Value;
    196       if (Content.EndDate != endDateTimePicker.Value)
     285      if (Content.EndDate != endDateTimePicker.Value) {
     286        DeregisterContentEvents();
    197287        Content.EndDate = endDateTimePicker.Value;
     288        RegisterContentEvents();
     289      }
     290
     291      endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged;
    198292    }
    199293
    200294    private void indefiniteCheckBox_CheckedChanged(object sender, EventArgs e) {
    201295      if (Content == null) return;
    202       var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : Content.StartDate;
    203       if (Content.EndDate != newEndDate)
     296
     297      var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : endDateTimePicker.Value;
     298      endDateTimePicker.Enabled = !indefiniteCheckBox.Checked;
     299      if (Content.EndDate != newEndDate) {
     300        DeregisterContentEvents();
    204301        Content.EndDate = newEndDate;
     302        RegisterContentEvents();
     303      }
    205304    }
    206305    #endregion
     
    215314    }
    216315
     316    private bool IsAdmin() {
     317      return HiveRoles.CheckAdminUserPermissions();
     318    }
     319
    217320    private void ShowHiveInformationDialog() {
    218321      if (InvokeRequired) Invoke((Action)ShowHiveInformationDialog);
Note: See TracChangeset for help on using the changeset viewer.