[issue #279] Fixes.

*  Almost finished permissions fixes
  *  Removed is_template from product
  *  Some fixes in crontab_generator partial
This commit is contained in:
George Vinogradov 2012-03-15 03:25:58 +04:00
parent 747edb73a5
commit 3c60347a23
11 changed files with 107 additions and 79 deletions

View File

@ -558,3 +558,13 @@ div.dataTables_processing {
div.rightlist textarea {
resize: none;
}
div#crontab_generator .leftlist,
div#crontab_generator .rightlist {
width: 50%;
}
div#crontab_generator .leftlist select,
div#crontab_generator .rightlist select {
margin-top: 10px;
}

View File

@ -73,8 +73,10 @@ class Ability
can :read, Platform, :owner_type => 'User', :owner_id => user.id
can :read, Platform, :owner_type => 'Group', :owner_id => user.group_ids
can(:read, Platform, read_relations_for('platforms')) {|platform| local_reader? platform}
can([:update, :build_all], Platform) {|platform| local_admin? platform}
can([:freeze, :unfreeze, :destroy], Platform) {|platform| owner? platform}
# can([:update, :build_all], Platform) {|platform| local_admin? platform}
can([:freeze, :unfreeze, :update], Platform) {|platform| local_admin? platform}
#can([:freeze, :unfreeze, :destroy], Platform) {|platform| owner? platform}
can(:destroy, Platform) {|platform| owner? platform}
can :autocomplete_user_uname, Platform
can :read, Repository, :platform => {:visibility => 'open'}
@ -86,7 +88,8 @@ class Ability
can :read, Product, :platform => {:owner_type => 'User', :owner_id => user.id}
can :read, Product, :platform => {:owner_type => 'Group', :owner_id => user.group_ids}
can(:manage, Product, read_relations_for('products', 'platforms')) {|product| local_admin? product.platform}
# TODO: WTF???
#can(:manage, Product, read_relations_for('products', 'platforms')) {|product| local_admin? product.platform}
can(:create, ProductBuildList) {|pbl| pbl.product.can_build? and can?(:update, pbl.product)}
can(:destroy, ProductBuildList) {|pbl| can?(:destroy, pbl.product)}
@ -111,10 +114,13 @@ class Ability
# Shared cannot rights for all users (registered, admin)
cannot :destroy, Platform, :platform_type => 'personal'
cannot :destroy, Repository, :platform => {:platform_type => 'personal'}
cannot [:create, :destroy, :add_project, :remove_project], Repository, :platform => {:platform_type => 'personal'}
cannot :fork, Project, :owner_id => user.id, :owner_type => user.class.to_s
cannot :destroy, Issue
cannot :manage, Product, :platform => {:platform_type => 'personal'}
cannot [:clone, :build_all, :freeze, :unfreeze], Platform, :platform_type => 'personal'
can :create, Subscribe do |subscribe|
!subscribe.subscribeable.subscribes.exists?(:user_id => user.id)
end

View File

@ -23,13 +23,13 @@ class Product < ActiveRecord::Base
@delete_tar = value
end
def can_clone?
is_template
end
# def can_clone?
# is_template
# end
def can_build?
!is_template
end
# def can_build?
# !is_template
# end
def clone_from!(template)
raise "Only templates can be cloned" unless template.can_clone?

View File

@ -9,8 +9,9 @@
= link_to t("layout.platforms.about"), platform_path(@platform)
%li{:class => (contr == :repositories) ? 'active' : ''}
= link_to t("layout.repositories.list_header"), platform_repositories_path(@platform)
%li{:class => (contr == :products) ? 'active' : ''}
= link_to t("layout.products.list_header"), platform_products_path(@platform)
- if can? :read, @platform.products.build
%li{:class => (contr == :products) ? 'active' : ''}
= link_to t("layout.products.list_header"), platform_products_path(@platform)
-#- if current_user.owner_of? @platform or current_user.admin?
%li{:class => (act == :index && contr == :private_users) ? 'active' : ''}
= link_to t("layout.platforms.private_users"), platform_private_users_path(@platform)

View File

@ -29,11 +29,14 @@
%td= @platform.distrib_type
.buttons_block
= link_to t("layout.platforms.build_all"), build_all_platform_path(@platform), :confirm => I18n.t("layout.confirm"), :method => :post, :class => "button left_floated" if can? :build_all, @platform
- if can? :build_all, @platform
= link_to t("layout.platforms.build_all"), build_all_platform_path(@platform), :confirm => I18n.t("layout.confirm"), :method => :post, :class => "button left_floated"
- if @platform.released?
= link_to t("layout.platforms.unfreeze"), unfreeze_platform_path(@platform), :confirm => I18n.t("layout.platforms.confirm_unfreeze"), :method => :post, :class => "button left_floated" if can? :unfreeze, @platform
- if can? :unfreeze, @platform
= link_to t("layout.platforms.unfreeze"), unfreeze_platform_path(@platform), :confirm => I18n.t("layout.platforms.confirm_unfreeze"), :method => :post, :class => "button left_floated"
- else
= link_to t("layout.platforms.freeze"), freeze_platform_path(@platform), :confirm => I18n.t("layout.platforms.confirm_freeze"), :method => :post, :class => "button left_floated" if can? :freeze, @platform
- if can? :freeze, @platform
= link_to t("layout.platforms.freeze"), freeze_platform_path(@platform), :confirm => I18n.t("layout.platforms.confirm_freeze"), :method => :post, :class => "button left_floated"
= link_to "Клонировать", clone_platform_path(@platform), :class => "button left_floated" if can? :clone, @platform
.both

View File

@ -71,80 +71,81 @@
%a{ :href => "#" }= t("layout.products.cron_tab_generator.show")
#crontab_generator{ :style => "display: none;" }
.columns.wat-cf
.column.left
%h3.title= t("layout.products.cron_tab_generator.minutes")
.group
= label_tag :minute_chooser_every, t("layout.products.cron_tab_generator.every_minute"), :class => :label
= radio_button_tag :minute_chooser, 0, @product.cron_tab_minutes.blank?, :id => :minute_chooser_every, :class => "chooser cron"
.leftlist
%h3.title= t("layout.products.cron_tab_generator.minutes")
.group
= label_tag :minute_chooser_every, t("layout.products.cron_tab_generator.every_minute"), :class => :label
= radio_button_tag :minute_chooser, 0, @product.cron_tab_minutes.blank?, :id => :minute_chooser_every, :class => "chooser cron"
= label_tag :minute_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :minute_chooser, 1, @product.cron_tab_minutes.present?, :id => :minute_chooser_choose, :class => "chooser cron"
= label_tag :minute_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :minute_chooser, 1, @product.cron_tab_minutes.present?, :id => :minute_chooser_choose, :class => "chooser cron"
.group
%select{ :name => :minute, :id => :minute, :multiple => true, :disabled => @product.cron_tab_minutes.blank?, :class => "cron" }
- (0..59).each do |min|
%option{ :value => min, :selected => @product.cron_tab_minutes.include?(min) }= min
.group
%select{ :name => :minute, :id => :minute, :multiple => true, :disabled => @product.cron_tab_minutes.blank?, :class => "cron" }
- (0..59).each do |min|
%option{ :value => min, :selected => @product.cron_tab_minutes.include?(min) }= min
.column.right
%h3.title= t("layout.products.cron_tab_generator.hours")
.group
= label_tag :hour_chooser_every, t("layout.products.cron_tab_generator.every_hour"), :class => :label
= radio_button_tag :hour_chooser, 0, @product.cron_tab_hours.blank?, :id => :minute_chooser_every, :class => "chooser cron"
.rightlist
%h3.title= t("layout.products.cron_tab_generator.hours")
.group
= label_tag :hour_chooser_every, t("layout.products.cron_tab_generator.every_hour"), :class => :label
= radio_button_tag :hour_chooser, 0, @product.cron_tab_hours.blank?, :id => :minute_chooser_every, :class => "chooser cron"
= label_tag :hour_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :hour_chooser, 1, @product.cron_tab_hours.present?, :id => :minute_chooser_choose, :class => "chooser cron"
= label_tag :hour_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :hour_chooser, 1, @product.cron_tab_hours.present?, :id => :minute_chooser_choose, :class => "chooser cron"
.group
%select{ :name => :hour, :id => :hour, :multiple => true, :disabled => @product.cron_tab_hours.blank?, :class => "cron" }
- (0..23).each do |hour|
%option{ :value => hour, :selected => @product.cron_tab_hours.include?(hour) }= hour
.group
%select{ :name => :hour, :id => :hour, :multiple => true, :disabled => @product.cron_tab_hours.blank?, :class => "cron" }
- (0..23).each do |hour|
%option{ :value => hour, :selected => @product.cron_tab_hours.include?(hour) }= hour
.both
.columns.wat-cf
.column.left
%h3.title= t("layout.products.cron_tab_generator.days")
.group
= label_tag :day_chooser_every, t("layout.products.cron_tab_generator.every_day"), :class => :label
= radio_button_tag :day_chooser, 0, @product.cron_tab_days.blank?, :id => :day_chooser_every, :class => "chooser cron"
.leftlist
%h3.title= t("layout.products.cron_tab_generator.days")
.group
= label_tag :day_chooser_every, t("layout.products.cron_tab_generator.every_day"), :class => :label
= radio_button_tag :day_chooser, 0, @product.cron_tab_days.blank?, :id => :day_chooser_every, :class => "chooser cron"
= label_tag :day_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :day_chooser, 1, @product.cron_tab_days.present?, :id => :day_chooser_choose, :class => "chooser cron"
= label_tag :day_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :day_chooser, 1, @product.cron_tab_days.present?, :id => :day_chooser_choose, :class => "chooser cron"
.group
%select{ :name => "day", :id => "day", :multiple => true, :disabled => @product.cron_tab_days.blank?, :class => "cron" }
- (1..31).each do |day|
%option{ :value => day, :selected => @product.cron_tab_days.include?(day) }= day
.group
%select{ :name => "day", :id => "day", :multiple => true, :disabled => @product.cron_tab_days.blank?, :class => "cron" }
- (1..31).each do |day|
%option{ :value => day, :selected => @product.cron_tab_days.include?(day) }= day
.column.right
%h3.title= t("layout.products.cron_tab_generator.months")
.group
= label_tag :month_chooser_every, t("layout.products.cron_tab_generator.every_month"), :class => :label
= radio_button_tag :month_chooser, 0, @product.cron_tab_months.blank?, :id => :month_chooser_every, :class => "chooser cron"
.rightlist
%h3.title= t("layout.products.cron_tab_generator.months")
.group
= label_tag :month_chooser_every, t("layout.products.cron_tab_generator.every_month"), :class => :label
= radio_button_tag :month_chooser, 0, @product.cron_tab_months.blank?, :id => :month_chooser_every, :class => "chooser cron"
= label_tag :month_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :month_chooser, 1, @product.cron_tab_months.present?, :id => :month_chooser_choose, :class => "chooser cron"
= label_tag :month_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :month_chooser, 1, @product.cron_tab_months.present?, :id => :month_chooser_choose, :class => "chooser cron"
.group
%select{ :name => "month", :id => "month", :multiple => true, :disabled => @product.cron_tab_months.blank?, :class => "cron" }
- (1..12).each do |month|
%option{ :value => month, :selected => @product.cron_tab_months.include?(month) }= I18n.localize(Time.local(2000, month), :format => "%B")
.group
%select{ :name => "month", :id => "month", :multiple => true, :disabled => @product.cron_tab_months.blank?, :class => "cron" }
- (1..12).each do |month|
%option{ :value => month, :selected => @product.cron_tab_months.include?(month) }= I18n.localize(Time.local(2000, month), :format => "%B")
.both
.columns.wat-cf
.column.left
%h3.title= t("layout.products.cron_tab_generator.weekdays")
.group
= label_tag :weekday_chooser_every, t("layout.products.cron_tab_generator.every_weekday"), :class => :label
= radio_button_tag :weekday_chooser, 0, @product.cron_tab_weekdays.blank?, :id => :weekday_chooser_every, :class => "chooser cron"
.leftlist
%h3.title= t("layout.products.cron_tab_generator.weekdays")
.group
= label_tag :weekday_chooser_every, t("layout.products.cron_tab_generator.every_weekday"), :class => :label
= radio_button_tag :weekday_chooser, 0, @product.cron_tab_weekdays.blank?, :id => :weekday_chooser_every, :class => "chooser cron"
= label_tag :weekday_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :weekday_chooser, 1, @product.cron_tab_weekdays.present?, :id => :weekday_chooser_choose, :class => "chooser cron"
= label_tag :weekday_chooser_choose, t("layout.products.cron_tab_generator.choose"), :class => :label
= radio_button_tag :weekday_chooser, 1, @product.cron_tab_weekdays.present?, :id => :weekday_chooser_choose, :class => "chooser cron"
.group
%select{ :name => "weekday", :id => "weekday", :multiple => true, :disabled => @product.cron_tab_weekdays.blank?, :class => "cron" }
- Date::DAYNAMES.each_with_index do |day, index|
%option{ :value => index, :selected => @product.cron_tab_weekdays.include?(index) }= t("layout.weekdays.#{day}")
.group
%select{ :name => "weekday", :id => "weekday", :multiple => true, :disabled => @product.cron_tab_weekdays.blank?, :class => "cron" }
- Date::DAYNAMES.each_with_index do |day, index|
%option{ :value => index, :selected => @product.cron_tab_weekdays.include?(index) }= t("layout.weekdays.#{day}")
.both
.both
.leftlist= form.label :cron_tab, :class => :label
.rightlist= form.text_field :cron_tab, :id => "cron", :class => "text_field", :style => "width: 40%", :disabled => !@product.use_cron, :value => @product.cron_tab
= @product.cron_command
=# @product.cron_command
.both

View File

@ -36,9 +36,6 @@
.both
= render :partial => "products/crontab", :locals => { :form => f }
.leftlist= f.label :is_template, :class => :label
.rightlist= f.check_box :is_template, :class => 'check_box'
- content_for :commented do
.leftlist= f.label :system_wide, :class => :label

View File

@ -41,6 +41,7 @@ en:
attributes:
product:
name: Name
description: Description
platform_id: Platform
build_status: Build status
build_path: ISO path

View File

@ -41,6 +41,7 @@ ru:
attributes:
product:
name: Название
description: Описание
platform_id: Платформа
build_status: Статус последней сборки
build_path: Путь к iso

View File

@ -0,0 +1,9 @@
class RemoveIsTemplateFromProducts < ActiveRecord::Migration
def up
remove_column :products, :is_template
end
def down
add_column :products, "is_template", :boolean, :default => false
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20120314162313) do
ActiveRecord::Schema.define(:version => 20120314223151) do
create_table "activity_feeds", :force => true do |t|
t.integer "user_id", :null => false
@ -249,7 +249,6 @@ ActiveRecord::Schema.define(:version => 20120314162313) do
t.string "tar_content_type"
t.integer "tar_file_size"
t.datetime "tar_updated_at"
t.boolean "is_template", :default => false
t.boolean "system_wide", :default => false
t.text "cron_tab"
t.boolean "use_cron", :default => false