OSDN Git Service

v0.2.0
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 9 Jul 2006 16:30:01 +0000 (16:30 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 9 Jul 2006 16:30:01 +0000 (16:30 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@7 e93f8b46-1217-0410-a6f0-8f06a7374b81

151 files changed:
redmine/app/controllers/account_controller.rb
redmine/app/controllers/admin_controller.rb
redmine/app/controllers/application.rb
redmine/app/controllers/help_controller.rb
redmine/app/controllers/projects_controller.rb
redmine/app/controllers/roles_controller.rb
redmine/app/controllers/users_controller.rb
redmine/app/controllers/versions_controller.rb
redmine/app/helpers/application_helper.rb
redmine/app/helpers/search_filter_helper.rb
redmine/app/models/attachment.rb
redmine/app/models/enumeration.rb
redmine/app/models/issue_category.rb
redmine/app/models/issue_status.rb
redmine/app/models/permission.rb
redmine/app/models/project.rb
redmine/app/models/tracker.rb
redmine/app/models/user.rb
redmine/app/models/version.rb
redmine/app/models/workflow.rb
redmine/app/views/account/login.rhtml
redmine/app/views/account/my_account.rhtml
redmine/app/views/admin/info.rhtml
redmine/app/views/admin/projects.rhtml
redmine/app/views/custom_fields/list.rhtml
redmine/app/views/documents/show.rhtml
redmine/app/views/issue_statuses/_form.rhtml
redmine/app/views/issue_statuses/list.rhtml
redmine/app/views/issues/show.rhtml
redmine/app/views/layouts/base.rhtml
redmine/app/views/news/show.rhtml
redmine/app/views/projects/_form.rhtml
redmine/app/views/projects/changelog.rhtml
redmine/app/views/projects/list.rhtml
redmine/app/views/projects/list_files.rhtml
redmine/app/views/projects/list_issues.rhtml
redmine/app/views/projects/show.rhtml
redmine/app/views/roles/list.rhtml
redmine/app/views/trackers/list.rhtml
redmine/app/views/users/_form.rhtml
redmine/app/views/users/list.rhtml
redmine/app/views/versions/_form.rhtml
redmine/app/views/welcome/index.rhtml
redmine/config/database.yml
redmine/config/environment.rb
redmine/config/environments/development_oracle.rb [new file with mode: 0644]
redmine/config/environments/development_sqlserver.rb [new file with mode: 0644]
redmine/config/environments/test_oracle.rb [new file with mode: 0644]
redmine/config/environments/test_pgsql.rb [new file with mode: 0644]
redmine/config/environments/test_sqlserver.rb [new file with mode: 0644]
redmine/config/help.yml
redmine/db/migrate/001_setup.rb
redmine/db/migrate/002_default_configuration.rb
redmine/doc/CHANGELOG
redmine/doc/INSTALL
redmine/doc/README
redmine/lang/fr_FR.rb
redmine/public/manual/administration.html [deleted file]
redmine/public/manual/fr/ch01.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s01.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s02.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s03.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s04.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s05.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s06.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s07.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s08.html [new file with mode: 0644]
redmine/public/manual/fr/ch01s09.html [new file with mode: 0644]
redmine/public/manual/fr/ch02.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s01.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s02.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s03.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s04.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s05.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s06.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s07.html [new file with mode: 0644]
redmine/public/manual/fr/ch02s08.html [new file with mode: 0644]
redmine/public/manual/fr/html.css [new file with mode: 0644]
redmine/public/manual/fr/index.html [new file with mode: 0644]
redmine/public/manual/fr/resources/issues_list.png [new file with mode: 0644]
redmine/public/manual/fr/resources/users_list.png [moved from redmine/public/manual/images/users_list.png with 100% similarity]
redmine/public/manual/fr/resources/workflow.png [new file with mode: 0644]
redmine/public/manual/images/issues_list.png [deleted file]
redmine/public/manual/images/users_edit.png [deleted file]
redmine/public/manual/images/workflow.png [deleted file]
redmine/public/manual/index.html [deleted file]
redmine/public/manual/projects.html [deleted file]
redmine/public/manual/stylesheets/help.css [deleted file]
redmine/public/stylesheets/application.css
redmine/test/fixtures/attachments.yml [deleted file]
redmine/test/fixtures/custom_fields.yml [deleted file]
redmine/test/fixtures/documents.yml [deleted file]
redmine/test/fixtures/enumerations.yml [deleted file]
redmine/test/fixtures/issue_categories.yml [deleted file]
redmine/test/fixtures/issue_custom_fields.yml [deleted file]
redmine/test/fixtures/issue_custom_values.yml [deleted file]
redmine/test/fixtures/issue_histories.yml [deleted file]
redmine/test/fixtures/issue_statuses.yml [deleted file]
redmine/test/fixtures/issues.yml [deleted file]
redmine/test/fixtures/mailer/issue_closed [deleted file]
redmine/test/fixtures/members.yml [deleted file]
redmine/test/fixtures/news.yml [deleted file]
redmine/test/fixtures/permissions.yml [deleted file]
redmine/test/fixtures/projects.yml
redmine/test/fixtures/roles.yml
redmine/test/fixtures/trackers.yml [deleted file]
redmine/test/fixtures/users.yml
redmine/test/fixtures/versions.yml [deleted file]
redmine/test/fixtures/workflow.yml [deleted file]
redmine/test/functional/account_controller_test.rb [deleted file]
redmine/test/functional/admin_controller_test.rb [deleted file]
redmine/test/functional/custom_fields_controller_test.rb [deleted file]
redmine/test/functional/documents_controller_test.rb [deleted file]
redmine/test/functional/enumerations_controller_test.rb [deleted file]
redmine/test/functional/help_controller_test.rb [deleted file]
redmine/test/functional/issue_categories_controller_test.rb [deleted file]
redmine/test/functional/issue_statuses_controller_test.rb [deleted file]
redmine/test/functional/issues_controller_test.rb [deleted file]
redmine/test/functional/members_controller_test.rb [deleted file]
redmine/test/functional/news_controller_test.rb [deleted file]
redmine/test/functional/projects_controller_test.rb
redmine/test/functional/reports_controller_test.rb [deleted file]
redmine/test/functional/roles_controller_test.rb [deleted file]
redmine/test/functional/trackers_controller_test.rb [deleted file]
redmine/test/functional/users_controller_test.rb [deleted file]
redmine/test/functional/versions_controller_test.rb [deleted file]
redmine/test/functional/welcome_controller_test.rb [deleted file]
redmine/test/integration/account_test.rb [new file with mode: 0644]
redmine/test/integration/admin_test.rb [new file with mode: 0644]
redmine/test/test_helper.rb
redmine/test/unit/attachment_test.rb [deleted file]
redmine/test/unit/custom_field_test.rb [deleted file]
redmine/test/unit/document_test.rb [deleted file]
redmine/test/unit/enumeration_test.rb [deleted file]
redmine/test/unit/issue_category_test.rb [deleted file]
redmine/test/unit/issue_custom_field_test.rb [deleted file]
redmine/test/unit/issue_custom_value_test.rb [deleted file]
redmine/test/unit/issue_history_test.rb [deleted file]
redmine/test/unit/issue_status_test.rb [deleted file]
redmine/test/unit/issue_test.rb [deleted file]
redmine/test/unit/mailer_test.rb [deleted file]
redmine/test/unit/member_test.rb [deleted file]
redmine/test/unit/news_test.rb [deleted file]
redmine/test/unit/packages_test.rb [deleted file]
redmine/test/unit/permission_test.rb [deleted file]
redmine/test/unit/project_test.rb
redmine/test/unit/role_test.rb [deleted file]
redmine/test/unit/tracker_test.rb [deleted file]
redmine/test/unit/user_test.rb
redmine/test/unit/version_test.rb [deleted file]
redmine/test/unit/workflow_test.rb [deleted file]

index d5c98f5..54e0ef7 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class AccountController < ApplicationController\r
-       layout 'base'   \r
+  layout 'base'        \r
+  \r
   # prevents login action to be filtered by check_if_login_required application scope filter\r
   skip_before_filter :check_if_login_required, :only => :login\r
-       before_filter :require_login, :except => [:show, :login]\r
+  before_filter :require_login, :except => [:show, :login]\r
 \r
-       def show\r
-               @user = User.find(params[:id])\r
-       end\r
-  \r
-       # Login request and validation\r
-       def login\r
-               if request.get?\r
-                       session[:user] = nil\r
-                       @user = User.new\r
-               else\r
-                       @user = User.new(params[:user])\r
-                       logged_in_user = @user.try_to_login\r
-                       if logged_in_user\r
-                               session[:user] = logged_in_user\r
-                               redirect_back_or_default :controller => 'account', :action => 'my_page'\r
-                       else\r
-                               flash[:notice] = _('Invalid user/password')\r
-                       end\r
-               end\r
-       end\r
+  def show\r
+    @user = User.find(params[:id])\r
+  end\r
+\r
+  # Login request and validation\r
+  def login\r
+    if request.get?\r
+      session[:user] = nil\r
+    else\r
+      logged_in_user = User.try_to_login(params[:login], params[:password])\r
+      if logged_in_user\r
+        session[:user] = logged_in_user\r
+        redirect_back_or_default :controller => 'account', :action => 'my_page'\r
+      else\r
+        flash[:notice] = _('Invalid user/password')\r
+      end\r
+    end\r
+  end\r
        \r
        # Log out current user and redirect to welcome page\r
        def logout\r
@@ -64,20 +63,15 @@ class AccountController < ApplicationController
                end\r
        end\r
        \r
-       # Change current user's password\r
-       def change_password\r
-               @user = User.find(session[:user].id)            \r
-               if @user.check_password?(@params[:old_password])                \r
-                       if @params[:new_password] == @params[:new_password_confirmation]\r
-                               if @user.change_password(@params[:old_password], @params[:new_password])\r
-                                       flash[:notice] = 'Password was successfully updated.'\r
-                               end\r
-                       else\r
-                               flash[:notice] = 'Password confirmation doesn\'t match!'\r
-                       end\r
-               else\r
-                       flash[:notice] = 'Wrong password'\r
-               end\r
-               render :action => 'my_account'\r
-       end
+  # Change current user's password\r
+  def change_password\r
+    @user = User.find(session[:user].id)\r
+    if @user.check_password?(@params[:password])\r
+      @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]\r
+      flash[:notice] = 'Password was successfully updated.' if @user.save\r
+    else\r
+      flash[:notice] = 'Wrong password'\r
+    end\r
+    render :action => 'my_account'\r
+  end
 end
index fa34baf..68d0813 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class AdminController < ApplicationController\r
-       layout 'base'   \r
-       before_filter :require_admin\r
-  \r
-       helper :sort\r
-       include SortHelper      \r
+  layout 'base'        \r
+  before_filter :require_admin\r
+\r
+  helper :sort\r
+  include SortHelper   \r
 \r
-       def index       \r
-       end\r
+  def index    \r
+  end\r
        \r
   def projects\r
-               sort_init 'projects.name', 'asc'\r
-               sort_update             \r
-    @project_pages, @projects = paginate :projects, :per_page => 15, :order => sort_clause\r
+    sort_init 'name', 'asc'\r
+    sort_update                \r
+    @project_count = Project.count             \r
+    @project_pages = Paginator.new self, @project_count,\r
+                                                               15,\r
+                                                               @params['page']                                                         \r
+    @projects = Project.find :all, :order => sort_clause,\r
+                                               :limit  =>  @project_pages.items_per_page,\r
+                                               :offset =>  @project_pages.current.offset               \r
   end\r
-  \r
+\r
   def mail_options\r
-    @actions = Permission.find(:all, :conditions => ["mail_option=?", true])  || []\r
+    @actions = Permission.find(:all, :conditions => ["mail_option=?", true]) || []\r
     if request.post?\r
       @actions.each { |a|\r
-        a.mail_enabled = params[:action_ids].include? a.id.to_s \r
+        a.mail_enabled = (params[:action_ids] || []).include? a.id.to_s \r
         a.save\r
       }\r
       flash[:notice] = "Mail options were successfully updated."\r
@@ -44,6 +50,5 @@ class AdminController < ApplicationController
   \r
   def info\r
     @adapter_name = ActiveRecord::Base.connection.adapter_name\r
-  end\r
-  \r
+  end  \r
 end
index a9dd6b8..9cc37cf 100644 (file)
@@ -24,63 +24,73 @@ class ApplicationController < ActionController::Base
   end \r
   \r
   def set_localization\r
-    Localization.lang = session[:user].nil? ? RDM_DEFAULT_LANG : (session[:user].language || RDM_DEFAULT_LANG)\r
+    Localization.lang = begin\r
+      if session[:user]\r
+        session[:user].language\r
+      elsif request.env['HTTP_ACCEPT_LANGUAGE']\r
+        accept_lang = HTTPUtils.parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.split('-').first\r
+        if Localization.langs.collect{ |l| l[1] }.include? accept_lang\r
+          accept_lang\r
+        end\r
+      end\r
+    rescue\r
+      nil\r
+    end || RDM_DEFAULT_LANG\r
   end\r
   \r
-       def require_login\r
-               unless session[:user]\r
-                       store_location\r
-                       redirect_to(:controller => "account", :action => "login")\r
-               end\r
-       end\r
+  def require_login\r
+    unless session[:user]\r
+      store_location\r
+      redirect_to(:controller => "account", :action => "login")\r
+    end\r
+  end\r
 \r
-       def require_admin\r
-               if session[:user].nil?\r
-                       store_location\r
-                       redirect_to(:controller => "account", :action => "login")\r
-               else\r
-                       unless session[:user].admin?\r
-                               flash[:notice] = "Acces not allowed"\r
-                               redirect_to(:controller => "projects", :action => "list")\r
-                       end\r
-               end\r
-       end\r
+  def require_admin\r
+    if session[:user].nil?\r
+      store_location\r
+      redirect_to(:controller => "account", :action => "login")\r
+    else\r
+      unless session[:user].admin?\r
+        flash[:notice] = "Acces not allowed"\r
+        redirect_to(:controller => "projects", :action => "list")\r
+      end\r
+    end\r
+  end\r
 \r
-       # authorizes the user for the requested action.\r
-       def authorize\r
+  # authorizes the user for the requested action.\r
+  def authorize\r
     # check if action is allowed on public projects\r
-    if @project.public? and Permission.allowed_to_public "%s/%s" % [ @params[:controller], @params[:action] ]\r
+    if @project.is_public? and Permission.allowed_to_public "%s/%s" % [ @params[:controller], @params[:action] ]\r
       return true\r
     end  \r
-    # if user is not logged in, he is redirect to login form\r
-               unless session[:user]\r
-                       store_location\r
-                       redirect_to(:controller => "account", :action => "login")\r
-                       return false\r
-               end\r
-    # check if user is authorized    \r
+    # if user not logged in, redirect to login form\r
+    unless session[:user]\r
+      store_location\r
+      redirect_to(:controller => "account", :action => "login")\r
+      return false\r
+    end\r
+    # if logged in, check if authorized    \r
     if session[:user].admin? or Permission.allowed_to_role( "%s/%s" % [ @params[:controller], @params[:action] ], session[:user].role_for_project(@project.id)  )    \r
       return true              \r
-               end             \r
+    end                \r
     flash[:notice] = "Acces denied"\r
     redirect_to(:controller => "")\r
-    return false\r
-       end\r
+    false\r
+  end\r
        \r
-       # store current uri in  the session.
-       # we can return to this location by calling redirect_back_or_default
-       def store_location
-               session[:return_to] = @request.request_uri
-       end
-       
-       # move to the last store_location call or to the passed default one
-       def redirect_back_or_default(default)
-               if session[:return_to].nil?
-                       redirect_to default
-               else
-                       redirect_to_url session[:return_to]
-                       session[:return_to] = nil
-               end
-       end\r
-  
+  # store current uri in session.
+  # return to this location by calling redirect_back_or_default
+  def store_location
+    session[:return_to] = @request.request_uri
+  end
+
+  # move to the last store_location call or to the passed default one
+  def redirect_back_or_default(default)
+    if session[:return_to].nil?
+      redirect_to default
+    else
+      redirect_to_url session[:return_to]
+      session[:return_to] = nil
+    end
+  end
 end
\ No newline at end of file
index 4b555d5..e51d077 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class HelpController < ApplicationController\r
-       \r
+\r
   skip_before_filter :check_if_login_required\r
-       before_filter :load_help_config\r
+  before_filter :load_help_config\r
 \r
-       def index       \r
-               if @params[:ctrl] and @help_config[@params[:ctrl]]\r
-                       if @params[:page] and @help_config[@params[:ctrl]][@params[:page]]\r
-                               template = @help_config[@params[:ctrl]][@params[:page]]\r
-                       else\r
-                               template = @help_config[@params[:ctrl]]['index']\r
-                       end\r
-               end\r
-               \r
+  # displays help page for the requested controller/action\r
+  def index    \r
+    # select help page to display\r
+    if @params[:ctrl] and @help_config['pages'][@params[:ctrl]]\r
+      if @params[:page] and @help_config['pages'][@params[:ctrl]][@params[:page]]\r
+        template = @help_config['pages'][@params[:ctrl]][@params[:page]]\r
+      else\r
+        template = @help_config['pages'][@params[:ctrl]]['index']\r
+      end\r
+    end\r
+    # choose language according to available help translations\r
+    lang = (@help_config['langs'].include? Localization.lang) ? Localization.lang : @help_config['langs'].first\r
+       \r
     if template\r
-      redirect_to "/manual/#{template}"\r
+      redirect_to "/manual/#{lang}/#{template}"\r
     else\r
-      redirect_to "/manual/"\r
+      redirect_to "/manual/#{lang}/"\r
     end\r
-       end\r
+  end\r
 \r
 private\r
-       def load_help_config\r
-               @help_config = YAML::load(File.open("#{RAILS_ROOT}/config/help.yml"))\r
-       end     
+  def load_help_config\r
+    @help_config = YAML::load(File.open("#{RAILS_ROOT}/config/help.yml"))\r
+  end  
 end
index a9737aa..2bef221 100644 (file)
@@ -32,58 +32,62 @@ class ProjectsController < ApplicationController
     render :action => 'list'
   end
 \r
-       # Lists public projects
-       def list\r
-               sort_init 'projects.name', 'asc'\r
-               sort_update             \r
-               @project_count = Project.count(["public=?", true])              \r
-               @project_pages = Paginator.new self, @project_count,\r
+  # Lists public projects
+  def list\r
+    sort_init 'name', 'asc'\r
+    sort_update                \r
+    @project_count = Project.count(["is_public=?", true])              \r
+    @project_pages = Paginator.new self, @project_count,\r
                                                                15,\r
                                                                @params['page']                                                         \r
-               @projects = Project.find :all, :order => sort_clause,\r
-                                               :conditions => ["public=?", true],\r
+    @projects = Project.find :all, :order => sort_clause,\r
+                                               :conditions => ["is_public=?", true],\r
                                                :limit  =>  @project_pages.items_per_page,\r
                                                :offset =>  @project_pages.current.offset               
   end\r
           \r
   # Add a new project
-       def add\r
-               @custom_fields = CustomField::find_all\r
-               @project = Project.new(params[:project])\r
-               if request.post?\r
-                       @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
-                       if @project.save
-                               flash[:notice] = 'Project was successfully created.'
-                               redirect_to :controller => 'admin', :action => 'projects'
-                       end             \r
-               end     \r
-       end\r
+  def add\r
+    @custom_fields = CustomField::find_all\r
+    @root_projects = Project::find(:all, :conditions => "parent_id is null")\r
+    @project = Project.new(params[:project])\r
+    if request.post?\r
+      @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]
+      if @project.save
+        flash[:notice] = 'Project was successfully created.'
+        redirect_to :controller => 'admin', :action => 'projects'\r
+         end           \r
+    end        \r
+  end\r
        \r
-       # Show @project
-       def show\r
-    @members = @project.members.find(:all, :include => [:user, :role])
-       end
+       # Show @project\r
+  def show\r
+    @members = @project.members.find(:all, :include => [:user, :role])\r
+    @subprojects = @project.children if @project.children_count > 0\r
+    @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
+  end
 \r
   def settings\r
-               @custom_fields = CustomField::find_all\r
-               @issue_category ||= IssueCategory.new\r
+    @root_projects = Project::find(:all, :conditions => ["parent_id is null and id <> ?", @project.id])\r
+    @custom_fields = CustomField::find_all\r
+    @issue_category ||= IssueCategory.new\r
     @member ||= @project.members.new\r
     @roles = Role.find_all\r
     @users = User.find_all - @project.members.find(:all, :include => :user).collect{|m| m.user }\r
   end\r
   \r
-       # Edit @project\r
-       def edit\r
-               if request.post?\r
-                       @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]\r
-                       if @project.update_attributes(params[:project])
-                               flash[:notice] = 'Project was successfully updated.'
-                               redirect_to :action => 'settings', :id => @project\r
+  # Edit @project\r
+  def edit\r
+    if request.post?\r
+      @project.custom_fields = CustomField.find(@params[:custom_field_ids]) if @params[:custom_field_ids]\r
+      if @project.update_attributes(params[:project])
+        flash[:notice] = 'Project was successfully updated.'
+        redirect_to :action => 'settings', :id => @project\r
       else\r
         settings\r
         render :action => 'settings'\r
-                       end\r
-               end
+      end\r
+    end
   end\r
   \r
        # Delete @project
@@ -181,7 +185,7 @@ class ProjectsController < ApplicationController
                end     \r
        end\r
        \r
-  # Show issues list of @project\r
+  # Show filtered/sorted issues list of @project\r
   def list_issues\r
     sort_init 'issues.id', 'desc'\r
     sort_update\r
@@ -189,10 +193,10 @@ class ProjectsController < ApplicationController
     search_filter_init_list_issues\r
     search_filter_update if params[:set_filter] or request.post?\r
 \r
-    @issue_count = Issue.count(:include => :status, :conditions => search_filter_clause)               \r
+    @issue_count = Issue.count(:include => [:status, :project], :conditions => search_filter_clause)           \r
     @issue_pages = Paginator.new self, @issue_count, 15, @params['page']                                                               \r
     @issues =  Issue.find :all, :order => sort_clause,\r
-                                               :include => [ :author, :status, :tracker ],\r
+                                               :include => [ :author, :status, :tracker, :project ],\r
                                                :conditions => search_filter_clause,\r
                                                :limit  =>  @issue_pages.items_per_page,\r
                                                :offset =>  @issue_pages.current.offset                                                         \r
@@ -206,7 +210,7 @@ class ProjectsController < ApplicationController
     search_filter_init_list_issues\r
                                        \r
     @issues =  Issue.find :all, :order => sort_clause,\r
-                                               :include => [ :author, :status, :tracker ],\r
+                                               :include => [ :author, :status, :tracker, :project ],\r
                                                :conditions => search_filter_clause                                                     \r
 \r
     export = StringIO.new\r
index 6e4fc74..657f62e 100644 (file)
@@ -62,9 +62,6 @@ class RolesController < ApplicationController
   end\r
   \r
   def workflow\r
-    @roles = Role.find_all\r
-    @trackers = Tracker.find_all\r
-    @statuses = IssueStatus.find_all\r
     \r
     @role = Role.find_by_id(params[:role_id])\r
     @tracker = Tracker.find_by_id(params[:tracker_id])    \r
@@ -80,5 +77,8 @@ class RolesController < ApplicationController
         flash[:notice] = 'Workflow was successfully updated.'\r
       end\r
     end\r
+    @roles = Role.find_all\r
+    @trackers = Tracker.find_all\r
+    @statuses = IssueStatus.find(:all, :include => :workflows)\r
   end
 end
index 64c9fd3..3a60427 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class UsersController < ApplicationController\r
-       layout 'base'   \r
-       before_filter :require_admin\r
-  \r
-       helper :sort\r
-       include SortHelper\r
-       
-       def index
-               list
-               render :action => 'list'
-       end
+  layout 'base'        \r
+  before_filter :require_admin\r
+\r
+  helper :sort\r
+  include SortHelper\r
+
+  def index
+    list
+    render :action => 'list'
+  end
 
-       def list\r
-               sort_init 'users.login', 'asc'\r
-               sort_update\r
-               @user_count = User.count                \r
-               @user_pages = Paginator.new self, @user_count,\r
+  def list\r
+    sort_init 'login', 'asc'\r
+    sort_update\r
+    @user_count = User.count           \r
+    @user_pages = Paginator.new self, @user_count,\r
                                                                15,\r
                                                                @params['page']                                                         \r
-               @users =  User.find :all, :order => sort_clause,\r
+    @users =  User.find :all,:order => sort_clause,\r
                                                :limit  =>  @user_pages.items_per_page,\r
                                                :offset =>  @user_pages.current.offset          
-       end
+  end
 
-       def add
-               if request.get?\r
-                       @user = User.new\r
-               else
-                       @user = User.new(params[:user])\r
-                       @user.admin = params[:user][:admin]
-                       if @user.save
-                               flash[:notice] = 'User was successfully created.'
-                               redirect_to :action => 'list'
-                       end\r
-               end
-       end
+  def add
+    if request.get?\r
+      @user = User.new\r
+    else
+      @user = User.new(params[:user])\r
+      @user.admin = params[:user][:admin] || false\r
+      @user.login = params[:user][:login]\r
+      @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]\r
+      if @user.save
+        flash[:notice] = 'User was successfully created.'
+        redirect_to :action => 'list'
+      end\r
+    end
+  end
 
-       def edit
-               @user = User.find(params[:id])
-               if request.post?\r
-                       @user.admin = params[:user][:admin] if params[:user][:admin]\r
-                       if @user.update_attributes(params[:user])
-                               flash[:notice] = 'User was successfully updated.'
-                               redirect_to :action => 'list'
-                       end\r
-               end
-       end
+  def edit
+    @user = User.find(params[:id])
+    if request.post?\r
+      @user.admin = params[:user][:admin] if params[:user][:admin]\r
+      @user.login = params[:user][:login] if params[:user][:login]\r
+      @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless params[:password].nil? or params[:password].empty?\r
+      if @user.update_attributes(params[:user])
+        flash[:notice] = 'User was successfully updated.'
+        redirect_to :action => 'list'
+      end\r
+    end
+  end
 
-       def destroy
-               User.find(params[:id]).destroy
-               redirect_to :action => 'list'\r
+  def destroy
+    User.find(params[:id]).destroy
+    redirect_to :action => 'list'\r
   rescue\r
     flash[:notice] = "Unable to delete user"\r
     redirect_to :action => 'list'
-       end  \r
+  end  \r
 end
index c4fd241..c462867 100644 (file)
@@ -38,6 +38,9 @@ class VersionsController < ApplicationController
     @attachment = @version.attachments.find(params[:attachment_id])\r
     @attachment.increment_download\r
     send_file @attachment.diskfile, :filename => @attachment.filename\r
+  rescue\r
+    flash[:notice]="Requested file doesn't exist or has been deleted."\r
+    redirect_to :controller => 'projects', :action => 'list_files', :id => @project\r
   end \r
   \r
   def destroy_file\r
index 4a50b94..de53f2a 100644 (file)
@@ -27,7 +27,7 @@ module ApplicationHelper
        \r
        def authorize_for(controller, action)  \r
     # check if action is allowed on public projects\r
-    if @project.public? and Permission.allowed_to_public "%s/%s" % [ controller, action ]\r
+    if @project.is_public? and Permission.allowed_to_public "%s/%s" % [ controller, action ]\r
       return true\r
     end  \r
     # check if user is authorized    \r
index 7acc8b2..0999dfb 100644 (file)
 module SearchFilterHelper\r
 \r
   def search_filter_criteria(name, options = {})\r
-    session[:search_filter] ||= {}\r
-    session[:search_filter][name] ||= {}\r
-    unless session[:search_filter][name][:options] and session[:search_filter][name][:conditions]\r
-      session[:search_filter][name][:options] = []\r
-      session[:search_filter][name][:conditions] = {}\r
-      yield.each { |c|\r
-        session[:search_filter][name][:options] << [c[0], c[1].to_s]\r
-        session[:search_filter][name][:conditions].store(c[1].to_s, c[2])\r
-      }\r
-    end\r
+    @search_filter ||= {}\r
+    @search_filter[name] ||= {}\r
+    @search_filter[name][:options] = []\r
+    @search_filter[name][:conditions] = {}\r
+    yield.each { |c|\r
+      @search_filter[name][:options] << [c[0], c[1].to_s]\r
+      @search_filter[name][:conditions].store(c[1].to_s, c[2])\r
+    }\r
   end\r
 \r
   def search_filter_update\r
-    session[:search_filter].each_key {|field| session[:search_filter][field][:value] = params[field]  }\r
+    @search_filter.each_key {|field| session[:search_filter][field] = params[field]  }\r
   end\r
        \r
   def search_filter_clause\r
-    clause = ["issues.project_id=?", @project.id]\r
-    session[:search_filter].each { |k, v|\r
-      v[:value] ||= v[:options][0][1]\r
-      if (!v[:conditions][v[:value]][0].empty?)\r
-        clause[0] = clause[0] + " AND " + v[:conditions][v[:value]][0]\r
-        clause << v[:conditions][v[:value]][1] if !v[:conditions][v[:value]][1].nil?\r
+    clause = ["1=1"]\r
+    @search_filter.each { |k, v|\r
+      filter_value = session[:search_filter][k] || v[:options][0][1]\r
+      if v[:conditions][filter_value]\r
+        clause[0] = clause[0] + " AND " + v[:conditions][filter_value].first\r
+        clause += v[:conditions][filter_value][1..-1]\r
       end    \r
     }\r
     clause\r
   end\r
        \r
-  def search_filter_tag(criteria)\r
+  def search_filter_tag(criteria, options = {})\r
+    options[:name] = criteria\r
     content_tag("select", \r
-                               options_for_select(session[:search_filter][criteria][:options], session[:search_filter][criteria][:value]),\r
-                               :name => criteria\r
+                               options_for_select(@search_filter[criteria][:options], session[:search_filter][criteria]),\r
+                               options\r
                                )\r
   end\r
        \r
   def search_filter_init_list_issues\r
        search_filter_criteria('status_id') { \r
-    [ ["[Open]", "O", ["issue_statuses.is_closed=?", false]],\r
-      ["[All]", "A", ["", false]]\r
+    [ [_('[Open]'), "O", ["issue_statuses.is_closed=?", false]],\r
+      [_('[All]'), "A", nil]\r
     ] + IssueStatus.find(:all).collect {|s| [s.name, s.id, ["issues.status_id=?", s.id]] }                                                      \r
     }\r
     \r
     search_filter_criteria('tracker_id') { \r
-    [ ["[All]", "A", ["", false]]\r
+    [ [_('[All]'), "A", nil]\r
     ] + Tracker.find(:all).collect {|s| [s.name, s.id, ["issues.tracker_id=?", s.id]] }                                                      \r
     }\r
        \r
     search_filter_criteria('priority_id') { \r
-    [ ["[All]", "A", ["", false]]\r
+    [ [_('[All]'), "A", nil]\r
     ] + Enumeration.find(:all, :conditions => ['opt=?','IPRI']).collect {|s| [s.name, s.id, ["issues.priority_id=?", s.id]] }                                                      \r
     }\r
     \r
     search_filter_criteria('category_id') { \r
-    [ ["[All]", "A", ["", false]],\r
-      ["[None]", "N", ["issues.category_id is null"]]\r
+    [ [_('[All]'), "A", nil],\r
+      [_('[None]'), "N", ["issues.category_id is null"]]\r
     ] + @project.issue_categories.find(:all).collect {|s| [s.name, s.id, ["issues.category_id=?", s.id]] }                                                      \r
     }    \r
 \r
     search_filter_criteria('assigned_to_id') { \r
-    [ ["[All]", "A", ["", false]],\r
-      ["[Nobody]", "N", ["issues.assigned_to_id is null"]]\r
-    ] + User.find(:all).collect {|s| [s.display_name, s.id, ["issues.assigned_to_id=?", s.id]] }                                                      \r
-    }          \r
+    [ [_('[All]'), "A", nil],\r
+      [_('[None]'), "N", ["issues.assigned_to_id is null"]]\r
+    ] + @project.users.collect {|s| [s.display_name, s.id, ["issues.assigned_to_id=?", s.id]] }                                                      \r
+    }\r
+\r
+    search_filter_criteria('subproject_id') { \r
+    [ [_('[None]'), "N", ["issues.project_id=?", @project.id]],\r
+      [_('[All]'), "A", ["(issues.project_id=? or projects.parent_id=?)", @project.id, @project.id]]\r
+    ]                                                     \r
+    }  \r
   end\r
 end
\ No newline at end of file
index bc1ff5d..1e5bd22 100644 (file)
@@ -30,7 +30,7 @@ class Attachment < ActiveRecord::Base
                                self.filename = sanitize_filename(@temp_file.original_filename)\r
                                self.disk_filename = DateTime.now.strftime("%y%m%d%H%M%S") + "_" + self.filename\r
                                self.content_type = @temp_file.content_type\r
-                               self.size = @temp_file.size\r
+                               self.filesize = @temp_file.size\r
                        end\r
                end\r
        end\r
index d93db44..7f985d2 100644 (file)
@@ -19,6 +19,7 @@ class Enumeration < ActiveRecord::Base
   before_destroy :check_integrity\r
   \r
        validates_presence_of :opt, :name\r
+       validates_uniqueness_of :name, :scope => [:opt]\r
        \r
        OPTIONS = [\r
                ["Issue priorities", "IPRI"],\r
index b7d4e26..74adb8f 100644 (file)
 \r
 class IssueCategory < ActiveRecord::Base\r
   before_destroy :check_integrity  \r
-       belongs_to :project\r
-  \r
+  belongs_to :project\r
+\r
   validates_presence_of :name\r
+  validates_uniqueness_of :name, :scope => [:project_id]\r
   \r
 private\r
   def check_integrity\r
index ff34cb6..ef98620 100644 (file)
 \r
 class IssueStatus < ActiveRecord::Base\r
   before_destroy :check_integrity  \r
-       has_many :workflows, :foreign_key => "old_status_id"\r
-       \r
-       validates_presence_of :name\r
-       validates_uniqueness_of :name\r
+  has_many :workflows, :foreign_key => "old_status_id"\r
 \r
-       # Returns the default status for new issues\r
-       def self.default\r
-               find(:first, :conditions =>["is_default=?", true])\r
-       end\r
-       \r
-       # Returns an array of all statuses the given role can switch to\r
-       def new_statuses_allowed_to(role, tracker)\r
-               statuses = []\r
-               for workflow in self.workflows.find(:all, :include => :new_status)\r
-                       statuses << workflow.new_status if workflow.role_id == role.id and workflow.tracker_id == tracker.id\r
-               end unless role.nil?\r
-               statuses\r
-       end\r
+  validates_presence_of :name\r
+  validates_uniqueness_of :name\r
+  validates_length_of :html_color, :is=>6\r
+  validates_format_of :html_color, :with => /^[a-f0-9]*$/i\r
+\r
+  # Returns the default status for new issues\r
+  def self.default\r
+    find(:first, :conditions =>["is_default=?", true])\r
+  end\r
+\r
+  # Returns an array of all statuses the given role can switch to\r
+  def new_statuses_allowed_to(role, tracker)\r
+    statuses = []\r
+    for workflow in self.workflows\r
+      statuses << workflow.new_status if workflow.role_id == role.id and workflow.tracker_id == tracker.id\r
+    end unless role.nil? or tracker.nil?\r
+    statuses\r
+  end\r
   \r
   def name\r
     _ self.attributes['name']\r
index f662141..e05ca0f 100644 (file)
@@ -43,7 +43,7 @@ class Permission < ActiveRecord::Base
   end\r
   \r
   def self.allowed_to_public(action)\r
-    @@cached_perms_for_public ||= find(:all, :conditions => ["public=?", true]).collect {|p| "#{p.controller}/#{p.action}"}\r
+    @@cached_perms_for_public ||= find(:all, :conditions => ["is_public=?", true]).collect {|p| "#{p.controller}/#{p.action}"}\r
     @@cached_perms_for_public.include? action\r
   end\r
   \r
index 7c50ee8..e5b5779 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class Project < ActiveRecord::Base\r
-       has_many :versions, :dependent => true, :order => "versions.date DESC"\r
+       has_many :versions, :dependent => true, :order => "versions.effective_date DESC"\r
        has_many :members, :dependent => true\r
+       has_many :users, :through => :members\r
        has_many :issues, :dependent => true, :order => "issues.created_on DESC", :include => :status\r
        has_many :documents, :dependent => true\r
-       has_many :news, :dependent => true, :order => "news.created_on DESC", :include => :author\r
+       has_many :news, :dependent => true, :include => :author\r
        has_many :issue_categories, :dependent => true\r
        has_and_belongs_to_many :custom_fields\r
+       acts_as_tree :order => "name", :counter_cache => true\r
        \r
        validates_presence_of :name, :descr\r
+       validates_uniqueness_of :name\r
        \r
        # returns 5 last created projects\r
        def self.latest\r
                find(:all, :limit => 5, :order => "created_on DESC")    \r
        end     \r
        \r
-       # Returns current version of the project\r
-       def current_version\r
-               versions.find(:first, :conditions => [ "date <= ?", Date.today ], :order => "date DESC, id DESC")\r
-       end\r
-       \r
        # Returns an array of all custom fields enabled for project issues\r
        # (explictly associated custom fields and custom fields enabled for all projects)\r
        def custom_fields_for_issues\r
                (CustomField.for_all + custom_fields).uniq\r
-       end
+       end\r
+       \r
+protected\r
+  def validate\r
+    errors.add(parent_id, " must be a root project") if parent and parent.parent\r
+    errors.add_to_base("A project with subprojects can't be a subproject") if parent and projects_count > 0\r
+  end
 end
index 6b123d7..4283f47 100644 (file)
@@ -20,6 +20,9 @@ class Tracker < ActiveRecord::Base
   has_many :issues\r
   has_many :workflows, :dependent => true\r
   \r
+  validates_presence_of :name\r
+  validates_uniqueness_of :name\r
+  \r
   def name\r
     _ self.attributes['name']\r
   end\r
index 1bc1b58..e0adbb0 100644 (file)
 require "digest/sha1"\r
 \r
 class User < ActiveRecord::Base\r
-       has_many :memberships, :class_name => 'Member', :include => [ :project, :role ], :dependent => true\r
+  has_many :memberships, :class_name => 'Member', :include => [ :project, :role ], :dependent => true\r
        \r
-       attr_accessor :password\r
-       attr_accessor :last_before_login_on\r
-       # Prevents unauthorized assignments\r
-       attr_protected :admin\r
+  attr_accessor :password, :password_confirmation\r
+  attr_accessor :last_before_login_on\r
+  # Prevents unauthorized assignments\r
+  attr_protected :login, :admin, :password, :password_confirmation, :hashed_password\r
        \r
-       validates_presence_of :login, :firstname, :lastname, :mail\r
-       validates_uniqueness_of :login, :mail\r
-       \r
-       # Login must contain lettres, numbers, underscores only\r
-       validates_format_of :login, :with => /^[a-z0-9_]+$/i\r
-       validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i\r
+  validates_presence_of :login, :firstname, :lastname, :mail\r
+  validates_uniqueness_of :login, :mail        \r
+  # Login must contain lettres, numbers, underscores only\r
+  validates_format_of :login, :with => /^[a-z0-9_]+$/i\r
+  validates_format_of :mail, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i\r
+  # Password length between 4 and 12\r
+  validates_length_of :password, :in => 4..12, :allow_nil => true\r
+  validates_confirmation_of :password, :allow_nil => true\r
+\r
+  def before_save\r
+    # update hashed_password if password was set\r
+    self.hashed_password = User.hash_password(self.password) if self.password\r
+  end\r
        \r
-       def before_create\r
-               self.hashed_password = User.hash_password(self.password)\r
-       end\r
+  # Returns the user that matches provided login and password, or nil\r
+  def self.try_to_login(login, password)\r
+    user = find(:first, :conditions => ["login=? and hashed_password=? and locked=?", login, User.hash_password(password), false])\r
+    if user\r
+      user.last_before_login_on = user.last_login_on\r
+      user.update_attribute(:last_login_on, Time.now)\r
+    end\r
+    user\r
+  end\r
        \r
-       def after_create\r
-               @password = nil\r
-       end\r
+  # Return user's full name for display\r
+  def display_name\r
+    firstname + " " + lastname\r
+  end\r
 \r
-       # Returns the user that matches user's login and password\r
-       def try_to_login\r
-               @user = User.login(self.login, self.password)\r
-               unless @user.nil? \r
-                       @user.last_before_login_on = @user.last_login_on\r
-                       @user.update_attribute(:last_login_on, DateTime.now)\r
-               end\r
-               @user\r
-       end\r
-       \r
-       # Return user's full name for display\r
-       def display_name\r
-               firstname + " " + lastname #+ (self.admin ? " (Admin)" : "" )\r
-       end\r
+  def check_password?(clear_password)\r
+    User.hash_password(clear_password) == self.hashed_password\r
+  end\r
 \r
-       # Returns the user that matches the given login and password\r
-       def self.login(login, password)\r
-               hashed_password = hash_password(password || "")\r
-               find(:first,\r
-                       :conditions => ["login = ? and hashed_password = ? and locked = ?", login, hashed_password, false])\r
-       end\r
-       \r
-       def check_password?(clear_password)\r
-               User.hash_password(clear_password) == self.hashed_password\r
-       end\r
-       \r
-       def change_password(current_password, new_password)\r
-               self.hashed_password = User.hash_password(new_password)\r
-               save\r
-       end\r
   \r
   def role_for_project(project_id)\r
     @role_for_projects ||=\r
@@ -82,8 +70,8 @@ class User < ActiveRecord::Base
   end\r
        \r
 private\r
-       # Return password digest\r
-       def self.hash_password(clear_password)\r
-               Digest::SHA1.hexdigest(clear_password)\r
-       end
+  # Return password digest\r
+  def self.hash_password(clear_password)\r
+    Digest::SHA1.hexdigest(clear_password || "")\r
+  end
 end
index 02dee15..70bd6e1 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class Version < ActiveRecord::Base\r
-  before_destroy :check_integrity  \r
-       belongs_to :project\r
-       has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id'\r
+  before_destroy :check_integrity\r
+  belongs_to :project\r
+  has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id'\r
   has_many :attachments, :as => :container, :dependent => true\r
-       \r
-       validates_presence_of :name, :descr\r
+\r
+  validates_presence_of :name\r
+  validates_uniqueness_of :name, :scope => [:project_id]\r
   \r
 private\r
   def check_integrity\r
index 212e333..22c873f 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
 class Workflow < ActiveRecord::Base\r
+  belongs_to :role\r
+  belongs_to :old_status, :class_name => 'IssueStatus', :foreign_key => 'old_status_id'\r
+  belongs_to :new_status, :class_name => 'IssueStatus', :foreign_key => 'new_status_id'\r
 \r
-       belongs_to :role\r
-       belongs_to :old_status, :class_name => 'IssueStatus', :foreign_key => 'old_status_id'\r
-       belongs_to :new_status, :class_name => 'IssueStatus', :foreign_key => 'new_status_id'\r
-\r
-       validates_presence_of :role, :old_status, :new_status\r
+  validates_presence_of :role, :old_status, :new_status\r
 end
index cc360eb..bc2b5a5 100644 (file)
@@ -1,12 +1,12 @@
 <div class="box">\r
-<h2><%=_ 'Please login' %></h2>
+<h2><%=_('Please login') %></h2>
 \r
 <%= start_form_tag :action=> "login" %>
-<p><label for="user_login"><%=_ 'Login' %>:</label><br/>
-<input type="text" name="user[login]" id="user_login" size="30" /></p>
+<p><label for="login"><%=_ 'Login' %>:</label><br/>
+<%= text_field_tag 'login', nil, :size => 25 %></p>
 
 <p><label for="user_password"><%=_ 'Password' %>:</label><br/>
-<input type="password" name="user[password]" id="user_password" size="30"/></p>
+<%= password_field_tag 'password', nil, :size => 25 %></p>
 
 <p><input type="submit" name="login" value="<%=_ 'Log in' %> &#187;" class="primary" /></p>
 <%= end_form_tag %>
index 34ae488..7248f0e 100644 (file)
@@ -3,13 +3,14 @@
 <p><%=_('Login')%>: <strong><%= @user.login %></strong><br />\r
 <%=_('Created on')%>: <%= format_time(@user.created_on) %>,\r
 <%=_('Last update')%>: <%= format_time(@user.updated_on) %></p>\r
+
+<%= error_messages_for 'user' %>
 \r
 <div class="splitcontentleft">\r
   <div class="box">\r
   <h3><%=_('Information')%></h3>\r
   &nbsp;
   <%= start_form_tag :action => 'my_account' %>
-  <%= error_messages_for 'user' %>
 \r
   <!--[form:user]-->
   <p><label for="user_firstname"><%=_('Firstname')%> <span class="required">*</span></label><br/>
   &nbsp;
   <%= start_form_tag :action => 'change_password' %>
 \r
-  <p><label for="old_password"><%=_('Password')%> <span class="required">*</span></label><br/>
-  <%= password_field_tag 'old_password' %></p>
+  <p><label for="password"><%=_('Password')%> <span class="required">*</span></label><br/>
+  <%= password_field_tag 'password', nil, :size => 25 %></p>
 \r
   <p><label for="new_password"><%=_('New password')%> <span class="required">*</span></label><br/>
-  <%= password_field_tag 'new_password' %></p>\r
+  <%= password_field_tag 'new_password', nil, :size => 25 %></p>\r
 \r
   <p><label for="new_password_confirmation"><%=_('Confirmation')%> <span class="required">*</span></label><br/>
-  <%= password_field_tag 'new_password_confirmation' %></p>\r
+  <%= password_field_tag 'new_password_confirmation', nil, :size => 25 %></p>\r
 
   <center><%= submit_tag _('Save') %></center>
   <%= end_form_tag %>\r
index c73f59c..c987805 100644 (file)
@@ -1,4 +1,10 @@
 <h2><%=_('Information')%></h2>\r
 \r
-<%=_('Version')%>: <%= RDM_APP_NAME %> <%= RDM_APP_VERSION %><br />\r
-<%=_('Database')%>: <%= @adapter_name %>
\ No newline at end of file
+<p><%=_('Version')%>: <strong><%= RDM_APP_NAME %> <%= RDM_APP_VERSION %></strong></p>\r
+\r
+Environment:\r
+<ul>\r
+<% Rails::Info.properties.each do |name, value| %>\r
+<li><%= name %>: <%= value %></li>\r
+<% end %>\r
+</ul>
\ No newline at end of file
index dd39535..bcb940b 100644 (file)
@@ -2,20 +2,20 @@
 
 <table width="100%" cellspacing="1" cellpadding="2" class="listTableContent">
   <tr class="ListHead">
-       <%= sort_header_tag('projects.name', :caption => _('Project')) %>\r
+       <%= sort_header_tag('name', :caption => _('Project')) %>\r
        <th><%=_('Description')%></th>\r
-       <th><%=_('Public')%></th>\r
-       <%= sort_header_tag('projects.created_on', :caption => _('Created on')) %>\r
+       <th><%=_('Public')%></th>
+       <th><%=_('Subprojects')%></th>\r
+       <%= sort_header_tag('created_on', :caption => _('Created on')) %>\r
   <th></th>
   </tr>
   
-<% odd_or_even = 1\r
-       for project in @projects\r
-       odd_or_even = 1 - odd_or_even %>
-  <tr class="ListLine<%= odd_or_even %>">\r
+<% for project in @projects %>
+  <tr class="<%= cycle("odd", "even") %>">\r
        <td><%= link_to project.name, :controller => 'projects', :action => 'settings', :id => project %>\r
        <td><%= project.descr %>\r
-       <td align="center"><%= image_tag 'true' if project.public? %>\r
+       <td align="center"><%= image_tag 'true' if project.is_public? %>
+       <td align="center"><%= project.projects_count %>\r
        <td align="center"><%= format_date(project.created_on) %>\r
   <td align="center">\r
     <%= start_form_tag({:controller => 'projects', :action => 'destroy', :id => project}) %>\r
 <% end %>
 </table>
 
-<%= link_to ('&#171; ' + _('Previous')), { :page => @project_pages.current.previous } if @project_pages.current.previous %>\r
-<%= pagination_links(@project_pages) %>
-<%= link_to (_('Next') + ' &#187;'), { :page => @project_pages.current.next } if @project_pages.current.next %>\r
-\r
-<br />\r
-\r
-<%= link_to ('&#187; ' + _('New project')), :controller => 'projects', :action => 'add' %>
\ No newline at end of file
+<p><%= pagination_links_full @project_pages %>
+[ <%= @project_pages.current.first_item %> - <%= @project_pages.current.last_item %> / <%= @project_count %> ]</p>\r
+
+<p><%= link_to ('&#187; ' + _('New project')), :controller => 'projects', :action => 'add' %></p>
\ No newline at end of file
index 0e29a5b..2e65407 100644 (file)
@@ -10,7 +10,7 @@
        <th></th>\r
 </tr>  
 <% for custom_field in @custom_fields %>
-  <tr style="background-color:#CEE1ED">\r
+  <tr class="<%= cycle("odd", "even") %>">\r
        <td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>\r
        <td align="center"><%= CustomField::TYPES[custom_field.typ][0] %></td>\r
        <td align="center"><%= image_tag 'true' if custom_field.is_required? %></td>\r
index bc9557e..8e09bb2 100644 (file)
   <td><%= link_to attachment.filename, :action => 'download', :id => @document, :attachment_id => attachment %></td>\r
   <td align="center"><%= format_date(attachment.created_on) %></td>
   <td align="center"><%= attachment.author.display_name %></td>
-  <td><%= human_size(attachment.size) %><br /><%= attachment.downloads %> <%=_('download')%>(s)</td>\r
+  <td><%= human_size(attachment.filesize) %><br /><%= attachment.downloads %> <%=_('download')%>(s)</td>\r
+  \r
   <% if authorize_for('documents', 'destroy_attachment') %>\r
   <td align="center">\r
     <%= start_form_tag :action => 'destroy_attachment', :id => @document, :attachment_id => attachment %>\r
     <%= submit_tag _('Delete'), :class => "button-small" %>\r
     <%= end_form_tag %>
   </tr>\r
-  <% end %>
+  <% end %>\r
+  
 <% end %>
 </table>\r
 <br />\r
index 5f4b9ce..7c4d636 100644 (file)
@@ -1,7 +1,7 @@
 <%= error_messages_for 'issue_status' %>
 
 <!--[form:issue_status]-->
-<p><label for="issue_status_name"><%=_('Name')%></label><br/>
+<p><label for="issue_status_name"><%=_('Name')%></label> <span class="required">*</span><br/>
 <%= text_field 'issue_status', 'name'  %></p>
 
 <p><%= check_box 'issue_status', 'is_closed' %>\r
@@ -11,7 +11,7 @@
 <label for="issue_status_is_default"><%=_('Default status')%></label></p>\r
 \r
 <p><label for="issue_status_html_color"><%=_('Color')%></label>
-#<%= text_field 'issue_status', 'html_color', :size => 6 %></p>\r
+#<%= text_field 'issue_status', 'html_color', :maxlength => 6 %> <span class="required">*</span></p>\r
 
 <!--[eoform:issue_status]-->
 
index 050e08f..8c05322 100644 (file)
   </tr>
   
 <% for status in @issue_statuses %>
-  <tr style="background-color:#CEE1ED">
+  <tr class="<%= cycle("odd", "even") %>">
   <td><%= link_to status.name, :action => 'edit', :id => status %></td>\r
-  <td align="center"><%= image_tag 'true' if status.is_default %></td>\r
-  <td align="center"><%= image_tag 'true' if status.is_closed %></td>  
+  <td align="center"><%= image_tag 'true' if status.is_default? %></td>\r
+  <td align="center"><%= image_tag 'true' if status.is_closed? %></td>  
   <td bgcolor="#<%= status.html_color %>">&nbsp</td>  \r
   <td align="center">\r
     <%= start_form_tag :action => 'destroy', :id => status %>\r
index 1c20c92..58c9b35 100644 (file)
@@ -10,7 +10,7 @@
 <p><b><%=_('Assigned to')%>:</b> <%= @issue.assigned_to.display_name unless @issue.assigned_to.nil? %></p>\r
 \r
 <p><b><%=_('Subject')%>:</b> <%= @issue.subject %></p>\r
-<p><b><%=_('Description')%>:</b> <%= @issue.descr %></p>\r
+<p><b><%=_('Description')%>:</b> <%= simple_format auto_link @issue.descr %></p>\r
 <p><b><%=_('Created on')%>:</b> <%= format_date(@issue.created_on) %></p>\r
 \r
 <% if authorize_for('issues', 'edit') %>\r
@@ -65,7 +65,7 @@
 <table width="100%">\r
 <% for attachment in @issue.attachments %>\r
 <tr>\r
-<td><%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.size) %>)</td>\r
+<td><%= link_to attachment.filename, :action => 'download', :id => @issue, :attachment_id => attachment %> (<%= human_size(attachment.filesize) %>)</td>\r
 <td><%= format_date(attachment.created_on) %></td>\r
 <td><%= attachment.author.display_name %></td>\r
 <% if authorize_for('issues', 'destroy_attachment') %>\r
index 731632f..21bb036 100644 (file)
@@ -81,7 +81,7 @@
        </div>\r
        \r
        <div id="footer">\r
-               <p><a href="http://redmine.sourceforge.net/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %></p>\r
+               <p><a href="http://redmine.org/" target="_new"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %></p>\r
        </div>\r
 \r
 </div>\r
index 30aa2cd..d6773cd 100644 (file)
@@ -6,5 +6,5 @@
 <b><%=_('Date')%></b>: <%= format_time(@news.created_on) %>\r
 </p>\r
 \r
-<%= @news.descr %>
+<%= simple_format auto_link @news.descr %>
 
index 2d38117..89f5835 100644 (file)
@@ -4,15 +4,23 @@
 <p><label for="project_name"><%=_('Name')%> <span class="required">*</span></label><br/>
 <%= text_field 'project', 'name'  %></p>
 
+<% if session[:user].admin %>
+<p><label for="project_parent_id"><%=_('Subproject of')%></label><br/>
+<select name="project[parent_id]">
+<option value=""></option>
+<%= options_from_collection_for_select @root_projects, "id", "name", @project.parent_id %>
+</select></p>
+<% end %>
+
 <p><label for="project_descr"><%=_('Description')%> <span class="required">*</span></label><br/>
-<%= text_field 'project', 'descr', :size => 60 %></p>
+<%= text_area 'project', 'descr', :cols => 60, :rows => 3 %></p>
 \r
 <p><label for="project_homepage"><%=_('Homepage')%></label><br/>
 <%= text_field 'project', 'homepage', :size => 40 %></p>
 
-<p><%= check_box 'project', 'public' %>\r
-<label for="project_public"><%=_('Public')%></label></p>
-\r
+<p><%= check_box 'project', 'is_public' %>\r
+<label for="project_is_public"><%=_('Public')%></label></p>
+
 <fieldset><legend><%=_('Custom fields')%></legend>\r
 <% for custom_field in @custom_fields %>\r
        <input type="checkbox"\r
index 3f97abc..3be8fb0 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <% fixed_issues = @fixed_issues.group_by {|i| i.fixed_version } %>\r
 <% fixed_issues.each do |version, issues| %>\r
-  <p><strong><%= version.name %></strong> - <%= format_date(version.date) %><br />\r
+  <p><strong><%= version.name %></strong> - <%= format_date(version.effective_date) %><br />\r
   <%=h version.descr %></p>\r
   <ul>  \r
     <% issues.each do |i| %>\r
index 2b2ac2d..bee507a 100644 (file)
@@ -2,15 +2,13 @@
 
 <table width="100%" cellspacing="1" cellpadding="2" class="listTableContent">
   <tr class="ListHead">
-       <%= sort_header_tag('projects.name', :caption => _('Project')) %>\r
+       <%= sort_header_tag('name', :caption => _('Project')) %>\r
        <th>Description</th>\r
-       <%= sort_header_tag('projects.created_on', :caption => _('Created on')) %>
+       <%= sort_header_tag('created_on', :caption => _('Created on')) %>
   </tr>
   
-<% odd_or_even = 1\r
-       for project in @projects\r
-       odd_or_even = 1 - odd_or_even %>
-  <tr class="ListLine<%= odd_or_even %>">\r
+<% for project in @projects %>
+  <tr class="<%= cycle("odd", "even") %>">\r
        <td><%= link_to project.name, :action => 'show', :id => project %>\r
        <td><%= project.descr %>\r
        <td align="center"><%= format_date(project.created_on) %>\r
index 217e679..ced6400 100644 (file)
   <tr>\r
     <td colspan="7"><%= image_tag 'package' %> <b><%= version.name %></b></td>\r
   </tr>\r
-  <%  odd_or_even = 1\r
-        for file in version.attachments\r
-        odd_or_even = 1 - odd_or_even %>               
-  <tr class="ListLine<%= odd_or_even %>">\r
+  <% for file in version.attachments %>                
+  <tr class="<%= cycle("odd", "even") %>">\r
     <td></td>\r
     <td><%= link_to file.filename, :controller => 'versions', :action => 'download', :id => version, :attachment_id => file %></td>\r
     <td align="center"><%= format_date(file.created_on) %></td>\r
-    <td align="center"><%= human_size(file.size) %></td>\r
+    <td align="center"><%= human_size(file.filesize) %></td>\r
     <td align="center"><%= file.downloads %></td>
     <td align="center"><small><%= file.digest %></small></td>\r
     <% if delete_allowed %>\r
@@ -35,7 +33,8 @@
     </td>\r
     <% end %>
   </tr>                
-  <% end %>\r
+  <% end\r
+  reset_cycle %>\r
 <% end %>\r
 </table>\r
 \r
index c01358e..7e32fb2 100644 (file)
@@ -3,17 +3,19 @@
 <form method="post" class="noborder">\r
        <table cellpadding=2>\r
   <tr>\r
-    <td><%=_('Status')%>:<br /><%= search_filter_tag("status_id") %></td>\r
-    <td><%=_('Tracker')%>:<br /><%= search_filter_tag("tracker_id") %></td>\r
-    <td><%=_('Priority')%>:<br /><%= search_filter_tag("priority_id") %></td>\r
-    <td><%=_('Category')%>:<br /><%= search_filter_tag("category_id") %></td>\r
-    <td><%=_('Assigned to')%>:<br /><%= search_filter_tag("assigned_to_id") %></td>\r
+    <td><small><%=_('Status')%>:</small><br /><%= search_filter_tag 'status_id', :class => 'select-small' %></td>\r
+    <td><small><%=_('Tracker')%>:</small><br /><%= search_filter_tag 'tracker_id', :class => 'select-small' %></td>\r
+    <td><small><%=_('Priority')%>:</small><br /><%= search_filter_tag 'priority_id', :class => 'select-small' %></td>\r
+    <td><small><%=_('Category')%>:</small><br /><%= search_filter_tag 'category_id', :class => 'select-small' %></td>\r
+    <td><small><%=_('Assigned to')%>:</small><br /><%= search_filter_tag 'assigned_to_id', :class => 'select-small' %></td>\r
+    <td><small><%=_('Subprojects')%>:</small><br /><%= search_filter_tag 'subproject_id', :class => 'select-small' %></td>\r
+\r
     <td valign="bottom">\r
-      <%= submit_tag _('Apply filter') %>\r
+      <%= submit_tag _('Apply filter'), :class => 'button-small' %>\r
       <%= end_form_tag %>\r
       \r
       <%= start_form_tag %>\r
-      <%= submit_tag _('Reset') %>\r
+      <%= submit_tag _('Reset'), :class => 'button-small' %>\r
       <%= end_form_tag %>\r
     </td>\r
   </tr>\r
index 3f10654..4fdbe51 100644 (file)
@@ -13,8 +13,8 @@
     <% for tracker in Tracker.find_all %>    \r
       <li><%= link_to tracker.name, :controller => 'projects', :action => 'list_issues', :id => @project, \r
                                                 :set_filter => 1, \r
-                                                "issues.tracker_id" => tracker.id %>:\r
-      <%= tracker.issues.count(["project_id=?", @project.id]) %> <%=_('open')%>\r
+                                                "tracker_id" => tracker.id %>:\r
+      <%= Issue.count(:conditions => ["project_id=? and tracker_id=? and issue_statuses.is_closed=?", @project.id, tracker.id, false], :include => :status) %> <%=_('open')%>\r
       </li>\r
     <% end %>\r
     </ul>
                <% end %>               \r
        </div>\r
   \r
+  <% if @subprojects %>\r
+       <div class="box">\r
+               <h3><%= image_tag "projects" %> <%=_('Subprojects')%></h3>      \r
+               <% for subproject in @subprojects %>\r
+               <%= link_to subproject.name, :action => 'show', :id => subproject %><br />              \r
+               <% end %>               \r
+       </div>\r
+  <% end %>\r
+  \r
   <div class="box">\r
     <h3><%=_('Latest news')%></h3>  \r
-    <% for news in @project.news %>\r
+    <% for news in @news %>\r
       <p>\r
       <b><%= news.title %></b> <small>(<%= link_to_user news.author %> <%= format_time(news.created_on) %>)</small><br />\r
       <%= news.shortdescr %>\r
index 146e458..eb1a9ec 100644 (file)
@@ -7,7 +7,7 @@
   </tr>
   
 <% for role in @roles %>
-  <tr style="background-color:#CEE1ED">
+  <tr class="<%= cycle("odd", "even") %>">
   <td><%= link_to role.name, :action => 'edit', :id => role %></td>
   <td align="center">\r
     <%= start_form_tag :action => 'destroy', :id => role %>\r
index 3622a40..8b03a14 100644 (file)
@@ -7,7 +7,7 @@
   </tr>
   
 <% for tracker in @trackers %>
-  <tr style="background-color:#CEE1ED">
+  <tr class="<%= cycle("odd", "even") %>">
   <td><%= link_to tracker.name, :action => 'edit', :id => tracker %></td>
   <td align="center">\r
     <%= start_form_tag :action => 'destroy', :id => tracker %>\r
index 92f1e0e..6574cb0 100644 (file)
@@ -2,10 +2,13 @@
 
 <!--[form:user]-->
 <p><label for="user_login"><%=_('Login')%></label><br/>
-<%= text_field 'user', 'login'  %></p>
+<%= text_field 'user', 'login', :size => 25  %></p>
 \r
-<p><label for="user_password"><%=_('Password')%></label><br/>
-<%= password_field 'user', 'password'  %></p>
+<p><label for="password"><%=_('Password')%></label><br/>
+<%= password_field_tag 'password', nil, :size => 25  %></p>
+
+<p><label for="password_confirmation"><%=_('Confirmation')%></label><br/>
+<%= password_field_tag 'password_confirmation', nil, :size => 25  %></p>
 
 <p><label for="user_firstname"><%=_('Firstname')%></label><br/>
 <%= text_field 'user', 'firstname'  %></p>
index b1bf937..3e3c216 100644 (file)
@@ -2,18 +2,18 @@
 \r
 <table border="0" cellspacing="1" cellpadding="2" class="listTableContent">            \r
 <tr class="ListHead">
-       <%= sort_header_tag('users.login', :caption => _('Login')) %>\r
-       <%= sort_header_tag('users.firstname', :caption => _('Firstname')) %>\r
-       <%= sort_header_tag('users.lastname', :caption => _('Lastname')) %>\r
+       <%= sort_header_tag('login', :caption => _('Login')) %>\r
+       <%= sort_header_tag('firstname', :caption => _('Firstname')) %>\r
+       <%= sort_header_tag('lastname', :caption => _('Lastname')) %>\r
        <th><%=_('Mail')%></th>\r
-       <%= sort_header_tag('users.admin', :caption => _('Admin')) %>\r
-       <%= sort_header_tag('users.locked', :caption => _('Locked')) %>\r
-       <%= sort_header_tag('users.created_on', :caption => _('Created on')) %>\r
-       <%= sort_header_tag('users.last_login_on', :caption => _('Last login')) %>\r
+       <%= sort_header_tag('admin', :caption => _('Admin')) %>\r
+       <%= sort_header_tag('locked', :caption => _('Locked')) %>\r
+       <%= sort_header_tag('created_on', :caption => _('Created on')) %>\r
+       <%= sort_header_tag('last_login_on', :caption => _('Last login')) %>\r
   <th></th>\r
 </tr>  
 <% for user in @users %>
-  <tr style="background-color:#CEE1ED">\r
+  <tr class="<%= cycle("odd", "even") %>">\r
        <td><%= link_to user.login, :action => 'edit', :id => user %></td>\r
        <td><%= user.firstname %></td>\r
        <td><%= user.lastname %></td>\r
   <td align="center">\r
     <%= start_form_tag :action => 'edit', :id => user %>\r
     <% if user.locked? %>\r
-      <%= hidden_field_tag 'user[locked]', false %>\r
+      <%= hidden_field_tag 'user[locked]', 0 %>\r
       <%= submit_tag _('Unlock'), :class => "button-small"  %>\r
     <% else %>\r
-      <%= hidden_field_tag 'user[locked]', true %>\r
+      <%= hidden_field_tag 'user[locked]', 1 %>\r
       <%= submit_tag _('Lock'), :class => "button-small"  %>\r
     <% end %>\r
     <%= end_form_tag %>  \r
index 189e106..71c761e 100644 (file)
@@ -1,13 +1,13 @@
 <%= error_messages_for 'version' %>
 
 <!--[form:version]-->
-<p><label for="version_name"><%=_('Version')%></label><br/>
+<p><label for="version_name"><%=_('Version')%></label> <span class="required">*</span><br/>
 <%= text_field 'version', 'name', :size => 20  %></p>
 
 <p><label for="version_descr"><%=_('Description')%></label><br/>
 <%= text_field 'version', 'descr', :size => 60  %></p>
 \r
-<p><label for="version_date"><%=_('Date')%></label><br/>
-<%= date_select 'version', 'date'  %></p>
+<p><label for="version_effective_date"><%=_('Date')%></label><br/>
+<%= date_select 'version', 'effective_date'  %></p>
 <!--[eoform:version]-->
 
index cbffa82..89a18f1 100644 (file)
@@ -2,7 +2,7 @@
        <h2><%=_('Welcome')%> !</h2>\r
 \r
   <div class="box">\r
-       <h3>Latest news</h3>
+       <h3><%=_('Latest news')%></h3>
                <% for news in @news %>\r
                        <p>\r
                        <b><%= news.title %></b> (<%= link_to_user news.author %> <%= format_time(news.created_on) %> - <%= news.project.name %>)<br />\r
@@ -16,7 +16,7 @@
 \r
 <div class="splitcontentright">\r
        <div class="box">\r
-       <h3>Latest projects</h3>\r
+       <h3><%=_('Latest projects')%></h3>\r
                <ul>
                <% for project in @projects %>\r
                        <li>\r
index f65dc8c..cfb6f13 100644 (file)
@@ -5,6 +5,14 @@
 #   (on OS X: gem install mysql -- --include=/usr/local/lib)
 # And be sure to use new-style password hashing:
 #   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
+
+production:
+  adapter: mysql
+  database: redmine
+  host: localhost
+  username: root
+  password:
 development:
   adapter: mysql
   database: redmine_development\r
@@ -18,6 +26,17 @@ development_pgsql:
   host: localhost
   username: postgres
   password: "postgres"
+
+development_oracle:
+  adapter: oci
+  host: 192.168.0.14
+  username: rails
+  password: "rails"
+
+development_sqlserver:
+  adapter: sqlserver
+  host: localhost,1157
+  database: redmine
 \r
 test:
   adapter: mysql
@@ -25,15 +44,26 @@ test:
   host: localhost
   username: root
   password:
-\r
+
+test_pgsql:
+  adapter: postgresql
+  database: redmine
+  host: localhost
+  username: postgres
+  password: "postgres"
+
+test_oracle:
+  adapter: oci
+  host: 192.168.0.14
+  username: rails_test
+  password: "rails"
+  
+test_sqlserver:
+  adapter: sqlserver
+  host: localhost,1157
+  database: redmine_test
+  \r
 demo:
   adapter: sqlite3\r
   dbfile: db/redmine_demo.db\r
   
-production:
-  adapter: mysql
-  database: redmine\r
-  host: localhost
-  username: root
-  password:
\ No newline at end of file
index de12e7c..acba82e 100644 (file)
@@ -73,7 +73,7 @@ end
 # application name\r
 RDM_APP_NAME = "redMine" \r
 # application version\r
-RDM_APP_VERSION = "0.1.0" \r
+RDM_APP_VERSION = "0.2.0" \r
 # application host name\r
 RDM_HOST_NAME = "somenet.foo"\r
 # file storage path\r
diff --git a/redmine/config/environments/development_oracle.rb b/redmine/config/environments/development_oracle.rb
new file mode 100644 (file)
index 0000000..04b7792
--- /dev/null
@@ -0,0 +1,19 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# In the development environment your application's code is reloaded on
+# every request.  This slows down response time but is perfect for development
+# since you don't have to restart the webserver when you make code changes.
+config.cache_classes     = false
+
+# Log error messages when you accidentally call methods on nil.
+config.whiny_nils        = true
+
+# Enable the breakpoint server that script/breakpointer connects to
+config.breakpoint_server = true
+
+# Show full error reports and disable caching
+config.action_controller.consider_all_requests_local = true
+config.action_controller.perform_caching             = false
+
+# Don't care if the mailer can't send
+config.action_mailer.raise_delivery_errors = false
diff --git a/redmine/config/environments/development_sqlserver.rb b/redmine/config/environments/development_sqlserver.rb
new file mode 100644 (file)
index 0000000..04b7792
--- /dev/null
@@ -0,0 +1,19 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# In the development environment your application's code is reloaded on
+# every request.  This slows down response time but is perfect for development
+# since you don't have to restart the webserver when you make code changes.
+config.cache_classes     = false
+
+# Log error messages when you accidentally call methods on nil.
+config.whiny_nils        = true
+
+# Enable the breakpoint server that script/breakpointer connects to
+config.breakpoint_server = true
+
+# Show full error reports and disable caching
+config.action_controller.consider_all_requests_local = true
+config.action_controller.perform_caching             = false
+
+# Don't care if the mailer can't send
+config.action_mailer.raise_delivery_errors = false
diff --git a/redmine/config/environments/test_oracle.rb b/redmine/config/environments/test_oracle.rb
new file mode 100644 (file)
index 0000000..0b34ef1
--- /dev/null
@@ -0,0 +1,15 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# The test environment is used exclusively to run your application's
+# test suite.  You never need to work with it otherwise.  Remember that
+# your test database is "scratch space" for the test suite and is wiped
+# and recreated between test runs.  Don't rely on the data there!
+config.cache_classes = true
+
+# Log error messages when you accidentally call methods on nil.
+config.whiny_nils    = true
+
+# Show full error reports and disable caching
+config.action_controller.consider_all_requests_local = true
+config.action_controller.perform_caching             = false
+
diff --git a/redmine/config/environments/test_pgsql.rb b/redmine/config/environments/test_pgsql.rb
new file mode 100644 (file)
index 0000000..0b34ef1
--- /dev/null
@@ -0,0 +1,15 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# The test environment is used exclusively to run your application's
+# test suite.  You never need to work with it otherwise.  Remember that
+# your test database is "scratch space" for the test suite and is wiped
+# and recreated between test runs.  Don't rely on the data there!
+config.cache_classes = true
+
+# Log error messages when you accidentally call methods on nil.
+config.whiny_nils    = true
+
+# Show full error reports and disable caching
+config.action_controller.consider_all_requests_local = true
+config.action_controller.perform_caching             = false
+
diff --git a/redmine/config/environments/test_sqlserver.rb b/redmine/config/environments/test_sqlserver.rb
new file mode 100644 (file)
index 0000000..0b34ef1
--- /dev/null
@@ -0,0 +1,15 @@
+# Settings specified here will take precedence over those in config/environment.rb
+
+# The test environment is used exclusively to run your application's
+# test suite.  You never need to work with it otherwise.  Remember that
+# your test database is "scratch space" for the test suite and is wiped
+# and recreated between test runs.  Don't rely on the data there!
+config.cache_classes = true
+
+# Log error messages when you accidentally call methods on nil.
+config.whiny_nils    = true
+
+# Show full error reports and disable caching
+config.action_controller.consider_all_requests_local = true
+config.action_controller.perform_caching             = false
+
index a48798e..362165b 100644 (file)
@@ -1,21 +1,62 @@
-# administration\r
-admin:\r
-  index:    administration.html\r
-  mail_options: administration.html#mail_notifications\r
-  info:       administration.html#app_info\r
-users:\r
-  index:    administration.html#users\r
-roles:\r
-  index:    administration.html#roles\r
-  workflow: administration.html#workflow\r
-trackers:\r
-  index:    administration.html#trackers\r
-issue_statuses:\r
-  index:    administration.html#issue_statuses  \r
+# redMine - project management software\r
+# Copyright (C) 2006  Jean-Philippe Lang\r
+#\r
+# This program is free software; you can redistribute it and/or\r
+# modify it under the terms of the GNU General Public License\r
+# as published by the Free Software Foundation; either version 2\r
+# of the License, or (at your option) any later version.\r
+# \r
+# This program is distributed in the hope that it will be useful,\r
+# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+# GNU General Public License for more details.\r
+# \r
+# You should have received a copy of the GNU General Public License\r
+# along with this program; if not, write to the Free Software\r
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
 \r
-# projects\r
-projects:\r
-  add:        projects.html#settings\r
+# available languages for help pages\r
+langs:\r
+  - fr\r
 \r
-\r
-# issues
\ No newline at end of file
+# mapping between controller/action and help pages\r
+# if action is not defined here, 'index' page will be displayed\r
+pages:\r
+  # administration\r
+  admin:\r
+    index:          ch01.html\r
+    mail_options:   ch01s08.html\r
+    info:           ch01s09.html\r
+  users:\r
+    index:          ch01s01.html\r
+  roles:\r
+    index:          ch01s02.html\r
+    workflow:       ch01s06.html\r
+  trackers:\r
+    index:          ch01s03.html\r
+  issue_statuses:\r
+    index:          ch01s05.html\r
+  # projects\r
+  projects:\r
+    index:          ch02.html\r
+    add:            ch02s08.html\r
+    show:           ch02s01.html\r
+    add_document:   ch02s06.html\r
+    list_documents: ch02s06.html\r
+    add_issue:      ch02s02.html\r
+    list_issues:    ch02s02.html\r
+    add_news:       ch02s05.html\r
+    list_news:      ch02s05.html\r
+    add_file:       ch02s07.html\r
+    list_files:     ch02s07.html\r
+    changelog:      ch02s04.html\r
+  issues:\r
+    index:          ch02s02.html\r
+  documents:\r
+    index:          ch02s06.html\r
+  news:\r
+    index:          ch02s05.html\r
+  versions:\r
+    index:          ch02s08.html\r
+  reports:\r
+    index:          ch02s03.html
\ No newline at end of file
index c075c89..17487fc 100644 (file)
@@ -1,3 +1,20 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 class Setup < ActiveRecord::Migration
   def self.up\r
     create_table "attachments", :force => true do |t|\r
@@ -5,8 +22,8 @@ class Setup < ActiveRecord::Migration
       t.column "container_type", :string, :limit => 30, :default => "", :null => false\r
       t.column "filename", :string, :default => "", :null => false\r
       t.column "disk_filename", :string, :default => "", :null => false\r
-      t.column "size", :integer, :default => 0, :null => false\r
-      t.column "content_type", :string, :limit => 60, :default => "", :null => false\r
+      t.column "filesize", :integer, :default => 0, :null => false\r
+      t.column "content_type", :string, :limit => 60, :default => ""\r
       t.column "digest", :string, :limit => 40, :default => "", :null => false\r
       t.column "downloads", :integer, :default => 0, :null => false\r
       t.column "author_id", :integer, :default => 0, :null => false\r
@@ -18,8 +35,8 @@ class Setup < ActiveRecord::Migration
       t.column "typ", :integer, :default => 0, :null => false\r
       t.column "is_required", :boolean, :default => false, :null => false\r
       t.column "is_for_all", :boolean, :default => false, :null => false\r
-      t.column "possible_values", :text, :default => "", :null => false\r
-      t.column "regexp", :string, :default => "", :null => false\r
+      t.column "possible_values", :text, :default => ""\r
+      t.column "regexp", :string, :default => ""\r
       t.column "min_length", :integer, :default => 0, :null => false\r
       t.column "max_length", :integer, :default => 0, :null => false\r
     end\r
@@ -59,7 +76,7 @@ class Setup < ActiveRecord::Migration
       t.column "issue_id", :integer, :default => 0, :null => false\r
       t.column "status_id", :integer, :default => 0, :null => false\r
       t.column "author_id", :integer, :default => 0, :null => false\r
-      t.column "notes", :text, :default => "", :null => false\r
+      t.column "notes", :text, :default => ""\r
       t.column "created_on", :timestamp\r
     end\r
   \r
@@ -99,7 +116,7 @@ class Setup < ActiveRecord::Migration
     create_table "news", :force => true do |t|\r
       t.column "project_id", :integer\r
       t.column "title", :string, :limit => 60, :default => "", :null => false\r
-      t.column "shortdescr", :string, :default => "", :null => false\r
+      t.column "shortdescr", :string, :default => ""\r
       t.column "descr", :text, :default => "", :null => false\r
       t.column "author_id", :integer, :default => 0, :null => false\r
       t.column "created_on", :timestamp\r
@@ -109,7 +126,7 @@ class Setup < ActiveRecord::Migration
       t.column "controller", :string, :limit => 30, :default => "", :null => false\r
       t.column "action", :string, :limit => 30, :default => "", :null => false\r
       t.column "descr", :string, :limit => 60, :default => "", :null => false\r
-      t.column "public", :boolean, :default => false, :null => false\r
+      t.column "is_public", :boolean, :default => false, :null => false\r
       t.column "sort", :integer, :default => 0, :null => false\r
       t.column "mail_option", :boolean, :default => false, :null => false\r
       t.column "mail_enabled", :boolean, :default => false, :null => false\r
@@ -125,8 +142,10 @@ class Setup < ActiveRecord::Migration
     create_table "projects", :force => true do |t|\r
       t.column "name", :string, :limit => 30, :default => "", :null => false\r
       t.column "descr", :string, :default => "", :null => false\r
-      t.column "homepage", :string, :limit => 60, :default => "", :null => false\r
-      t.column "public", :boolean, :default => true, :null => false\r
+      t.column "homepage", :string, :limit => 60, :default => ""\r
+      t.column "is_public", :boolean, :default => true, :null => false
+      t.column "parent_id", :integer
+      t.column "projects_count", :integer, :default => 0\r
       t.column "created_on", :timestamp\r
       t.column "updated_on", :timestamp\r
     end\r
@@ -158,8 +177,8 @@ class Setup < ActiveRecord::Migration
     create_table "versions", :force => true do |t|\r
       t.column "project_id", :integer, :default => 0, :null => false\r
       t.column "name", :string, :limit => 30, :default => "", :null => false\r
-      t.column "descr", :string, :default => "", :null => false\r
-      t.column "date", :date, :null => false\r
+      t.column "descr", :string, :default => ""\r
+      t.column "effective_date", :date, :null => false\r
       t.column "created_on", :timestamp\r
       t.column "updated_on", :timestamp\r
     end\r
@@ -172,13 +191,13 @@ class Setup < ActiveRecord::Migration
     end\r
   \r
     # project\r
-    Permission.create :controller => "projects", :action => "show", :descr => "Overview", :sort => 100, :public => true\r
-    Permission.create :controller => "projects", :action => "changelog", :descr => "View change log", :sort => 105, :public => true\r
-    Permission.create :controller => "reports", :action => "issue_report", :descr => "View reports", :sort => 110, :public => true\r
+    Permission.create :controller => "projects", :action => "show", :descr => "Overview", :sort => 100, :is_public => true\r
+    Permission.create :controller => "projects", :action => "changelog", :descr => "View change log", :sort => 105, :is_public => true\r
+    Permission.create :controller => "reports", :action => "issue_report", :descr => "View reports", :sort => 110, :is_public => true\r
     Permission.create :controller => "projects", :action => "settings", :descr => "Settings", :sort => 150\r
     Permission.create :controller => "projects", :action => "edit", :descr => "Edit", :sort => 151\r
     # members\r
-    Permission.create :controller => "projects", :action => "list_members", :descr => "View list", :sort => 200, :public => true\r
+    Permission.create :controller => "projects", :action => "list_members", :descr => "View list", :sort => 200, :is_public => true\r
     Permission.create :controller => "projects", :action => "add_member", :descr => "New member", :sort => 220\r
     Permission.create :controller => "members", :action => "edit", :descr => "Edit", :sort => 221\r
     Permission.create :controller => "members", :action => "destroy", :descr => "Delete", :sort => 222\r
@@ -191,9 +210,9 @@ class Setup < ActiveRecord::Migration
     Permission.create :controller => "issue_categories", :action => "edit", :descr => "Edit", :sort => 421\r
     Permission.create :controller => "issue_categories", :action => "destroy", :descr => "Delete", :sort => 422\r
     # issues\r
-    Permission.create :controller => "projects", :action => "list_issues", :descr => "View list", :sort => 1000, :public => true\r
-    Permission.create :controller => "issues", :action => "show", :descr => "View", :sort => 1005, :public => true\r
-    Permission.create :controller => "issues", :action => "download", :descr => "Download file", :sort => 1010, :public => true\r
+    Permission.create :controller => "projects", :action => "list_issues", :descr => "View list", :sort => 1000, :is_public => true\r
+    Permission.create :controller => "issues", :action => "show", :descr => "View", :sort => 1005, :is_public => true\r
+    Permission.create :controller => "issues", :action => "download", :descr => "Download file", :sort => 1010, :is_public => true\r
     Permission.create :controller => "projects", :action => "add_issue", :descr => "Report an issue", :sort => 1050, :mail_option => 1, :mail_enabled => 1\r
     Permission.create :controller => "issues", :action => "edit", :descr => "Edit", :sort => 1055\r
     Permission.create :controller => "issues", :action => "change_status", :descr => "Change status", :sort => 1060, :mail_option => 1, :mail_enabled => 1\r
@@ -201,28 +220,30 @@ class Setup < ActiveRecord::Migration
     Permission.create :controller => "issues", :action => "add_attachment", :descr => "Add file", :sort => 1070\r
     Permission.create :controller => "issues", :action => "destroy_attachment", :descr => "Delete file", :sort => 1075\r
     # news\r
-    Permission.create :controller => "projects", :action => "list_news", :descr => "View list", :sort => 1100, :public => true\r
-    Permission.create :controller => "news", :action => "show", :descr => "View", :sort => 1101, :public => true\r
+    Permission.create :controller => "projects", :action => "list_news", :descr => "View list", :sort => 1100, :is_public => true\r
+    Permission.create :controller => "news", :action => "show", :descr => "View", :sort => 1101, :is_public => true\r
     Permission.create :controller => "projects", :action => "add_news", :descr => "Add", :sort => 1120\r
     Permission.create :controller => "news", :action => "edit", :descr => "Edit", :sort => 1121\r
     Permission.create :controller => "news", :action => "destroy", :descr => "Delete", :sort => 1122\r
     # documents
-    Permission.create :controller => "projects", :action => "list_documents", :descr => "View list", :sort => 1200, :public => true\r
-    Permission.create :controller => "documents", :action => "show", :descr => "View", :sort => 1201, :public => true\r
-    Permission.create :controller => "documents", :action => "download", :descr => "Download", :sort => 1202, :public => true\r
+    Permission.create :controller => "projects", :action => "list_documents", :descr => "View list", :sort => 1200, :is_public => true\r
+    Permission.create :controller => "documents", :action => "show", :descr => "View", :sort => 1201, :is_public => true\r
+    Permission.create :controller => "documents", :action => "download", :descr => "Download", :sort => 1202, :is_public => true\r
     Permission.create :controller => "projects", :action => "add_document", :descr => "Add", :sort => 1220\r
     Permission.create :controller => "documents", :action => "edit", :descr => "Edit", :sort => 1221\r
     Permission.create :controller => "documents", :action => "destroy", :descr => "Delete", :sort => 1222\r
     Permission.create :controller => "documents", :action => "add_attachment", :descr => "Add file", :sort => 1223\r
     Permission.create :controller => "documents", :action => "destroy_attachment", :descr => "Delete file", :sort => 1224\r
     # files\r
-    Permission.create :controller => "projects", :action => "list_files", :descr => "View list", :sort => 1300, :public => true\r
-    Permission.create :controller => "versions", :action => "download", :descr => "Download", :sort => 1301, :public => true\r
+    Permission.create :controller => "projects", :action => "list_files", :descr => "View list", :sort => 1300, :is_public => true\r
+    Permission.create :controller => "versions", :action => "download", :descr => "Download", :sort => 1301, :is_public => true\r
     Permission.create :controller => "projects", :action => "add_file", :descr => "Add", :sort => 1320\r
     Permission.create :controller => "versions", :action => "destroy_file", :descr => "Delete", :sort => 1322\r
     \r
     # create default administrator account\r
-    user = User.create :login => "admin", :password => "admin", :firstname => "redMine", :lastname => "Admin", :mail => "admin@somenet.foo", :mail_notification => true, :language => "en"\r
+    user = User.create :firstname => "redMine", :lastname => "Admin", :mail => "admin@somenet.foo", :mail_notification => true, :language => "en"
+    user.login = "admin"
+    user.password = "admin"\r
     user.admin = true\r
     user.save\r
     \r
index 8f851df..794a96b 100644 (file)
@@ -1,12 +1,29 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 class DefaultConfiguration < ActiveRecord::Migration
   def self.up\r
     # roles\r
     r = Role.create(:name => "Manager")\r
     r.permissions = Permission.find(:all)\r
     r = Role.create :name => "Developer"\r
-    r.permissions = Permission.find([1, 2, 3, 6, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 25, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41])\r
+    r.permissions = Permission.find(:all)\r
     r = Role.create :name => "Reporter"\r
-    r.permissions = Permission.find([1, 2, 3, 6, 16, 17, 18, 19, 20, 21, 23, 25, 26, 30, 31, 32, 38, 39])\r
+    r.permissions = Permission.find(:all)\r
     # trackers\r
     Tracker.create(:name => "Bug", :is_in_chlog => true)\r
     Tracker.create(:name => "Feature request", :is_in_chlog => true)\r
index bae2e1b..a696412 100644 (file)
@@ -2,13 +2,22 @@
 \r
 redMine - project management software\r
 Copyright (C) 2006  Jean-Philippe Lang\r
-http://redmine.sourceforge.net/\r
+http://redmine.org/\r
 \r
 \r
-== xx/xx/2006\r
+== 07/09/2006 - v0.2.0\r
 \r
-* More filter options in issues list\r
-* Issues list exportable to CSV\r
+* new databases supported: Oracle, PostgreSQL, SQL Server\r
+* projects/subprojects hierarchy (1 level of subprojects only)\r
+* environment information display in admin/info\r
+* more filter options in issues list (rev6)\r
+* default language based on browser settings (Accept-Language HTTP header)\r
+* issues list exportable to CSV (rev6)\r
+* simple_format and auto_link on long text fields\r
+* more data validations\r
+* Fixed: error when all mail notifications are unchecked in admin/mail_options\r
+* Fixed: all project news are displayed on project summary\r
+* Fixed: Can't change user password in users/edit\r
 * Fixed: Error on tables creation with PostgreSQL (rev5)\r
 * Fixed: SQL error in "issue reports" view with PostgreSQL (rev5)\r
 \r
index 72a9936..e263a66 100644 (file)
@@ -2,15 +2,23 @@
 \r
 redMine - project management software\r
 Copyright (C) 2006  Jean-Philippe Lang\r
-http://redmine.sourceforge.net/\r
+http://redmine.org/\r
 \r
 \r
 == Requirements\r
 \r
 * Ruby on Rails 1.1\r
-* Any database supported by Rails (developped using MySQL 5)\r
+* a database (see compatibility below)\r
 * (recommended) Apache/Lighttpd with FCGI support \r
 \r
+Supported databases:\r
+\r
+* MySQL (tested with MySQL 5)\r
+* PostgreSQL (tested with PostgreSQL 8.1)\r
+* Oracle (tested with Oracle 10g)\r
+* SQL Server (tested with SQL Server 2005)\r
+* SQLite (tested with SQLite 3)\r
+\r
 \r
 == Installation\r
 \r
@@ -20,9 +28,9 @@ http://redmine.sourceforge.net/
 2. Create an empty database: "redmine" for example\r
 \r
 3. Configure database parameters in config/database.yml\r
-   for "production" environment\r
+   for "production" environment (default database is MySQL)\r
 \r
-4. Create database structure. Under application main directory:\r
+4. Create the database structure. Under application main directory:\r
    rake migrate RAILS_ENV="production"\r
    It will create tables and default configuration data\r
 \r
index 1c794e4..874ac76 100644 (file)
@@ -2,7 +2,7 @@
 \r
 redMine - project management software\r
 Copyright (C) 2006  Jean-Philippe Lang\r
-http://redmine.sourceforge.net/\r
+http://redmine.org/\r
 \r
 == License\r
 \r
@@ -34,6 +34,12 @@ redMine is a project management software written using Ruby on Rails.
 * multilanguage support\r
 \r
 \r
+== User documentation\r
+\r
+User documentation for redMine is written using DocBook XML format.\r
+It's also avaible as HTML files in /public/manual (contextual help)\r
+\r
+\r
 == Versioning\r
 \r
 redMine versioning scheme is major.minor.revision\r
index 5dc7a59..0a7ce01 100644 (file)
@@ -10,7 +10,11 @@ Localization.define('fr', 'Français') do |l|
   l.store 'Resolved', 'Résolue'\r
   l.store 'Closed', 'Fermée'\r
   l.store 'Rejected', 'Rejetée'\r
-  l.store 'Feedback', 'Commentaire'  \r
+  l.store 'Feedback', 'Commentaire' \r
+  # filters\r
+  l.store '[All]', '[Tous]'\r
+  l.store '[Open]', '[Ouvert]'\r
+  l.store '[None]', '[Aucun]'\r
 \r
   # issue priorities\r
   l.store 'Issue priorities', 'Priorités des demandes'\r
@@ -53,6 +57,9 @@ Localization.define('fr', 'Français') do |l|
   l.store 'Reported issues', 'Demandes soumises'\r
   l.store 'Assigned to me', 'Demandes qui me sont assignées'\r
 \r
+  # ./script/../config/../app/views/account/login.rhtml\r
+  l.store 'Please login', 'Identification'\r
+\r
   # ./script/../config/../app/views/account/show.rhtml\r
   l.store 'Registered on', 'Inscrit le'\r
   l.store 'Projects', 'Projets'\r
@@ -231,6 +238,7 @@ Localization.define('fr', 'Français') do |l|
   l.store 'New file', 'Nouveau fichier'\r
   \r
   # ./script/../config/../app/views/projects/list_issues.rhtml\r
+  l.store 'Subprojects', 'Sous-projets'\r
   l.store 'Apply filter', 'Appliquer'\r
   l.store 'Reset', 'Annuler'\r
   l.store 'Report an issue', 'Nouvelle demande'\r
@@ -311,6 +319,6 @@ Localization.define('fr', 'Français') do |l|
   # ./script/../config/../app/views/versions/_form.rhtml\r
 \r
   # ./script/../config/../app/views/welcome/index.rhtml\r
-  \r
+  l.store 'Latest projects', 'Derniers projets'\r
 \r
 end \r
diff --git a/redmine/public/manual/administration.html b/redmine/public/manual/administration.html
deleted file mode 100644 (file)
index 22016c4..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
-\r
-<head>\r
-<title>redMine - Aide en ligne</title>\r
-<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />\r
-<meta name="description" content="redMine" />\r
-<meta name="keywords" content="issue,bug,tracker" />\r
-<link href="stylesheets/help.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-\r
-<body>\r
-<p align="right">[ <a href="index.html">Index</a> ]</p>\r
-<h1>Administration</h1>\r
-Sommaire:\r
-<ol>\r
-  <li><a href="administration.html#users">Utilisateurs</a></li>\r
-  <li><a href="administration.html#roles">Rôles et permissions</a></li>\r
-  <li><a href="administration.html#trackers">Trackers</a></li>\r
-  <li><a href="administration.html#custom_fields">Champs personnalisés</a></li>\r
-  <li><a href="administration.html#issue_statuses">Statuts de demande</a></li>\r
-  <li><a href="administration.html#workflow">Workflow</a></li>\r
-  <li><a href="administration.html#enumerations">Listes de valeurs</a></li>\r
-  <li><a href="administration.html#mail_notifications">Notifications par mail</a></li>\r
-  <li><a href="administration.html#app_info">Informations</a></li>\r
-</ol>\r
-  \r
-\r
-<h2><a name="users"></a>1. Utilisateurs</h2>\r
-<p>Ces Ã©crans vous permettent de gérer les utilisateurs de l'application.</p>\r
-<h3>1.1 Liste des utilisateurs</h3>\r
-<center><img src="images/users_list.png"><br />\r
-<i><small>Liste des utilisateurs</small></i></center>\r
-<h3>1.2 Création ou modification d'un utilisateur</h3>\r
-<ul>\r
-  <li><b>Administrateur</b>: déclare l'utilisateur comme administrateur de l'application.</li>\r
-  <li><b>Notifications par mail</b>: permet d'activer ou non l'envoi automatique de notifications par mail pour cet utilisateur</li>\r
-  <li><b>Verrouillé</b>: désactive le compte de l'utilisateur</li>\r
-</ul>\r
-<p>En mode modification, laissez le champ <b>Password</b> vide pour laisser le mot de passe de l'utilisateur inchangé.</p>\r
-<p>Un utilisateur déclaré comme administrateur dispose de toutes les permissions sur l'application et sur tous les projets.</p>\r
-\r
-\r
-<h2><a name="roles"></a>2. Rôles et permissions</h2>\r
-<p>Les rôles permettent de définir les permissions des différents membres d'un projet.<br />\r
-Chaque membre d'un projet dispose d'un rôle unique au sein d'un projet.\r
-Un utilisateur peut avoir différents rôles au sein de différents projets.</p>\r
-<p>Sur l'écran d'édition du rôle, cochez les actions que vous souhaitez autoriser pour le rôle.</p>\r
-\r
-\r
-<h2><a name="trackers"></a>3. Trackers</h2>\r
-<p>Les trackers permettent de typer les demandes et de définir des workflows spécifiques pour chacun de ces types.</p>\r
-\r
-<h2><a name="custom_fields"></a>4. Champs personnalisés</h2>\r
-<p>Les champs personnalisés vous permettent d'ajouter des informations supplémentaires sur les demandes.</p>\r
-Un champ personnalisé peut Ãªtre de l'un des types suivants:\r
-<ul>\r
-  <li><b>Integer</b>: entier positif ou négatif</li>\r
-  <li><b>String</b>: chaîne de caractère</li>\r
-  <li><b>Date</b>: date</li>\r
-  <li><b>Boolean</b>: booléen (case Ã  cocher)</li>\r
-  <li><b>List</b>: valeur Ã  sélectionnée parmi une liste prédéfinie (liste déroulante)</li>\r
-</ul>\r
-Des Ã©léments de validation peuvent Ãªtre définis:\r
-<ul>\r
-  <li><b>Required</b>: champ dont la saisie est obligatoire sur les demandes</li>\r
-  <li><b>For all projects</b>: champ automatiquement associé Ã  l'ensemble des projets</li>\r
-  <li><b>Min - max length</b>: longueurs minimales et maximales pour les champs en saisie libre (0 signifie qu'il n'y a pas de restriction)</li>\r
-  <li><b>Regular expression</b>: expression régulière permettant de valider la valeur saisie</li>\r
-  <li><b>Possible values (only for lists)</b>: valeurs possibles pour les champs de type "List". Les valeurs sont séparées par le caractère |</li>\r
-</ul>\r
-<p>Si l'option <b>For all projects</b> n'est pas activée, chaque projet pourra ou non utilisé le champ personnalisé pour ses demandes\r
-(voir <a href="projects.html#settings">Project settings</a>).</p>\r
-\r
-\r
-<h2><a name="issue_statuses"></a>5. Statuts des demandes</h2>\r
-<p>Cet Ã©cran vous permet de définir les différents statuts possibles des demandes.</p>\r
-<ul>\r
-  <li><b>Closed</b>: indique que le statut correspond Ã  une demande considérée comme fermée</li>\r
-  <li><b>Default</b>: statut appliqué par défaut aux nouvelles demandes (seul un statut peut Ãªtre déclaré comme statut par défaut)</li>\r
-  <li><b>HTML color</b>: code de couleur HTML représentant le statut Ã  l'affichage</li>\r
-</ul>\r
-\r
-\r
-<h2><a name="workflow"></a>6. Workflow</h2>\r
-<p>Le workflow permet de définir quels changements les différents membres d'un projet sont autorisés Ã  effectuer sur le statut des demandes, en fonction de leur type.</p>\r
-<p>Sélectionnez le rôle et le type de demande pour lesquels vous souhaitez modifier le workflow, puis cliquez sur <b>Edit</b>. \r
-L'écran vous permet alors de modifier, pour le rôle et le type de demande choisi, les changements autorisés.</p>\r
-<p>Les lignes représentent les statuts initiaux des demandes. Les colonnes représentent les statuts autorisés Ã  Ãªtre appliqués.</p>\r
-<p>Dans l'exemple ci-dessous, les demandes de type Bug au statut New pourront Ãªtre passées au statut Assigned ou Resolved par le rôle Développeur.<br />\r
-Celles au statut Assigned pourront Ãªtre passées au statut Resolved.<br />\r
-Le statut de toutes les autres demandes de type Bug ne pourra pas Ãªtre modifié par le Développeur.</p>\r
-<center><img src="images/workflow.png"><br />\r
-<i><small>Exemple de configuration d'un workflow</small></i></center>\r
-<p><b>Remarque</b>: pour qu'un rôle puisse changer le statut des demandes, la permission <i>"Changer le statut des demandes"</i> doit lui Ãªtre explicitement donnée indépendemment de la configuration du workflow (voir <a href="#roles">Roles et permissions</a>).\r
-\r
-\r
-<h2><a name="enumerations"></a>7. Listes de valeurs</h2>\r
-<p>Les listes de valeurs utilisées par l'application (exemple: les priorités des demandes) peuvent Ãªtre personnalisées en fonction de vos besoins.<br />\r
-Cet Ã©cran vous permet de définir les valeurs possibles pour chacune des listes suivantes:</p>\r
-<ul>\r
-  <li><b>Priorités des demandes</b></li>\r
-  <li><b>Catégories de documents</b></li>\r
-</ul>\r
-\r
-\r
-<h2><a name="mail_notifications"></a>8. Notifications par mail</h2>\r
-<p>Cet Ã©cran vous permet de sélectionner les actions qui donneront lieu Ã  une notification par mail aux membres du projet.</p>\r
-<p><b>Remarque</b>: l'envoi de mails doit Ãªtre activé dans la configuration de l'application si souhaitez effectuer des notifications.</p>\r
-\r
-\r
-<h2><a name="app_info"></a>9. Informations</h2>\r
-<p>Affiche des informations relatives Ã  l'application</p>\r
-<ul>\r
-  <li><b>Version</b>: version de l'application</li>\r
-  <li><b>Database</b>: type de base de données utilisée</li>\r
-</ul>\r
-\r
-\r
-</body>\r
-</html>\r
-\r
diff --git a/redmine/public/manual/fr/ch01.html b/redmine/public/manual/fr/ch01.html
new file mode 100644 (file)
index 0000000..b5f1129
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Chapter&nbsp;1.&nbsp;Administration</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="index.html" title="Documentation redMine"><link rel="prev" href="index.html" title="Documentation redMine"><link rel="next" href="ch01s01.html" title="1.&nbsp;Utilisateurs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;1.&nbsp;Administration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4"></a>Chapter&nbsp;1.&nbsp;Administration</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch01s01.html">1. Utilisateurs</a></span></dt><dd><dl><dt><span class="section"><a href="ch01s01.html#d0e12">1.1. Liste des utilisateurs</a></span></dt><dt><span class="section"><a href="ch01s01.html#d0e26">1.2. Cr&eacute;ation ou modification d'un utilisateur</a></span></dt></dl></dd><dt><span class="section"><a href="ch01s02.html">2. R&ocirc;les et permissions</a></span></dt><dt><span class="section"><a href="ch01s03.html">3. Trackers</a></span></dt><dt><span class="section"><a href="ch01s04.html">4. Champs personnalis&eacute;s</a></span></dt><dt><span class="section"><a href="ch01s05.html">5. Statut des demandes</a></span></dt><dt><span class="section"><a href="ch01s06.html">6. Workflow</a></span></dt><dt><span class="section"><a href="ch01s07.html">7. Listes de valeurs</a></span></dt><dt><span class="section"><a href="ch01s08.html">8. Notifications par mail</a></span></dt><dt><span class="section"><a href="ch01s09.html">9. Informations</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Documentation redMine&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;1.&nbsp;Utilisateurs</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s01.html b/redmine/public/manual/fr/ch01s01.html
new file mode 100644 (file)
index 0000000..f2ac52c
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>1.&nbsp;Utilisateurs</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="next" href="ch01s02.html" title="2.&nbsp;R&ocirc;les et permissions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1.&nbsp;Utilisateurs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e7"></a>1.&nbsp;Utilisateurs</h2></div></div></div><p>Ces &eacute;crans vous permettent de g&eacute;rer les utilisateurs de l'application.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e12"></a>1.1.&nbsp;Liste des utilisateurs</h3></div></div></div><p></p><div class="screenshot"><div class="mediaobject"><img src="resources/users_list.png"></div></div><p>Les boutons Lock/Unlock vous permettent de v&eacute;rouiller/d&eacute;v&eacute;rouiller les comptes utilisateurs.</p><p>Un utilisateur dont le compte est v&eacute;rouill&eacute; ne peut plus s'identifier pour acc&eacute;der &agrave; l'application.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e26"></a>1.2.&nbsp;Cr&eacute;ation ou modification d'un utilisateur</h3></div></div></div><p>En mode modification, laissez le champ Password vide pour laisser le mot de passe de l'utilisateur inchang&eacute;.</p><p>Un utilisateur d&eacute;clar&eacute; comme administrateur dispose de toutes les permissions sur l'application et sur tous les projets.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="guilabel">Administrateur</span>: d&eacute;clare l'utilisateur comme administrateur de l'application.</p></li><li><p><span class="guilabel">Notifications par mail</span>: permet d'activer ou non l'envoi automatique de notifications par mail pour cet utilisateur</p></li><li><p><span class="guilabel">V&eacute;rouill&eacute;</span>: d&eacute;sactive le compte de l'utilisateur</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;1.&nbsp;Administration&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;2.&nbsp;R&ocirc;les et permissions</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s02.html b/redmine/public/manual/fr/ch01s02.html
new file mode 100644 (file)
index 0000000..c0251d9
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.&nbsp;R&ocirc;les et permissions</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s01.html" title="1.&nbsp;Utilisateurs"><link rel="next" href="ch01s03.html" title="3.&nbsp;Trackers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.&nbsp;R&ocirc;les et permissions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s01.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e49"></a>2.&nbsp;R&ocirc;les et permissions</h2></div></div></div><p>Les r&ocirc;les permettent de d&eacute;finir les permissions des diff&eacute;rents membres d'un projet. Chaque membre d'un projet dispose d'un r&ocirc;le unique au sein d'un projet. Un utilisateur peut avoir diff&eacute;rents r&ocirc;les au sein de diff&eacute;rents projets.</p><p>Sur l'&eacute;cran d'&eacute;dition du r&ocirc;le, cochez les actions que vous souhaitez autoriser pour le r&ocirc;le.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s01.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">1.&nbsp;Utilisateurs&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;3.&nbsp;Trackers</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s03.html b/redmine/public/manual/fr/ch01s03.html
new file mode 100644 (file)
index 0000000..07ce84f
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>3.&nbsp;Trackers</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s02.html" title="2.&nbsp;R&ocirc;les et permissions"><link rel="next" href="ch01s04.html" title="4.&nbsp;Champs personnalis&eacute;s"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.&nbsp;Trackers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e56"></a>3.&nbsp;Trackers</h2></div></div></div><p>Les trackers permettent de typer les demandes et de d&eacute;finir des workflows sp&eacute;cifiques pour chacun de ces types.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2.&nbsp;R&ocirc;les et permissions&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;4.&nbsp;Champs personnalis&eacute;s</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s04.html b/redmine/public/manual/fr/ch01s04.html
new file mode 100644 (file)
index 0000000..3882317
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.&nbsp;Champs personnalis&eacute;s</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s03.html" title="3.&nbsp;Trackers"><link rel="next" href="ch01s05.html" title="5.&nbsp;Statut des demandes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.&nbsp;Champs personnalis&eacute;s</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e61"></a>4.&nbsp;Champs personnalis&eacute;s</h2></div></div></div><p>Les champs personnalis&eacute;s vous permettent d'ajouter des informations suppl&eacute;mentaires sur les demandes. Un champ personnalis&eacute; peut &ecirc;tre de l'un des types suivants:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="guilabel">Integer</span>: entier positif ou n&eacute;gatif</p></li><li><p><span class="guilabel">String</span>: cha&icirc;ne de caract&egrave;re</p></li><li><p><span class="guilabel">Date</span>: date</p></li><li><p><span class="guilabel">Boolean</span>: bool&eacute;en (case &agrave; cocher)</p></li><li><p><span class="guilabel">List</span>: valeur &agrave; s&eacute;lectionn&eacute;e parmi une liste pr&eacute;d&eacute;finie (liste d&eacute;roulante)</p></li></ul></div><p>Des &eacute;l&eacute;ments de validation peuvent &ecirc;tre d&eacute;finis:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="guilabel">Obligatoire</span>: champ dont la saisie est obligatoire sur les demandes</p></li><li><p><span class="guilabel">Pour tous les projects</span>: champ automatiquement associ&eacute; &agrave; l'ensemble des projets</p></li><li><p><span class="guilabel">Min - max length</span>: longueurs minimales et maximales pour les champs en saisie libre (0 signifie qu'il n'y a pas de restriction)</p></li><li><p><span class="guilabel">Expression r&eacute;guli&egrave;re</span>: expression r&eacute;guli&egrave;re permettant de valider la valeur saisie</p></li><li><p><span class="guilabel">Valeurs possibles</span>: valeurs possibles pour les champs de type "Liste". Les valeurs sont s&eacute;par&eacute;es par le caract&egrave;re |</p></li></ul></div><p>Si l'option <span class="guilabel">Pour tous les projets</span> n'est pas activ&eacute;e, chaque projet pourra choisir d'utiliser ou non le champ pour ses demandes.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3.&nbsp;Trackers&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;5.&nbsp;Statut des demandes</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s05.html b/redmine/public/manual/fr/ch01s05.html
new file mode 100644 (file)
index 0000000..46ede48
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>5.&nbsp;Statut des demandes</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s04.html" title="4.&nbsp;Champs personnalis&eacute;s"><link rel="next" href="ch01s06.html" title="6.&nbsp;Workflow"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">5.&nbsp;Statut des demandes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s06.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e125"></a>5.&nbsp;Statut des demandes</h2></div></div></div><p>Ces &eacute;crans vous permettent de d&eacute;finir les diff&eacute;rents statuts possibles des demandes.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="guilabel">Demande ferm&eacute;e</span>: indique que le statut correspond &agrave; une demande consid&eacute;r&eacute;e comme ferm&eacute;e</p></li><li><p><span class="guilabel">Statut par d&eacute;faut</span>: statut appliqu&eacute; par d&eacute;faut aux nouvelles demandes (seul un statut peut &ecirc;tre d&eacute;clar&eacute; comme statut par d&eacute;faut)</p></li><li><p><span class="guilabel">Couleur</span>: code couleur HTML (6 caract&egrave;res) repr&eacute;sentant le statut &agrave; l'affichage</p></li></ul></div><p></p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s04.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4.&nbsp;Champs personnalis&eacute;s&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;6.&nbsp;Workflow</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s06.html b/redmine/public/manual/fr/ch01s06.html
new file mode 100644 (file)
index 0000000..daf622c
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>6.&nbsp;Workflow</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s05.html" title="5.&nbsp;Statut des demandes"><link rel="next" href="ch01s07.html" title="7.&nbsp;Listes de valeurs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">6.&nbsp;Workflow</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s07.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e147"></a>6.&nbsp;Workflow</h2></div></div></div><p>Le workflow permet de d&eacute;finir les changements que les diff&eacute;rents membres d'un projet sont autoris&eacute;s &agrave; effectuer sur les demandes, en fonction de leur type.</p><p>S&eacute;lectionnez le r&ocirc;le et le tracker pour lesquels vous souhaitez modifier le workflow, puis cliquez sur Edit. L'&eacute;cran vous permet alors de modifier, pour le r&ocirc;le et le tracker choisi, les changements autoris&eacute;s. Les lignes repr&eacute;sentent les statuts initiaux des demandes. Les colonnes repr&eacute;sentent les statuts autoris&eacute;s &agrave; &ecirc;tre appliqu&eacute;s.</p><p>Remarque: pour qu'un r&ocirc;le puisse changer le statut des demandes, la permission doit lui &ecirc;tre explicitement donn&eacute;e ind&eacute;pendemment de la configuration du workflow.</p><p></p><div class="screenshot"><div class="mediaobject"><img src="resources/workflow.png"></div></div><p>Dans l'exemple ci-dessus, les demandes de type Bug au statut Nouveau pourront &ecirc;tre pass&eacute;es au statut Assign&eacute;e ou R&eacute;solue par le r&ocirc;le D&eacute;veloppeur. Celles au statut Assign&eacute;e pourront &ecirc;tre pass&eacute;es au statut R&eacute;solue. Le statut de toutes les autres demandes de type Bug ne pourra pas &ecirc;tre modifi&eacute; par le D&eacute;veloppeur.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s05.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">5.&nbsp;Statut des demandes&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;7.&nbsp;Listes de valeurs</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s07.html b/redmine/public/manual/fr/ch01s07.html
new file mode 100644 (file)
index 0000000..d6763da
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>7.&nbsp;Listes de valeurs</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s06.html" title="6.&nbsp;Workflow"><link rel="next" href="ch01s08.html" title="8.&nbsp;Notifications par mail"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">7.&nbsp;Listes de valeurs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s06.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s08.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e165"></a>7.&nbsp;Listes de valeurs</h2></div></div></div><p>Les listes de valeurs utilis&eacute;es par l'application (exemple: les priorit&eacute;s des demandes) peuvent &ecirc;tre personnalis&eacute;es. Cet &eacute;cran vous permet de d&eacute;finir les valeurs possibles pour chacune des listes suivantes:</p><div class="itemizedlist"><ul type="disc"><li><p>Priorit&eacute;s des demandes</p></li><li><p>Cat&eacute;gories de documents</p></li></ul></div><p></p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s06.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s08.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">6.&nbsp;Workflow&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;8.&nbsp;Notifications par mail</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s08.html b/redmine/public/manual/fr/ch01s08.html
new file mode 100644 (file)
index 0000000..7b44c92
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>8.&nbsp;Notifications par mail</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s07.html" title="7.&nbsp;Listes de valeurs"><link rel="next" href="ch01s09.html" title="9.&nbsp;Informations"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">8.&nbsp;Notifications par mail</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s07.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s09.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e178"></a>8.&nbsp;Notifications par mail</h2></div></div></div><p>Cet &eacute;cran vous permet de s&eacute;lectionner les actions qui donneront lieu &agrave; une notification par mail aux membres du projet.</p><p>Remarque: l'envoi de mails doit &ecirc;tre activ&eacute; dans la configuration de l'application si souhaitez effectuer des notifications.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s07.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s09.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">7.&nbsp;Listes de valeurs&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;9.&nbsp;Informations</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch01s09.html b/redmine/public/manual/fr/ch01s09.html
new file mode 100644 (file)
index 0000000..7093b94
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>9.&nbsp;Informations</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"><link rel="prev" href="ch01s08.html" title="8.&nbsp;Notifications par mail"><link rel="next" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">9.&nbsp;Informations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s08.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;1.&nbsp;Administration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e185"></a>9.&nbsp;Informations</h2></div></div></div><p>Affiche des informations relatives &agrave; l'application et &agrave; son environnement.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s08.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">8.&nbsp;Notifications par mail&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;2.&nbsp;Projets</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02.html b/redmine/public/manual/fr/ch02.html
new file mode 100644 (file)
index 0000000..06e1456
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Chapter&nbsp;2.&nbsp;Projets</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="index.html" title="Documentation redMine"><link rel="prev" href="ch01s09.html" title="9.&nbsp;Informations"><link rel="next" href="ch02s01.html" title="1.&nbsp;Aper&ccedil;u du projet"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;2.&nbsp;Projets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s09.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="d0e190"></a>Chapter&nbsp;2.&nbsp;Projets</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch02s01.html">1. Aper&ccedil;u du projet</a></span></dt><dt><span class="section"><a href="ch02s02.html">2. Gestion des demandes</a></span></dt><dd><dl><dt><span class="section"><a href="ch02s02.html#d0e204">2.1. Liste des demandes</a></span></dt></dl></dd><dt><span class="section"><a href="ch02s03.html">3. Rapports</a></span></dt><dt><span class="section"><a href="ch02s04.html">4. Historique</a></span></dt><dt><span class="section"><a href="ch02s05.html">5. Annonces</a></span></dt><dt><span class="section"><a href="ch02s06.html">6. Documents</a></span></dt><dt><span class="section"><a href="ch02s07.html">7. Fichiers</a></span></dt><dt><span class="section"><a href="ch02s08.html">8. Configuration du projet</a></span></dt><dd><dl><dt><span class="section"><a href="ch02s08.html#d0e248">8.1. Propri&eacute;t&eacute;s du projet</a></span></dt><dt><span class="section"><a href="ch02s08.html#d0e264">8.2. Membres</a></span></dt><dt><span class="section"><a href="ch02s08.html#d0e269">8.3. Versions</a></span></dt><dt><span class="section"><a href="ch02s08.html#d0e274">8.4. Cat&eacute;gories des demandes</a></span></dt></dl></dd></dl></div><p></p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s09.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">9.&nbsp;Informations&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;1.&nbsp;Aper&ccedil;u du projet</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s01.html b/redmine/public/manual/fr/ch02s01.html
new file mode 100644 (file)
index 0000000..0893ab8
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>1.&nbsp;Aper&ccedil;u du projet</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="next" href="ch02s02.html" title="2.&nbsp;Gestion des demandes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1.&nbsp;Aper&ccedil;u du projet</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e194"></a>1.&nbsp;Aper&ccedil;u du projet</h2></div></div></div><p>L'aper&ccedil;u vous pr&eacute;sente les informations g&eacute;n&eacute;rales relatives au projet, les principaux membres, les derni&egrave;res annonces, ainsi qu'une synth&egrave;se du nombre de demandes ouvertes par tracker.</p><p></p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;2.&nbsp;Projets&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;2.&nbsp;Gestion des demandes</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s02.html b/redmine/public/manual/fr/ch02s02.html
new file mode 100644 (file)
index 0000000..a016c41
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.&nbsp;Gestion des demandes</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s01.html" title="1.&nbsp;Aper&ccedil;u du projet"><link rel="next" href="ch02s03.html" title="3.&nbsp;Rapports"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.&nbsp;Gestion des demandes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s01.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e200"></a>2.&nbsp;Gestion des demandes</h2></div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e204"></a>2.1.&nbsp;Liste des demandes</h3></div></div></div><p>Par d&eacute;faut, l'ensemble des demandes ouvertes du projet sont affich&eacute;es. Diff&eacute;rents filtres vous permettent de s&eacute;lectionner les demandes &agrave; afficher. Si le projet comporte des sous-projets, vous avez la possibilit&eacute; d'afficher &eacute;galement les demandes relatives aux sous-projets (non affich&eacute;es par d&eacute;faut).</p><p>Une fois appliqu&eacute;, un filtre reste valable durant toute votre session. Vous pouvez le red&eacute;finir, ou le supprimer en cliquant sur Annuler.</p><p></p><div class="screenshot"><div class="mediaobject"><img src="resources/issues_list.png"></div></div><p></p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s01.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">1.&nbsp;Aper&ccedil;u du projet&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;3.&nbsp;Rapports</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s03.html b/redmine/public/manual/fr/ch02s03.html
new file mode 100644 (file)
index 0000000..cd97fb8
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>3.&nbsp;Rapports</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s02.html" title="2.&nbsp;Gestion des demandes"><link rel="next" href="ch02s04.html" title="4.&nbsp;Historique"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.&nbsp;Rapports</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e219"></a>3.&nbsp;Rapports</h2></div></div></div><p>Cet &eacute;cran pr&eacute;sente la synth&egrave;se du nombre de demandes par statut et selon diff&eacute;rents crit&egrave;res (tracker, priorit&eacute;, cat&eacute;gorie). Des liens directs permettent d'acc&eacute;der &agrave; la liste d&eacute;taill&eacute;e des demandes pour chaque crit&egrave;re.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2.&nbsp;Gestion des demandes&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;4.&nbsp;Historique</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s04.html b/redmine/public/manual/fr/ch02s04.html
new file mode 100644 (file)
index 0000000..6d20bbb
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.&nbsp;Historique</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s03.html" title="3.&nbsp;Rapports"><link rel="next" href="ch02s05.html" title="5.&nbsp;Annonces"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.&nbsp;Historique</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e224"></a>4.&nbsp;Historique</h2></div></div></div><p>Cette page pr&eacute;sente l'ensemble des demandes r&eacute;solues dans chacune des versions du projet. Certains types de demande peuvent &ecirc;tre exclus de cet affichage.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3.&nbsp;Rapports&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;5.&nbsp;Annonces</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s05.html b/redmine/public/manual/fr/ch02s05.html
new file mode 100644 (file)
index 0000000..4fb95b4
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>5.&nbsp;Annonces</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s04.html" title="4.&nbsp;Historique"><link rel="next" href="ch02s06.html" title="6.&nbsp;Documents"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">5.&nbsp;Annonces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s06.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e229"></a>5.&nbsp;Annonces</h2></div></div></div><p>Les nouvelles vous permettent d'informer les utilisateurs sur l'activit&eacute; du projet.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s04.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4.&nbsp;Historique&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;6.&nbsp;Documents</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s06.html b/redmine/public/manual/fr/ch02s06.html
new file mode 100644 (file)
index 0000000..98c03c7
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>6.&nbsp;Documents</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s05.html" title="5.&nbsp;Annonces"><link rel="next" href="ch02s07.html" title="7.&nbsp;Fichiers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">6.&nbsp;Documents</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s07.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e234"></a>6.&nbsp;Documents</h2></div></div></div><p>Les documents sont group&eacute;s par cat&eacute;gories (voir Listes de valeurs). Un document peut contenir plusieurs fichiers (exemple: r&eacute;visions ou versions successives).</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s05.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">5.&nbsp;Annonces&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;7.&nbsp;Fichiers</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s07.html b/redmine/public/manual/fr/ch02s07.html
new file mode 100644 (file)
index 0000000..221e833
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>7.&nbsp;Fichiers</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s06.html" title="6.&nbsp;Documents"><link rel="next" href="ch02s08.html" title="8.&nbsp;Configuration du projet"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">7.&nbsp;Fichiers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s06.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s08.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e239"></a>7.&nbsp;Fichiers</h2></div></div></div><p>Ce module vous permet de publier les diff&eacute;rents fichiers (sources, binaires, ...) pour chaque version de l'application.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s06.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s08.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">6.&nbsp;Documents&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;8.&nbsp;Configuration du projet</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/ch02s08.html b/redmine/public/manual/fr/ch02s08.html
new file mode 100644 (file)
index 0000000..37657dc
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>8.&nbsp;Configuration du projet</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="up" href="ch02.html" title="Chapter&nbsp;2.&nbsp;Projets"><link rel="prev" href="ch02s07.html" title="7.&nbsp;Fichiers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">8.&nbsp;Configuration du projet</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s07.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Projets</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e244"></a>8.&nbsp;Configuration du projet</h2></div></div></div><p></p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e248"></a>8.1.&nbsp;Propri&eacute;t&eacute;s du projet</h3></div></div></div><p></p><div class="itemizedlist"><ul type="disc"><li><p><span class="guilabel">Public</span>: si le projet est public, il sera visible (consultation des demandes, des documents, ...) pour l'ensemble des utilisateurs, y compris ceux qui ne sont pas membres du projet. Si le projet n'est pas public, seuls les membres du projet y ont acc&egrave;s, en fonction de leur r&ocirc;le.</p></li><li><p><span class="guilabel">Champs personnalis&eacute;s</span>: s&eacute;lectionner les champs personnalis&eacute;s que vous souhaitez utiliser au sein du projet. Seul l'administrateur peut ajouter de nouveaux champs personnalis&eacute;s.</p></li></ul></div><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e264"></a>8.2.&nbsp;Membres</h3></div></div></div><p>Cet &eacute;cran vous permet de d&eacute;finir les membres du projet ainsi que leurs r&ocirc;les respectifs. Un utilisateur ne peut avoir qu'un r&ocirc;le au sein d'un projet donn&eacute;. Le r&ocirc;le d'un membre d&eacute;termine les permissions dont il b&eacute;n&eacute;ficie sur le projet.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e269"></a>8.3.&nbsp;Versions</h3></div></div></div><p>Les versions vous permettent de suivre les changements survenus tout au long du projet. A la fermeture d'une demande, vous pouvez par exemple indiquer quelle version la prend en compte. Vous pouvez par ailleurs publier les diff&eacute;rentes versions de l'application (voir Fichiers).</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e274"></a>8.4.&nbsp;Cat&eacute;gories des demandes</h3></div></div></div><p>Les cat&eacute;gories de demande vous permettent de typer les demandes. Les cat&eacute;gories peuvent par exemple correspondre aux diff&eacute;rents modules du projet.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s07.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">7.&nbsp;Fichiers&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/html.css b/redmine/public/manual/fr/html.css
new file mode 100644 (file)
index 0000000..c1b2a6f
--- /dev/null
@@ -0,0 +1,55 @@
+body  { 
+    background: #FFFFFF;\r
+    font: 0.8em Verdana,Tahoma,Arial,sans-serif;
+}
+
+h1, h2, h3, h4, h5 { 
+    color: #800000; 
+    font-family: sans-serif; 
+}\r
+\r
+table {\r
+  font-size: 1em;\r
+}
+\r
+a{\r
+color:#467aa7;\r
+font-weight:bold;\r
+text-decoration:none;\r
+background-color:inherit;\r
+}\r
+\r
+a:hover{\r
+  color: #800000; \r
+  text-decoration:underline;\r
+  background-color:inherit;\r
+}\r
+\r
+a img{border:none;}\r
+\r
+.screenshot {\r
+  text-align: center;\r
+}\r
+\r
+.guilabel {\r
+  font-weight: bold;\r
+}\r
+
+span.term { 
+    font-weight: bold; 
+}
+
+div.sidebar { 
+    background: #F0F0F0; 
+    border: 1px solid gray; 
+    padding: 5px; 
+    margin: 20px; 
+}
+
+pre.programlisting { 
+    background: #F0F0F0; 
+    border: 1px solid gray; 
+    padding: 2px; 
+    font-size: 10pt;
+    white-space: pre;
+}
diff --git a/redmine/public/manual/fr/index.html b/redmine/public/manual/fr/index.html
new file mode 100644 (file)
index 0000000..1f485fe
--- /dev/null
@@ -0,0 +1,3 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Documentation redMine</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.70.1"><link rel="start" href="index.html" title="Documentation redMine"><link rel="next" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Administration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Documentation redMine</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e1"></a>Documentation redMine</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Administration</a></span></dt><dd><dl><dt><span class="section"><a href="ch01s01.html">1. Utilisateurs</a></span></dt><dd><dl><dt><span class="section"><a href="ch01s01.html#d0e12">1.1. Liste des utilisateurs</a></span></dt><dt><span class="section"><a href="ch01s01.html#d0e26">1.2. Cr&eacute;ation ou modification d'un utilisateur</a></span></dt></dl></dd><dt><span class="section"><a href="ch01s02.html">2. R&ocirc;les et permissions</a></span></dt><dt><span class="section"><a href="ch01s03.html">3. Trackers</a></span></dt><dt><span class="section"><a href="ch01s04.html">4. Champs personnalis&eacute;s</a></span></dt><dt><span class="section"><a href="ch01s05.html">5. Statut des demandes</a></span></dt><dt><span class="section"><a href="ch01s06.html">6. Workflow</a></span></dt><dt><span class="section"><a href="ch01s07.html">7. Listes de valeurs</a></span></dt><dt><span class="section"><a href="ch01s08.html">8. Notifications par mail</a></span></dt><dt><span class="section"><a href="ch01s09.html">9. Informations</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch02.html">2. Projets</a></span></dt><dd><dl><dt><span class="section"><a href="ch02s01.html">1. Aper&ccedil;u du projet</a></span></dt><dt><span class="section"><a href="ch02s02.html">2. Gestion des demandes</a></span></dt><dd><dl><dt><span class="section"><a href="ch02s02.html#d0e204">2.1. Liste des demandes</a></span></dt></dl></dd><dt><span class="section"><a href="ch02s03.html">3. Rapports</a></span></dt><dt><span class="section"><a href="ch02s04.html">4. Historique</a></span></dt><dt><span class="section"><a href="ch02s05.html">5. Annonces</a></span></dt><dt><span class="section"><a href="ch02s06.html">6. Documents</a></span></dt><dt><span class="section"><a href="ch02s07.html">7. Fichiers</a></span></dt><dt><span class="section"><a href="ch02s08.html">8. Configuration du projet</a></span></dt><dd><dl><dt><span class="section"><a href="ch02s08.html#d0e248">8.1. Propri&eacute;t&eacute;s du projet</a></span></dt><dt><span class="section"><a href="ch02s08.html#d0e264">8.2. Membres</a></span></dt><dt><span class="section"><a href="ch02s08.html#d0e269">8.3. Versions</a></span></dt><dt><span class="section"><a href="ch02s08.html#d0e274">8.4. Cat&eacute;gories des demandes</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Administration</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/redmine/public/manual/fr/resources/issues_list.png b/redmine/public/manual/fr/resources/issues_list.png
new file mode 100644 (file)
index 0000000..47eab0f
Binary files /dev/null and b/redmine/public/manual/fr/resources/issues_list.png differ
diff --git a/redmine/public/manual/fr/resources/workflow.png b/redmine/public/manual/fr/resources/workflow.png
new file mode 100644 (file)
index 0000000..04e79d6
Binary files /dev/null and b/redmine/public/manual/fr/resources/workflow.png differ
diff --git a/redmine/public/manual/images/issues_list.png b/redmine/public/manual/images/issues_list.png
deleted file mode 100644 (file)
index 2fa6dc1..0000000
Binary files a/redmine/public/manual/images/issues_list.png and /dev/null differ
diff --git a/redmine/public/manual/images/users_edit.png b/redmine/public/manual/images/users_edit.png
deleted file mode 100644 (file)
index 3a4797e..0000000
Binary files a/redmine/public/manual/images/users_edit.png and /dev/null differ
diff --git a/redmine/public/manual/images/workflow.png b/redmine/public/manual/images/workflow.png
deleted file mode 100644 (file)
index 26071ca..0000000
Binary files a/redmine/public/manual/images/workflow.png and /dev/null differ
diff --git a/redmine/public/manual/index.html b/redmine/public/manual/index.html
deleted file mode 100644 (file)
index 3f0cb1e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
-\r
-<head>\r
-<title>redMine - Aide en ligne</title>\r
-<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />\r
-<meta name="description" content="redMine" />\r
-<meta name="keywords" content="issue,bug,tracker" />\r
-<link href="stylesheets/help.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-\r
-<body>\r
-<h1>Aide</h1>\r
-\r
-<p>Documentation en ligne redMine</p>\r
-\r
-Sommaire:\r
-<ul>\r
-\r
-  <li>  \r
-  <a href="administration.html">Administration</a>\r
-  <ol>\r
-    <li><a href="administration.html#users">Utilisateur</a></li>\r
-    <li><a href="administration.html#roles">Rôles et permissions</a></li>\r
-    <li><a href="administration.html#trackers">Trackers</a></li>\r
-    <li><a href="administration.html#custom_fields">Champs personnalisés</a></li>\r
-    <li><a href="administration.html#issue_statuses">Statuts de demande</a></li>\r
-    <li><a href="administration.html#workflow">Workflow</a></li>\r
-    <li><a href="administration.html#enumerations">Liste de valeurs</a></li>\r
-    <li><a href="administration.html#mail_notifications">Notifications par mail</a></li>\r
-    <li><a href="administration.html#app_info">Informations</a></li>\r
-  </ol>\r
-  </li>\r
-  \r
-  <li><a href="projects.html">Projets</a>\r
-  <ol>\r
-    <li><a href="projects.html#overview">Aperçu</a></li>\r
-    <li><a href="projects.html#issues">Demandes</a>\r
-      <ul>\r
-      <li>Liste des demandes</li>\r
-      <li>Nouvelle demande</li>\r
-      <li>Changer le statut d'une demande</li> \r
-      </ul>\r
-    </li>  \r
-    <li><a href="projects.html#reports">Rapports</a></li>\r
-    <li><a href="projects.html#news">Annonces</a></li>\r
-    <li><a href="projects.html#changelog">Historique</a></li>\r
-    <li><a href="projects.html#documents">Documents</a></li>\r
-    <li><a href="projects.html#members">Membres</a></li>\r
-    <li><a href="projects.html#files">Fichiers</a></li>\r
-    <li><a href="projects.html#settings">Configuration</a></li>\r
-      <ul>\r
-      <li>Projet</li>\r
-      <li>Membres</li>\r
-      <li>Versions</li> \r
-      <li>Catégories de demande</li> \r
-      </ul>\r
-  </ol>\r
-  </li>\r
-\r
-\r
-</ul>\r
-\r
-</body>\r
-</html>
\ No newline at end of file
diff --git a/redmine/public/manual/projects.html b/redmine/public/manual/projects.html
deleted file mode 100644 (file)
index 13922f6..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
-\r
-<head>\r
-<title>redMine - Aide en ligne</title>\r
-<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />\r
-<meta name="description" content="redMine" />\r
-<meta name="keywords" content="issue,bug,tracker" />\r
-<link href="stylesheets/help.css" rel="stylesheet" type="text/css" />\r
-</head>\r
-\r
-<body>\r
-<p align="right">[ <a href="index.html">Index</a> ]</p>\r
-<h1>Projets</h1>\r
-Sommaire:\r
-<ol>\r
-  <li><a href="projects.html#overview">Aperçu</a></li>\r
-  <li><a href="projects.html#issues">Demandes</a>\r
-    <ul>\r
-    <li>Liste des demandes</li>\r
-    <li>Nouvelle demande</li>\r
-    <li>Changer le statut d'une demande</li> \r
-    </ul>\r
-  </li>  \r
-  <li><a href="projects.html#reports">Rapports</a></li>\r
-  <li><a href="projects.html#news">Annonces</a></li>\r
-  <li><a href="projects.html#changelog">Historique</a></li>\r
-  <li><a href="projects.html#documents">Documents</a></li>\r
-  <li><a href="projects.html#members">Membres</a></li>\r
-  <li><a href="projects.html#files">Fichiers</a></li>\r
-  <li><a href="projects.html#settings">Configuration</a></li>\r
-    <ul>\r
-    <li>Projet</li>\r
-    <li>Membres</li>\r
-    <li>Versions</li> \r
-    <li>Catégories de demande</li> \r
-    </ul>\r
-</ol>\r
-\r
-\r
-<h2><a name="overview"></a>1. Aperçu</h2>\r
-<p>L'aperçu vous présente les informations générales relatives au projet, les principaux membres, les dernières annonces, ainsi qu'une synthèse du nombre de demandes ouvertes par tracker.\r
-\r
-\r
-<h2><a name="issues"></a>2. Demandes</h2>\r
-<h3>2.1 Liste des demandes</h3>\r
-Par défaut, l'ensemble des demandes sont affichées. Vous pouvez utiliser les différents filtres pour limiter l'affichage Ã  certaines demandes seulement.<br />\r
-Lorsque vous appliquez un filtre, il reste en place durant toute votre session. Vous pouvez le redéfinir, ou le supprimer en cliquant sur <b>Annuler</b>.\r
-<center><img src="images/issues_list.png"><br />\r
-<i><small>Liste des demandes</small></i></center>\r
-\r
-<h3>2.2 Nouvelle demande</h3>\r
-<p>TODO</p>\r
-\r
-<h3>2.3 Changer le statut d'une demande</h3>\r
-<p>TODO</p>\r
-\r
-\r
-<h2><a name="reports"></a>3. Rapports</h2>\r
-<p>Synthèse du nombre de demandes par statut et selon différents critères (tracker, priorité, catégorie).\r
-Des liens directs permettent d'accéder Ã  la liste détaillée des demandes pour chaque critère.</p>\r
-\r
-\r
-<h2><a name="news"></a>4. Annonces</h2>\r
-<p>Les nouvelles vous permettent d'informer les utilisateurs sur l'activité du projet.</p>\r
-\r
-\r
-<h2><a name="changelog"></a>5. Historique</h2>\r
-<p>Cette page présente l'ensemble des demandes résolues dans chacune des versions du projet.\r
-Certains types de demande peuvent Ãªtre exclus de cet affichage (voir <a href="administration.html#trackers">Trackers</a>).</p>\r
-\r
-\r
-<h2><a name="documents"></a>6. Documents</h2>\r
-<p>Les documents sont groupés par catégories (voir <a href="administration.html#enumerations">Listes de valeurs</a>).<br />\r
-Un document peut contenir plusieurs fichiers (exemple: révisions ou versions successives)</p>\r
-\r
-\r
-<h2><a name="members"></a>7. Membres</h2>\r
-<p>Affichage de l'ensemble des membres du projet, par rôle</p>\r
-\r
-\r
-<h2><a name="files"></a>8. Fichiers</h2>\r
-<p>Ce module vous permet de publier les fichiers de l'application (sources, binaires, ...) pour chaque version de l'application .</p>\r
-\r
-<h2><a name="settings"></a>9. Configuration</h2>\r
-<h3>9.1 Projet</h3>\r
-<ul>\r
-  <li><b>Public</b>: si le projet est public, il sera visible (consultation des demandes, des documents, ...) pour l'ensemble des utilisateurs, y compris ceux qui ne sont pas membres du projet.<br />\r
-  Si le projet n'est pas public, seuls les membres du projet y ont accès, en fonction de leur rôle.</li>\r
-  <li><b>Champs personnalisés</b>: sélectionner les champs personnalisés que vous souhaitez utiliser au sein du projet.<br />\r
-  Seul l'administrateur peut ajouter de nouveaux champs personnalisés.</li>\r
-</ul>\r
-<h3>9.2 Membres</h3>\r
-<p>Cette section vous permet de définir les membres du projet ainsi que leurs rôles respectifs.<br />\r
-Un utilisateur ne peut avoir qu'un rôle au sein d'un projet donné. Le rôle d'un membre détermine les permissions dont il bénéficie sur le projet.</p>\r
-\r
-<h3>9.3 Versions</h3>\r
-<p>Les versions vous permettent de suivre les changements survenus tout au long du projet.\r
-A la fermeture d'une demande, vous pouvez indiquer quelle version la prend en compte.<br />\r
-Vous pouvez par ailleurs publier les différentes versions de l'application (voir <a href="projects.html#files">Fichiers</a>).\r
-</p>\r
-\r
-\r
-<h3>9.4 Catégories de demande</h3>\r
-<p>Les catégories de demande vous permettent de typer les demandes. Les catégories peuvent par exemple correspondre aux modules de l'application.</p>\r
-\r
-\r
-</body>\r
-</html>\r
-\r
diff --git a/redmine/public/manual/stylesheets/help.css b/redmine/public/manual/stylesheets/help.css
deleted file mode 100644 (file)
index f67bc72..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* andreas08 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use in any way and for any purpose as long as the proper credits are given to the original designer. Version: 1.0, November 28, 2005 */\r
-\r
-/**************** Body and tag styles ****************/\r
-\r
-\r
-\r
-body{\r
-font:76% Verdana,Tahoma,Arial,sans-serif;\r
-line-height:1.4em;\r
-color:#303030;\r
-margin: 20px;\r
-}\r
-\r
-a{\r
-color:#467aa7;\r
-font-weight:bold;\r
-text-decoration:none;\r
-background-color:inherit;\r
-}\r
-\r
-a:hover{color:#2a5a8a; text-decoration:none; background-color:inherit;}\r
-a img{border:none;}\r
-\r
-p{padding:0 0 0.2em 0;}\r
-p form{margin-top:0; margin-bottom:20px;}\r
-\r
-h1 {\r
-display:block;\r
-\r
-font-size:1.7em;\r
-font-weight:normal;\r
-letter-spacing:-1px;\r
-color:#505050;\r
-background-color:inherit;\r
-}\r
-\r
-h2 {\r
-display:block;\r
-margin: 30px 0 0 0;\r
-font-size:1.5em;\r
-font-weight:normal;\r
-letter-spacing:-1px;\r
-color:#505050;\r
-background-color:inherit;\r
-}\r
-\r
-hr { border:0px; border-bottom:1px dashed #000000; }\r
-\r
-\r
-/**************** Misc classes and styles ****************/\r
-\r
-.splitcontentleft{float:left; width:49%;}\r
-.splitcontentright{float:right; width:49%;}\r
-.clear{clear:both;}\r
-.small{font-size:0.8em;line-height:1.4em;padding:0 0 0 0;}\r
-.hide{display:none;}\r
-.textcenter{text-align:center;}\r
-.textright{text-align:right;}\r
-.important{color:#f02025; background-color:inherit; }\r
-\r
-.box{\r
-margin:0 0 20px 0;\r
-padding:10px;\r
-border:1px solid #c0c0c0;\r
-background-color:#fafbfc;\r
-color:#505050;\r
-line-height:1.5em;\r
-}\r
-\r
-\r
index ac66105..43f2bac 100644 (file)
@@ -189,11 +189,20 @@ input.button-small
     font-size: 0.8em;\r
 }\r
 \r
+select.select-small \r
+{\r
+    font-size: 0.8em;\r
+}\r
+\r
 label {\r
        font-weight: bold;\r
        font-size: 1em;\r
 }\r
 \r
+fieldset {\r
+    border:1px solid #7F9DB9;\r
+}\r
+\r
 .required {\r
        color: #bb0000;\r
 }\r
@@ -220,10 +229,10 @@ tr.ListHead a {
        text-decoration:underline;\r
 }\r
 \r
-tr.ListLine0 {\r
+tr.odd {\r
        background-color: #C1E2F7;\r
 }\r
-tr.ListLine1 {\r
+tr.even {\r
        background-color:#CEE1ED;\r
 }\r
 \r
diff --git a/redmine/test/fixtures/attachments.yml b/redmine/test/fixtures/attachments.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/custom_fields.yml b/redmine/test/fixtures/custom_fields.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/documents.yml b/redmine/test/fixtures/documents.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/enumerations.yml b/redmine/test/fixtures/enumerations.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/issue_categories.yml b/redmine/test/fixtures/issue_categories.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/issue_custom_fields.yml b/redmine/test/fixtures/issue_custom_fields.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/issue_custom_values.yml b/redmine/test/fixtures/issue_custom_values.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/issue_histories.yml b/redmine/test/fixtures/issue_histories.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/issue_statuses.yml b/redmine/test/fixtures/issue_statuses.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/issues.yml b/redmine/test/fixtures/issues.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/mailer/issue_closed b/redmine/test/fixtures/mailer/issue_closed
deleted file mode 100644 (file)
index bb5e51d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Mailer#issue_closed
-
-Find me in app/views/mailer/issue_closed.rhtml
diff --git a/redmine/test/fixtures/members.yml b/redmine/test/fixtures/members.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/news.yml b/redmine/test/fixtures/news.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/permissions.yml b/redmine/test/fixtures/permissions.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
index 8794d28..0358c5f 100644 (file)
@@ -1,5 +1,26 @@
 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
+ecookbook:
   id: 1
-another:
+  name: eCookbook
+  descr: Recipes management application
+  homepage: http://ecookbook.somenet.foo/
+  projects_count: 1
+  created_on: 2005-01-01 01:00:00
+  updated_on: 2005-01-01 01:00:00
+onlinestore:
   id: 2
+  name: OnlineStore
+  descr: E-commerce web site
+  is_public: false
+  projects_count: 0
+  created_on: 2005-01-01 01:00:00
+  updated_on: 2005-01-01 01:00:00
+tracker:
+  id: 3
+  name: tracker
+  descr: bug tracker
+  is_public: true
+  projects_count: 0
+  parent_id: 1
+  created_on: 2005-01-01 01:00:00
+  updated_on: 2005-01-01 01:00:00
\ No newline at end of file
index 8794d28..ce67630 100644 (file)
@@ -1,5 +1,10 @@
 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
+manager:
   id: 1
-another:
+  name: manager
+developer:
   id: 2
+  name: developer
+reporter:
+  id: 3
+  name: reporter
diff --git a/redmine/test/fixtures/trackers.yml b/redmine/test/fixtures/trackers.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
index 8794d28..1d6ca5c 100644 (file)
@@ -1,5 +1,19 @@
 # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
+admin:
   id: 1
-another:
+  login: admin
+  firstname: admin
+  lastname: admin
+  mail: admin@somenet.foo
+  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997
+  admin: true
+  language: en
+paulochon:
   id: 2
+  login: plochon
+  firstname: Paul
+  lastname: Ochon
+  mail: plochon@somenet.foo
+  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997
+  admin: false
+  language: en
\ No newline at end of file
diff --git a/redmine/test/fixtures/versions.yml b/redmine/test/fixtures/versions.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/fixtures/workflow.yml b/redmine/test/fixtures/workflow.yml
deleted file mode 100644 (file)
index 8794d28..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-first:
-  id: 1
-another:
-  id: 2
diff --git a/redmine/test/functional/account_controller_test.rb b/redmine/test/functional/account_controller_test.rb
deleted file mode 100644 (file)
index 537eb8f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'account_controller'
-
-# Re-raise errors caught by the controller.
-class AccountController; def rescue_action(e) raise e end; end
-
-class AccountControllerTest < Test::Unit::TestCase
-  def setup
-    @controller = AccountController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/functional/admin_controller_test.rb b/redmine/test/functional/admin_controller_test.rb
deleted file mode 100644 (file)
index e44ac94..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'admin_controller'
-
-# Re-raise errors caught by the controller.
-class AdminController; def rescue_action(e) raise e end; end
-
-class AdminControllerTest < Test::Unit::TestCase
-  def setup
-    @controller = AdminController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/functional/custom_fields_controller_test.rb b/redmine/test/functional/custom_fields_controller_test.rb
deleted file mode 100644 (file)
index f86e325..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'custom_fields_controller'
-
-# Re-raise errors caught by the controller.
-class CustomFieldsController; def rescue_action(e) raise e end; end
-
-class CustomFieldsControllerTest < Test::Unit::TestCase
-  fixtures :custom_fields
-
-  def setup
-    @controller = CustomFieldsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:custom_fields)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:custom_field)
-    assert assigns(:custom_field).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:custom_field)
-  end
-
-  def test_create
-    num_custom_fields = CustomField.count
-
-    post :create, :custom_field => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_custom_fields + 1, CustomField.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:custom_field)
-    assert assigns(:custom_field).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil CustomField.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      CustomField.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/documents_controller_test.rb b/redmine/test/functional/documents_controller_test.rb
deleted file mode 100644 (file)
index c9bd463..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'documents_controller'
-
-# Re-raise errors caught by the controller.
-class DocumentsController; def rescue_action(e) raise e end; end
-
-class DocumentsControllerTest < Test::Unit::TestCase
-  fixtures :documents
-
-  def setup
-    @controller = DocumentsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:documents)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:document)
-    assert assigns(:document).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:document)
-  end
-
-  def test_create
-    num_documents = Document.count
-
-    post :create, :document => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_documents + 1, Document.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:document)
-    assert assigns(:document).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Document.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Document.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/enumerations_controller_test.rb b/redmine/test/functional/enumerations_controller_test.rb
deleted file mode 100644 (file)
index e9f4b76..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'enumerations_controller'
-
-# Re-raise errors caught by the controller.
-class EnumerationsController; def rescue_action(e) raise e end; end
-
-class EnumerationsControllerTest < Test::Unit::TestCase
-  fixtures :enumerations
-
-  def setup
-    @controller = EnumerationsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:enumerations)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:enumeration)
-    assert assigns(:enumeration).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:enumeration)
-  end
-
-  def test_create
-    num_enumerations = Enumeration.count
-
-    post :create, :enumeration => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_enumerations + 1, Enumeration.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:enumeration)
-    assert assigns(:enumeration).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Enumeration.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Enumeration.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/help_controller_test.rb b/redmine/test/functional/help_controller_test.rb
deleted file mode 100644 (file)
index 291838b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'help_controller'
-
-# Re-raise errors caught by the controller.
-class HelpController; def rescue_action(e) raise e end; end
-
-class HelpControllerTest < Test::Unit::TestCase
-  def setup
-    @controller = HelpController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/functional/issue_categories_controller_test.rb b/redmine/test/functional/issue_categories_controller_test.rb
deleted file mode 100644 (file)
index 4ea4e1c..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'issue_categories_controller'
-
-# Re-raise errors caught by the controller.
-class IssueCategoriesController; def rescue_action(e) raise e end; end
-
-class IssueCategoriesControllerTest < Test::Unit::TestCase
-  fixtures :issue_categories
-
-  def setup
-    @controller = IssueCategoriesController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:issue_categories)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:issue_category)
-    assert assigns(:issue_category).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:issue_category)
-  end
-
-  def test_create
-    num_issue_categories = IssueCategory.count
-
-    post :create, :issue_category => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_issue_categories + 1, IssueCategory.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:issue_category)
-    assert assigns(:issue_category).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil IssueCategory.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      IssueCategory.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/issue_statuses_controller_test.rb b/redmine/test/functional/issue_statuses_controller_test.rb
deleted file mode 100644 (file)
index 17f11ef..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'issue_statuses_controller'
-
-# Re-raise errors caught by the controller.
-class IssueStatusesController; def rescue_action(e) raise e end; end
-
-class IssueStatusesControllerTest < Test::Unit::TestCase
-  fixtures :issue_statuses
-
-  def setup
-    @controller = IssueStatusesController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:issue_statuses)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:issue_status)
-    assert assigns(:issue_status).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:issue_status)
-  end
-
-  def test_create
-    num_issue_statuses = IssueStatus.count
-
-    post :create, :issue_status => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_issue_statuses + 1, IssueStatus.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:issue_status)
-    assert assigns(:issue_status).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil IssueStatus.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      IssueStatus.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/issues_controller_test.rb b/redmine/test/functional/issues_controller_test.rb
deleted file mode 100644 (file)
index 1be41f8..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'issues_controller'
-
-# Re-raise errors caught by the controller.
-class IssuesController; def rescue_action(e) raise e end; end
-
-class IssuesControllerTest < Test::Unit::TestCase
-  fixtures :issues
-
-  def setup
-    @controller = IssuesController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:issues)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:issue)
-    assert assigns(:issue).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:issue)
-  end
-
-  def test_create
-    num_issues = Issue.count
-
-    post :create, :issue => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_issues + 1, Issue.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:issue)
-    assert assigns(:issue).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Issue.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Issue.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/members_controller_test.rb b/redmine/test/functional/members_controller_test.rb
deleted file mode 100644 (file)
index 5f47c35..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'members_controller'
-
-# Re-raise errors caught by the controller.
-class MembersController; def rescue_action(e) raise e end; end
-
-class MembersControllerTest < Test::Unit::TestCase
-  fixtures :members
-
-  def setup
-    @controller = MembersController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:members)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:member)
-    assert assigns(:member).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:member)
-  end
-
-  def test_create
-    num_members = Member.count
-
-    post :create, :member => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_members + 1, Member.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:member)
-    assert assigns(:member).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Member.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Member.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/news_controller_test.rb b/redmine/test/functional/news_controller_test.rb
deleted file mode 100644 (file)
index b360c6c..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'news_controller'
-
-# Re-raise errors caught by the controller.
-class NewsController; def rescue_action(e) raise e end; end
-
-class NewsControllerTest < Test::Unit::TestCase
-  fixtures :news
-
-  def setup
-    @controller = NewsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:news)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:news)
-    assert assigns(:news).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:news)
-  end
-
-  def test_create
-    num_news = News.count
-
-    post :create, :news => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_news + 1, News.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:news)
-    assert assigns(:news).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil News.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      News.find(1)
-    }
-  end
-end
index 8da34ec..23776ed 100644 (file)
@@ -1,3 +1,20 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 require File.dirname(__FILE__) + '/../test_helper'
 require 'projects_controller'
 
@@ -27,62 +44,4 @@ class ProjectsControllerTest < Test::Unit::TestCase
 
     assert_not_nil assigns(:projects)
   end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:project)
-    assert assigns(:project).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:project)
-  end
-
-  def test_create
-    num_projects = Project.count
-
-    post :create, :project => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_projects + 1, Project.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:project)
-    assert assigns(:project).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Project.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Project.find(1)
-    }
-  end
 end
diff --git a/redmine/test/functional/reports_controller_test.rb b/redmine/test/functional/reports_controller_test.rb
deleted file mode 100644 (file)
index 4b52ffa..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'reports_controller'
-
-# Re-raise errors caught by the controller.
-class ReportsController; def rescue_action(e) raise e end; end
-
-class ReportsControllerTest < Test::Unit::TestCase
-  def setup
-    @controller = ReportsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/functional/roles_controller_test.rb b/redmine/test/functional/roles_controller_test.rb
deleted file mode 100644 (file)
index 299aef2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'roles_controller'
-
-# Re-raise errors caught by the controller.
-class RolesController; def rescue_action(e) raise e end; end
-
-class RolesControllerTest < Test::Unit::TestCase
-  fixtures :roles
-
-  def setup
-    @controller = RolesController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:roles)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:role)
-    assert assigns(:role).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:role)
-  end
-
-  def test_create
-    num_roles = Role.count
-
-    post :create, :role => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_roles + 1, Role.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:role)
-    assert assigns(:role).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Role.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Role.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/trackers_controller_test.rb b/redmine/test/functional/trackers_controller_test.rb
deleted file mode 100644 (file)
index 75063c6..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'trackers_controller'
-
-# Re-raise errors caught by the controller.
-class TrackersController; def rescue_action(e) raise e end; end
-
-class TrackersControllerTest < Test::Unit::TestCase
-  fixtures :trackers
-
-  def setup
-    @controller = TrackersController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:trackers)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:tracker)
-    assert assigns(:tracker).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:tracker)
-  end
-
-  def test_create
-    num_trackers = Tracker.count
-
-    post :create, :tracker => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_trackers + 1, Tracker.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:tracker)
-    assert assigns(:tracker).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Tracker.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Tracker.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/users_controller_test.rb b/redmine/test/functional/users_controller_test.rb
deleted file mode 100644 (file)
index f1e2281..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'users_controller'
-
-# Re-raise errors caught by the controller.
-class UsersController; def rescue_action(e) raise e end; end
-
-class UsersControllerTest < Test::Unit::TestCase
-  fixtures :users
-
-  def setup
-    @controller = UsersController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:users)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:user)
-    assert assigns(:user).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:user)
-  end
-
-  def test_create
-    num_users = User.count
-
-    post :create, :user => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_users + 1, User.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:user)
-    assert assigns(:user).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil User.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      User.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/versions_controller_test.rb b/redmine/test/functional/versions_controller_test.rb
deleted file mode 100644 (file)
index 85b2ef7..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'versions_controller'
-
-# Re-raise errors caught by the controller.
-class VersionsController; def rescue_action(e) raise e end; end
-
-class VersionsControllerTest < Test::Unit::TestCase
-  fixtures :versions
-
-  def setup
-    @controller = VersionsController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  def test_index
-    get :index
-    assert_response :success
-    assert_template 'list'
-  end
-
-  def test_list
-    get :list
-
-    assert_response :success
-    assert_template 'list'
-
-    assert_not_nil assigns(:versions)
-  end
-
-  def test_show
-    get :show, :id => 1
-
-    assert_response :success
-    assert_template 'show'
-
-    assert_not_nil assigns(:version)
-    assert assigns(:version).valid?
-  end
-
-  def test_new
-    get :new
-
-    assert_response :success
-    assert_template 'new'
-
-    assert_not_nil assigns(:version)
-  end
-
-  def test_create
-    num_versions = Version.count
-
-    post :create, :version => {}
-
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_equal num_versions + 1, Version.count
-  end
-
-  def test_edit
-    get :edit, :id => 1
-
-    assert_response :success
-    assert_template 'edit'
-
-    assert_not_nil assigns(:version)
-    assert assigns(:version).valid?
-  end
-
-  def test_update
-    post :update, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'show', :id => 1
-  end
-
-  def test_destroy
-    assert_not_nil Version.find(1)
-
-    post :destroy, :id => 1
-    assert_response :redirect
-    assert_redirected_to :action => 'list'
-
-    assert_raise(ActiveRecord::RecordNotFound) {
-      Version.find(1)
-    }
-  end
-end
diff --git a/redmine/test/functional/welcome_controller_test.rb b/redmine/test/functional/welcome_controller_test.rb
deleted file mode 100644 (file)
index d773945..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'welcome_controller'
-
-# Re-raise errors caught by the controller.
-class WelcomeController; def rescue_action(e) raise e end; end
-
-class WelcomeControllerTest < Test::Unit::TestCase
-  def setup
-    @controller = WelcomeController.new
-    @request    = ActionController::TestRequest.new
-    @response   = ActionController::TestResponse.new
-  end
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/integration/account_test.rb b/redmine/test/integration/account_test.rb
new file mode 100644 (file)
index 0000000..7652d4a
--- /dev/null
@@ -0,0 +1,76 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require "#{File.dirname(__FILE__)}/../test_helper"
+
+class AccountTest < ActionController::IntegrationTest
+  fixtures :users
+
+  # Replace this with your real tests.
+  def test_login
+    get "account/my_page"
+    assert_redirected_to "account/login"
+    log_user('plochon', 'admin')
+    
+    get "account/my_account"
+    assert_response :success
+    assert_template "account/my_account"    
+  end
+  
+  def test_change_password
+    log_user('plochon', 'admin')
+    get "account/my_account"
+    assert_response :success
+    assert_template "account/my_account" 
+    
+    post "account/change_password", :password => 'admin', :new_password => "hello", :new_password_confirmation => "hello2"
+    assert_response :success
+    assert_tag :tag => "div", :attributes => { :class => "errorExplanation" }
+    
+    post "account/change_password", :password => 'admiN', :new_password => "hello", :new_password_confirmation => "hello"
+    assert_response :success
+    assert_equal 'Wrong password', flash[:notice]
+    
+    post "account/change_password", :password => 'admin', :new_password => "hello", :new_password_confirmation => "hello"
+    assert_response :success
+    log_user('plochon', 'hello')    
+  end
+  
+  def test_my_account
+    log_user('plochon', 'admin')
+    get "account/my_account"
+    assert_response :success
+    assert_template "account/my_account" 
+    
+    post "account/my_account", :user => {:firstname => "Joe", :login => "root", :admin => 1}
+    assert_response :success
+    assert_template "account/my_account" 
+    user = User.find(2)
+    assert_equal "Joe", user.firstname
+    assert_equal "plochon", user.login
+    assert_equal false, user.admin?
+    
+    log_user('plochon', 'admin')    
+  end
+  
+  def test_my_page
+    log_user('plochon', 'admin')
+    get "account/my_page"
+    assert_response :success
+    assert_template "account/my_page"
+  end
+end
diff --git a/redmine/test/integration/admin_test.rb b/redmine/test/integration/admin_test.rb
new file mode 100644 (file)
index 0000000..3b01d28
--- /dev/null
@@ -0,0 +1,61 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require "#{File.dirname(__FILE__)}/../test_helper"
+
+class AdminTest < ActionController::IntegrationTest
+  fixtures :users
+
+  def test_add_user
+    log_user("admin", "admin")
+    get "/users/add"
+    assert_response :success
+    assert_template "users/add"
+    post "/users/add", :user => { :login => "jsmith", :firstname => "John", :lastname => "Smith", :mail => "jsmith@somenet.foo", :language => "en" }, :password => "jsmith09", :password_confirmation => "jsmith09"
+    assert_redirected_to "users/list"
+    
+    user = User.find_by_login("jsmith")
+    assert_kind_of User, user
+    logged_user = User.try_to_login("jsmith", "jsmith09")
+    assert_kind_of User, logged_user
+    assert_equal "John", logged_user.firstname
+    
+    post "users/edit", :id => user.id, :user => { :locked => 1 }
+    assert_redirected_to "users/list"
+    locked_user = User.try_to_login("jsmith", "jsmith09")
+    assert_equal nil, locked_user
+  end
+  
+  def test_add_project
+    log_user("admin", "admin")
+    get "projects/add"
+    assert_response :success
+    assert_template "projects/add"
+    post "projects/add", :project => { :name => "blog", :descr => "weblog", :is_public => 1}
+    assert_redirected_to "admin/projects"
+    assert_equal 'Project was successfully created.', flash[:notice]
+    
+    project = Project.find_by_name("blog")
+    assert_kind_of Project, project
+    assert_equal "weblog", project.descr 
+    assert_equal true, project.is_public?
+    
+    get "admin/projects"
+    assert_response :success
+    assert_template "admin/projects"
+  end  
+end
index a299c7f..edc7c5c 100644 (file)
@@ -1,4 +1,21 @@
-ENV["RAILS_ENV"] = "test"
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ENV["RAILS_ENV"] ||= "test"
 require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
 require 'test_help'
 
@@ -25,4 +42,14 @@ class Test::Unit::TestCase
   self.use_instantiated_fixtures  = false
 
   # Add more helper methods to be used by all tests here...
+  
+  def log_user(login, password)
+    get "/account/login"
+    assert_equal nil, session[:user]
+    assert_response :success
+    assert_template "account/login"
+    post "/account/login", :login => login, :password => password
+    assert_redirected_to "account/my_page"
+    assert_equal login, session[:user].login
+  end
 end
diff --git a/redmine/test/unit/attachment_test.rb b/redmine/test/unit/attachment_test.rb
deleted file mode 100644 (file)
index 6f66833..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class AttachmentTest < Test::Unit::TestCase
-  fixtures :attachments
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/unit/custom_field_test.rb b/redmine/test/unit/custom_field_test.rb
deleted file mode 100644 (file)
index 886bd51..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class CustomFieldTest < Test::Unit::TestCase
-  fixtures :custom_fields
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of CustomField, custom_fields(:first)
-  end
-end
diff --git a/redmine/test/unit/document_test.rb b/redmine/test/unit/document_test.rb
deleted file mode 100644 (file)
index acd96dd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class DocumentTest < Test::Unit::TestCase
-  fixtures :documents
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/unit/enumeration_test.rb b/redmine/test/unit/enumeration_test.rb
deleted file mode 100644 (file)
index ea8c014..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class EnumerationTest < Test::Unit::TestCase
-  fixtures :enumerations
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/unit/issue_category_test.rb b/redmine/test/unit/issue_category_test.rb
deleted file mode 100644 (file)
index 6f5051b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class IssueCategoryTest < Test::Unit::TestCase
-  fixtures :issue_categories
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/unit/issue_custom_field_test.rb b/redmine/test/unit/issue_custom_field_test.rb
deleted file mode 100644 (file)
index 2adee10..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class IssueCustomFieldTest < Test::Unit::TestCase
-  fixtures :issue_custom_fields
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of IssueCustomField, issue_custom_fields(:first)
-  end
-end
diff --git a/redmine/test/unit/issue_custom_value_test.rb b/redmine/test/unit/issue_custom_value_test.rb
deleted file mode 100644 (file)
index 09c0551..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class IssueCustomValueTest < Test::Unit::TestCase
-  fixtures :issue_custom_values
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
diff --git a/redmine/test/unit/issue_history_test.rb b/redmine/test/unit/issue_history_test.rb
deleted file mode 100644 (file)
index 3da38e7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class IssueHistoryTest < Test::Unit::TestCase
-  fixtures :issue_histories
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of IssueHistory, issue_histories(:first)
-  end
-end
diff --git a/redmine/test/unit/issue_status_test.rb b/redmine/test/unit/issue_status_test.rb
deleted file mode 100644 (file)
index 8e7c0b9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class IssueStatusTest < Test::Unit::TestCase
-  fixtures :issue_statuses
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of IssueStatus, issue_statuses(:first)
-  end
-end
diff --git a/redmine/test/unit/issue_test.rb b/redmine/test/unit/issue_test.rb
deleted file mode 100644 (file)
index 3b31877..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class IssueTest < Test::Unit::TestCase
-  fixtures :issues
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Issue, issues(:first)
-  end
-end
diff --git a/redmine/test/unit/mailer_test.rb b/redmine/test/unit/mailer_test.rb
deleted file mode 100644 (file)
index 70615d7..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'mailer'
-
-class MailerTest < Test::Unit::TestCase
-  FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures'
-  CHARSET = "utf-8"
-
-  include ActionMailer::Quoting
-
-  def setup
-    ActionMailer::Base.delivery_method = :test
-    ActionMailer::Base.perform_deliveries = true
-    ActionMailer::Base.deliveries = []
-
-    @expected = TMail::Mail.new
-    @expected.set_content_type "text", "plain", { "charset" => CHARSET }
-  end
-
-  def test_issue_closed
-    @expected.subject = 'Mailer#issue_closed'
-    @expected.body    = read_fixture('issue_closed')
-    @expected.date    = Time.now
-
-    assert_equal @expected.encoded, Mailer.create_issue_closed(@expected.date).encoded
-  end
-
-  private
-    def read_fixture(action)
-      IO.readlines("#{FIXTURES_PATH}/mailer/#{action}")
-    end
-
-    def encode(subject)
-      quoted_printable(subject, CHARSET)
-    end
-end
diff --git a/redmine/test/unit/member_test.rb b/redmine/test/unit/member_test.rb
deleted file mode 100644 (file)
index 443c096..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class MemberTest < Test::Unit::TestCase
-  fixtures :members
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Member, members(:first)
-  end
-end
diff --git a/redmine/test/unit/news_test.rb b/redmine/test/unit/news_test.rb
deleted file mode 100644 (file)
index db9b3ab..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class NewsTest < Test::Unit::TestCase
-  fixtures :news
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of News, news(:first)
-  end
-end
diff --git a/redmine/test/unit/packages_test.rb b/redmine/test/unit/packages_test.rb
deleted file mode 100644 (file)
index a5ebcdf..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class PackagesTest < Test::Unit::TestCase
-  fixtures :packages
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Packages, packages(:first)
-  end
-end
diff --git a/redmine/test/unit/permission_test.rb b/redmine/test/unit/permission_test.rb
deleted file mode 100644 (file)
index 306c2e6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class PermissionTest < Test::Unit::TestCase
-  fixtures :permissions
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Permission, permissions(:first)
-  end
-end
index 8a99125..9bafe9c 100644 (file)
@@ -1,10 +1,77 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 require File.dirname(__FILE__) + '/../test_helper'
 
 class ProjectTest < Test::Unit::TestCase
   fixtures :projects
 
-  # Replace this with your real tests.
+  def setup
+    @project = projects(:ecookbook)
+  end
+  
   def test_truth
-    assert_kind_of Project, projects(:first)
+    assert_kind_of Project, @project
+    assert_equal "eCookbook", @project.name
+  end
+  
+  def test_update
+    assert_equal "eCookbook", @project.name
+    @project.name = "eCook"
+    assert @project.save, @project.errors.full_messages.join("; ")
+    @project.reload
+    assert_equal "eCook", @project.name
+  end
+  
+  def test_validate
+    @project.name = ""
+    assert !@project.save
+    assert_equal 1, @project.errors.count
+    assert_equal "can't be blank", @project.errors.on(:name)
+  end
+  
+  def test_public_projects
+    public_projects = Project.find(:all, :conditions => ["is_public=?", true])
+    assert_equal 2, public_projects.length
+    assert_equal true, public_projects[0].is_public?
+  end
+  
+  def test_destroy
+    @project.destroy
+    assert_raise(ActiveRecord::RecordNotFound) { Project.find(@project.id) }
+  end
+  
+  def test_subproject_ok
+    sub = Project.find(2)
+    sub.parent = Project.find(1)
+    assert sub.save
+    assert_equal 1, sub.parent.id
+    assert_equal 2, Project.find(1).projects_count
+  end
+  
+  def test_subproject_invalid
+    sub = Project.find(2)
+    sub.parent = projects(:tracker)
+    assert !sub.save
+  end
+  
+  def test_subproject_invalid_2
+    sub = Project.find(1)
+    sub.parent = projects(:onlinestore)
+    assert !sub.save
   end
 end
diff --git a/redmine/test/unit/role_test.rb b/redmine/test/unit/role_test.rb
deleted file mode 100644 (file)
index 90565ae..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class RoleTest < Test::Unit::TestCase
-  fixtures :roles
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Role, roles(:first)
-  end
-end
diff --git a/redmine/test/unit/tracker_test.rb b/redmine/test/unit/tracker_test.rb
deleted file mode 100644 (file)
index f738f28..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class TrackerTest < Test::Unit::TestCase
-  fixtures :trackers
-
-  # Replace this with your real tests.
-  def test_truth
-    assert true
-  end
-end
index d6a2a22..df255ae 100644 (file)
@@ -1,10 +1,64 @@
+# redMine - project management software
+# Copyright (C) 2006  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
 require File.dirname(__FILE__) + '/../test_helper'
 
 class UserTest < Test::Unit::TestCase
   fixtures :users
 
-  # Replace this with your real tests.
   def test_truth
-    assert_kind_of User, users(:first)
+    assert_kind_of User, users(:paulochon)
+  end
+  
+  def test_update
+    user = User.find(1)
+    assert_equal "admin", user.login
+    user.login = "john"
+    assert user.save, user.errors.full_messages.join("; ")
+    user.reload
+    assert_equal "john", user.login
+  end
+  
+  def test_validate
+    user = User.find(1)
+    user.login = ""
+    assert !user.save
+    assert_equal 2, user.errors.count
+  end
+  
+  def test_password
+    user = User.try_to_login("admin", "admin")
+    assert_kind_of User, user
+    assert_equal "admin", user.login
+    user.password = "hello"
+    assert user.save
+    
+    user = User.try_to_login("admin", "hello")
+    assert_kind_of User, user
+    assert_equal "admin", user.login
+    assert_equal User.hash_password("hello"), user.hashed_password    
+  end
+  
+  def test_lock
+    user = User.find(1)
+    user.locked = true
+    assert user.save
+    
+    user = User.try_to_login("admin", "admin")
+    assert_equal nil, user  
   end
 end
diff --git a/redmine/test/unit/version_test.rb b/redmine/test/unit/version_test.rb
deleted file mode 100644 (file)
index 91c52d4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class VersionTest < Test::Unit::TestCase
-  fixtures :versions
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Version, versions(:first)
-  end
-end
diff --git a/redmine/test/unit/workflow_test.rb b/redmine/test/unit/workflow_test.rb
deleted file mode 100644 (file)
index ff88a97..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class WorkflowTest < Test::Unit::TestCase
-  fixtures :workflows
-
-  # Replace this with your real tests.
-  def test_truth
-    assert_kind_of Workflow, workflows(:first)
-  end
-end