diff --git a/alembic/versions/2fb229dac744_store_the_milestone_keys.py b/alembic/versions/2fb229dac744_store_the_milestone_keys.py new file mode 100644 index 0000000..6f3b244 --- /dev/null +++ b/alembic/versions/2fb229dac744_store_the_milestone_keys.py @@ -0,0 +1,29 @@ +"""Store the milestone keys + +Revision ID: 2fb229dac744 +Revises: e4dbfcd20f42 +Create Date: 2017-10-31 13:03:10.767348 + +""" + +# revision identifiers, used by Alembic. +revision = '2fb229dac744' +down_revision = 'e4dbfcd20f42' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + ''' Add the column _milestones_keys to the table projects. + ''' + op.add_column( + 'projects', + sa.Column('_milestones_keys', sa.Text, nullable=True) + ) + + +def downgrade(): + ''' Drop the column _milestones_keys from the table projects. + ''' + op.drop_column('projects', '_milestones_keys') diff --git a/pagure/forms.py b/pagure/forms.py index 6e8080d..c19e735 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -227,7 +227,7 @@ class IssueFormSimplied(PagureForm): self.milestone.choices = [] if 'milestones' in kwargs and kwargs['milestones']: - for key in sorted(kwargs['milestones']): + for key in kwargs['milestones']: self.milestone.choices.append((key, key)) self.milestone.choices.insert(0, ('', '')) @@ -349,7 +349,7 @@ class MilestoneForm(PagureForm): super(MilestoneForm, self).__init__(*args, **kwargs) self.milestone.choices = [] if 'milestones' in kwargs and kwargs['milestones']: - for key in sorted(kwargs['milestones']): + for key in kwargs['milestones']: self.milestone.choices.append((key, key)) self.milestone.choices.insert(0, ('', '')) @@ -447,7 +447,7 @@ class UpdateIssueForm(PagureForm): self.milestone.choices = [] if 'milestones' in kwargs and kwargs['milestones']: - for key in sorted(kwargs['milestones']): + for key in kwargs['milestones']: self.milestone.choices.append((key, key)) self.milestone.choices.insert(0, ('', '')) diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 5df8631..05e3f90 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -376,6 +376,7 @@ class Project(BASE): _priorities = sa.Column(sa.Text, nullable=True) default_priority = sa.Column(sa.Text, nullable=True) _milestones = sa.Column(sa.Text, nullable=True) + _milestones_keys = sa.Column(sa.Text, nullable=True) _quick_replies = sa.Column(sa.Text, nullable=True) _reports = sa.Column(sa.Text, nullable=True) _notifications = sa.Column(sa.Text, nullable=True) @@ -550,6 +551,22 @@ class Project(BASE): self._milestones = json.dumps(milestones) @property + def milestones_keys(self): + """ Return the list of milestones so we can keep the order consistent. + """ + milestones_keys = {} + + if self._milestones_keys: + milestones_keys = json.loads(self._milestones_keys) + + return milestones_keys + + @milestones_keys.setter + def milestones_keys(self, milestones_keys): + ''' Ensures the milestones keys are properly saved. ''' + self._milestones_keys = json.dumps(milestones_keys) + + @property def priorities(self): """ Return the dict stored as string in the database as an actual dict object. diff --git a/pagure/templates/settings.html b/pagure/templates/settings.html index af0d74e..08add22 100644 --- a/pagure/templates/settings.html +++ b/pagure/templates/settings.html @@ -1251,6 +1251,22 @@ $('.extend-form').click(function(e) { $(tgt).append(form); }); +$('.milestone_order_up').click(function(e) { + const idx = parseInt($(this).attr('data-stone')); + let field = $('#milestone_' + idx); + if (field.prev('.milestone').length > 0){ + field.prev('.milestone').before(field.detach()); + } +}); + +$('.milestone_order_bottom').click(function(e) { + const idx = parseInt($(this).attr('data-stone')); + let field = $('#milestone_' + idx); + if (field.next('.milestone').length > 0){ + field.next('.milestone').after(field.detach()); + } +}); + {% if config.get('ENABLE_GIVE_PROJECTS', True) and repo.user.user == g.fas_user.username and not repo.is_fork %} diff --git a/pagure/templates/settings_milestones.html b/pagure/templates/settings_milestones.html index 2e3e8f7..90e42fa 100644 --- a/pagure/templates/settings_milestones.html +++ b/pagure/templates/settings_milestones.html @@ -1,5 +1,4 @@ -