diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..47c6d2439
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,25 @@
+.bundle
+.rvmrc
+nbproject
+db/*.sqlite3
+log/*.log*
+log/*.lck
+tmp/*
+.sass-cache/
+config/database.yml
+.DS_Store
+public/assets/sources_manifest.yml
+public/assets/
+public/system/
+public/form_templates/
+public/javascript/cache
+dump.rdb
+.idea/
+*.swp
+*.orig
+*_clean.csv
+*.log
+*.sql.backup
+.~lock*
+coverage/
+
diff --git a/.ruby-version b/.ruby-version
new file mode 100644
index 000000000..c82eec79e
--- /dev/null
+++ b/.ruby-version
@@ -0,0 +1 @@
+1.9.3-p448
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..57476cae3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,18 @@
+before_script:
+ - sh -e /etc/init.d/xvfb start
+ - export DISPLAY=:99.0
+bundler_args: --without development production --quiet
+branches:
+ only:
+ - master
+script:
+ - RAILS_ENV=test bundle exec rake db:create db:migrate --trace
+ - bundle exec rake spec
+before_script:
+ - gem update --system 1.8.25
+ - cp config/database.travis.yml config/database.yml
+addons:
+ code_climate:
+ repo_token: 025bcf02e070a831bd107a2cd72bb110c6086ee114560a8cfcb128d0ccc7bae0
+rvm:
+ - 1.9.3
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 000000000..d10f19cbe
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,36 @@
+source 'http://rubygems.org'
+
+gem 'rails', '2.3.18'
+gem 'i18n'
+
+gem 'delayed_job', '2.0.8'
+gem 'mysql'
+gem 'in_place_editing'
+gem 'nokogiri'
+
+group :development, :test do
+ gem 'debugger'
+ gem 'rspec-rails', '1.3.4'
+end
+
+group :test do
+ gem 'codeclimate-test-reporter', :require => nil
+ gem 'factory_girl'
+ gem 'test-unit', '1.2.3'
+ gem 'shoulda-matchers'
+ gem 'database_cleaner'
+ gem 'webrat'
+ gem 'simplecov', :require => false
+ gem 'mocha', '0.12.8'
+ gem 'rspec-multi-mock', '0.1.0'
+end
+
+gem 'will_paginate', '2.3.16'
+gem 'paperclip', '2.7.5'
+gem 'wicked_pdf', '0.7.0'
+gem 'xss_terminate'
+gem 'translator', '1.0.0'
+gem 'declarative_authorization'
+gem 'searchlogic', '2.5.8'
+gem 'calendar_date_select', '1.16.1'
+gem 'has_and_belongs_to_many_with_deferred_save', '0.2.0'
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 000000000..d122ab4c6
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,123 @@
+GEM
+ remote: http://rubygems.org/
+ specs:
+ actionmailer (2.3.18)
+ actionpack (= 2.3.18)
+ actionpack (2.3.18)
+ activesupport (= 2.3.18)
+ rack (~> 1.1.0)
+ activerecord (2.3.18)
+ activesupport (= 2.3.18)
+ activeresource (2.3.18)
+ activesupport (= 2.3.18)
+ activesupport (2.3.18)
+ calendar_date_select (1.16.1)
+ chardet (0.9.0)
+ cocaine (0.3.2)
+ codeclimate-test-reporter (0.0.9)
+ simplecov (>= 0.7.1, < 1.0.0)
+ columnize (0.3.6)
+ daemons (1.0.10)
+ database_cleaner (1.1.1)
+ debugger (1.6.1)
+ columnize (>= 0.3.1)
+ debugger-linecache (~> 1.2.0)
+ debugger-ruby_core_source (~> 1.2.3)
+ debugger-linecache (1.2.0)
+ debugger-ruby_core_source (1.2.3)
+ declarative_authorization (0.5.7)
+ delayed_job (2.0.8)
+ activesupport (~> 2.0)
+ daemons (= 1.0.10)
+ factory_girl (2.6.4)
+ activesupport (>= 2.3.9)
+ has_and_belongs_to_many_with_deferred_save (0.2.0)
+ activerecord
+ hoe (3.7.1)
+ rake (>= 0.8, < 11.0)
+ html5 (0.10.0)
+ chardet (>= 0.9.0)
+ hoe (>= 1.2.0)
+ i18n (0.6.5)
+ in_place_editing (1.2.0)
+ metaclass (0.0.1)
+ mime-types (1.25)
+ mini_portile (0.5.1)
+ mocha (0.12.8)
+ metaclass (~> 0.0.1)
+ multi_json (1.8.0)
+ mysql (2.9.1)
+ nokogiri (1.6.0)
+ mini_portile (~> 0.5.0)
+ paperclip (2.7.5)
+ activerecord (>= 2.3.0)
+ activesupport (>= 2.3.2)
+ cocaine (~> 0.3.0)
+ mime-types
+ rack (1.1.6)
+ rack-test (0.6.2)
+ rack (>= 1.0)
+ rails (2.3.18)
+ actionmailer (= 2.3.18)
+ actionpack (= 2.3.18)
+ activerecord (= 2.3.18)
+ activeresource (= 2.3.18)
+ activesupport (= 2.3.18)
+ rake (>= 0.8.3)
+ rake (10.1.0)
+ rspec (1.3.1)
+ rspec-multi-mock (0.1.0)
+ rspec (= 1.3.1)
+ rspec-rails (1.3.4)
+ rack (>= 1.0.0)
+ rspec (~> 1.3.1)
+ searchlogic (2.5.8)
+ activerecord (~> 2.3.12)
+ activerecord (~> 2.3.12)
+ shoulda-matchers (1.0.0)
+ simplecov (0.7.1)
+ multi_json (~> 1.0)
+ simplecov-html (~> 0.7.1)
+ simplecov-html (0.7.1)
+ test-unit (1.2.3)
+ hoe (>= 1.5.1)
+ translator (1.0.0)
+ webrat (0.7.3)
+ nokogiri (>= 1.2.0)
+ rack (>= 1.0)
+ rack-test (>= 0.5.3)
+ wicked_pdf (0.7.0)
+ will_paginate (2.3.16)
+ xss_terminate (0.22)
+ html5 (>= 0.10.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ calendar_date_select (= 1.16.1)
+ codeclimate-test-reporter
+ database_cleaner
+ debugger
+ declarative_authorization
+ delayed_job (= 2.0.8)
+ factory_girl
+ has_and_belongs_to_many_with_deferred_save (= 0.2.0)
+ i18n
+ in_place_editing
+ mocha (= 0.12.8)
+ mysql
+ nokogiri
+ paperclip (= 2.7.5)
+ rails (= 2.3.18)
+ rspec-multi-mock (= 0.1.0)
+ rspec-rails (= 1.3.4)
+ searchlogic (= 2.5.8)
+ shoulda-matchers
+ simplecov
+ test-unit (= 1.2.3)
+ translator (= 1.0.0)
+ webrat
+ wicked_pdf (= 0.7.0)
+ will_paginate (= 2.3.16)
+ xss_terminate
diff --git a/README.markdown b/README.markdown
index 71d434b66..4638853fd 100755
--- a/README.markdown
+++ b/README.markdown
@@ -1,24 +1,115 @@
-#Fedena : Open source school management system
+# Fedena LTS: Open source school management system
-Project Fedena is the open source school management system based on Ruby on Rails. It is developed by a team of developers at Foradian Technologies. The project was made open source by Foradian, and is now maintained by the open source community. Fedena is the ideal solution for schools and campuses that want an easy means to manage all campus records.
+## The project is now DEAD. We failed to attract enough interests, plus there is strong competition from the official Fedena with their updated codebase.
-The Project Fedena website http://www.projectfedena.org/ is the home to the developer community behind Fedena project. There you can find forums and bug tracker for Fedena.
+[![Build Status](https://travis-ci.org/ruby-journal/fedena_lts.png?branch=master)](https://travis-ci.org/ruby-journal/fedena_lts)
-#Demo
+Project Fedena is the open source school management system based on Ruby on Rails. It is developed by a team of developers at Foradian Technologies.
+The project was made open source by Foradian, and is now maintained by the open source community. Fedena is the ideal solution for schools and campuses that want an easy means to manage all campus records.
+
+The Project Fedena website http://www.projectfedena.org/ is the home to the developer community behind Fedena project.
+
+# What is Fedena LTS edition?
+
+Fedena LTS is a fork of the fedena project, that provides:
+
+* Security fixes for Rails 2.3.x branch
+* Bundler support
+* TravisCI support
+* More test coverage
+* Refactor and cleanup codebase
+* Extended support for other DBs such as PostgreSQL
+* Support Ruby 1.9.x
+* Cease support for Ruby 1.8.x
+
+The main reasons behind the decision to fork are:
+
+* Main project repository is stagnated - no development nor patches since the early of 2013
+* Lack of effective communication with fedena team
+* Lack of test coverages, which makes fedena prone to regressions for modification and updation
+
+# Is Fedora LTS free?
+
+Yes, it is. All fixes will be available to commercial support customers first. We'll release these
+patches for public after 3 months. We hope for your understanding as we try to cover the costs
+to support this legacy product.
+
+# Commercial Support
+
+There are many customers who are planning to move away from fedena platform due to lack of update from the official project. Yet some could
+not afford other alternative solutions due to costs and other reasons. For this very reason, we'd like to announce commercial support plan for Fedena/Fedena Pro.
+
+With the commercial support plan, you would get:
+
+* Latest security patches and fixes to current Fedena 2.3 codebase
+* Customer Email support (with 24 hours latest reply)
+* Customer Chat support
+* More test coverages for fedena codebase, increase production quality and Rails 4 upgrade ready (see Project Athena)
+* 3 days development fixes
+
+For more information, please contact our support at: trung.le@ruby-journal.com
+
+# Project Athena
+
+Your investment to Fedena is very important to your business. We understand and believe that Fedena should not impede the growth of your business. Sadly the clunky and obsolete Fedena makes it hard us for us, developers and you to achieve that goal. Hence, we decided to take a bold decision by starting a new project from scratch. Learning from your valuable feedbacks and combining with the state of the art Lotus Framework, we are ambitious to bring you the best product of the industry.
+
+What would you expect with this new product?
+
+* Lotus Framework based
+* 1st class microservice architecture
+* Ruby 2.0.0 or newer support
+* Support PostgresSQL, MySQL, Redis and MongoDB
+* ~300% performance increase
+* Cloud Deployment - Heroku, EngineYard, OpenShift
+* New plugin engine infrastructure
+* Extensive customer product support for upgrade from Fedena 2.3 or Fedena LTS
+* Responsive CSS - support mobile, tablet and desktop
+
+Previously, we aimed to rewrite in Rails 4. After 6 months in development, we failed to achieve the objectives due to financial problems and technical shortages. It was a tough time for our company and we apologize to our customers who have been patiently waiting for the good news. In July 2014, we successfully secured a first round funding from a private investor, enough for us to restart the project. This time we'll take a new approach by moving away from Rails 4 and toward Lotus Framework. We truly believe the simplicty yet superiosity over Rails would be the game changer for your business. For more details, please do not hesitate to contact us.
+
+# Demo
A demo website for Fedena has been set up at demo.projectfedena.org. You can log in with following usernames and passwords:
* As admin -- username - admin, password - admin123
* As student -- username - 1, password - 1123
* As employee -- username - E1, password - E1123
-#License
+On localhost, after running ```rake db:seed```, you can login as admin with:
+
+ * username - Admin, password - password
+
+# License
+Fedena LTS is released under the Apache License 2.0.
Fedena is released under the Apache License 2.0.
-#Installation
+# Installation
+
+RubyGems has deprecated `Gem::SourceIndex#search` after 2011-11-01. Thus Slimgems should be installed instead to maintain compatability.
+
+```
+gem install slimgems
+```
+
+Bootstraping with:
+
+```
+bundle install
+bundle exec rake db:create db:migrate
+bundle exec rake db:seed
+./scipt/server
+```
+
+# Test
+
+```
+RAILS_ENV=test bundle exec rake db:create db:migrate
+bundle exec rake spec
+```
-Visit http://projectfedena.org/install for detailed installation instruction.
+to run individual test, do:
-#Community Support:
+```
+./script/spec spec/models/abc_spec.rb
+```
-Visit www.projectfedena.org for community support.
diff --git a/Rakefile b/Rakefile
index 3bb0e8592..4711a9575 100755
--- a/Rakefile
+++ b/Rakefile
@@ -5,6 +5,4 @@ require(File.join(File.dirname(__FILE__), 'config', 'boot'))
require 'rake'
require 'rake/testtask'
-require 'rake/rdoctask'
-
require 'tasks/rails'
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 697896a30..9a8458fda 100755
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,27 +1,26 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ApplicationController < ActionController::Base
helper :all
helper_method :can_access_request?
protect_from_forgery # :secret => '434571160a81b5595319c859d32060c1'
filter_parameter_logging :password
-
+
before_filter { |c| Authorization.current_user = c.current_user }
before_filter :message_user
before_filter :set_user_language
@@ -36,7 +35,7 @@ def login_check
unless (controller_name == "user") and ["first_login_change_password","login","logout","forgot_password"].include? action_name
user = User.active.find(session[:user_id])
setting = Configuration.get_config_value('FirstTimeLoginEnable')
- if setting == "1" and user.is_first_login != false
+ if setting == "1" and user.is_first_login?
flash[:notice] = "#{t('first_login_attempt')}"
redirect_to :controller => "user",:action => "first_login_change_password",:id => user.username
end
@@ -97,7 +96,7 @@ def set_language
end
end
-
+
def only_assigned_employee_allowed
@privilege = @current_user.privileges.map{|p| p.name}
if @current_user.employee?
@@ -134,7 +133,7 @@ def block_unauthorised_entry
end
end
end
-
+
def initialize
@title = FedenaSetting.company_details[:company_name]
end
@@ -147,7 +146,7 @@ def current_user
User.active.find(session[:user_id]) unless session[:user_id].nil?
end
-
+
def find_finance_managers
Privilege.find_by_name('FinanceControl').users
end
@@ -156,7 +155,7 @@ def permission_denied
flash[:notice] = "#{t('flash_msg4')}"
redirect_to :controller => 'user', :action => 'dashboard'
end
-
+
protected
def login_required
unless session[:user_id]
@@ -179,7 +178,7 @@ def configuration_settings_for_hr
end
end
-
+
def configuration_settings_for_finance
finance = Configuration.find_by_config_value("Finance")
@@ -213,7 +212,7 @@ def protect_user_data
end
end
end
-
+
def limit_employee_profile_access
unless @current_user.employee
unless params[:id] == @current_user.employee_record.id
@@ -229,7 +228,7 @@ def limit_employee_profile_access
def protect_other_employee_data
if current_user.employee?
employee = current_user.employee_record
- # pri = Privilege.find(:all,:select => "privilege_id",:conditions=> 'privileges_users.user_id = ' + current_user.id.to_s, :joins =>'INNER JOIN `privileges_users` ON `privileges`.id = `privileges_users`.privilege_id' )
+ # pri = Privilege.find(:all,:select => "privilege_id",:conditions=> 'privileges_users.user_id = ' + current_user.id.to_s, :joins =>'INNER JOIN privileges_users ON privileges.id = privileges_users.privilege_id' )
# privilege =[]
# pri.each do |p|
# privilege.push p.privilege_id
@@ -343,12 +342,13 @@ def can_access_request? (action,controller)
end
private
+
def set_user_language
lan = Configuration.find_by_config_key("Locale")
I18n.default_locale = :en
Translator.fallback(true)
if session[:language].nil?
- I18n.locale = lan.config_value
+ I18n.locale = lan.config_value if lan
else
I18n.locale = session[:language]
end
diff --git a/app/controllers/archived_employee_controller.rb b/app/controllers/archived_employee_controller.rb
index dfcbbbb66..d93d6bffa 100755
--- a/app/controllers/archived_employee_controller.rb
+++ b/app/controllers/archived_employee_controller.rb
@@ -1,33 +1,32 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedEmployeeController < ApplicationController
before_filter :login_required,:configuration_settings_for_hr
filter_access_to :all
# prawnto :prawn => {:left_margin => 25, :right_margin => 25}
-
+
def profile
@current_user = current_user
@employee = ArchivedEmployee.find(params[:id])
- @new_reminder_count = Reminder.find_all_by_recipient(@current_user.id, :conditions=>"is_read = false")
+ @new_reminder_count = Reminder.find_all_by_recipient(@current_user.id, :conditions=>{:is_read => false})
@gender = "Male"
@gender = "Female" if @employee.gender == "f"
@status = "Active"
@@ -121,11 +120,11 @@ def profile_pdf
@office_country = Country.find(@employee.office_country_id).name unless @employee.office_country_id.nil?
@bank_details = ArchivedEmployeeBankDetail.find_all_by_employee_id(@employee.id)
@additional_details = ArchivedEmployeeAdditionalDetail.find_all_by_employee_id(@employee.id)
-
+
render :pdf => 'profile_pdf'
-
-
+
+
end
def show
diff --git a/app/controllers/archived_student_controller.rb b/app/controllers/archived_student_controller.rb
index 65e573a4f..7a2447246 100755
--- a/app/controllers/archived_student_controller.rb
+++ b/app/controllers/archived_student_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedStudentController < ApplicationController
filter_access_to :all
before_filter :login_required
@@ -23,7 +22,7 @@ class ArchivedStudentController < ApplicationController
def profile
@current_user = current_user
@archived_student = ArchivedStudent.find(params[:id])
- @additional_fields = StudentAdditionalField.all(:conditions=>"status = true")
+ @additional_fields = StudentAdditionalField.all(:conditions=>{:status => true})
end
def show
@@ -36,7 +35,7 @@ def show
def guardians
@archived_student = ArchivedStudent.find(params[:id])
- @parents = ArchivedGuardian.find(:all, :conditions=>"ward_id = #{@archived_student.id}")
+ @parents = ArchivedGuardian.find(:all, :conditions=>{:ward_id => @archived_student.id})
end
@@ -51,7 +50,7 @@ def reports
@student= ArchivedStudent.find params[:id]
@batch = @student.batch
@grouped_exams = GroupedExam.find_all_by_batch_id(@batch.id)
- @normal_subjects = Subject.find_all_by_batch_id(@batch.id,:conditions=>"no_exams = false AND elective_group_id IS NULL AND is_deleted = false")
+ @normal_subjects = Subject.find_all_by_batch_id(@batch.id,:conditions=> {:no_exams => false, :elective_group_id => nil, :is_deleted => false})
@student_electives = StudentsSubject.find_all_by_student_id(@student.former_id,:conditions=>{:batch_id=>@batch.id})
@elective_subjects = []
@student_electives.each do |e|
@@ -59,7 +58,7 @@ def reports
end
@subjects = @normal_subjects+@elective_subjects
@exam_groups = @batch.exam_groups
- @exam_groups.reject!{|e| e.result_published==false}
+ @exam_groups.reject!{|e| !e.result_published? }
@old_batches = @student.all_batches
end
@@ -88,8 +87,8 @@ def academic_report
else
@exam_groups = ExamGroup.find_all_by_batch_id(@batch.id)
end
- general_subjects = Subject.find_all_by_batch_id(@batch.id, :conditions=>"elective_group_id IS NULL and is_deleted=false")
- student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>"batch_id = #{@batch.id}")
+ general_subjects = Subject.find_all_by_batch_id(@batch.id, :conditions=>{:elective_group_id=>nil, :is_deleted=>false})
+ student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=> {:batch_id=>@batch.id})
elective_subjects = []
student_electives.each do |elect|
elective_subjects.push Subject.find(elect.subject_id)
@@ -101,9 +100,9 @@ def student_report
@config = Configuration.find_by_config_key('StudentAttendanceType')
@student = ArchivedStudent.find(params[:id])
@batch = Batch.find(params[:year])
- @start_date = @batch.start_date.to_date
- if @student.created_at.to_date > @batch.end_date.to_date
- @end_date = @batch.end_date.to_date
+ @start_date = @batch.started_on
+ if @student.created_at.to_date > @batch.ended_on
+ @end_date = @batch.ended_on
else
@end_date = @student.created_at.to_date
end
@@ -134,8 +133,8 @@ def generated_report
@exam_group = ExamGroup.find(params[:exam_report][:exam_group_id])
@batch = @exam_group.batch
@student = @batch.students.first
- general_subjects = Subject.find_all_by_batch_id(@batch.id, :conditions=>"elective_group_id IS NULL")
- student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>"batch_id = #{@batch.id}")
+ general_subjects = Subject.find_all_by_batch_id(@batch.id, :conditions=>{:elective_group_id => nil})
+ student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>{:batch_id => @batch.id})
elective_subjects = []
student_electives.each do |elect|
elective_subjects.push Subject.find(elect.subject_id)
@@ -153,8 +152,8 @@ def generated_report
@student = ArchivedStudent.find(params[:student])
@student.id=@student.former_id
@batch = @student.batch
- general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>"elective_group_id IS NULL")
- student_electives = StudentsSubject.find_all_by_student_id(@student.former_id,:conditions=>"batch_id = #{@student.batch.id}")
+ general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>{:elective_group_id => nil})
+ student_electives = StudentsSubject.find_all_by_student_id(@student.former_id,:conditions=>{:batch_id => @student.batch.id})
elective_subjects = []
student_electives.each do |elect|
elective_subjects.push Subject.find(elect.subject_id)
@@ -176,8 +175,8 @@ def generated_report_pdf
@student = ArchivedStudent.find_by_former_id(params[:student])
@student.id = @student.former_id
@batch = @student.batch
- general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>"elective_group_id IS NULL")
- student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>"batch_id = #{@student.batch.id}")
+ general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>{:elective_group_id => nil})
+ student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>{:batch_id => @student.batch.id})
elective_subjects = []
student_electives.each do |elect|
elective_subjects.push Subject.find(elect.subject_id)
@@ -189,7 +188,7 @@ def generated_report_pdf
@exams.push exam unless exam.nil?
end
render :pdf => 'generated_report_pdf'
-
+
# respond_to do |format|
# format.pdf { render :layout => false }
# end
@@ -232,8 +231,8 @@ def generated_report4
@exam_groups = ExamGroup.find_all_by_batch_id(@batch.id)
@exam_groups.reject!{|e| e.result_published==false}
end
- general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>"elective_group_id IS NULL AND is_deleted=false")
- student_electives = StudentsSubject.find_all_by_student_id(@student.former_id,:conditions=>"batch_id = #{@student.batch.id}")
+ general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>{:elective_group_id => nil, :is_deleted => false})
+ student_electives = StudentsSubject.find_all_by_student_id(@student.former_id,:conditions=>{:batch_id => @student.batch.id})
elective_subjects = []
student_electives.each do |elect|
elective_subjects.push Subject.find(elect.subject_id)
@@ -243,7 +242,7 @@ def generated_report4
end
-
+
def generated_report4_pdf
#grouped-exam-report-for-batch
@@ -261,8 +260,8 @@ def generated_report4_pdf
@exam_groups = ExamGroup.find_all_by_batch_id(@batch.id)
@exam_groups.reject!{|e| e.result_published==false}
end
- general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>"elective_group_id IS NULL")
- student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>"batch_id = #{@student.batch.id}")
+ general_subjects = Subject.find_all_by_batch_id(@student.batch.id, :conditions=>{:elective_group_id => nil})
+ student_electives = StudentsSubject.find_all_by_student_id(@student.id,:conditions=>{:batch_id => @student.batch.id})
elective_subjects = []
student_electives.each do |elect|
elective_subjects.push Subject.find(elect.subject_id)
@@ -285,7 +284,7 @@ def graph_for_generated_report
student.id=student.former_id
examgroup = ExamGroup.find(params[:examgroup])
batch = student.batch
- general_subjects = Subject.find_all_by_batch_id(batch.id, :conditions=>"elective_group_id IS NULL")
+ general_subjects = Subject.find_all_by_batch_id(batch.id, :conditions=>{:elective_group_id => nil})
student_electives = StudentsSubject.find_all_by_student_id(student.id,:conditions=>"batch_id = #{batch.id}")
elective_subjects = []
student_electives.each do |elect|
@@ -307,7 +306,7 @@ def graph_for_generated_report
end
end
- bargraph = BarFilled.new()
+ bargraph = BarFilled.new
bargraph.width = 1;
bargraph.colour = '#bb0000';
bargraph.dot_size = 5;
@@ -408,7 +407,7 @@ def graph_for_previous_years_marks_overview
student.all_batches.each do |b|
x_labels << b.name
- exam = ArchivedExamScore.new()
+ exam = ArchivedExamScore.new
data << exam.batch_wise_aggregate(student,b)
end
diff --git a/app/controllers/assessment_scores_controller.rb b/app/controllers/assessment_scores_controller.rb
index 8a1470444..ead2e604f 100644
--- a/app/controllers/assessment_scores_controller.rb
+++ b/app/controllers/assessment_scores_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AssessmentScoresController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/assessment_tools_controller.rb b/app/controllers/assessment_tools_controller.rb
index c31b7970b..65ece4bf2 100644
--- a/app/controllers/assessment_tools_controller.rb
+++ b/app/controllers/assessment_tools_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AssessmentToolsController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/attendance_reports_controller.rb b/app/controllers/attendance_reports_controller.rb
index e5c831fab..306293e6d 100755
--- a/app/controllers/attendance_reports_controller.rb
+++ b/app/controllers/attendance_reports_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AttendanceReportsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -42,7 +41,7 @@ def subject
if @current_user.employee? and @allow_access ==true
role_symb = @current_user.role_symbols
if role_symb.include?(:student_attendance_view) or role_symb.include?(:student_attendance_register)
- @subjects= Subject.find(:all,:conditions=>"batch_id = '#{@batch.id}' ")
+ @subjects= Subject.find(:all,:conditions=>{:batch_id => @batch.id})
else
if @batch.employee_id.to_i==@current_user.employee_record.id
@subjects= @batch.subjects
@@ -51,7 +50,7 @@ def subject
end
end
else
- @subjects = Subject.find_all_by_batch_id(@batch.id,:conditions=>'is_deleted = false')
+ @subjects = Subject.find_all_by_batch_id(@batch.id,:conditions=>{:is_deleted => false})
end
render :update do |page|
@@ -93,7 +92,7 @@ def mode
end
def show
@batch = Batch.find params[:batch_id]
- @start_date = @batch.start_date.to_date
+ @start_date = @batch.started_on
@end_date = @local_tzone_time.to_date
@leaves=Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
@mode = params[:mode]
@@ -232,7 +231,7 @@ def report
@date = '01-'+@month+'-'+@year
@start_date = @date.to_date
@today = @local_tzone_time.to_date
- if (@start_date<@batch.start_date.to_date.beginning_of_month || @start_date>@batch.end_date.to_date || @start_date>=@today.next_month.beginning_of_month)
+ if @start_date<@batch.started_on.beginning_of_month || @start_date>@batch.ended_on || @start_date>=@today.next_month.beginning_of_month
render :update do |page|
page.replace_html 'report', :text => t('no_reports')
end
@@ -305,7 +304,7 @@ def student_details
@report = Attendance.find(:all,:conditions=>{:student_id=>@student.id,:batch_id=>@batch.id})
else
@report = SubjectLeave.find(:all,:conditions=>{:student_id=>@student.id,:batch_id=>@batch.id})
-
+
end
end
@@ -469,7 +468,7 @@ def report_pdf
@report = ''
end
render :pdf => 'report_pdf'
-
+
# render :layout=>'pdf'
# respond_to do |format|
# format.pdf { render :layout => false }
@@ -541,7 +540,7 @@ def filter_report_pdf
end
end
render :pdf => 'filter_report_pdf'
-
+
# respond_to do |format|
diff --git a/app/controllers/attendances_controller.rb b/app/controllers/attendances_controller.rb
index 1141a25e0..80688eae7 100755
--- a/app/controllers/attendances_controller.rb
+++ b/app/controllers/attendances_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AttendancesController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -170,7 +169,7 @@ def daily_register
# format.js { render :action => 'show' }
end
end
-
+
def new
@config = Configuration.find_by_config_key('StudentAttendanceType')
if @config.config_value=='Daily'
@@ -198,19 +197,19 @@ def create
# @absentee.subject_id=@tte.subject_id
@absentee.class_timing_id=@tte.class_timing_id
@absentee.batch_id = @student.batch_id
-
+
else
@student = Student.find(params[:attendance][:student_id])
@absentee = Attendance.new(params[:attendance])
end
respond_to do |format|
if @absentee.save
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
message = ""
if sms_setting.application_sms_active and @student.is_sms_enabled and sms_setting.attendance_sms_active
recipients = []
unless @config.config_value=="SubjectWise"
- if @absentee.is_full_day
+ if @absentee.full_day?
message = "#{@student.first_name} #{@student.last_name} #{t('flash_msg7')} #{@absentee.month_date}"
elsif @absentee.forenoon == true and @absentee.afternoon == false
message = "#{@student.first_name} #{@student.last_name} #{t('flash_msg7')} (forenoon) #{@absentee.month_date}"
diff --git a/app/controllers/batch_transfers_controller.rb b/app/controllers/batch_transfers_controller.rb
index 155a191ab..862ec4f56 100755
--- a/app/controllers/batch_transfers_controller.rb
+++ b/app/controllers/batch_transfers_controller.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchTransfersController < ApplicationController
before_filter :login_required
filter_access_to :all
-
+
def index
@batches = Batch.active
end
@@ -93,7 +92,7 @@ def subject_transfer
@batch = Batch.find(params[:id])
@elective_groups = @batch.elective_groups.all(:conditions => {:is_deleted => false})
@normal_subjects = @batch.normal_batch_subject
- @elective_subjects = Subject.find_all_by_batch_id(@batch.id,:conditions=>["elective_group_id IS NOT NULL AND is_deleted = false"])
+ @elective_subjects = Subject.find_all_by_batch_id(@batch.id,:conditions=>["elective_group_id IS NOT NULL AND is_deleted = ?", false])
end
def get_previous_batch_subjects
diff --git a/app/controllers/batches_controller.rb b/app/controllers/batches_controller.rb
index 337d8c9a5..1628cad8d 100755
--- a/app/controllers/batches_controller.rb
+++ b/app/controllers/batches_controller.rb
@@ -1,27 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchesController < ApplicationController
- before_filter :init_data,:except=>[:assign_tutor,:update_employees,:assign_employee,:remove_employee,:batches_ajax]
+ before_filter :init_data, :except => [:assign_tutor, :update_employees, :assign_employee, :remove_employee, :batches_ajax]
filter_access_to :all
before_filter :login_required
+
def index
- @batches = @course.batches
+ @batches = @course.batches
end
def new
@@ -37,7 +37,8 @@ def create
msg = []
msg << "
"
course_id = @batch.course_id
- @previous_batch = Batch.find(:first,:order=>'id desc', :conditions=>"batches.id < '#{@batch.id }' AND batches.is_deleted = 0 AND course_id = ' #{course_id }'",:joins=>"INNER JOIN subjects ON subjects.batch_id = batches.id AND subjects.is_deleted = 0")
+ @previous_batch = Batch.find(:first, :order => 'id DESC', :conditions => ["batches.id < ? AND batches.is_deleted = ? AND course_id = ?", @batch.id, false, course_id],
+ :joins => ["INNER JOIN subjects ON subjects.batch_id = batches.id AND subjects.is_deleted = ?", false])
unless @previous_batch.blank?
subjects = Subject.find_all_by_batch_id(@previous_batch.id,:conditions=>'is_deleted=false')
subjects.each do |subject|
@@ -126,7 +127,7 @@ def create
end
flash[:warn_notice] = err1 + err unless err.empty?
flash[:fees_import] = fee_msg unless fee_msg.nil?
-
+
redirect_to [@course, @batch]
else
@grade_types=[]
diff --git a/app/controllers/calendar_controller.rb b/app/controllers/calendar_controller.rb
index bcf646650..4779c8a20 100755
--- a/app/controllers/calendar_controller.rb
+++ b/app/controllers/calendar_controller.rb
@@ -1,82 +1,80 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CalendarController < ApplicationController
before_filter :login_required
before_filter :default_time_zone_present_time
filter_access_to :event_delete
+
def index
@user = current_user
- if params[:new_month].nil?
+ if params[:new_month].blank?
@show_month = @local_tzone_time.to_date
else
d = params[:new_month].to_i
passed_date = (params[:passed_date]).to_date
if params[:new_month].to_i > passed_date.month
- @show_month = passed_date+1.month
+ @show_month = passed_date + 1.month
else
- @show_month = passed_date-1.month
- end
- end
- @start_date = @show_month.beginning_of_month
+ @show_month = passed_date - 1.month
+ end
+ end
+ @start_date = @show_month.beginning_of_month
@start_date_day = @start_date.wday
- @last_day = @show_month.end_of_month
- @notifications = Hash.new{|h,k| h[k]=Array.new}
- first_day = @show_month.beginning_of_month
- last_day = @show_month.end_of_month
- @events = Event.find(:all,:conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
+ @last_day = @show_month.end_of_month
+ @notifications = Hash.new { |h,k| h[k] = Array.new }
+ first_day = @show_month.beginning_of_month
+ last_day = @show_month.end_of_month
+ @events = Event.find(:all,:conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
load_notifications
-
end
def new_calendar
- @user = current_user
- d = params[:new_month].to_i
+ @user = current_user
+ d = params[:new_month].to_i
passed_date = (params[:passed_date]).to_date
if params[:new_month].to_i > passed_date.month
- @show_month = passed_date+1.month
+ @show_month = passed_date + 1.month
else
- @show_month = passed_date-1.month
+ @show_month = passed_date - 1.month
end
- @start_date = @show_month.beginning_of_month
+ @start_date = @show_month.beginning_of_month
@start_date_day = @start_date.wday
- @last_day = @show_month.end_of_month
- @notifications = Hash.new{|h,k| h[k]=Array.new}
- first_day = @show_month.beginning_of_month
- last_day = @show_month.end_of_month
- @events = Event.find(:all,:conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
+ @last_day = @show_month.end_of_month
+ @notifications = Hash.new { |h,k| h[k] = Array.new }
+ first_day = @show_month.beginning_of_month
+ last_day = @show_month.end_of_month
+ @events = Event.find(:all, :conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
load_notifications
+
render :update do |page|
- page.replace_html 'calendar', :partial => 'month',:object => @show_month
+ page.replace_html 'calendar', :partial => 'month', :object => @show_month
page.replace_html :tooltip_header, :text => ''
end
end
-
-
def show_event_tooltip
- @user = current_user
- @date = params[:id].to_date
+ @user = current_user
+ @date = params[:id].to_date
first_day = @date.beginning_of_month.to_time
- last_day = @date.end_of_month.to_time
+ last_day = @date.end_of_month.to_time
- common_event = Event.find_all_by_is_common_and_is_holiday(true,false, :conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
- non_common_events = Event.find_all_by_is_common_and_is_holiday_and_is_exam_and_is_due(false,false,false,false, :conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
+ common_event = Event.find_all_by_is_common_and_is_holiday(true, false, :conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
+ non_common_events = Event.find_all_by_is_common_and_is_holiday_and_is_exam_and_is_due(false, false, false, false, :conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
@common_event_array = []
common_event.each do |h|
if h.start_date.to_date == h.end_date.to_date
@@ -87,57 +85,57 @@ def show_event_tooltip
end
end
end
- if @user.student == true or @user.parent == true
+ if @user.student? || @user.parent?
user_student = @user.student_record if @user.student
user_student = @user.parent_record if @user.parent
batch = user_student.batch
@student_batch_not_common_event_array = []
non_common_events.each do |h|
- student_batch_event = BatchEvent.find_by_batch_id(batch.id, :conditions=>"event_id = #{h.id}")
+ student_batch_event = BatchEvent.find_by_batch_id(batch.id, :conditions => { :event_id => h.id })
if h.start_date.to_date == "#{h.end_date.year}-#{h.end_date.month}-#{h.end_date.day}".to_date
if "#{h.start_date.year}-#{h.start_date.month}-#{h.start_date.day}".to_date == @date
- @student_batch_not_common_event_array.push(h) unless student_batch_event.nil?
+ @student_batch_not_common_event_array.push(h) if student_batch_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @student_batch_not_common_event_array.push(h) unless student_batch_event.nil?
+ @student_batch_not_common_event_array.push(h) if student_batch_event.present?
end
end
end
end
@events = @common_event_array + @student_batch_not_common_event_array
- elsif @user.employee == true
- user_employee = @user.employee_record
+ elsif @user.employee?
+ user_employee = @user.employee_record
department = user_employee.employee_department
@employee_dept_not_common_event_array = []
non_common_events.each do |h|
- employee_dept_event = EmployeeDepartmentEvent.find_by_employee_department_id(department.id, :conditions=>"event_id = #{h.id}")
+ employee_dept_event = EmployeeDepartmentEvent.find_by_employee_department_id(department.id, :conditions => { :event_id => h.id })
if h.start_date.to_date == h.end_date.to_date
if h.start_date.to_date == @date
- @employee_dept_not_common_event_array.push(h) unless employee_dept_event.nil?
+ @employee_dept_not_common_event_array.push(h) if employee_dept_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @employee_dept_not_common_event_array.push(h) unless employee_dept_event.nil?
+ @employee_dept_not_common_event_array.push(h) if employee_dept_event.present?
end
end
end
end
@events = @common_event_array + @employee_dept_not_common_event_array
- elsif @user.admin == true
+ elsif @user.admin?
@employee_dept_not_common_event_array = []
non_common_events.each do |h|
- employee_dept_event = EmployeeDepartmentEvent.find(:all, :conditions=>"event_id = #{h.id}")
+ employee_dept_event = EmployeeDepartmentEvent.find(:all, :conditions => { :event_id => h.id })
if h.start_date.to_date == h.end_date.to_date
if h.start_date.to_date == @date
- @employee_dept_not_common_event_array.push(h) unless employee_dept_event.nil?
+ @employee_dept_not_common_event_array.push(h) if employee_dept_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @employee_dept_not_common_event_array.push(h) unless employee_dept_event.nil?
+ @employee_dept_not_common_event_array.push(h) if employee_dept_event.present?
end
end
end
@@ -147,74 +145,74 @@ def show_event_tooltip
end
def show_holiday_event_tooltip
- @user = current_user
- @date = params[:id].to_date
+ @user = current_user
+ @date = params[:id].to_date
first_day = @date.beginning_of_month.to_time
- last_day = @date.end_of_month.to_time
+ last_day = @date.end_of_month.to_time
- common_holiday_event = Event.find_all_by_is_common_and_is_holiday(true,true, :conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
- non_common_holiday_events = Event.find_all_by_is_common_and_is_holiday(false,true, :conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
+ common_holiday_event = Event.find_all_by_is_common_and_is_holiday(true, true, :conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
+ non_common_holiday_events = Event.find_all_by_is_common_and_is_holiday(false, true, :conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
@common_holiday_event_array = []
common_holiday_event.each do |h|
if h.start_date.to_date == h.end_date.to_date
@common_holiday_event_array.push h if h.start_date.to_date == @date
else
- ( h.start_date.to_date..h.end_date.to_date).each do |d|
+ (h.start_date.to_date..h.end_date.to_date).each do |d|
@common_holiday_event_array.push h if d == @date
end
end
end
- if @user.student == true or @user.parent == true
+ if @user.student? || @user.parent?
user_student = @user.student_record if @user.student
user_student = @user.parent_record if @user.parent
- batch = user_student.batch unless user_student.nil?
+ batch = user_student.batch if user_student.present?
@student_batch_not_common_holiday_event_array = []
non_common_holiday_events.each do |h|
- student_batch_holiday_event = BatchEvent.find_by_batch_id(batch.id, :conditions=>"event_id = #{h.id}")
+ student_batch_holiday_event = BatchEvent.find_by_batch_id(batch.id, :conditions => { :event_id => h.id })
if h.start_date.to_date == h.end_date.to_date
if h.start_date.to_date == @date
- @student_batch_not_common_holiday_event_array.push(h) unless student_batch_holiday_event.nil?
+ @student_batch_not_common_holiday_event_array.push(h) if student_batch_holiday_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @student_batch_not_common_holiday_event_array.push(h) unless student_batch_holiday_event.nil?
+ @student_batch_not_common_holiday_event_array.push(h) if student_batch_holiday_event.present?
end
end
end
end
@events = @common_holiday_event_array.to_a + @student_batch_not_common_holiday_event_array.to_a
- elsif @user.employee == true
+ elsif @user.employee?
user_employee = @user.employee_record
- department = user_employee.employee_department unless user_employee.nil?
+ department = user_employee.employee_department if user_employee.present?
@employee_dept_not_common_holiday_event_array = []
non_common_holiday_events.each do |h|
- employee_dept_holiday_event = EmployeeDepartmentEvent.find_by_employee_department_id(department.id, :conditions=>"event_id = #{h.id}")
+ employee_dept_holiday_event = EmployeeDepartmentEvent.find_by_employee_department_id(department.id, :conditions => { :event_id => h.id })
if h.start_date.to_date == h.end_date.to_date
if h.start_date.to_date == @date
- @employee_dept_not_common_holiday_event_array.push(h) unless employee_dept_holiday_event.nil?
+ @employee_dept_not_common_holiday_event_array.push(h) if employee_dept_holiday_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @employee_dept_not_common_holiday_event_array.push(h) unless employee_dept_holiday_event.nil?
+ @employee_dept_not_common_holiday_event_array.push(h) if employee_dept_holiday_event.present?
end
end
end
end
@events = @common_holiday_event_array.to_a + @employee_dept_not_common_holiday_event_array.to_a
- elsif @user.admin == true
+ elsif @user.admin?
@employee_dept_not_common_holiday_event_array = []
non_common_holiday_events.each do |h|
- employee_dept_holiday_event = EmployeeDepartmentEvent.find(:all, :conditions=>"event_id = #{h.id}")
+ employee_dept_holiday_event = EmployeeDepartmentEvent.find(:all, :conditions => { :event_id => h.id })
if h.start_date.to_date == h.end_date.to_date
if h.start_date.to_date == @date
- @employee_dept_not_common_holiday_event_array.push(h) unless employee_dept_holiday_event.nil?
+ @employee_dept_not_common_holiday_event_array.push(h) if employee_dept_holiday_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @employee_dept_not_common_holiday_event_array.push(h) unless employee_dept_holiday_event.nil?
+ @employee_dept_not_common_holiday_event_array.push(h) if employee_dept_holiday_event.present?
end
end
end
@@ -224,38 +222,38 @@ def show_holiday_event_tooltip
end
def show_exam_event_tooltip
- @user = current_user
- @date = params[:id].to_date
+ @user = current_user
+ @date = params[:id].to_date
first_day = @date.beginning_of_month.to_time
- last_day = @date.end_of_month.to_time
- not_common_exam_event = Event.find_all_by_is_common_and_is_holiday_and_is_exam(false,false,true, :conditions => ["(start_date >= ? and end_date <= ?) or (start_date <= ? and end_date <= ?) or (start_date>=? and end_date>=?) or (start_date<=? and end_date>=?) ", first_day, last_day, first_day,last_day, first_day,last_day,first_day,last_day])
- not_common_exam_event.reject! { |x|x.origin.nil? }
+ last_day = @date.end_of_month.to_time
+ not_common_exam_event = Event.find_all_by_is_common_and_is_holiday_and_is_exam(false, false, true, :conditions => ["(start_date >= ? AND end_date <= ?) OR (start_date <= ? AND end_date <= ?) OR (start_date >= ? AND end_date >= ?) OR (start_date <= ? AND end_date >= ?)", first_day, last_day, first_day, last_day, first_day, last_day, first_day, last_day])
+ not_common_exam_event.reject! { |x|x.origin.nil? }
@student_batch_exam_event_array = []
- if @user.student == true or @user.parent == true
+ if @user.student? || @user.parent?
user_student = @user.student_record if @user.student
user_student = @user.parent_record if @user.parent
batch = user_student.batch
not_common_exam_event.each do |h|
- student_batch_exam_event = BatchEvent.find_by_batch_id(batch.id, :conditions=>"event_id = #{h.id}")
+ student_batch_exam_event = BatchEvent.find_by_batch_id(batch.id, :conditions => { :event_id => h.id })
if h.start_date.to_date == h.end_date.to_date
if h.start_date.to_date == @date
- @student_batch_exam_event_array.push h unless student_batch_exam_event.nil?
+ @student_batch_exam_event_array.push h if student_batch_exam_event.present?
end
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
if d == @date
- @student_batch_exam_event_array.push h unless student_batch_exam_event.nil?
+ @student_batch_exam_event_array.push h if student_batch_exam_event.present?
end
end
end
end
else
not_common_exam_event.each do |h|
- if h.start_date.to_date == h.end_date.to_date
- @student_batch_exam_event_array.push h if h.start_date.to_date == @date
+ if h.start_date.to_date == h.end_date.to_date
+ @student_batch_exam_event_array.push h if h.start_date.to_date == @date
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
- @student_batch_exam_event_array.push h if d == @date
+ @student_batch_exam_event_array.push h if d == @date
end
end
end
@@ -265,13 +263,13 @@ def show_exam_event_tooltip
def show_due_tooltip
@user = current_user
@date = params[:id].to_date
- finance_due_check = Event.find_all_by_is_due(true,true, :conditions => " events.start_date >= '#{@date.strftime("%Y-%m-%d 00:00:00")}' AND events.start_date <= '#{@date.strftime("%Y-%m-%d 23:59:59")}'")
- finance_due_check.reject!{|x| !x.is_active_event }
- if @user.student? or @user.parent?
- finance_due_check.reject!{|x| !x.is_student_event(@user.student_record) } if @user.student
- finance_due_check.reject!{|x| !x.is_student_event(@user.parent_record) } if @user.parent
+ finance_due_check = Event.find_all_by_is_due(true, true, :conditions => "events.start_date >= '#{@date.strftime("%Y-%m-%d 00:00:00")}' AND events.start_date <= '#{@date.strftime("%Y-%m-%d 23:59:59")}'")
+ finance_due_check.reject!{|x| !x.active_event? }
+ if @user.student? || @user.parent?
+ finance_due_check.reject! { |x| !x.student_event?(@user.student_record) } if @user.student
+ finance_due_check.reject! { |x| !x.student_event?(@user.parent_record) } if @user.parent
elsif @user.employee?
- finance_due_check.reject!{|x| !x.is_employee_event(@user) }
+ finance_due_check.reject! { |x| !x.employee_event?(@user) }
end
@finance_due = []
finance_due_check.each do |h|
@@ -283,8 +281,8 @@ def show_due_tooltip
def event_delete
@event = Event.find_by_id(params[:id])
- @event.destroy unless @event.nil?
- redirect_to :controller=>"calendar"
+ @event.destroy if @event.present?
+ redirect_to :controller => "calendar"
end
@@ -302,24 +300,24 @@ def build_common_events_hash(e,key,today)
def build_student_events_hash(h,key,batch_id,today)
if h.start_date.to_date == h.end_date.to_date
- student_batch_event = BatchEvent.find_by_batch_id(batch_id, :conditions=>"event_id = #{h.id}")
- @notifications["#{key}"] << h.start_date.to_date unless student_batch_event.nil?
+ student_batch_event = BatchEvent.find_by_batch_id(batch_id, :conditions => { :event_id => h.id })
+ @notifications["#{key}"] << h.start_date.to_date if student_batch_event.present?
else
(h.start_date.to_date..h.end_date.to_date).each do |d|
- student_batch_event = BatchEvent.find_by_batch_id(batch_id, :conditions=>"event_id = #{h.id}")
- @notifications["#{key}"] << d.to_date unless student_batch_event.nil?
+ student_batch_event = BatchEvent.find_by_batch_id(batch_id, :conditions => { :event_id => h.id })
+ @notifications["#{key}"] << d.to_date if student_batch_event.present?
end
end
end
def build_employee_events_hash(h,key,department_id,today)
if h.start_date.to_date == h.end_date.to_date
- employee_dept_event = EmployeeDepartmentEvent.find_by_employee_department_id(department_id, :conditions=>"event_id = #{h.id}") unless department_id.nil?
- @notifications["#{key}"] << h.start_date.to_date unless employee_dept_event.nil?
+ employee_dept_event = EmployeeDepartmentEvent.find_by_employee_department_id(department_id, :conditions => { :event_id => h.id }) if department_id.present?
+ @notifications["#{key}"] << h.start_date.to_date if employee_dept_event.present?
else
- employee_dept_event = EmployeeDepartmentEvent.find_by_employee_department_id(department_id, :conditions=>"event_id = #{h.id}")
+ employee_dept_event = EmployeeDepartmentEvent.find_by_employee_department_id(department_id, :conditions => { :event_id => h.id })
(h.start_date.to_date..h.end_date.to_date).each do |d|
- @notifications["#{key}"] << d.to_date unless employee_dept_event.nil?
+ @notifications["#{key}"] << d.to_date if employee_dept_event.present?
end
end
end
@@ -327,93 +325,91 @@ def build_employee_events_hash(h,key,department_id,today)
def load_notifications
@events.each do |e|
#common events and holidays
- if e.is_common ==true
- if e.is_holiday == true
- build_common_events_hash(e,'common_holidays',@show_month)
+ if e.is_common?
+ if e.is_holiday?
+ build_common_events_hash(e, 'common_holidays', @show_month)
else
- build_common_events_hash(e,'common_events',@show_month)
+ build_common_events_hash(e, 'common_events', @show_month)
end
end
#finance dues
- if e.is_due == true
- if e.is_active_event
+ if e.is_due?
+ if e.active_event?
if @user.admin?
- build_common_events_hash(e,'finance_due',@show_month)
- elsif @user.student? or @user.parent?
+ build_common_events_hash(e, 'finance_due', @show_month)
+ elsif @user.student? || @user.parent?
student= @user.student_record if @user.student
student= @user.parent_record if @user.parent
- if e.is_student_event(student)
- build_common_events_hash(e,'finance_due',@show_month)
+ if e.student_event?(student)
+ build_common_events_hash(e, 'finance_due', @show_month)
end
elsif @user.employee?
- if e.is_employee_event(@user)
- build_common_events_hash(e,'finance_due',@show_month)
+ if e.employee_event?(@user)
+ build_common_events_hash(e, 'finance_due', @show_month)
end
end
end
end
- if e.is_common ==false and e.is_holiday==false and e.is_exam==false and e.is_due==false #not_common_event
- build_student_events_hash(e,'student_batch_not_common',@user.student_record.batch_id,@show_month) if @user.student?
- build_employee_events_hash(e,'employee_dept_not_common',@user.employee_record.employee_department_id,@show_month) if @user.employee?
+ if e.is_common? && e.is_holiday? && e.is_exam? && e.is_due? #not_common_event
+ build_student_events_hash(e, 'student_batch_not_common', @user.student_record.batch_id, @show_month) if @user.student?
+ build_employee_events_hash(e, 'employee_dept_not_common', @user.employee_record.employee_department_id, @show_month) if @user.employee?
end
- if e.is_common ==false and e.is_holiday==true # not_common_holiday_event
- build_student_events_hash(e,'student_batch_not_common_holiday',@user.student_record.batch_id,@show_month) if @user.student?
- build_employee_events_hash(e,'employee_dept_not_common_holiday',@user.employee_record.employee_department_id,@show_month) if @user.employee?
+ if e.is_common? && e.is_holiday? # not_common_holiday_event
+ build_student_events_hash(e, 'student_batch_not_common_holiday', @user.student_record.batch_id, @show_month) if @user.student?
+ build_employee_events_hash(e, 'employee_dept_not_common_holiday', @user.employee_record.employee_department_id, @show_month) if @user.employee?
if @user.admin?
- employee_dept_holiday_event = EmployeeDepartmentEvent.find(:all, :conditions=>"event_id = #{e.id}")
+ employee_dept_holiday_event = EmployeeDepartmentEvent.find(:all, :conditions => "event_id = #{e.id}")
if e.start_date.to_date == e.end_date.to_date
- @notifications['employee_dept_not_common_holiday'].push e.start_date.to_date unless employee_dept_holiday_event.nil?
+ @notifications['employee_dept_not_common_holiday'].push e.start_date.to_date if employee_dept_holiday_event.present?
else
(e.start_date.to_date..e.end_date.to_date).each do |d|
- @notifications['employee_dept_not_common_holiday'].push d.to_date unless employee_dept_holiday_event.nil?
+ @notifications['employee_dept_not_common_holiday'].push d.to_date if employee_dept_holiday_event.present?
end
end
end
end
- if e.is_common ==false and e.is_holiday==false and e.is_exam ==true # not_common_exam_event
+ if e.is_common? && e.is_holiday? && e.is_exam? # not_common_exam_event
unless e.origin.nil?
if @user.student?
subject=e.origin.subject
- if subject.elective_group_id == nil
- build_student_events_hash(e,'student_batch_exam',@user.student_record.batch_id,@show_month)
+ if subject.elective_group_id.blank?
+ build_student_events_hash(e, 'student_batch_exam', @user.student_record.batch_id, @show_month)
else
- build_student_events_hash(e,'student_batch_exam',@user.student_record.batch_id,@show_month) if (@user.student_record.students_subjects.map{|sub| sub.subject_id}.include?(subject.id))
+ build_student_events_hash(e, 'student_batch_exam', @user.student_record.batch_id, @show_month) if (@user.student_record.students_subjects.map{|sub| sub.subject_id}.include?(subject.id))
end
end
if @user.employee?
- build_common_events_hash(e,'student_batch_exam',@show_month)
+ build_common_events_hash(e, 'student_batch_exam', @show_month)
end
if @user.admin?
- student_batch_exam_event = BatchEvent.find(:all, :conditions=>"event_id = #{e.id}")
- if e.start_date.to_date == e.end_date.to_date
- @notifications['student_batch_exam'] << e.start_date.to_date unless student_batch_exam_event.nil?
+ student_batch_exam_event = BatchEvent.find(:all, :conditions => "event_id = #{e.id}")
+ if e.start_date.to_date == e.end_date.to_date
+ @notifications['student_batch_exam'] << e.start_date.to_date if student_batch_exam_event.present?
else
(e.start_date.to_date..e.end_date.to_date).each do |d|
- @notifications['student_batch_exam'] << d.to_date unless student_batch_exam_event.nil?
+ @notifications['student_batch_exam'] << d.to_date if student_batch_exam_event.present?
end
end
end
end
end
- if e.is_common ==false and e.is_holiday==false and e.is_due==false and e.is_exam ==false and @user.admin? # not_common_exam_due_event
- build_common_events_hash(e,'employee_dept_not_common',@show_month)
+ if e.is_common? && e.is_holiday? && e.is_due? && e.is_exam? && @user.admin? # not_common_exam_due_event
+ build_common_events_hash(e, 'employee_dept_not_common', @show_month)
end
end
- if @user.student? or @user.parent?
+ if @user.student? || @user.parent?
@events = @notifications['common_events'] + @notifications['student_batch_not_common']
- @holiday_event = @notifications['common_holidays']+ @notifications['student_batch_not_common_holiday']
+ @holiday_event = @notifications['common_holidays'] + @notifications['student_batch_not_common_holiday']
elsif @user.employee?
@events = @notifications['common_events'] + @notifications['employee_dept_not_common']
- @holiday_event = @notifications['common_holidays']+ @notifications['employee_dept_not_common_holiday']
+ @holiday_event = @notifications['common_holidays'] + @notifications['employee_dept_not_common_holiday']
elsif @user.admin?
@events = @notifications['common_events'] + @notifications['employee_dept_not_common']
- @holiday_event = @notifications['common_holidays']+ @notifications['employee_dept_not_common_holiday']
+ @holiday_event = @notifications['common_holidays'] + @notifications['employee_dept_not_common_holiday']
end
end
-
-
end
\ No newline at end of file
diff --git a/app/controllers/cce_exam_categories_controller.rb b/app/controllers/cce_exam_categories_controller.rb
index 39f70632e..0d09963dc 100644
--- a/app/controllers/cce_exam_categories_controller.rb
+++ b/app/controllers/cce_exam_categories_controller.rb
@@ -1,62 +1,69 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceExamCategoriesController < ApplicationController
before_filter :login_required
+ before_filter :find_category, :only => [:edit, :update, :destroy]
filter_access_to :all
+
def index
- @categories=CceExamCategory.all
+ @categories = CceExamCategory.all
end
+
def new
- @category=CceExamCategory.new
+ @category = CceExamCategory.new
end
+
def create
- @category=CceExamCategory.new(params[:cce_exam_category])
+ @category = CceExamCategory.new(params[:cce_exam_category])
if @category.save
- flash[:notice]="Exam Category created successfully."
- @categories=CceExamCategory.all
+ flash[:success] = "Exam Category created successfully."
+ @categories = CceExamCategory.all
else
- @error=true
+ @error = true
end
end
def edit
- @category=CceExamCategory.find(params[:id])
end
def update
- @category=CceExamCategory.find(params[:id])
- @category.name=params[:cce_exam_category][:name]
- @category.desc=params[:cce_exam_category][:desc]
+ @category.name = params[:cce_exam_category][:name]
+ @category.desc = params[:cce_exam_category][:desc]
if @category.save
- flash[:notice]="Exam Category updated successfully."
- @categories=CceExamCategory.all
+ flash[:success] = "Exam Category updated successfully."
+ @categories = CceExamCategory.all
else
- @error=true
+ @error = true
end
end
+
def destroy
- @category=CceExamCategory.find(params[:id])
if @category.destroy
- flash[:notice]="Exam Category Deleted"
+ flash[:success] = "Exam Category Deleted"
else
- flash[:notice]="Exam category cannot be deleted"
+ flash[:error] = "Exam category cannot be deleted"
end
- redirect_to :action => "index"
+ redirect_to cce_exam_categories_path
+ end
+
+ private
+
+ def find_category
+ @category = CceExamCategory.find(params[:id])
end
end
diff --git a/app/controllers/cce_grade_sets_controller.rb b/app/controllers/cce_grade_sets_controller.rb
index 55c5b0c15..966fbbf22 100644
--- a/app/controllers/cce_grade_sets_controller.rb
+++ b/app/controllers/cce_grade_sets_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceGradeSetsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -122,5 +121,5 @@ def destroy_grade
end
end
-
+
end
diff --git a/app/controllers/cce_reports_controller.rb b/app/controllers/cce_reports_controller.rb
index 0b8978487..4918a2e1c 100644
--- a/app/controllers/cce_reports_controller.rb
+++ b/app/controllers/cce_reports_controller.rb
@@ -1,75 +1,63 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceReportsController < ApplicationController
before_filter :login_required
- # before_filter :load_cce_report, :only=>[:show_student_wise_report]
- filter_access_to :all
- # filter_access_to :show_student_wise_report, :attribute_check => true
-
+ filter_access_to :all
+
def index
-
+
end
-
+
def create_reports
@courses = Course.cce
- if request.post?
- unless params[:course][:batch_ids].blank?
- errors = []
- batches = Batch.find_all_by_id(params[:course][:batch_ids])
- batches.each do |batch|
- if batch.check_credit_points
- batch.job_type = "3"
- Delayed::Job.enqueue(batch)
- batch.delete_student_cce_report_cache
- else
- errors += ["Incomplete grading level credit points for #{batch.full_name}, report generation failed."]
- end
- end
- flash[:notice]="Report generation in queue for batches #{batches.collect(&:full_name).join(", ")}. Click Here to view the scheduled job."
- flash[:error]=errors
+ if request.post?
+ if params[:course][:batch_ids].present?
+ notice, errors = Batch.create_reports(params[:course][:batch_ids])
+ flash[:notice] = notice
+ flash[:error] = errors
else
- flash[:notice]="No batch selected"
- end
+ flash[:notice] = "No batch selected"
+ end
end
-
end
def student_wise_report
- @batches=Batch.cce
- if request.post?
- @batch=Batch.find(params[:batch_id])
- @students=@batch.students.all(:order=>"first_name ASC")
+ @batches = Batch.cce
+ if request.post?
+ @batch = Batch.find(params[:batch_id])
+ @students = @batch.students.all(:order => "first_name ASC")
@student = @students.first
- if @student
- fetch_report
- end
+ fetch_report if @student
render(:update) do |page|
- page.replace_html 'student_list', :partial=>"student_list", :object=>@students
- @student.nil? ? (page.replace_html 'report', :text=>"") : (page.replace_html 'report', :partial=>"student_report")
- page.replace_html 'hider', :text=>""
+ page.replace_html 'student_list', partial: "student_list", object: @students
+ if @student.nil?
+ page.replace_html 'report', text: ""
+ else
+ page.replace_html 'report', partial: "student_report"
+ end
+ page.replace_html 'hider', text: ''
end
end
end
def student_report
@student = Student.find(params[:student])
- @batch=@student.batch
+ @batch = @student.batch
fetch_report
render(:update) do |page|
page.replace_html 'report', :partial=>"student_report"
@@ -77,19 +65,19 @@ def student_report
end
def student_report_pdf
- @student= (params[:type]=="former" ? ArchivedStudent.find(params[:id]) : Student.find(params[:id]))
- @type= params[:type] || "regular"
- @batch=Batch.find(params[:batch_id])
+ @student = CceReport.find_student(params[:type], params[:id])
+ @type = params[:type] || "regular"
+ @batch = Batch.find(params[:batch_id])
@student.batch_in_context = @batch
fetch_report
render :pdf => "#{@student.first_name}-CCE_Report"
end
def student_transcript
- @student= (params[:type]=="former" ? ArchivedStudent.find(params[:id]) : Student.find(params[:id]))
- @type= params[:type] || "regular"
- @batch=(params[:batch_id].blank? ? @student.batch : Batch.find(params[:batch_id]))
- @batches=@student.all_batches.reverse unless request.xhr?
+ @student = CceReport.find_student(params[:type], params[:id])
+ @type = params[:type] || "regular"
+ @batch = (params[:batch_id].blank? ? @student.batch : Batch.find(params[:batch_id]))
+ @batches = @student.all_batches.reverse unless request.xhr?
@student.batch_in_context = @batch
fetch_report
if request.xhr?
@@ -102,20 +90,22 @@ def student_transcript
private
def fetch_report
- @report=@student.individual_cce_report_cached
- @subjects=@student.all_subjects.select{|x| x.no_exams==false}
- @exam_groups=ExamGroup.find_all_by_id(@report.exam_group_ids, :include=>:cce_exam_category)
- coscholastic=@report.coscholastic
- @observation_group_ids=coscholastic.collect(&:observation_group_id)
- @observation_groups=ObservationGroup.find_all_by_id(@observation_group_ids).collect(&:name)
- @co_hash=Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
- @obs_groups=@batch.observation_groups.to_a
- @og=@obs_groups.group_by(&:observation_kind)
+ @report = @student.individual_cce_report_cached
+ @subjects = @student.all_subjects.select{|x| x.no_exams == false}
+ @exam_groups = ExamGroup.find_all_by_id(@report.exam_group_ids, :include => :cce_exam_category)
+ coscholastic = @report.coscholastic
+ @observation_group_ids = coscholastic.map(&:observation_group_id)
+ @observation_groups = ObservationGroup.find_all_by_id(@observation_group_ids).map(&:name)
+ @co_hash = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
+ @obs_groups = @batch.observation_groups.to_a
+ @og = @obs_groups.group_by(&:observation_kind)
@co_hashi = {}
@og.each do |kind, ogs|
- @co_hashi[kind]=[]
- coscholastic.each{|cs| @co_hashi[kind] << cs if ogs.collect(&:id).include? cs.observation_group_id}
- end
+ id_list = ogs.map(&:id)
+ @co_hashi[kind] = coscholastic.map do |cs|
+ cs if id_list.include?(cs.observation_group_id)
+ end.compact
+ end
end
-
+
end
diff --git a/app/controllers/cce_settings_controller.rb b/app/controllers/cce_settings_controller.rb
index 89a8567d1..1a6593ebc 100644
--- a/app/controllers/cce_settings_controller.rb
+++ b/app/controllers/cce_settings_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceSettingsController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/cce_weightages_controller.rb b/app/controllers/cce_weightages_controller.rb
index 1be488599..37088d239 100644
--- a/app/controllers/cce_weightages_controller.rb
+++ b/app/controllers/cce_weightages_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceWeightagesController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -43,7 +42,7 @@ def show
@weightage=CceWeightage.find(params[:id])
@courses=@weightage.courses
end
-
+
def edit
@weightage=CceWeightage.find(params[:id])
@criteria=['FA','SA']
@@ -122,7 +121,7 @@ def update_course_weightages
page.replace_html 'select_weightages',:partial=>"select_weightage"
end
end
-
+
end
end
diff --git a/app/controllers/class_designations_controller.rb b/app/controllers/class_designations_controller.rb
index 80aa79290..c5616abbd 100644
--- a/app/controllers/class_designations_controller.rb
+++ b/app/controllers/class_designations_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ClassDesignationsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -105,7 +104,7 @@ def delete_class_designation
page.replace_html 'errors', :partial=>"form_errors"
page.replace_html 'class_form', :partial=>"class_form"
end
-
+
end
end
diff --git a/app/controllers/class_timings_controller.rb b/app/controllers/class_timings_controller.rb
index 976fd7d61..268fb2334 100755
--- a/app/controllers/class_timings_controller.rb
+++ b/app/controllers/class_timings_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ClassTimingsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -81,7 +80,7 @@ def update
def show
@batch = nil
if params[:batch_id] == ''
- @class_timings = ClassTiming.find(:all, :conditions=>["batch_id is null and is_deleted = false"])
+ @class_timings = ClassTiming.find(:all, :conditions=>{:batch_id => nil, :is_deleted => false})
else
@class_timings = ClassTiming.active_for_batch(params[:batch_id])
@batch = Batch.find params[:batch_id] unless params[:batch_id] == ''
diff --git a/app/controllers/configuration_controller.rb b/app/controllers/configuration_controller.rb
index 87d6dda73..b044fd540 100755
--- a/app/controllers/configuration_controller.rb
+++ b/app/controllers/configuration_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ConfigurationController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index 888843ffe..63a5b5dfc 100755
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -1,33 +1,32 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CoursesController < ApplicationController
before_filter :login_required
before_filter :find_course, :only => [:show, :edit, :update, :destroy]
filter_access_to :all
-
+
def index
@courses = Course.active
end
def new
@course = Course.new
- @grade_types=Course.grading_types_as_options
+ @grade_types = Course.grading_types_as_options
# gpa = Configuration.find_by_config_key("GPA").config_value
# if gpa == "1"
# @grade_types << "GPA"
@@ -43,9 +42,9 @@ def manage_course
end
def assign_subject_amount
- @course = Course.active.find(params[:id])
+ @course = Course.active.find(params[:id])
@subjects = @course.batches.map(&:subjects).flatten.compact.map(&:code).compact.flatten.uniq
- @subject_amount = @course.subject_amounts.build
+ @subject_amount = @course.subject_amounts.build
@subject_amounts = @course.subject_amounts.reject{|sa| sa.new_record?}
if request.post?
code = params[:subject_amount][:code]
@@ -252,7 +251,7 @@ def destroy
flash[:warn_notice]="
#{t('courses.flash4')}
"
redirect_to :action=>'manage_course'
end
-
+
end
def show
@@ -260,6 +259,7 @@ def show
end
private
+
def find_course
@course = Course.find params[:id]
end
diff --git a/app/controllers/descriptive_indicators_controller.rb b/app/controllers/descriptive_indicators_controller.rb
index 6dfc29e2c..ce7e9a1e7 100644
--- a/app/controllers/descriptive_indicators_controller.rb
+++ b/app/controllers/descriptive_indicators_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class DescriptiveIndicatorsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -78,7 +77,7 @@ def update
end
def show
-
+
end
def destroy_indicator
diff --git a/app/controllers/elective_groups_controller.rb b/app/controllers/elective_groups_controller.rb
index 78b965946..4571f8f85 100755
--- a/app/controllers/elective_groups_controller.rb
+++ b/app/controllers/elective_groups_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ElectiveGroupsController < ApplicationController
before_filter :pre_load_objects
before_filter :login_required
@@ -62,7 +61,7 @@ def destroy
end
def show
- @electives = Subject.find_all_by_batch_id_and_elective_group_id(@batch.id,@elective_group.id, :conditions=>["is_deleted = false"])
+ @electives = Subject.find_all_by_batch_id_and_elective_group_id(@batch.id,@elective_group.id, :conditions=>{:is_deleted => false})
end
private
diff --git a/app/controllers/employee_attendance_controller.rb b/app/controllers/employee_attendance_controller.rb
index 09a117105..bb535526d 100755
--- a/app/controllers/employee_attendance_controller.rb
+++ b/app/controllers/employee_attendance_controller.rb
@@ -1,130 +1,99 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeAttendanceController < ApplicationController
- before_filter :login_required,:configuration_settings_for_hr
- before_filter :protect_leave_dashboard, :only => [:leaves]#, :employee_attendance_pdf]
+ before_filter :login_required, :configuration_settings_for_hr
+ before_filter :protect_leave_dashboard, :only => [:leaves]
before_filter :protect_applied_leave, :only => [:own_leave_application, :cancel_application]
before_filter :protect_manager_leave_application_view, :only => [:leave_application]
before_filter :protect_leave_history, :only => [:leave_history,:update_leave_history]
- # prawnto :prawn => {:left_margin => 25, :right_margin => 25}
filter_access_to :all
def add_leave_types
- @leave_types = EmployeeLeaveType.find(:all, :order => "name ASC",:conditions=>'status = 1')
- @inactive_leave_types = EmployeeLeaveType.find(:all, :order => "name ASC",:conditions=>'status = 0')
+ @leave_types = EmployeeLeaveType.all(:order => "name ASC", :conditions => {:status => true})
+ @inactive_leave_types = EmployeeLeaveType.all(:order => "name ASC", :conditions => {:status => false})
@leave_type = EmployeeLeaveType.new(params[:leave_type])
@employee = Employee.all
- if request.post? and @leave_type.save
+ if request.post? && @leave_type.save
@employee.each do |e|
EmployeeLeave.create( :employee_id => e.id, :employee_leave_type_id => @leave_type.id, :leave_count => @leave_type.max_leave_count)
end
- flash[:notice] = t('flash1')
+ flash[:notice] = t('flash1')
redirect_to :action => "add_leave_types"
end
end
def edit_leave_types
@leave_type = EmployeeLeaveType.find(params[:id])
- if request.post? and @leave_type.update_attributes(params[:leave_type])
- flash[:notice] = t('flash2')
+ if request.post? && @leave_type.update_attributes(params[:leave_type])
+ flash[:notice] = t('flash2')
redirect_to :action => "add_leave_types"
end
end
def delete_leave_types
- @leave_type = EmployeeLeaveType.find(params[:id])
- @attendance = EmployeeAttendance.find_all_by_employee_leave_type_id(@leave_type.id)
- @leave_count = EmployeeLeave.find_all_by_employee_leave_type_id(@leave_type.id)
- if @attendance.blank?
- @leave_type.delete
- @leave_count.each do |e|
+ leave_type = EmployeeLeaveType.find(params[:id])
+ attendance = EmployeeAttendance.find_all_by_employee_leave_type_id(leave_type.id)
+ if attendance.blank?
+ leave_count = EmployeeLeave.find_all_by_employee_leave_type_id(leave_type.id)
+ leave_type.delete
+ leave_count.each do |e|
e.delete
end
- flash[:notice] = t('flash3')
+ flash[:notice] = t('flash3')
else
- flash[:notice] = "#{t('flash_msg12')}"
+ flash[:notice] = t('flash_msg12')
end
redirect_to :action => "add_leave_types"
-
-
end
def leave_reset_settings
- # @config = Configuration.get_multiple_configs_as_hash ['AutomaticLeaveReset', 'LeaveResetPeriod', 'LastAutoLeaveReset']
@auto_reset = Configuration.find_by_config_key('AutomaticLeaveReset')
@reset_period = Configuration.find_by_config_key('LeaveResetPeriod')
@last_reset = Configuration.find_by_config_key('LastAutoLeaveReset')
@fin_start_date = Configuration.find_by_config_key('FinancialYearStartDate')
if request.post?
- @auto_reset.update_attributes(:config_value=> params[:configuration][:automatic_leave_reset])
- @reset_period.update_attributes(:config_value=> params[:configuration][:leave_reset_period])
- @last_reset.update_attributes(:config_value=> params[:configuration][:financial_year_start_date])
-
- flash[:notice] = t('flash_msg8')
- end
+ @auto_reset.update_attributes(:config_value => params[:configuration][:automatic_leave_reset])
+ @reset_period.update_attributes(:config_value => params[:configuration][:leave_reset_period])
+ @last_reset.update_attributes(:config_value => params[:configuration][:financial_year_start_date])
+ flash[:notice] = t('flash_msg8')
end
-
+ end
+
+ # I thinks this action should be a POST
def update_employee_leave_reset_all
- @leave_count = EmployeeLeave.all
- @leave_count.each do |e|
- @leave_type = EmployeeLeaveType.find_by_id(e.employee_leave_type_id)
- if @leave_type.status
- default_leave_count = @leave_type.max_leave_count
- if @leave_type.carry_forward
- leave_taken = e.leave_taken
- available_leave = e.leave_count
- if leave_taken <= available_leave
- balance_leave = available_leave - leave_taken
- available_leave = balance_leave.to_f
- available_leave += default_leave_count.to_f
- leave_taken = 0
- e.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- else
- available_leave = default_leave_count.to_f
- leave_taken = 0
- e.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- end
- else
- available_leave = default_leave_count.to_f
- leave_taken = 0
- e.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- end
- end
- end
+ EmployeeLeave.reset_all
+ notice = t('leave_count_reset_sucessfull')
render :update do |page|
- page.replace_html "main-reset-box", :text => "
"
end
end
def employee_leave_reset_by_department
- @departments = EmployeeDepartment.find(:all, :conditions => "status = true", :order=> "name ASC")
-
+ @departments = EmployeeDepartment.all(:conditions => {:status => true}, :order => "name ASC")
end
def list_department_leave_reset
- @leave_types = EmployeeLeaveType.find(:all, :conditions => "status = true")
- if params[:department_id] == ""
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true})
+ if params[:department_id].blank?
render :update do |page|
page.replace_html "department-list", :text => ""
- end
- return
+ end and return
end
@employees = Employee.find_all_by_employee_department_id(params[:department_id])
render :update do |page|
@@ -133,88 +102,31 @@ def list_department_leave_reset
end
def update_department_leave_reset
- @employee = params[:employee_id]
- @employee.each do |e|
- @leave_count = EmployeeLeave.find_all_by_employee_id(e)
- @leave_count.each do |c|
- #attendance = EmployeeAttendance.find_all_by_employee_id(e, :conditions=> "employee_leave_type_id = '#{c.employee_leave_type_id }' and attendance_date >= '#{Date.today.strftime('%Y-%m-%d')}'" )
- @leave_type = EmployeeLeaveType.find_by_id(c.employee_leave_type_id)
- if @leave_type.status
- default_leave_count = @leave_type.max_leave_count
- if @leave_type.carry_forward
- leave_taken = c.leave_taken
- available_leave = c.leave_count
- if leave_taken <= available_leave
- balance_leave = available_leave - leave_taken
- available_leave = balance_leave.to_f
- available_leave += default_leave_count.to_f
- leave_taken = 0
-# unless attendance.blank?
-# attendance.each do |a|
-# if a.is_half_day
-# leave_taken += (0.5).to_f
-#
-# else
-# leave_taken += (1).to_f
-#
-# end
-# end
-# end
- c.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- else
- available_leave = default_leave_count.to_f
- leave_taken = 0
- c.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- end
- else
- available_leave = default_leave_count.to_f
- leave_taken = 0
- c.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- end
- end
-
- end
- end
- flash[:notice]=t('flash12')
- redirect_to :controller=>"employee_attendance", :action => "employee_leave_reset_by_department"
+ leave_count = EmployeeLeave.all(conditions: ['employee_id IN (?)', params[:employee_id]])
+ leave_count.each(&:reset)
+ flash[:notice] = t('flash12')
+ redirect_to :action => "employee_leave_reset_by_department"
end
-
def employee_leave_reset_by_employee
- @departments = EmployeeDepartment.find(:all)
- @categories = EmployeeCategory.find(:all)
- @positions = EmployeePosition.find(:all)
- @grades = EmployeeGrade.find(:all)
+ @departments = EmployeeDepartment.all
+ @categories = EmployeeCategory.all
+ @positions = EmployeePosition.all
+ @grades = EmployeeGrade.all
end
def employee_search_ajax
- other_conditions = ""
- other_conditions += " AND employee_department_id = '#{params[:employee_department_id]}'" unless params[:employee_department_id] == ""
- other_conditions += " AND employee_category_id = '#{params[:employee_category_id]}'" unless params[:employee_category_id] == ""
- other_conditions += " AND employee_position_id = '#{params[:employee_position_id]}'" unless params[:employee_position_id] == ""
- other_conditions += " AND employee_grade_id = '#{params[:employee_grade_id]}'" unless params[:employee_grade_id] == ""
- unless params[:query].length < 3
- @employee = Employee.find(:all,
- :conditions => ["(first_name LIKE ? OR middle_name LIKE ? OR last_name LIKE ?
- OR employee_number LIKE ? OR (concat(first_name, \" \", last_name) LIKE ?))" + other_conditions,
- "#{params[:query]}%","#{params[:query]}%","#{params[:query]}%",
- "#{params[:query]}", "#{params[:query]}"],
- :order => "first_name asc") unless params[:query] == ''
- else
- @employee = Employee.find(:all,
- :conditions => ["employee_number = ? "+ other_conditions, "#{params[:query]}%"],
- :order => "first_name asc") unless params[:query] == ''
- end
+ @employee = Employee.search_employees(params)
render :layout => false
end
def employee_view_all
- @departments = EmployeeDepartment.find(:all)
+ @departments = EmployeeDepartment.all
end
def employees_list
- department_id = params[:department_id]
- @employees = Employee.find_all_by_employee_department_id(department_id,:order=>'first_name ASC')
+ @employees = Employee.find_all_by_employee_department_id(params[:department_id],
+ :order=>'first_name ASC')
render :update do |page|
page.replace_html 'employee_list', :partial => 'employee_view_all_list', :object => @employees
@@ -223,66 +135,40 @@ def employees_list
def employee_leave_details
@employee = Employee.find_by_id(params[:id])
- @leave_count = EmployeeLeave.find_all_by_employee_id(@employee.id)
+ @leave_count = EmployeeLeave.find_all_by_employee_id(params[:id])
end
def employee_wise_leave_reset
@employee = Employee.find_by_id(params[:id])
- @leave_count = EmployeeLeave.find_all_by_employee_id(@employee.id)
- @leave_count.each do |e|
- #attendance = EmployeeAttendance.find_all_by_employee_id(@employee.id, :conditions=> "employee_leave_type_id = '#{e.employee_leave_type_id }' and attendance_date >= '#{Date.today.strftime('%Y-%m-%d')}'" )
- @leave_type = EmployeeLeaveType.find_by_id(e.employee_leave_type_id)
- if @leave_type.status
- default_leave_count = @leave_type.max_leave_count
- if @leave_type.carry_forward
- leave_taken = e.leave_taken
- available_leave = e.leave_count
- if leave_taken <= available_leave
- balance_leave = available_leave - leave_taken
- available_leave = balance_leave.to_f
- available_leave += default_leave_count.to_f
- leave_taken = 0
- e.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- else
- available_leave = default_leave_count.to_f
- leave_taken = 0
- e.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- end
- else
- available_leave = default_leave_count.to_f
- leave_taken = 0
- e.update_attributes(:leave_taken => leave_taken,:leave_count => available_leave, :reset_date => Date.today)
- end
- end
- end
+ @leave_count = EmployeeLeave.find_all_by_employee_id(params[:id])
+ @leave_count.each(&:reset)
+ notice = t('flash_msg12')
render :update do |page|
- flash.now[:notice]= "#{t('flash_msg12')}"
- page.replace_html "list", :partial => 'employee_reset_sucess'
+ flash.now[:notice] = notice
+ page.replace_html "list", :partial => 'employee_reset_success'
end
end
-
def register
- @departments = EmployeeDepartment.find(:all, :conditions=>"status = true", :order=> "name ASC")
+ @departments = EmployeeDepartment.all(:conditions => {:status => true}, :order=> "name ASC")
if request.post?
- unless params[:employee_attendance].nil?
+ if params[:employee_attendance]
params[:employee_attendance].each_pair do |emp, att|
- @employee_attendance = EmployeeAttendance.create(:attendance_date => params[:date],
- :employees_id => emp, :employee_leave_types_id=> att) unless att == ""
+ EmployeeAttendance.create(:attendance_date => params[:date], reason: 'No reason',
+ :employee_id => emp, :employee_leave_type_id => att) unless att == ""
end
- flash[:notice]=t('flash3')
- redirect_to :controller=>"employee_attendance", :action => "register"
+ flash[:notice] = t('flash3')
+ redirect_to :action => "register"
end
end
end
def update_attendance_form
- @leave_types = EmployeeLeaveType.find(:all, :conditions=>"status = true", :order=>"name ASC")
- if params[:department_id] == ""
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true}, :order => "name ASC")
+ if params[:department_id].blank?
render :update do |page|
page.replace_html "attendance_form", :text => ""
- end
- return
+ end and return
end
@employees = Employee.find_all_by_employee_department_id(params[:department_id])
@@ -292,16 +178,15 @@ def update_attendance_form
end
def report
- @departments = EmployeeDepartment.find(:all, :conditions => "status = true", :order=> "name ASC")
+ @departments = EmployeeDepartment.all(:conditions => {:status => true}, :order => "name ASC")
end
def update_attendance_report
- @leave_types = EmployeeLeaveType.find(:all, :conditions => "status = true")
- if params[:department_id] == ""
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true})
+ if params[:department_id].blank?
render :update do |page|
page.replace_html "attendance_report", :text => ""
- end
- return
+ end and return
end
@employees = Employee.find_all_by_employee_department_id(params[:department_id])
render :update do |page|
@@ -312,12 +197,12 @@ def update_attendance_report
def emp_attendance
@employee = Employee.find(params[:id])
@attendance_report = EmployeeAttendance.find_all_by_employee_id(@employee.id)
- @leave_types = EmployeeLeaveType.find(:all, :conditions => "status = true")
- @leave_count = EmployeeLeave.find_all_by_employee_id(@employee,:joins=>:employee_leave_type,:conditions=>"status = true")
- @total_leaves = 0
- @leave_types.each do |lt|
- leave_count = EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(@employee.id,lt.id).size
- @total_leaves = @total_leaves +leave_count
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true})
+ @leave_count = EmployeeLeave.find_all_by_employee_id(@employee.id,
+ joins: :employee_leave_type,
+ conditions: 'employee_leave_types.status IS TRUE')
+ @total_leaves = @leave_types.inject(0) do |sum, lt|
+ sum += EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(@employee.id, lt.id).size
end
end
@@ -327,48 +212,48 @@ def leave_history
def update_leave_history
@employee = Employee.find(params[:id])
- @start_date = (params[:period][:start_date])
- @end_date = (params[:period][:end_date])
- @leave_types = EmployeeLeaveType.find(:all, :conditions => "status = true")
- @employee_attendances = {}
- @leave_types.each do |lt|
- @employee_attendances[lt.name] = EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(@employee.id,lt.id,:conditions=> "attendance_date between '#{@start_date.to_date}' and '#{@end_date.to_date}'")
- end
+ @start_date = params[:period][:start_date]
+ @end_date = params[:period][:end_date]
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true})
+ @employee_attendances = Hash[@leave_types.map do |leave_type|
+ [leave_type.name, EmployeeAttendance.all(conditions: {employee_id: @employee.id,
+ employee_leave_type_id: leave_type.id,
+ attendance_date: @start_date.to_date..@end_date.to_date})]
+ end]
render :update do |page|
page.replace_html "attendance-report", :partial => 'update_leave_history'
end
end
def leaves
- @leave_types = EmployeeLeaveType.find(:all, :conditions=>"status = true")
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true})
@employee = Employee.find(params[:id])
@reporting_employees = Employee.find_all_by_reporting_manager_id(@employee.id)
- @total_leave_count = 0
- @reporting_employees.each do |e|
- @app_leaves = ApplyLeave.count(:conditions=>["employee_id =? AND viewed_by_manager =?", e.id, false])
- @total_leave_count = @total_leave_count + @app_leaves
+ @total_leave_count = @reporting_employees.inject(0) do |sum, e|
+ sum += ApplyLeave.count(:conditions => {:employee_id => e.id, :viewed_by_manager => false})
end
@leave_apply = ApplyLeave.new(params[:leave_apply])
- if request.post? and @leave_apply.save
- ApplyLeave.update(@leave_apply, :approved=> false, :viewed_by_manager=> false)
- flash[:notice]=t('flash5')
- redirect_to :controller => "employee_attendance", :action=> "leaves", :id=>@employee.id
+ if request.post? && @leave_apply.save
+ ApplyLeave.update(@leave_apply, :approved => false, :viewed_by_manager => false)
+ flash[:notice] = t('flash5')
+ redirect_to action: "leaves", id: @employee.id, controller: :employee_attendance
end
end
def leave_application
@applied_leave = ApplyLeave.find(params[:id])
@applied_employee = Employee.find(@applied_leave.employee_id)
- @leave_type = EmployeeLeaveType.find(@applied_leave.employee_leave_types_id)
+ @leave_type = EmployeeLeaveType.find(@applied_leave.employee_leave_type_id)
@manager = @applied_employee.reporting_manager_id
- @leave_count = EmployeeLeave.find_by_employee_id(@applied_employee.id,:conditions=> "employee_leave_type_id = '#{@leave_type.id}'")
+ @leave_count = EmployeeLeave.find_by_employee_id_and_employee_leave_type_id(@applied_employee.id,
+ @leave_type.id)
end
def leave_app
@employee = Employee.find(params[:id2])
@applied_leave = ApplyLeave.find(params[:id])
- @leave_type = EmployeeLeaveType.find(@applied_leave.employee_leave_types_id)
+ @leave_type = EmployeeLeaveType.find(@applied_leave.employee_leave_type_id)
@applied_employee = Employee.find(@applied_leave.employee_id)
@manager = @applied_employee.reporting_manager_id
end
@@ -382,46 +267,26 @@ def deny_remarks
end
def approve_leave
- @applied_leave = ApplyLeave.find(params[:applied_leave])
- @applied_employee = Employee.find(@applied_leave.employee_id)
- @manager = @applied_employee.reporting_manager_id
- if @applied_leave.update_attributes( :approved => true, :viewed_by_manager => true, :manager_remark => params[:manager_remark])
- start_date = @applied_leave.start_date
- end_date = @applied_leave.end_date
- (start_date..end_date).each do |d|
-
- unless(d.strftime('%A') == "Sunday")
- EmployeeAttendance.create(:attendance_date=>d, :employee_id=>@applied_employee.id,:employee_leave_type_id=>@applied_leave.employee_leave_types_id, :reason => @applied_leave.reason, :is_half_day => @applied_leave.is_half_day)
- att = EmployeeAttendance.find_by_attendance_date(d)
- EmployeeAttendance.update(att.id, :is_half_day => @applied_leave.is_half_day)
- @reset_count = EmployeeLeave.find_by_employee_id(@applied_leave.employee_id, :conditions=> "employee_leave_type_id = '#{@applied_leave.employee_leave_types_id}'")
- leave_taken = @reset_count.leave_taken
- if @applied_leave.is_half_day
- leave_taken += 0.5
- @reset_count.update_attributes(:leave_taken=> leave_taken)
- else
- leave_taken += 1
- @reset_count.update_attributes(:leave_taken=> leave_taken)
- end
- end
- end
- end
-
- flash[:notice]="#{t('flash6')} #{@applied_employee.first_name} from #{@applied_leave.start_date} to #{@applied_leave.end_date}"
- redirect_to :controller=>"employee_attendance", :action=>"leaves", :id=>@manager
+ applied_leave = ApplyLeave.find(params[:applied_leave])
+ applied_employee = Employee.find(applied_leave.employee_id)
+ manager = applied_employee.reporting_manager_id
+ applied_leave.calculate_reset_count(params)
+
+ flash[:notice] = "#{t('flash6')} #{applied_employee.first_name} from #{applied_leave.start_date} to #{applied_leave.end_date}"
+ redirect_to :action => "leaves", :id => manager
end
def deny_leave
- @applied_leave = ApplyLeave.find(params[:applied_leave])
- @applied_employee = Employee.find(@applied_leave.employee_id)
- @manager = @applied_employee.reporting_manager_id
- ApplyLeave.update(@applied_leave, :viewed_by_manager => true, :manager_remark =>params[:manager_remark])
- flash[:notice]="#{t('flash7')} #{@applied_employee.first_name} from #{@applied_leave.start_date} to #{@applied_leave.end_date}"
- redirect_to :action=>"leaves", :id=>@manager
+ applied_leave = ApplyLeave.find(params[:applied_leave])
+ applied_employee = Employee.find(applied_leave.employee_id)
+ manager = applied_employee.reporting_manager_id
+ applied_leave.deny(params[:manager_remark])
+ flash[:notice] = "#{t('flash7')} #{applied_employee.first_name} from #{applied_leave.start_date} to #{applied_leave.end_date}"
+ redirect_to :action => "leaves", :id => manager
end
def cancel
- render :text=>""
+ render :text => ""
end
def new_leave_applications
@@ -432,7 +297,7 @@ def new_leave_applications
def all_employee_new_leave_applications
@employee = Employee.find(params[:id])
- @all_employees = Employee.find(:all)
+ @all_employees = Employee.all
render :partial => "all_employee_new_leave_applications"
end
@@ -444,40 +309,50 @@ def all_leave_applications
def individual_leave_applications
@employee = Employee.find(params[:id])
- @pending_applied_leaves = ApplyLeave.find_all_by_employee_id(@employee.id, :conditions=> "approved = false AND viewed_by_manager = false", :order=>"start_date DESC")
- @applied_leaves = ApplyLeave.paginate(:page => params[:page],:per_page=>10 , :conditions=>[ "employee_id = '#{@employee.id}'"], :order=>"start_date DESC")
+ @pending_applied_leaves = ApplyLeave.find_all_by_employee_id(@employee.id,
+ :conditions => {:approved => false, :viewed_by_manager => false},
+ :order=>"start_date DESC")
+ @applied_leaves = ApplyLeave.paginate(:page => params[:page],
+ :per_page => 10 ,
+ :conditions => {:employee_id => @employee.id},
+ :order => "start_date DESC")
render :partial => "individual_leave_applications"
end
def own_leave_application
@applied_leave = ApplyLeave.find(params[:id])
- @leave_type = EmployeeLeaveType.find(@applied_leave.employee_leave_types_id)
+ @leave_type = EmployeeLeaveType.find(@applied_leave.employee_leave_type_id)
@employee = Employee.find(@applied_leave.employee_id)
end
def cancel_application
- @applied_leave = ApplyLeave.find(params[:id])
- @employee = Employee.find(@applied_leave.employee_id)
- unless @applied_leave.viewed_by_manager
- ApplyLeave.destroy(params[:id])
- flash[:notice] = t('flash8')
+ applied_leave = ApplyLeave.find(params[:id])
+ employee = Employee.find(applied_leave.employee_id)
+ if applied_leave.viewed_by_manager
+ flash[:notice] = t('flash10')
else
- flash[:notice] = t('flash10')
+ ApplyLeave.destroy(params[:id])
+ flash[:notice] = t('flash8')
end
- redirect_to :action=>"leaves", :id=>@employee.id
+ redirect_to :action => "leaves", :id => employee.id
end
def update_all_application_view
if params[:employee_id] == ""
render :update do |page|
page.replace_html "all-application-view", :text => ""
- end
- return
+ end and return
end
- @employee = Employee.find(params[:employee_id])
- @all_pending_applied_leaves = ApplyLeave.find_all_by_employee_id(params[:employee_id], :conditions=> "approved = false AND viewed_by_manager = false", :order=>"start_date DESC")
- @all_applied_leaves = ApplyLeave.paginate(:page => params[:page], :per_page=>10, :conditions=> ["employee_id = '#{@employee.id}'"], :order=>"start_date DESC")
+ @employee = Employee.find(params[:employee_id])
+ @all_pending_applied_leaves = ApplyLeave.all(conditions: {employee_id: @employee.id,
+ approved: false,
+ viewed_by_manager: false},
+ order: "start_date DESC")
+ @all_applied_leaves = ApplyLeave.paginate(:page => params[:page],
+ :per_page => 10,
+ :conditions => {:employee_id => @employee.id},
+ :order=>"start_date DESC")
render :update do |page|
page.replace_html "all-application-view", :partial => "all_leave_application_lists"
end
@@ -488,18 +363,12 @@ def update_all_application_view
def employee_attendance_pdf
@employee = Employee.find(params[:id])
@attendance_report = EmployeeAttendance.find_all_by_employee_id(@employee.id)
- @leave_types = EmployeeLeaveType.find(:all, :conditions => "status = true")
- @leave_count = EmployeeLeave.find_all_by_employee_id(@employee,:joins=>:employee_leave_type,:conditions=>"status = true")
- @total_leaves = 0
- @leave_types.each do |lt|
- leave_count = EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(@employee.id,lt.id).size
- @total_leaves = @total_leaves + leave_count
+ @leave_types = EmployeeLeaveType.all(:conditions => {:status => true})
+ @leave_count = EmployeeLeave.all(:joins => :employee_leave_type,
+ :conditions => ["employee_leave_types.status IS TRUE AND employee_id = ?", @employee.id])
+ @total_leaves = @leave_types.inject(0) do |sum, lt|
+ sum += EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(@employee.id,lt.id).size
end
render :pdf => 'employee_attendance_pdf'
-
-
- # respond_to do |format|
- # format.pdf { render :layout => false }
- # end
end
end
diff --git a/app/controllers/employee_attendances_controller.rb b/app/controllers/employee_attendances_controller.rb
index 5d4536f4f..a3627995a 100755
--- a/app/controllers/employee_attendances_controller.rb
+++ b/app/controllers/employee_attendances_controller.rb
@@ -19,9 +19,9 @@
class EmployeeAttendancesController < ApplicationController
before_filter :login_required,:configuration_settings_for_hr
filter_access_to :all
-
+
def index
- @departments = EmployeeDepartment.find(:all, :conditions=>"status = true", :order=> "name ASC")
+ @departments = EmployeeDepartment.find(:all, :conditions=>{:status => true}, :order=> "name ASC")
end
def show
@@ -43,7 +43,7 @@ def new
@attendance = EmployeeAttendance.new
@employee = Employee.find(params[:id2])
@date = params[:id]
- @leave_types = EmployeeLeaveType.find(:all, :conditions=>"status = true", :order=>"name ASC")
+ @leave_types = EmployeeLeaveType.find(:all, :conditions=>{:status => true}, :order=>"name ASC")
respond_to do |format|
format.js {render :action => 'new'}
@@ -54,7 +54,7 @@ def create
@attendance = EmployeeAttendance.new(params[:employee_attendance])
@employee = Employee.find(params[:employee_attendance][:employee_id])
@date = params[:employee_attendance][:attendance_date]
- @reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> "employee_leave_type_id = '#{@attendance.employee_leave_type_id}'")
+ @reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> {:employee_leave_type_id => @attendance.employee_leave_type_id})
if @attendance.save
leaves_taken = @reset_count.leave_taken
if @attendance.is_half_day
@@ -75,7 +75,7 @@ def create
def edit
@attendance = EmployeeAttendance.find(params[:id])
@employee = Employee.find(@attendance.employee_id)
- @leave_types = EmployeeLeaveType.find(:all, :conditions=>"status = true", :order=>"name ASC")
+ @leave_types = EmployeeLeaveType.find(:all, :conditions=>{:status => true}, :order=>"name ASC")
respond_to do |format|
format.js {render :action => 'edit'}
end
@@ -83,7 +83,7 @@ def edit
def update
@attendance = EmployeeAttendance.find params[:id]
- @reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> "employee_leave_type_id = '#{@attendance.employee_leave_type_id}'")
+ @reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> {:employee_leave_type_id => @attendance.employee_leave_type_id})
leaves_taken = @reset_count.leave_taken
day_status = @attendance.is_half_day
leave_type = EmployeeLeaveType.find_by_id(@attendance.employee_leave_type_id)
@@ -110,7 +110,7 @@ def update
leave = leaves_taken.to_f-(1.0)
end
@reset_count.update_attributes(:leave_taken => leave)
- @new_reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> "employee_leave_type_id = '#{@attendance.employee_leave_type_id}'")
+ @new_reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> {:employee_leave_type_id => @attendance.employee_leave_type_id})
leaves_taken = @new_reset_count.leave_taken
if @attendance.is_half_day
leave = leaves_taken.to_f+(0.5)
@@ -129,7 +129,7 @@ def update
def destroy
@attendance = EmployeeAttendance.find(params[:id])
- @reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> "employee_leave_type_id = '#{@attendance.employee_leave_type_id}'")
+ @reset_count = EmployeeLeave.find_by_employee_id(@attendance.employee_id, :conditions=> {:employee_leave_type_id => @attendance.employee_leave_type_id})
leaves_taken = @reset_count.leave_taken
if @attendance.is_half_day
leave = leaves_taken.to_f-(0.5)
diff --git a/app/controllers/employee_controller.rb b/app/controllers/employee_controller.rb
index ab494d085..c145cde5b 100755
--- a/app/controllers/employee_controller.rb
+++ b/app/controllers/employee_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeController < ApplicationController
before_filter :login_required,:configuration_settings_for_hr
filter_access_to :all
@@ -32,13 +31,13 @@ def add_category
redirect_to :controller => "employee", :action => "add_category"
end
end
-
+
def edit_category
@category = EmployeeCategory.find(params[:id])
employees = Employee.find(:all ,:conditions=>"employee_category_id = #{params[:id]}")
if request.post?
if (params[:category][:status] == 'false' and employees.blank?) or params[:category][:status] == 'true'
-
+
if @category.update_attributes(params[:category])
unless @category.status
position = EmployeePosition.find_all_by_employee_category_id(@category.id)
@@ -52,7 +51,7 @@ def edit_category
else
flash[:warn_notice] = "
#{t('flash2')}
"
end
-
+
end
end
@@ -87,7 +86,7 @@ def add_position
def edit_position
@categories = EmployeeCategory.find(:all)
@position = EmployeePosition.find(params[:id])
- employees = Employee.find(:all ,:conditions=>"employee_position_id = #{params[:id]}")
+ employees = Employee.find(:all, :conditions => { :employee_position_id => params[:id] })
if request.post?
if (params[:position][:status] == 'false' and employees.blank?) or params[:position][:status] == 'true'
if @position.update_attributes(params[:position])
@@ -101,9 +100,9 @@ def edit_position
end
def delete_position
- employees = Employee.find(:all ,:conditions=>"employee_position_id = #{params[:id]}")
+ employees = Employee.find(:all ,:conditions => { :employee_position_id => params[:id] })
if employees.empty?
- employees = ArchivedEmployee.find(:all ,:conditions=>"employee_position_id = #{params[:id]}")
+ employees = ArchivedEmployee.find(:all ,:conditions => { :employee_position_id => params[:id] })
end
if employees.empty?
EmployeePosition.find(params[:id]).destroy
@@ -128,7 +127,7 @@ def add_department
def edit_department
@department = EmployeeDepartment.find(params[:id])
- employees = Employee.find(:all ,:conditions=>"employee_department_id = #{params[:id]}")
+ employees = Employee.find(:all, :conditions => { :employee_department_id => params[:id] })
if request.post?
if (params[:department][:status] == 'false' and employees.blank?) or params[:department][:status] == 'true'
if @department.update_attributes(params[:department])
@@ -141,9 +140,9 @@ def edit_department
end
def delete_department
- employees = Employee.find(:all ,:conditions=>"employee_department_id = #{params[:id]}")
+ employees = Employee.find(:all, :conditions => { :employee_department_id => params[:id] })
if employees.empty?
- employees = ArchivedEmployee.find(:all ,:conditions=>"employee_department_id = #{params[:id]}")
+ employees = ArchivedEmployee.find(:all, :conditions => { :employee_department_id => params[:id] })
end
if employees.empty?
EmployeeDepartment.find(params[:id]).destroy
@@ -245,7 +244,7 @@ def add_additional_details
end
end
end
-
+
def change_field_priority
@additional_field = AdditionalField.find(params[:id])
priority = @additional_field.priority
@@ -391,7 +390,7 @@ def admission2
@employee = Employee.find(params[:id])
@selected_value = Configuration.default_country
if request.post? and @employee.update_attributes(params[:employee])
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
if sms_setting.application_sms_active and sms_setting.employee_sms_active
recipient = ["#{@employee.mobile_phone}"]
message = "#{t('joining_info')} #{@employee.first_name}. #{t('username')}: #{@employee.employee_number}, #{t('password')}: #{@employee.employee_number}123. #{t('change_password_after_login')}"
@@ -401,7 +400,7 @@ def admission2
redirect_to :action => "admission3", :id => @employee.id
end
end
-
+
def edit2
@employee = Employee.find(params[:id])
@countries = Country.find(:all)
@@ -436,7 +435,7 @@ def admission3
redirect_to :action => "admission3_1", :id => @employee.id
end
end
-
+
def edit3
@employee = Employee.find(params[:id])
@bank_fields = BankField.find(:all, :conditions=>"status = true")
@@ -538,7 +537,7 @@ def edit_privilege
redirect_to :action => 'admission4',:id => @employee.id
end
end
-
+
def edit3_1
@employee = Employee.find(params[:id])
@additional_fields = AdditionalField.find(:all, :conditions=>"status = true")
@@ -572,7 +571,7 @@ def admission4
flash[:notice]=t('flash25')
redirect_to :controller => "payroll", :action => "manage_payroll", :id=>@employee.id
end
-
+
end
def view_rep_manager
@@ -764,8 +763,8 @@ def profile_pdf
@bank_details = EmployeeBankDetail.find_all_by_employee_id(@employee.id)
@additional_details = EmployeeAdditionalDetail.find_all_by_employee_id(@employee.id)
render :pdf => 'profile_pdf'
-
-
+
+
# respond_to do |format|
# format.pdf { render :layout => false }
# end
@@ -887,7 +886,7 @@ def create_monthly_payslip
flash[:warn_notice] = "#{t('flash45')} #{params[:salary_date]}"
end
end
-
+
end
def view_payslip
@@ -1134,7 +1133,7 @@ def edit_rejected_payslip
@employee_additional_categories = IndividualPayslipCategory.find_all_by_employee_id(@employee.id, :conditions=>"include_every_month = true")
@new_payslip_category = IndividualPayslipCategory.find_all_by_employee_id_and_salary_date(@employee.id,nil)
@user = current_user
-
+
if request.post?
salary_date = Date.parse(params[:salary_date])
@@ -1145,7 +1144,7 @@ def edit_rejected_payslip
payslip_exists.each do |p|
p.delete
end
-
+
params[:manage_payroll].each_pair do |k, v|
row_id = EmployeeSalaryStructure.find_by_employee_id_and_payroll_category_id(@employee, k)
category_name = PayrollCategory.find(k).name
@@ -1171,7 +1170,7 @@ def edit_rejected_payslip
:body=>body ))
flash[:notice] = "#{@employee.first_name} #{t('flash27')} #{params[:salary_date]}"
redirect_to :controller => "employee", :action => "profile", :id=> @employee.id
-
+
end
end
def update_rejected_payslip
@@ -1442,7 +1441,7 @@ def department_payslip_pdf
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
@salary_date = params[:salary_date] if params[:salary_date]
-
+
render :pdf => 'department_payslip_pdf',
:margin => { :top=> 10,
:bottom => 10,
@@ -1504,20 +1503,20 @@ def individual_payslip_pdf
@net_amount = @net_non_deductionable_amount - @net_deductionable_amount
render :pdf => 'individual_payslip_pdf'
-
+
# respond_to do |format|
# format.pdf { render :layout => false }
# end
end
def employee_individual_payslip_pdf
- @employee = Employee.find(:first,:conditions=>"id=#{params[:id]}")
+ @employee = Employee.find(:first, :conditions => { :id => params[:id] })
if @employee.blank?
- @employee = ArchivedEmployee.find(:first,:conditions=>"former_id=#{params[:id]}")
+ @employee = ArchivedEmployee.find(:first, :conditions => { :former_id => params[:id] })
@employee.id = @employee.former_id
end
@bank_details = EmployeeBankDetail.find_all_by_employee_id(@employee.id)
- @employee ||= ArchivedEmployee.find(:first,:conditions=>"former_id=#{params[:id]}")
+ @employee ||= ArchivedEmployee.find(:first, :conditions => { :former_id => params[:id] })
@department = EmployeeDepartment.find(@employee.employee_department_id).name
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
@category = EmployeeCategory.find(@employee.employee_category_id).name
@@ -1565,7 +1564,7 @@ def employee_individual_payslip_pdf
@net_deductionable_amount = @individual_category_deductionable + @deductionable_amount
@net_amount = @net_non_deductionable_amount - @net_deductionable_amount
-
+
render :pdf => 'individual_payslip_pdf'
# respond_to do |format|
# format.pdf { render :layout => false }
diff --git a/app/controllers/event_controller.rb b/app/controllers/event_controller.rb
index 28910391d..02a865803 100755
--- a/app/controllers/event_controller.rb
+++ b/app/controllers/event_controller.rb
@@ -19,7 +19,7 @@
class EventController < ApplicationController
before_filter :login_required
filter_access_to :all
-
+
def index
@events = Event.new(params[:events])
if params[:id].nil?
@@ -160,7 +160,7 @@ def confirm_event
end
@users = User.active.find(:all)
reminder_recipient_ids << @users.map(&:id)
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
if sms_setting.application_sms_active and sms_setting.event_news_sms_active
recipients = []
@users.each do |u|
@@ -193,7 +193,7 @@ def confirm_event
end
else
recipients = []
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
batch_event = BatchEvent.find_all_by_event_id(event.id)
unless batch_event.empty?
batch_event.each do |b|
@@ -252,10 +252,10 @@ def confirm_event
def cancel_event
event = Event.find(params[:id])
- batch_event = BatchEvent.find(:all, :conditions=>"event_id = #{params[:id]}")
- dept_event = EmployeeDepartmentEvent.find(:all, :conditions=>"event_id = #{params[:id]}")
+ batch_event = BatchEvent.find(:all, :conditions => { :event_id => params[:id] })
+ dept_event = EmployeeDepartmentEvent.find(:all, :conditions => { :event_id => params[:id] })
event.destroy
-
+
batch_event.each { |x| x.destroy } unless batch_event.nil?
dept_event.each { |x| x.destroy } unless dept_event.nil?
flash[:notice] ="#{t('flash3')}"
diff --git a/app/controllers/exam_controller.rb b/app/controllers/exam_controller.rb
index 615ca80b8..84bc08d65 100755
--- a/app/controllers/exam_controller.rb
+++ b/app/controllers/exam_controller.rb
@@ -1,27 +1,26 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamController < ApplicationController
before_filter :login_required
before_filter :protect_other_student_data
before_filter :restrict_employees_from_exam
filter_access_to :all
-
+
def index
end
@@ -55,7 +54,7 @@ def update_exam_form
page.replace_html 'flash', :text=>''
end
end
-
+
else
render(:update) do |page|
page.replace_html 'flash', :text=>"
#{t('flash_msg9')}
"
@@ -82,7 +81,7 @@ def publish
unless @exams.empty?
ExamGroup.update(@exam_group.id,:is_published=>true) if params[:status] == "schedule"
ExamGroup.update(@exam_group.id,:result_published=>true) if params[:status] == "result"
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
if sms_setting.application_sms_active and sms_setting.exam_result_schedule_sms_active
students = @batch.students
students.each do |s|
@@ -405,7 +404,7 @@ def generated_report2_pdf
@students = @batch.students
@exam_groups = ExamGroup.find(:all,:conditions=>{:batch_id=>@batch.id})
render :pdf => 'generated_report_pdf'
-
+
# respond_to do |format|
# format.pdf { render :layout => false }
# end
@@ -430,7 +429,7 @@ def student_batch_rank_pdf
@ranked_students = @batch.find_batch_rank
render :pdf => "student_batch_rank_pdf"
end
-
+
def course_rank
end
@@ -978,8 +977,6 @@ def student_combined_report_pdf
render :pdf=>"student_combined_report_pdf"#, :show_as_html=>true
end
-
-
def select_report_type
unless params[:batch_id].nil? or params[:batch_id]==""
@batch = Batch.find(params[:batch_id])
@@ -1089,9 +1086,8 @@ def generated_report4
@students = Student.find_all_by_id(params[:student])
end
end
-
-
end
+
def generated_report4_pdf
#grouped-exam-report-for-batch
if params[:student].nil?
@@ -1181,14 +1177,14 @@ def previous_years_marks_overview
end
end
-
+
def previous_years_marks_overview_pdf
@student = Student.find(params[:student])
@all_batches = @student.all_batches
render :pdf => 'previous_years_marks_overview_pdf',
:orientation => 'Landscape'
-
-
+
+
end
def academic_report
@@ -1364,7 +1360,7 @@ def update_batch
end
-
+
#GRAPHS
def graph_for_generated_report
@@ -1393,7 +1389,7 @@ def graph_for_generated_report
end
end
- bargraph = BarFilled.new()
+ bargraph = BarFilled.new
bargraph.width = 1;
bargraph.colour = '#bb0000';
bargraph.dot_size = 5;
@@ -1492,7 +1488,7 @@ def graph_for_previous_years_marks_overview
student.all_batches.each do |b|
x_labels << b.name
- exam = ExamScore.new()
+ exam = ExamScore.new
data << exam.batch_wise_aggregate(student,b)
end
diff --git a/app/controllers/exam_groups_controller.rb b/app/controllers/exam_groups_controller.rb
index cad6f0679..a81b9bc9a 100755
--- a/app/controllers/exam_groups_controller.rb
+++ b/app/controllers/exam_groups_controller.rb
@@ -1,28 +1,29 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamGroupsController < ApplicationController
before_filter :login_required
filter_access_to :all
before_filter :initial_queries
+ before_filter :check_admin_privileges, :only => [:new]
before_filter :protect_other_student_data
before_filter :restrict_employees_from_exam
before_filter :protect_other_batch_exams, :only => [:show, :index]
+ before_filter :check_employee_privileges, :only => [:show, :index, :destroy]
in_place_edit_with_validation_for :exam_group, :name
in_place_edit_with_validation_for :exam, :maximum_marks
in_place_edit_with_validation_for :exam, :minimum_marks
@@ -31,46 +32,35 @@ class ExamGroupsController < ApplicationController
def index
@sms_setting = SmsSetting.new
@exam_groups = @batch.exam_groups
- if @current_user.employee?
- @user_privileges = @current_user.privileges
- @employee_subjects= @current_user.employee_record.subjects.map { |n| n.id}
- if @employee_subjects.empty? and !@user_privileges.map{|p| p.name}.include?('ExaminationControl') and !@user_privileges.map{|p| p.name}.include?('EnterResults')
- flash[:notice] = "#{t('flash_msg4')}"
- redirect_to :controller => 'user', :action => 'dashboard'
- end
- end
end
def new
- @user_privileges = @current_user.privileges
@cce_exam_categories = CceExamCategory.all if @batch.cce_enabled?
- if !@current_user.admin? and !@user_privileges.map{|p| p.name}.include?('ExaminationControl') and !@user_privileges.map{|p| p.name}.include?('EnterResults')
- flash[:notice] = "#{t('flash_msg4')}"
- redirect_to :controller => 'user', :action => 'dashboard'
- end
end
def create
@exam_group = ExamGroup.new(params[:exam_group])
@exam_group.batch_id = @batch.id
- @type = @exam_group.exam_type
- @error=false
- unless @type=="Grades"
+ @type = @exam_group.exam_type
+ @error = false
+
+ if @type != 'Grades'
params[:exam_group][:exams_attributes].each do |exam|
- if exam[1][:_delete].to_s=="0" and @error==false
- unless exam[1][:maximum_marks].present?
+ if exam[1][:_delete].to_s == '0' and @error == false
+ if exam[1][:maximum_marks].blank?
@exam_group.errors.add_to_base("#{t('maxmarks_cant_be_blank')}")
- @error=true
+ @error = true
end
- unless exam[1][:minimum_marks].present?
+ if exam[1][:minimum_marks].blank?
@exam_group.errors.add_to_base("#{t('minmarks_cant_be_blank')}")
- @error=true
+ @error = true
end
end
end
end
- if @error==false and @exam_group.save
- flash[:notice] = "#{t('flash1')}"
+
+ if @error == false and @exam_group.save
+ flash[:notice] = "#{t('flash1')}"
redirect_to batch_exam_groups_path(@batch)
else
@cce_exam_categories = CceExamCategory.all if @batch.cce_enabled?
@@ -79,12 +69,12 @@ def create
end
def edit
- @exam_group = ExamGroup.find params[:id]
+ @exam_group = ExamGroup.find(params[:id])
@cce_exam_categories = CceExamCategory.all if @batch.cce_enabled?
end
def update
- @exam_group = ExamGroup.find params[:id]
+ @exam_group = ExamGroup.find(params[:id])
if @exam_group.update_attributes(params[:exam_group])
flash[:notice] = "#{t('flash2')}"
redirect_to [@batch, @exam_group]
@@ -96,40 +86,45 @@ def update
def destroy
@exam_group = ExamGroup.find(params[:id], :include => :exams)
- if @current_user.employee?
- @employee_subjects= @current_user.employee_record.subjects.map { |n| n.id}
- if @employee_subjects.empty? and !@current_user.privileges.map{|p| p.name}.include?("ExaminationControl") and !@current_user.privileges.map{|p| p.name}.include?("EnterResults")
- flash[:notice] = "#{t('flash_msg4')}"
- redirect_to :controller => 'user', :action => 'dashboard'
- end
- end
flash[:notice] = "#{t('flash3')}" if @exam_group.destroy
redirect_to batch_exam_groups_path(@batch)
end
def show
@exam_group = ExamGroup.find(params[:id], :include => :exams)
+ end
+
+ private
+
+ def initial_queries
+ @batch = Batch.find(params[:batch_id], :include => :course) unless params[:batch_id].nil?
+ @course = @batch.course unless @batch.nil?
+ end
+
+ def check_employee_privileges
if @current_user.employee?
- @user_privileges = @current_user.privileges
- @employee_subjects= @current_user.employee_record.subjects.map { |n| n.id}
- if @employee_subjects.empty? and !@current_user.privileges.map{|p| p.name}.include?("ExaminationControl") and !@current_user.privileges.map{|p| p.name}.include?("EnterResults")
+ @user_privileges = @current_user.privileges
+ @employee_subjects = @current_user.employee_record.subject_ids
+ if @employee_subjects.empty? and !@user_privileges.find_by_name('ExaminationControl') and !@user_privileges.find_by_name('EnterResults')
flash[:notice] = "#{t('flash_msg4')}"
redirect_to :controller => 'user', :action => 'dashboard'
end
end
end
- private
- def initial_queries
- @batch = Batch.find params[:batch_id], :include => :course unless params[:batch_id].nil?
- @course = @batch.course unless @batch.nil?
+ def check_admin_privileges
+ @user_privileges = @current_user.privileges
+ if !@current_user.admin? and !@user_privileges.find_by_name('ExaminationControl') and !@user_privileges.find_by_name('EnterResults')
+ flash[:notice] = "#{t('flash_msg4')}"
+ redirect_to :controller => 'user', :action => 'dashboard'
+ end
end
def protect_other_batch_exams
@user_privileges = @current_user.privileges
- if !@current_user.admin? and !@user_privileges.map{|p| p.name}.include?('ExaminationControl') and !@user_privileges.map{|p| p.name}.include?('EnterResults')
+ if !@current_user.admin? and !@user_privileges.find_by_name('ExaminationControl') and !@user_privileges.find_by_name('EnterResults')
@user_subjects = @current_user.employee_record.subjects.all(:group => 'batch_id')
- @user_batches = @user_subjects.map{|x|x.batch_id} unless @current_user.employee_record.blank? or @user_subjects.nil?
+ @user_batches = @user_subjects.map { |x| x.batch_id } unless @current_user.employee_record.blank? or @user_subjects.nil?
unless @user_batches.include?(params[:batch_id].to_i)
flash[:notice] = "#{t('flash_msg4')}"
diff --git a/app/controllers/exam_reports_controller.rb b/app/controllers/exam_reports_controller.rb
index ed10eb43e..0763f311d 100644
--- a/app/controllers/exam_reports_controller.rb
+++ b/app/controllers/exam_reports_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamReportsController < ApplicationController
before_filter :login_required
@@ -250,7 +249,7 @@ def consolidated_exam_report_pdf
:page_size=> 'A3'
end
-
+
private
diff --git a/app/controllers/exam_scores_controller.rb b/app/controllers/exam_scores_controller.rb
index fb10af258..ef8388e1b 100755
--- a/app/controllers/exam_scores_controller.rb
+++ b/app/controllers/exam_scores_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamScoresController < ApplicationController
before_filter :login_required
in_place_edit_for :exam_score, :score
diff --git a/app/controllers/exams_controller.rb b/app/controllers/exams_controller.rb
index c4597b3c2..98777dcb6 100755
--- a/app/controllers/exams_controller.rb
+++ b/app/controllers/exams_controller.rb
@@ -1,36 +1,33 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamsController < ApplicationController
before_filter :login_required
before_filter :query_data
+ before_filter :load_exam, :only => [:edit, :update, :show, :destroy]
before_filter :protect_other_student_data
- before_filter :restrict_employees_from_exam, :except=>[:edit, :destroy]
- before_filter :restrict_employees_from_exam_edit, :only=>[:edit, :destroy]
+ before_filter :restrict_employees_from_exam, :except => [:edit, :destroy]
+ before_filter :restrict_employees_from_exam_edit, :only => [:edit, :destroy]
filter_access_to :all
def new
@exam = Exam.new
- @subjects = @batch.subjects
- if @current_user.employee? and !@current_user.privileges.map{|m| m.name}.include?("ExaminationControl")
- @subjects= Subject.find(:all,:joins=>"INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id} ")
- end
- @subjects.reject!{|s| (@exam_group.exams.map{|e| e.subject_id}.include?(s.id))}
+ load_subjects
+ @subjects = @subjects.not_in_exam_group(@exam_group)
if @subjects.blank?
flash[:notice] = "#{t('flash_msg4')}"
redirect_to [@batch, @exam_group]
@@ -39,96 +36,78 @@ def new
def create
@exam = Exam.new(params[:exam])
- @exam.exam_group_id = @exam_group.id
- @error=false
- unless @exam_group.exam_type=="Grades"
+ @exam.exam_group = @exam_group
+
+ @error = false
+
+ if @exam_group.exam_type != 'Grades'
unless params[:exam][:maximum_marks].present?
@exam.errors.add_to_base("#{t('maxmarks_cant_be_blank')}")
- @error=true
+ @error = true
end
unless params[:exam][:minimum_marks].present?
@exam.errors.add_to_base("#{t('minmarks_cant_be_blank')}")
- @error=true
+ @error = true
end
end
- if @error==false and @exam.save
+
+ if !@error and @exam.save
flash[:notice] = "#{t('flash_msg10')}"
redirect_to [@batch, @exam_group]
else
- @subjects = @batch.subjects
- if @current_user.employee? and !@current_user.privileges.map{|m| m.name}.include?("ExaminationControl")
- @subjects= Subject.find(:all,:joins=>"INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id} ")
- end
+ load_subjects
render 'new'
end
end
def edit
- @exam = Exam.find params[:id], :include => :exam_group
@subjects = @exam_group.batch.subjects
- if @current_user.employee? and !@current_user.privileges.map{|m| m.name}.include?("ExaminationControl")
- @subjects= Subject.find(:all,:joins=>"INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id} ")
- unless @subjects.map{|m| m.id}.include?(@exam.subject_id)
- flash[:notice] = "#{t('flash_msg4')}"
- redirect_to [@batch, @exam_group]
- end
- end
+ check_for_employee_with_examination_control_access
end
def update
- @exam = Exam.find params[:id], :include => :exam_group
-
if @exam.update_attributes(params[:exam])
flash[:notice] = "#{t('flash1')}"
redirect_to [@exam_group, @exam]
else
- @subjects = @batch.subjects
- if @current_user.employee? and !@current_user.privileges.map{|m| m.name}.include?("ExaminationControl")
- @subjects= Subject.find(:all,:joins=>"INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id} ")
- end
+ load_subjects
render 'edit'
end
end
def show
- @employee_subjects=[]
- @employee_subjects= @current_user.employee_record.subjects.map { |n| n.id} if @current_user.employee?
- @exam = Exam.find params[:id], :include => :exam_group
- unless @employee_subjects.include?(@exam.subject_id) or @current_user.admin? or @current_user.privileges.map{|p| p.name}.include?('ExaminationControl') or @current_user.privileges.map{|p| p.name}.include?('EnterResults')
+ @employee_subjects = []
+ @employee_subjects = @current_user.employee_record.subject_ids if @current_user.employee?
+ unless @employee_subjects.include?(@exam.subject_id) or @current_user.admin? or @current_user.privileges.map(&:name).include?('ExaminationControl') or @current_user.privileges.map(&:name).include?('EnterResults')
flash[:notice] = "#{t('flash_msg6')}"
- redirect_to :controller=>"user", :action=>"dashboard"
+ redirect_to :controller => 'user', :action => 'dashboard'
end
+
exam_subject = Subject.find(@exam.subject_id)
- is_elective = exam_subject.elective_group_id
- if is_elective == nil
- @students = @batch.students.by_first_name
- else
+ is_elective = exam_subject.elective_group_id
+
+ if is_elective
assigned_students = StudentsSubject.find_all_by_subject_id(exam_subject.id)
@students = []
assigned_students.each do |s|
student = Student.find_by_id(s.student_id)
- @students.push [student.first_name, student.id, student] unless student.nil?
+ @students.push [student.first_name, student.id, student] if student
end
@ordered_students = @students.sort
- @students=[]
+ @students = []
@ordered_students.each do|s|
@students.push s[2]
end
+ else
+ @students = @batch.students.by_first_name
end
- @config = Configuration.get_config_value('ExamResultType') || 'Marks'
@grades = @batch.grading_level_list
end
def destroy
- @exam = Exam.find params[:id], :include => :exam_group
- if @current_user.employee? and !@current_user.privileges.map{|m| m.name}.include?("ExaminationControl")
- @subjects= Subject.find(:all,:joins=>"INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id} ")
- unless @subjects.map{|m| m.id}.include?(@exam.subject_id)
- flash[:notice] = "#{t('flash_msg4')}"
- redirect_to [@batch, @exam_group] and return
- end
- end
+ check_for_employee_with_examination_control_access
+
if @exam.destroy
batch_id = @exam.exam_group.batch_id
batch_event = BatchEvent.find_by_event_id_and_batch_id(@exam.event_id,batch_id)
@@ -144,7 +123,7 @@ def save_scores
@exam = Exam.find(params[:id])
@error= false
params[:exam].each_pair do |student_id, details|
- @exam_score = ExamScore.find(:first, :conditions => {:exam_id => @exam.id, :student_id => student_id} )
+ @exam_score = ExamScore.find(:first, :conditions => { :exam_id => @exam.id, :student_id => student_id })
if @exam_score.nil?
if details[:marks].to_f <= @exam.maximum_marks.to_f
ExamScore.create do |score|
@@ -169,22 +148,47 @@ def save_scores
end
end
end
+
flash[:warn_notice] = "#{t('flash2')}" if @error == true
- flash[:notice] = "#{t('flash3')}" if @error == false
+ flash[:notice] = "#{t('flash3')}" if @error == false
+
redirect_to [@exam_group, @exam]
end
-
private
+
def query_data
@exam_group = ExamGroup.find(params[:exam_group_id], :include => :batch)
- @batch = @exam_group.batch
- @course = @batch.course
+ @batch = @exam_group.batch
+ @course = @batch.course
+ end
+
+ def load_exam
+ @exam = Exam.find(params[:id], :include => :exam_group)
+ end
+
+ def load_subjects
+ @subjects = @batch.subjects
+ if @current_user.employee? and !@current_user.privileges.map(&:name).include?('ExaminationControl')
+ @subjects = Subject.find(:all, :joins => %Q{
+ INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id
+ AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id} })
+ end
+ end
+
+ def check_for_employee_with_examination_control_access
+ if @current_user.employee? and !@current_user.privileges.map(&:name).include?('ExaminationControl')
+ @subjects = Subject.find(:all, :joins => "INNER JOIN employees_subjects ON employees_subjects.subject_id = subjects.id AND employee_id = #{@current_user.employee_record.id} AND batch_id = #{@batch.id}")
+ unless @subjects.map(&:id).include?(@exam.subject_id)
+ flash[:notice] = "#{t('flash_msg4')}"
+ redirect_to [@batch, @exam_group]
+ end
+ end
end
def restrict_employees_from_exam_edit
if @current_user.employee?
- if !@current_user.privileges.map{|p| p.name}.include?("ExaminationControl")
+ if !@current_user.privileges.map{|p| p.name}.include?('ExaminationControl')
flash[:notice] = "#{t('flash_msg4')}"
redirect_to :back
else
diff --git a/app/controllers/fa_criterias_controller.rb b/app/controllers/fa_criterias_controller.rb
index 5491e7640..6ae3b2ff9 100644
--- a/app/controllers/fa_criterias_controller.rb
+++ b/app/controllers/fa_criterias_controller.rb
@@ -1,32 +1,32 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FaCriteriasController < ApplicationController
before_filter :login_required
filter_access_to :all
+
def index
- @fa_group=FaGroup.find(params[:fa_group_id])
- @fa_criterias=@fa_group.fa_criterias
+ @fa_group = FaGroup.find(params[:fa_group_id])
+ @fa_criterias = @fa_group.fa_criterias
end
def show
- @fa_criteria=FaCriteria.find(params[:id])
- @descriptives=@fa_criteria.descriptive_indicators
+ @fa_criteria = FaCriteria.find(params[:id])
+ @descriptives = @fa_criteria.descriptive_indicators
end
end
diff --git a/app/controllers/fa_groups_controller.rb b/app/controllers/fa_groups_controller.rb
index bfd8e054c..1690b1df8 100644
--- a/app/controllers/fa_groups_controller.rb
+++ b/app/controllers/fa_groups_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FaGroupsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -110,7 +109,7 @@ def update_subject_fa_groups
a=s.save
end
end
-
+
# flash[:notice] = (!a ? "not saved" : "saved" )
if a
flash[:notice] = "FA groups successfully assigned for the selected subject."
diff --git a/app/controllers/finance_controller.rb b/app/controllers/finance_controller.rb
index 3477279ed..0076b8038 100755
--- a/app/controllers/finance_controller.rb
+++ b/app/controllers/finance_controller.rb
@@ -1,38 +1,37 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceController < ApplicationController
before_filter :login_required,:configuration_settings_for_finance
filter_access_to :all
-
+
def index
@hr = Configuration.find_by_config_value("HR")
end
-
+
def automatic_transactions
@cat_names = ["'Fee'","'Salary'"]
FedenaPlugin::FINANCE_CATEGORY.each do |category|
@cat_names << "'#{category[:category_name]}'"
end
@triggers = FinanceTransactionTrigger.all
- @categories = FinanceTransactionCategory.find(:all ,:conditions => ["name NOT IN (#{@cat_names.join(',')}) and is_income=1 and deleted=0 "])
+ @categories = FinanceTransactionCategory.all(:conditions => ['name NOT IN (?) AND is_income = ? AND deleted = ?', @cat_names.join(','), true, false])
end
-
+
def donation
@donation = FinanceDonation.new(params[:donation])
if request.post? and @donation.save
@@ -50,12 +49,16 @@ def donation_edit
@transaction = FinanceTransaction.find(@donation.transaction_id)
if request.post? and @donation.update_attributes(params[:donation])
donor = "#{t('flash15')} #{params[:donation][:donor]}"
- FinanceTransaction.update(@transaction.id, :description => params[:donation][:description], :title=>donor, :amount=>params[:donation][:amount], :transaction_date=>@donation.transaction_date)
+ FinanceTransaction.update(@transaction.id,
+ :description => params[:donation][:description],
+ :title => donor,
+ :amount => params[:donation][:amount],
+ :transaction_date => @donation.transaction_date)
redirect_to :action => 'donors'
flash[:notice] = "#{t('flash16')}"
end
end
-
+
def donation_delete
@donation = FinanceDonation.find(params[:id])
@transaction = FinanceTransaction.find(@donation.transaction_id)
@@ -70,7 +73,6 @@ def donation_receipt_pdf
@donation = FinanceDonation.find(params[:id])
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
render :pdf => 'donation_receipt_pdf'
-
end
def donors
@@ -96,7 +98,7 @@ def expense_create
def expense_edit
@transaction = FinanceTransaction.find(params[:id])
- @categories = FinanceTransactionCategory.all(:conditions =>"name != 'Salary' and is_income = false" )
+ @categories = FinanceTransactionCategory.all(:conditions => ['name != ? AND is_income = ?', 'Salary', false])
if request.post? and @transaction.update_attributes(params[:transaction])
flash[:notice] = "#{t('flash4')}"
redirect_to :action=>:expense_list
@@ -123,26 +125,25 @@ def expense_list_pdf
@expenses = FinanceTransaction.expenses(@start_date,@end_date)
render :pdf => 'expense_list_pdf'
end
-
+
def income_create
- @finance_transaction = FinanceTransaction.new()
+ @finance_transaction = FinanceTransaction.new
@categories = FinanceTransactionCategory.income_categories
if @categories.empty?
flash[:notice] = "#{t('flash5')}"
end
- if request.post?
+ if request.post?
@finance_transaction = FinanceTransaction.new(params[:finance_transaction])
if @finance_transaction.save
flash[:notice] = "#{t('flash6')}"
- redirect_to :action=>"income_create"
+ redirect_to :action => "income_create"
else
- render :action=>"income_create"
+ render :action => "income_create"
end
end
end
def monthly_income
-
end
def income_edit
@@ -151,10 +152,10 @@ def income_edit
@cat_names << "'#{category[:category_name]}'"
end
@transaction = FinanceTransaction.find(params[:id])
- @categories = FinanceTransactionCategory.all(:conditions => "is_income=true and name NOT IN (#{@cat_names.join(',')})")
+ @categories = FinanceTransactionCategory.all(:conditions => ["is_income = ? and name NOT IN (?)", true, @cat_names.join(',')])
if request.post? and @transaction.update_attributes(params[:transaction])
flash[:notice] = "#{t('flash7')}"
- redirect_to :action=> 'income_list'
+ redirect_to :action => 'income_list'
end
end
@@ -175,21 +176,19 @@ def delete_transaction
else
redirect_to :action=>'expense_list'
end
-
-
end
def income_list_update
@start_date = (params[:start_date]).to_date
- @end_date = (params[:end_date]).to_date
- @incomes = FinanceTransaction.incomes(@start_date,@end_date)
+ @end_date = (params[:end_date]).to_date
+ @incomes = FinanceTransaction.incomes(@start_date, @end_date)
end
def income_details
@start_date = params[:start].to_date
- @end_date = params[:end].to_date
+ @end_date = params[:end].to_date
@income_category = FinanceTransactionCategory.find(params[:id])
- @incomes = @income_category.finance_transactions.find(:all,:conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'"])
+ @incomes = @income_category.finance_transactions.find(:all, :conditions => { :transaction_date => @start_date..@end_date })
end
def income_list_pdf
@@ -197,34 +196,34 @@ def income_list_pdf
@start_date = (params[:start_date]).to_date
@end_date = (params[:end_date]).to_date
@incomes = FinanceTransaction.incomes(@start_date,@end_date)
- render :pdf => 'income_list_pdf', :zoom=>0.68#, :show_as_html=>true
+ render :pdf => 'income_list_pdf', :zoom => 0.68#, :show_as_html=>true
end
def income_details_pdf
@start_date = params[:start_date].to_date
@end_date = params[:end_date].to_date
@income_category = FinanceTransactionCategory.find(params[:id])
- @incomes = @income_category.finance_transactions.find(:all,:conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'"])
+ @incomes = @income_category.finance_transactions.find(:all, :conditions => { :transaction_date => @start_date..@end_date })
render :pdf => 'income_details_pdf'
end
def categories
- @categories = FinanceTransactionCategory.all(:conditions => {:deleted => false},:order=>'name asc')
- @fixed_categories = @categories.reject{|c|!c.is_fixed}
- @other_categories = @categories.reject{|c|c.is_fixed}
+ @categories = FinanceTransactionCategory.all(:conditions => { :deleted => false }, :order => 'name ASC')
+ @fixed_categories = @categories.reject { |c| !c.fixed? }
+ @other_categories = @categories.reject { |c| c.fixed? }
end
def category_new
@finance_transaction_category = FinanceTransactionCategory.new
end
-
+
def category_create
@finance_category = FinanceTransactionCategory.new(params[:finance_category])
render :update do |page|
if @finance_category.save
@categories = FinanceTransactionCategory.all(:conditions => {:deleted => false})
- @fixed_categories = @categories.reject{|c|!c.is_fixed}
- @other_categories = @categories.reject{|c|c.is_fixed}
+ @fixed_categories = @categories.reject { |c| !c.fixed? }
+ @other_categories = @categories.reject { |c| c.fixed? }
page.replace_html 'form-errors', :text => ''
page << "Modalbox.hide();"
page.replace_html 'category-list', :partial => 'category_list'
@@ -241,8 +240,8 @@ def category_delete
@finance_category = FinanceTransactionCategory.find(params[:id])
@finance_category.update_attributes(:deleted => true)
@categories = FinanceTransactionCategory.all(:conditions => {:deleted => false})
- @fixed_categories = @categories.reject{|c|!c.is_fixed}
- @other_categories = @categories.reject{|c|c.is_fixed}
+ @fixed_categories = @categories.reject { |c| !c.fixed? }
+ @other_categories = @categories.reject { |c| c.fixed? }
end
def category_edit
@@ -254,12 +253,12 @@ def category_update
@finance_category = FinanceTransactionCategory.find(params[:id])
@finance_category.update_attributes(params[:finance_category])
@categories = FinanceTransactionCategory.all(:conditions => {:deleted => false})
- @fixed_categories = @categories.reject{|c|!c.is_fixed}
- @other_categories = @categories.reject{|c|c.is_fixed}
+ @fixed_categories = @categories.reject { |c| !c.fixed? }
+ @other_categories = @categories.reject { |c| c.fixed? }
end
def transaction_trigger_create
- @trigger = FinanceTransactionTrigger.new(params[:transaction_trigger])
+ @trigger = FinanceTransactionTrigger.new(params[:transaction_trigger])
render :update do |page|
if @trigger.save
@triggers = FinanceTransactionTrigger.all
@@ -275,8 +274,8 @@ def transaction_trigger_create
end
end
-
-
+
+
def transaction_trigger_edit
@cat_names = ["'Fee'","'Salary'"]
@@ -284,7 +283,7 @@ def transaction_trigger_edit
@cat_names << "'#{category[:category_name]}'"
end
@transaction_trigger = FinanceTransactionTrigger.find(params[:id])
- @categories = FinanceTransactionCategory.find(:all ,:conditions => ["name NOT IN (#{@cat_names.join(',')}) and is_income=1 and deleted=0 "])
+ @categories = FinanceTransactionCategory.all(:conditions => ["name NOT IN (?) AND is_income = ? AND deleted = ?", @cat_names.join(','), true, false])
end
def transaction_trigger_update
@@ -316,14 +315,14 @@ def transaction_trigger_delete
#transaction-----------------------
-
+
def update_monthly_report
fixed_category_name
@hr = Configuration.find_by_config_value("HR")
@start_date = (params[:start_date]).to_date
@end_date = (params[:end_date]).to_date
- @transactions = FinanceTransaction.find(:all,
- :order => 'transaction_date desc', :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'"])
+ @transactions = FinanceTransaction.all(:order => 'transaction_date desc',
+ :conditions => { :transaction_date => @start_date..@end_date })
#@other_transactions = FinanceTransaction.report(@start_date,@end_date,params[:page])
@other_transaction_categories = FinanceTransaction.find(:all,params[:page], :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'and category_id NOT IN (#{@fixed_cat_ids.join(",")})"],
:order => 'transaction_date').map{|ft| ft.category}.uniq
@@ -337,14 +336,14 @@ def update_monthly_report
end
@graph = open_flash_chart_object(960, 500, "graph_for_update_monthly_report?start_date=#{@start_date}&end_date=#{@end_date}")
end
-
+
def transaction_pdf
fixed_category_name
@hr = Configuration.find_by_config_value("HR")
@start_date = (params[:start_date]).to_date
@end_date = (params[:end_date]).to_date
- @transactions = FinanceTransaction.find(:all,
- :order => 'transaction_date desc', :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'"])
+ @transactions = FinanceTransaction.all(:order => 'transaction_date desc',
+ :conditions => { :transaction_date => @start_date..@end_date })
#@other_transactions = FinanceTransaction.report(@start_date,@end_date,params[:page])
@other_transaction_categories = FinanceTransaction.find(:all,params[:page], :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'and category_id NOT IN (#{@fixed_cat_ids.join(",")})"],
:order => 'transaction_date').map{|ft| ft.category}.uniq
@@ -372,11 +371,11 @@ def salary_employee
end
def employee_payslip_monthly_report
-
+
@salary_date = params[:id2]
@employee = Employee.find_in_active_or_archived(params[:id])
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
-
+
if params[:salary_date] == ""
render :update do |page|
page.replace_html "payslip_view", :text => ""
@@ -386,21 +385,21 @@ def employee_payslip_monthly_report
@monthly_payslips = MonthlyPayslip.find(:all,:conditions=>["employee_id=? AND salary_date = ?",params[:id],@salary_date],:include=>:payroll_category)
@individual_payslips = IndividualPayslipCategory.find(:all,:conditions=>["employee_id=? AND salary_date = ?",params[:id],@salary_date])
@salary = Employee.calculate_salary(@monthly_payslips, @individual_payslips)
-
+
end
def donations_report
month_date
category_id = FinanceTransactionCategory.find_by_name("Donation").id
- @donations = FinanceTransaction.find(:all,:order => 'transaction_date desc', :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'and category_id ='#{category_id}'"])
-
+ @donations = FinanceTransaction.find(:all,:order => 'transaction_date desc', :conditions => ["transaction_date >= ? AND transaction_date <= ? AND category_id = ?", @start_date, @end_date, category_id])
+
end
def fees_report
month_date
fees_id = FinanceTransactionCategory.find_by_name('Fee').id
@fee_collection = FinanceFeeCollection.find(:all,:joins=>"INNER JOIN finance_fees ON finance_fees.fee_collection_id = finance_fee_collections.id INNER JOIN finance_transactions ON finance_transactions.finance_id = finance_fees.id AND finance_transactions.transaction_date >= '#{@start_date}' AND finance_transactions.transaction_date <= '#{@end_date}' AND finance_transactions.category_id = #{fees_id}",:group=>"finance_fee_collections.id")
-
+
end
def batch_fees_report
@@ -411,22 +410,22 @@ def batch_fees_report
end
def student_fees_structure
-
+
month_date
@student = Student.find(params[:id])
@components = @student.get_fee_strucure_elements
-
+
end
# approve montly payslip ----------------------
def approve_monthly_payslip
@salary_dates = MonthlyPayslip.find(:all, :select => "distinct salary_date")
-
+
end
def one_click_approve
- @dates = MonthlyPayslip.find_all_by_salary_date(params[:salary_date],:conditions => ["is_approved = false"])
+ @dates = MonthlyPayslip.find_all_by_salary_date(params[:salary_date],:conditions => { :is_approved => false })
@salary_date = params[:salary_date]
render :update do |page|
page.replace_html "approve",:partial=> "one_click_approve"
@@ -434,7 +433,7 @@ def one_click_approve
end
def one_click_approve_submit
- dates = MonthlyPayslip.find_all_by_salary_date(Date.parse(params[:date]), :conditions=>["is_rejected is false"])
+ dates = MonthlyPayslip.find_all_by_salary_date(Date.parse(params[:date]), :conditions => { :is_rejected => false })
dates.each do |d|
d.approve(current_user.id,"Approved")
@@ -449,7 +448,7 @@ def one_click_approve_submit
flash[:notice] = "#{t('flash8')}"
redirect_to :action => "index"
-
+
end
def employee_payslip_approve
@@ -504,9 +503,9 @@ def employee_payslip_reject_form
#view monthly payslip -------------------------------
def view_monthly_payslip
-
- @departments = EmployeeDepartment.find(:all, :conditions=>"status = true", :order=> "name ASC")
- @salary_dates = MonthlyPayslip.find(:all,:select => "distinct salary_date")
+
+ @departments = EmployeeDepartment.find(:all, :conditions => { :status => true }, :order => "name ASC")
+ @salary_dates = MonthlyPayslip.find(:all, :select => "distinct salary_date")
if request.post?
post_data = params[:payslip]
unless post_data.blank?
@@ -524,13 +523,13 @@ def view_monthly_payslip
def view_employee_payslip
@is_present_employee=true
@is_present_employee=false if (Employee.find_by_id(params[:id]).nil?)
- @monthly_payslips = MonthlyPayslip.find(:all,:conditions=>["employee_id=? AND salary_date = ?",params[:id],params[:salary_date]],:include=>:payroll_category)
- @individual_payslips = IndividualPayslipCategory.find(:all,:conditions=>["employee_id=? AND salary_date = ?",params[:id],params[:salary_date]])
+ @monthly_payslips = MonthlyPayslip.find(:all, :conditions => ["employee_id=? AND salary_date = ?", params[:id],params[:salary_date]],:include=>:payroll_category)
+ @individual_payslips = IndividualPayslipCategory.find(:all, :conditions => ["employee_id=? AND salary_date = ?", params[:id],params[:salary_date]])
@salary = Employee.calculate_salary(@monthly_payslips, @individual_payslips)
@currency_type= Configuration.find_by_config_key("CurrencyType").config_value
end
-
-
+
+
def search_ajax
other_conditions = ""
other_conditions += " AND employee_department_id = '#{params[:employee_department_id]}'" unless params[:employee_department_id] == ""
@@ -566,7 +565,7 @@ def create_liability
page.visual_effect(:highlight, 'form-errors')
end
end
-
+
end
def edit_liability
@@ -576,10 +575,10 @@ def edit_liability
def update_liability
@liability = Liability.find(params[:id])
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
-
+
render :update do |page|
if @liability.update_attributes(params[:liability])
- @liabilities = Liability.find(:all,:conditions => 'is_deleted = 0')
+ @liabilities = Liability.find(:all, :conditions => { :is_deleted => false })
page.replace_html "liability_list", :partial => "liability_list"
page << "Modalbox.hide();"
page.replace_html 'flash_box', :text => "
"
flash[:notice]=""
-
+
end
end
- @finance_fee_collections = FinanceFeeCollection.all(:conditions => ["is_deleted = '#{false}' and batch_id = '#{@finance_fee_collection.batch_id}'"])
+ @finance_fee_collections = FinanceFeeCollection.all(:conditions => { :is_deleted => false, :batch_id => @finance_fee_collection.batch_id })
end
def fee_collection_delete
@finance_fee_collection = FinanceFeeCollection.find params[:id]
@finance_fee_collection.update_attributes(:is_deleted => true)
- @finance_fee_collections = FinanceFeeCollection.all(:conditions => ["is_deleted = '#{false}' and batch_id = '#{@finance_fee_collection.batch_id}'"])
+ @finance_fee_collections = FinanceFeeCollection.all(:conditions => { :is_deleted => false, :batch_id => @finance_fee_collection.batch_id })
end
#fees_submission-----------------------------------
@@ -1343,9 +1342,9 @@ def fees_submission_batch
@dates = []
end
-
+
def update_fees_collection_dates
-
+
@batch = Batch.find(params[:batch_id])
@dates = @batch.fee_collection_dates
@@ -1355,12 +1354,12 @@ def update_fees_collection_dates
end
def load_fees_submission_batch
-
+
@batch = Batch.find(params[:batch_id])
@dates = FinanceFeeCollection.find(:all)
@date = @fee_collection = FinanceFeeCollection.find(params[:date])
@student = Student.find(params[:student]) if params[:student]
- @fee = FinanceFee.first(:conditions=>"fee_collection_id = #{@date.id}" ,:joins=>'INNER JOIN students ON finance_fees.student_id = students.id')
+ @fee = FinanceFee.first(:conditions => { :fee_collection_id => @date.id },:joins=>'INNER JOIN students ON finance_fees.student_id = students.id')
unless @fee.nil?
@student ||= @fee.student
@prev_student = @student.previous_fee_student(@date.id)
@@ -1370,7 +1369,7 @@ def load_fees_submission_batch
unless @financefee.transaction_id.blank?
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{@financefee.transaction_id}\")", :order=>"created_at ASC")
end
- @fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => ["is_deleted = false"])
+ @fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => { :is_deleted => false })
@fee_particulars = @date.fees_particulars(@student)
@batch_discounts = BatchFeeCollectionDiscount.find_all_by_finance_fee_collection_id(@date.id)
@@ -1401,14 +1400,14 @@ def update_ajax
@dates = FinanceFeeCollection.find(:all)
@date = @fee_collection = FinanceFeeCollection.find(params[:date])
@student = Student.find(params[:student]) if params[:student]
- @student ||= FinanceFee.first(:conditions=>"fee_collection_id = #{@date.id}",:joins=>'INNER JOIN students ON finance_fees.student_id = students.id').student
+ @student ||= FinanceFee.first(:conditions => { :fee_collection_id => @date.id },:joins=>'INNER JOIN students ON finance_fees.student_id = students.id').student
@prev_student = @student.previous_fee_student(@date.id)
@next_student = @student.next_fee_student(@date.id)
@due_date = @fee_collection.due_date
total_fees =0
@financefee = @student.finance_fee_by_date @date
-
+
@fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => ["is_deleted IS NOT NULL"])
@fee_particulars = @date.fees_particulars(@student)
@@ -1423,7 +1422,7 @@ def update_ajax
@total_discount = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.total_payable(@student) * s.discount(@student) / 100}.sum.to_f
end
@total_discount_percentage = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.discount(@student)}.sum
-
+
@fee_particulars.each do |p|
total_fees += p.amount
end
@@ -1454,7 +1453,7 @@ def update_ajax
is_paid = (params[:fees][:fees_paid].to_f == params[:total_fees].to_f) ? true : false
@financefee.update_attributes(:transaction_id=>tid, :is_paid=>is_paid)
-
+
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{tid}\")")
else
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{@financefee.transaction_id}\")")
@@ -1466,7 +1465,7 @@ def update_ajax
end
render :update do |page|
page.replace_html "student", :partial => "student_fees_submission"
-
+
end
end
@@ -1476,11 +1475,11 @@ def student_fee_receipt_pdf
@student = Student.find(params[:id])
@financefee = @student.finance_fee_by_date @date
@due_date = @fee_collection.due_date
-
+
unless @financefee.transaction_id.blank?
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{@financefee.transaction_id}\")", :order=>"created_at ASC")
end
- @fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => ["is_deleted = false"])
+ @fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => { :is_deleted => false })
@fee_particulars = @date.fees_particulars(@student)
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
@@ -1495,9 +1494,9 @@ def student_fee_receipt_pdf
@total_discount = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.total_payable(@student) * s.discount(@student) / 100}.sum.to_f
end
@total_discount_percentage = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.discount(@student)}.sum
-
+
render :pdf => 'fee_receipt_pdf'
-
+
# respond_to do |format|
# format.pdf { render :layout => false }
# end
@@ -1510,10 +1509,10 @@ def update_fine_ajax
@dates = FinanceFeeCollection.find(:all)
@date = @fee_collection = FinanceFeeCollection.find(params[:fine][:date])
@student = Student.find(params[:fine][:student]) if params[:fine][:student]
- @student ||= FinanceFee.first(:conditions=>"fee_collection_id = #{@date.id}",:joins=>'INNER JOIN students ON finance_fees.student_id = students.id').student
+ @student ||= FinanceFee.first(:conditions => { :fee_collection_id => @date.id },:joins=>'INNER JOIN students ON finance_fees.student_id = students.id').student
@prev_student = @student.previous_fee_student(@date.id)
@next_student = @student.next_fee_student(@date.id)
-
+
@financefee = @student.finance_fee_by_date @date
unless @financefee.transaction_id.blank?
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{@financefee.transaction_id}\")", :order=>"created_at ASC")
@@ -1571,11 +1570,11 @@ def fees_student_dates
end
def fees_submission_student
-
+
@student = Student.find(params[:id])
@date = @fee_collection = FinanceFeeCollection.find(params[:date])
@financefee = @student.finance_fee_by_date(@date)
-
+
@due_date = @fee_collection.due_date
@fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => ["is_deleted IS NOT NULL"])
@fee_particulars = @date.fees_particulars(@student)
@@ -1594,7 +1593,7 @@ def fees_submission_student
@total_discount = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.total_payable(@student) * s.discount(@student) / 100}.sum.to_f
end
@total_discount_percentage = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.discount(@student)}.sum
-
+
render :update do |page|
page.replace_html "fee_submission", :partial => "fees_submission_form"
end
@@ -1703,7 +1702,7 @@ def fees_submission_save
#fees structure ----------------------
-
+
def fees_student_structure_search_logic # student search fees structure
query = params[:query]
unless query.length < 3
@@ -1757,7 +1756,7 @@ def student_fees_structure
@fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => ["is_deleted IS NOT NULL"])
@fee_particulars = @fee_collection.fees_particulars(@student)
end
-
+
#fees defaulters-----------------------
@@ -1800,7 +1799,7 @@ def fee_defaulters_pdf
@date = FinanceFeeCollection.find(params[:date])
@students = @date.students.reject{|s| s.batch_id != @batch.id}
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
-
+
render :pdf => 'fee_defaulters_pdf'
end
@@ -1824,7 +1823,7 @@ def pay_fees_defaulters
@total_discount = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.total_payable(@student) * s.discount(@student) / 100}.sum.to_f
end
@total_discount_percentage = [@batch_discounts,@student_discounts,@category_discounts].flatten.compact.map{|s| s.discount(@student)}.sum
-
+
unless @financefee.transaction_id.blank?
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{@financefee.transaction_id}\")", :order=>"created_at ASC")
end
@@ -1866,7 +1865,7 @@ def pay_fees_defaulters
else
flash[:notice] = "#{t('flash23')}"
end
-
+
end
end
@@ -1892,7 +1891,7 @@ def update_defaulters_fine_ajax
end
def compare_report
-
+
end
def report_compare
@@ -1902,8 +1901,8 @@ def report_compare
@end_date = (params[:end_date]).to_date
@start_date2 = (params[:start_date2]).to_date
@end_date2 = (params[:end_date2]).to_date
- @transactions = FinanceTransaction.find(:all,
- :order => 'transaction_date desc', :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'"])
+ @transactions = FinanceTransaction.all(:order => 'transaction_date desc',
+ :conditions => { :transaction_date => @start_date..@end_date })
@transactions2 = FinanceTransaction.find(:all,
:order => 'transaction_date desc', :conditions => ["transaction_date >= '#{@start_date2}' and transaction_date <= '#{@end_date2}'"])
@other_transaction_categories = FinanceTransaction.find(:all,params[:page], :conditions => ["transaction_date >= '#{@start_date}' and transaction_date <= '#{@end_date}'and category_id NOT IN (#{@fixed_cat_ids.join(",")})"],
@@ -1933,7 +1932,7 @@ def report_compare
end
@graph = open_flash_chart_object(960, 500, "graph_for_compare_monthly_report?start_date=#{@start_date}&end_date=#{@end_date}&start_date2=#{@start_date2}&end_date2=#{@end_date2}")
end
-
+
def month_date
@start_date = params[:start]
@end_date = params[:end]
@@ -1969,21 +1968,21 @@ def pdf_fee_structure
@total_discount = 100
end
render :pdf => 'pdf_fee_structure'
-
+
# respond_to do |format|
# format.pdf { render :layout => false }
# end
end
#graph------------------------------------
-
+
def graph_for_update_monthly_report
-
+
start_date = (params[:start_date]).to_date
end_date = (params[:end_date]).to_date
employees = Employee.find(:all)
-
+
hr = Configuration.find_by_config_value("HR")
donations_total = FinanceTransaction.donations_triggers(start_date,end_date)
fees = FinanceTransaction.total_fees(start_date,end_date)
@@ -1991,12 +1990,12 @@ def graph_for_update_monthly_report
expense = FinanceTransaction.total_other_trans(start_date,end_date)[1]
# other_transactions = FinanceTransaction.find(:all,
# :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id !='#{3}' and category_id !='#{2}'and category_id !='#{1}'"])
-
+
x_labels = []
data = []
largest_value =0
-
+
unless hr.nil?
salary = Employee.total_employees_salary(employees,start_date,end_date)
unless salary <= 0
@@ -2010,7 +2009,7 @@ def graph_for_update_monthly_report
data << donations_total
largest_value = donations_total if largest_value < donations_total
end
-
+
unless fees <= 0
x_labels << "#{t('fees_text')}"
data << fees
@@ -2038,7 +2037,7 @@ def graph_for_update_monthly_report
largest_value = expense if largest_value < expense
end
-
+
# other_transactions.each do |trans|
# x_labels << trans.title
# if trans.category.is_income? and trans.master_transaction_id == 0
@@ -2051,7 +2050,7 @@ def graph_for_update_monthly_report
largest_value += 500
- bargraph = BarFilled.new()
+ bargraph = BarFilled.new
bargraph.width = 1;
bargraph.colour = '#bb0000';
bargraph.dot_size = 3;
@@ -2083,7 +2082,7 @@ def graph_for_update_monthly_report
render :text => chart.render
-
+
end
def graph_for_compare_monthly_report
@@ -2140,7 +2139,7 @@ def graph_for_compare_monthly_report
largest_value = fees if largest_value < fees
largest_value = fees2 if largest_value < fees2
end
-
+
FedenaPlugin::FINANCE_CATEGORY.each do |category|
transaction1 = FinanceTransaction.total_transaction_amount(category[:category_name],start_date,end_date)
transaction2 = FinanceTransaction.total_transaction_amount(category[:category_name],start_date2,end_date2)
@@ -2196,13 +2195,13 @@ def graph_for_compare_monthly_report
largest_value += 500
- bargraph = BarFilled.new()
+ bargraph = BarFilled.new
bargraph.width = 1;
bargraph.colour = '#bb0000';
bargraph.dot_size = 3;
bargraph.text = "#{t('for_the_period')} #{start_date}-#{end_date}"
bargraph.values = data
- bargraph2 = BarFilled.new()
+ bargraph2 = BarFilled.new
bargraph2.width = 1;
bargraph2.colour = '#000000';
bargraph2.dot_size = 3;
@@ -2237,7 +2236,7 @@ def graph_for_compare_monthly_report
render :text => chart.render
end
-
+
#ddnt complete this graph!
def graph_for_transaction_comparison
@@ -2258,7 +2257,7 @@ def graph_for_transaction_comparison
x_labels = []
data1 = []
data2 = []
-
+
largest_value =0
unless hr.nil?
@@ -2286,13 +2285,13 @@ def graph_for_transaction_comparison
data << income
largest_value = income if largest_value < income
end
-
+
unless expense <= 0
x_labels << "#{t('other_expense')}"
data << expense
largest_value = expense if largest_value < expense
end
-
+
# other_transactions.each do |trans|
# x_labels << trans.title
# if trans.category.is_income? and trans.master_transaction_id == 0
@@ -2305,7 +2304,7 @@ def graph_for_transaction_comparison
largest_value += 500
- bargraph = BarFilled.new()
+ bargraph = BarFilled.new
bargraph.width = 1;
bargraph.colour = '#bb0000';
bargraph.dot_size = 3;
@@ -2337,8 +2336,8 @@ def graph_for_transaction_comparison
render :text => chart.render
-
-
+
+
end
#fee Discount
def fee_discounts
@@ -2471,7 +2470,7 @@ def student_wise_fee_discount_create
@fee_discount.errors.add_to_base("#{t('fees_category_cant_blank')}")
end
end
-
+
def update_master_fee_category_list
@batch = Batch.find(params[:id])
diff --git a/app/controllers/grading_levels_controller.rb b/app/controllers/grading_levels_controller.rb
index b750d4de2..12fc8b0f9 100755
--- a/app/controllers/grading_levels_controller.rb
+++ b/app/controllers/grading_levels_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class GradingLevelsController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb
index 0dbe3766e..669de6d79 100755
--- a/app/controllers/news_controller.rb
+++ b/app/controllers/news_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class NewsController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -24,7 +23,7 @@ def add
@news = News.new(params[:news])
@news.author = current_user
if request.post? and @news.save
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
if sms_setting.application_sms_active
students = Student.find(:all,:select=>'phone2',:conditions=>'is_sms_enabled = true')
end
@@ -37,7 +36,7 @@ def add_comment
@cmnt = NewsComment.new(params[:comment])
@cmnt.author = current_user
@cmnt.is_approved =true if @current_user.privileges.include?(Privilege.find_by_name('ManageNews')) || @current_user.admin?
- @config = Configuration.find_by_config_key('EnableNewsCommentModeration')
+ @config = Configuration.find_by_config_key('EnableNewsCommentModeration')
@cmnt.save
end
@@ -84,7 +83,7 @@ def view
@news = News.find(params[:id])
@comments = @news.comments
@is_moderator = @current_user.privileges.include?(Privilege.find_by_name('ManageNews')) || @current_user.admin?
- @config = Configuration.find_by_config_key('EnableNewsCommentModeration')
+ @config = Configuration.find_by_config_key('EnableNewsCommentModeration')
end
def comment_approved
diff --git a/app/controllers/observation_groups_controller.rb b/app/controllers/observation_groups_controller.rb
index 0086cbb07..0820de5e2 100644
--- a/app/controllers/observation_groups_controller.rb
+++ b/app/controllers/observation_groups_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ObservationGroupsController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/observations_controller.rb b/app/controllers/observations_controller.rb
index 737344c47..20d80fc08 100644
--- a/app/controllers/observations_controller.rb
+++ b/app/controllers/observations_controller.rb
@@ -1,27 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ObservationsController < ApplicationController
before_filter :login_required
filter_access_to :all
+
def show
- @observation=Observation.find params[:id]
- @descriptives=@observation.descriptive_indicators
+ @observation = Observation.find params[:id]
+ @descriptives = @observation.descriptive_indicators
end
end
diff --git a/app/controllers/payroll_controller.rb b/app/controllers/payroll_controller.rb
index 55cb9ac98..aff359434 100755
--- a/app/controllers/payroll_controller.rb
+++ b/app/controllers/payroll_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class PayrollController < ApplicationController
before_filter :login_required
filter_access_to :all
@@ -28,7 +27,7 @@ def add_category
flash[:notice]="#{t('flash1')}"
redirect_to :action => "add_category"
end
-
+
end
def edit_category
@@ -79,7 +78,7 @@ def manage_payroll
unless @independent_categories.empty? and @dependent_categories.empty?
if payroll_created.empty?
if request.post?
-
+
params[:manage_payroll].each_pair do |k, v|
EmployeeSalaryStructure.create(:employee_id => params[:id], :payroll_category_id => k, :amount => v['amount'])
end
@@ -125,7 +124,7 @@ def edit_payroll_details
else
EmployeeSalaryStructure.create(:employee_id => params[:id], :payroll_category_id => k, :amount => v['amount'])
end
-
+
end
flash[:notice] = "#{t('data_saved_for')} #{@employee.first_name}"
redirect_to :controller => "employee", :action => "profile", :id=> @employee.id
diff --git a/app/controllers/ranking_levels_controller.rb b/app/controllers/ranking_levels_controller.rb
index f213916ae..4f3491519 100644
--- a/app/controllers/ranking_levels_controller.rb
+++ b/app/controllers/ranking_levels_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class RankingLevelsController < ApplicationController
before_filter :login_required
@@ -101,7 +100,7 @@ def update_ranking_level
end
end
end
-
+
def delete_ranking_level
@ranking_level = RankingLevel.find(params[:id])
@course = @ranking_level.course
diff --git a/app/controllers/reminder_controller.rb b/app/controllers/reminder_controller.rb
index bb28ef4c4..daf2d7d89 100755
--- a/app/controllers/reminder_controller.rb
+++ b/app/controllers/reminder_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ReminderController < ApplicationController
before_filter :login_required
before_filter :protect_view_reminders, :only=>[:view_reminder,:mark_unread,:delete_reminder_by_recipient]
diff --git a/app/controllers/scheduled_jobs_controller.rb b/app/controllers/scheduled_jobs_controller.rb
index accccb8c3..1c3946830 100644
--- a/app/controllers/scheduled_jobs_controller.rb
+++ b/app/controllers/scheduled_jobs_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ScheduledJobsController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/sms_controller.rb b/app/controllers/sms_controller.rb
index fdfc4620e..69419669a 100755
--- a/app/controllers/sms_controller.rb
+++ b/app/controllers/sms_controller.rb
@@ -1,27 +1,26 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SmsController < ApplicationController
before_filter :login_required
filter_access_to :all
-
+
def index
- @sms_setting = SmsSetting.new()
+ @sms_setting = SmsSetting.new
@parents_sms_enabled = SmsSetting.find_by_settings_key("ParentSmsEnabled")
@students_sms_enabled = SmsSetting.find_by_settings_key("StudentSmsEnabled")
@employees_sms_enabled = SmsSetting.find_by_settings_key("EmployeeSmsEnabled")
@@ -64,13 +63,13 @@ def students
if request.post?
unless params[:send_sms][:student_ids].nil?
student_ids = params[:send_sms][:student_ids]
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@recipients=[]
student_ids.each do |s_id|
student = Student.find(s_id)
guardian = student.immediate_contact
if student.is_sms_enabled
- if sms_setting.student_sms_active
+ if sms_setting.student_sms_active
@recipients.push student.phone2 unless (student.phone2.nil? or student.phone2 == "")
end
if sms_setting.parent_sms_active
@@ -92,7 +91,7 @@ def students
end
end
end
-
+
def list_students
batch = Batch.find(params[:batch_id])
@students = Student.find_all_by_batch_id(batch.id,:conditions=>'is_sms_enabled=true')
@@ -103,7 +102,7 @@ def batches
if request.post?
unless params[:send_sms][:batch_ids].nil?
batch_ids = params[:send_sms][:batch_ids]
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@recipients = []
batch_ids.each do |b_id|
batch = Batch.find(b_id)
@@ -136,7 +135,7 @@ def batches
def sms_all
batches = Batch.active
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@recipients = []
batches.each do |batch|
batch_students = batch.students
@@ -178,7 +177,7 @@ def employees
if request.post?
unless params[:send_sms][:employee_ids].nil?
employee_ids = params[:send_sms][:employee_ids]
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@recipients=[]
employee_ids.each do |e_id|
employee = Employee.find(e_id)
@@ -208,7 +207,7 @@ def departments
if request.post?
unless params[:send_sms][:dept_ids].nil?
dept_ids = params[:send_sms][:dept_ids]
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@recipients = []
dept_ids.each do |d_id|
department = EmployeeDepartment.find(d_id)
diff --git a/app/controllers/sms_settings_controller.rb b/app/controllers/sms_settings_controller.rb
index a3b2be12b..15dc35187 100755
--- a/app/controllers/sms_settings_controller.rb
+++ b/app/controllers/sms_settings_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SmsSettingsController < ApplicationController
filter_access_to :all
before_filter :login_required
diff --git a/app/controllers/student_attendance_controller.rb b/app/controllers/student_attendance_controller.rb
index 11941ff80..9c8c51a2d 100755
--- a/app/controllers/student_attendance_controller.rb
+++ b/app/controllers/student_attendance_controller.rb
@@ -1,27 +1,26 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentAttendanceController < ApplicationController
before_filter :login_required
before_filter :only_assigned_employee_allowed
before_filter :protect_other_student_data
filter_access_to :all
-
+
def index
end
@@ -37,7 +36,7 @@ def student
if request.post?
@detail_report = []
if params[:advance_search][:mode]== 'Overall'
- @start_date = @batch.start_date.to_date
+ @start_date = @batch.started_on
@end_date = Date.today
unless @config.config_value == 'Daily'
unless params[:advance_search][:subject_id].empty?
@@ -101,13 +100,13 @@ def student
end
return
end
-
+
render :update do |page|
page.replace_html 'report', :partial => 'report'
page.replace_html 'error-container', :text => ''
end
end
-
+
end
def month
@@ -129,11 +128,11 @@ def student_report
@config = Configuration.find_by_config_key('StudentAttendanceType')
@student = Student.find(params[:id])
@batch = Batch.find(params[:year])
- @start_date = @batch.start_date.to_date
- @end_date = @batch.end_date.to_date
+ @start_date = @batch.started_on
+ @end_date = @batch.ended_on
unless @config.config_value == 'Daily'
@academic_days=@batch.subject_hours(@start_date, @end_date, 0).values.flatten.compact.count
- @student_leaves = SubjectLeave.find(:all, :conditions =>{:batch_id=>@batch.id,:student_id=>@student.id,:month_date => @start_date..@end_date})
+ @student_leaves = SubjectLeave.find(:all, :conditions => {:batch_id => @batch.id, :student_id => @student.id, :month_date => @start_date..@end_date})
@leaves= @student_leaves.count
@leaves||=0
@attendance = (@academic_days - @leaves)
diff --git a/app/controllers/student_controller.rb b/app/controllers/student_controller.rb
index f31c3c59b..55f7e0739 100755
--- a/app/controllers/student_controller.rb
+++ b/app/controllers/student_controller.rb
@@ -1,47 +1,46 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentController < ApplicationController
filter_access_to :all
before_filter :login_required
before_filter :protect_other_student_data, :except =>[:show]
-
+
before_filter :find_student, :only => [
:academic_report, :academic_report_all, :admission3, :change_to_former,
:delete, :edit, :add_guardian, :email, :remove, :reports, :profile,
:guardians, :academic_pdf,:show_previous_details,:fees,:fee_details
]
-
+
def academic_report_all
@user = current_user
@prev_student = @student.previous_student
@next_student = @student.next_student
@course = @student.course
@examtypes = ExaminationType.find( ( @course.examinations.collect { |x| x.examination_type_id } ).uniq )
-
+
@graph = open_flash_chart_object(965, 350, "/student/graph_for_academic_report?course=#{@course.id}&student=#{@student.id}")
@graph2 = open_flash_chart_object(965, 350, "/student/graph_for_annual_academic_report?course=#{@course.id}&student=#{@student.id}")
end
def admission1
@student = Student.new(params[:student])
- @selected_value = Configuration.default_country
+ @selected_value = Configuration.default_country
@application_sms_enabled = SmsSetting.find_by_settings_key("ApplicationEnabled")
@last_admitted_student = Student.find(:last)
@config = Configuration.find_by_config_key('AdmissionNumberAutoIncrement')
@@ -60,7 +59,7 @@ def admission1
@status = @student.save
end
if @status
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
if sms_setting.application_sms_active and @student.is_sms_enabled
recipients = []
message = "#{t('student_admission_done')} #{@student.admission_no} #{t('password_is')} #{@student.admission_no}123"
@@ -93,7 +92,7 @@ def admission3
end
return if params[:immediate_contact].nil?
if request.post?
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@student = Student.update(@student.id, :immediate_contact_id => params[:immediate_contact][:contact])
if sms_setting.application_sms_active and sms_setting.student_admission_sms_active and @student.is_sms_enabled
recipients = []
@@ -118,7 +117,7 @@ def admission3_1
end
return if params[:immediate_contact].nil?
if request.post?
- sms_setting = SmsSetting.new()
+ sms_setting = SmsSetting.new
@student = Student.update(@student.id, :immediate_contact_id => params[:immediate_contact][:contact])
if sms_setting.application_sms_active and sms_setting.student_admission_sms_active and @student.is_sms_enabled
recipients = []
@@ -228,12 +227,12 @@ def edit_admission4
@student = Student.find(params[:id])
@additional_fields = StudentAdditionalField.find(:all, :conditions=> "status = true")
@additional_details = StudentAdditionalDetail.find_all_by_student_id(@student)
-
+
if @additional_details.empty?
redirect_to :controller => "student",:action => "admission4" , :id => @student.id
end
if request.post?
-
+
params[:student_additional_details].each_pair do |k, v|
row_id=StudentAdditionalDetail.find_by_student_id_and_additional_field_id(@student.id,k)
unless row_id.nil?
@@ -250,7 +249,7 @@ def edit_admission4
def add_additional_details
@additional_details = StudentAdditionalField.find(:all, :conditions=>{:status=>true},:order=>"priority ASC")
@inactive_additional_details = StudentAdditionalField.find(:all, :conditions=>{:status=>false},:order=>"priority ASC")
- @additional_field = StudentAdditionalField.new
+ @additional_field = StudentAdditionalField.new
@student_additional_field_option = @additional_field.student_additional_field_options.build
if request.post?
priority = 1
@@ -304,7 +303,7 @@ def edit_additional_details
end
def delete_additional_details
- students = StudentAdditionalDetail.find(:all ,:conditions=>"additional_field_id = #{params[:id]}")
+ students = StudentAdditionalDetail.find(:all, :conditions => { :additional_field_id => params[:id] })
if students.blank?
StudentAdditionalField.find(params[:id]).destroy
@additional_details = StudentAdditionalField.find(:all, :conditions=>{:status=>true},:order=>"priority ASC")
@@ -342,7 +341,7 @@ def generate_tc_pdf
def generate_all_tc_pdf
@ids = params[:stud]
@students = @ids.map { |st_id| ArchivedStudent.find(st_id) }
-
+
render :pdf=>'generate_all_tc_pdf'
end
@@ -569,7 +568,7 @@ def profile
@immediate_contact = Guardian.find(@student.immediate_contact_id) \
unless @student.immediate_contact_id.nil? or @student.immediate_contact_id == ''
end
-
+
def profile_pdf
@current_user = current_user
@student = Student.find(params[:id])
@@ -580,7 +579,7 @@ def profile_pdf
@previous_data = StudentPreviousData.find_by_student_id(@student.id)
@immediate_contact = Guardian.find(@student.immediate_contact_id) \
unless @student.immediate_contact_id.nil? or @student.immediate_contact_id == ''
-
+
render :pdf=>'profile_pdf'
end
@@ -588,7 +587,7 @@ def show_previous_details
@previous_data = StudentPreviousData.find_by_student_id(@student.id)
@previous_subjects = StudentPreviousSubjectMark.find_all_by_student_id(@student.id)
end
-
+
def show
@student = Student.find_by_admission_no(params[:id])
send_data(@student.photo_data,
@@ -604,7 +603,7 @@ def guardians
def del_guardian
@guardian = Guardian.find(params[:id])
@student = @guardian.ward
- if @guardian.is_immediate_contact?
+ if @guardian.immediate_contact?
if @guardian.destroy
flash[:notice] = "#{t('flash6')}"
redirect_to :controller => 'student', :action => 'admission3', :id => @student.id
@@ -749,7 +748,7 @@ def advanced_search
end
end
-
+
# def adv_search
# @batches = []
@@ -936,7 +935,7 @@ def advanced_search_pdf
end
end
render :pdf=>'generate_tc_pdf'
-
+
end
# def new_adv
@@ -1019,7 +1018,7 @@ def fee_details
@paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{@financefee.transaction_id}\")")
end
- @fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => ["is_deleted = false"])
+ @fee_category = FinanceFeeCategory.find(@fee_collection.fee_category_id,:conditions => { :is_deleted => false })
@fee_particulars = @fee_collection.fees_particulars(@student)
@currency_type = Configuration.find_by_config_key("CurrencyType").config_value
@@ -1036,7 +1035,7 @@ def fee_details
end
-
+
# # Graphs
#
# def graph_for_previous_years_marks_overview
@@ -1201,7 +1200,7 @@ def fee_details
# end
# end
#
- # bargraph = BarFilled.new()
+ # bargraph = BarFilled.new
# bargraph.width = 1;
# bargraph.colour = '#bb0000';
# bargraph.dot_size = 5;
@@ -1275,7 +1274,7 @@ def fee_details
# data2 << class_avg
# end
#
- # bargraph = BarFilled.new()
+ # bargraph = BarFilled.new
# bargraph.width = 1;
# bargraph.colour = '#bb0000';
# bargraph.dot_size = 5;
@@ -1329,7 +1328,7 @@ def fee_details
# data << student.annual_weighted_marks(student.course.academic_year_id)
# data2 << t
#
- # bargraph = BarFilled.new()
+ # bargraph = BarFilled.new
# bargraph.width = 1;
# bargraph.colour = '#bb0000';
# bargraph.dot_size = 5;
diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb
index 070e843e2..1a7aa7585 100755
--- a/app/controllers/subjects_controller.rb
+++ b/app/controllers/subjects_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SubjectsController < ApplicationController
before_filter :login_required
filter_access_to :all
diff --git a/app/controllers/timetable_controller.rb b/app/controllers/timetable_controller.rb
index 7f56165f5..3c3bcea52 100755
--- a/app/controllers/timetable_controller.rb
+++ b/app/controllers/timetable_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class TimetableController < ApplicationController
before_filter :login_required
before_filter :protect_other_student_data
@@ -23,7 +22,6 @@ class TimetableController < ApplicationController
filter_access_to :all
def new_timetable
-
if request.post?
@timetable=Timetable.new(params[:timetable])
@error=false
@@ -460,19 +458,18 @@ def work_allotment
admin = EmployeeCategory.find_by_prefix('admin')
admin_ids = []
admin_ids << admin.id unless admin.nil?
- @employees = Employee.all(:conditions=>["employee_category_id not in (?)",admin_ids],:include=>[:employee_grade,:employees_subjects])
+ @employees = Employee.all(:conditions => ['employee_category_id NOT IN (?)', admin_ids], :include => [:employee_grade, :employees_subjects])
@emp_subs = []
- @employees.map{|employee| (employee[:total_time] = ((employee.max_hours_week).to_i))}
+ @employees.map { |employee| (employee[:total_time] = ((employee.max_hours_week).to_i)) }
if request.post?
params[:employee_subjects].delete_blank
- success,@error_obj = EmployeesSubject.allot_work(params[:employee_subjects])
- if success
+ if EmployeesSubject.allot_work(params[:employee_subjects])
flash[:notice] = t('work_allotment_success')
else
flash[:notice] = t('updated_with_errors')
end
end
- @batches = Batch.active.scoped :include=>[{:subjects=>:employees},:course]
+ @batches = Batch.active.scoped(:include=>[{ :subjects => :employees }, :course])
@subjects = @batches.collect(&:subjects).flatten
end
def timetable
@@ -487,7 +484,7 @@ def timetable
@today = @local_tzone_time.to_date
end
end
-
+
end
class Hash
def delete_blank
diff --git a/app/controllers/timetable_entries_controller.rb b/app/controllers/timetable_entries_controller.rb
index c2dbb6d01..448abd87f 100644
--- a/app/controllers/timetable_entries_controller.rb
+++ b/app/controllers/timetable_entries_controller.rb
@@ -1,28 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class TimetableEntriesController < ApplicationController
before_filter :login_required
filter_access_to :all
def new
@timetable=Timetable.find(params[:timetable_id])
-
+
@batches = Batch.active
end
@@ -164,7 +163,7 @@ def tt_entry_update2
end
# TimetableEntry.update(params[:tte_id], :subject_id => params[:sub_id], :employee_id => params[:emp_id])
end
-
+
tte_from_batch_and_tt(@timetable.id)
render :update do |page|
page.replace_html "box", :partial=> "timetable_box"
diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb
index 452768052..6a8ccc648 100755
--- a/app/controllers/user_controller.rb
+++ b/app/controllers/user_controller.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class UserController < ApplicationController
layout :choose_layout
before_filter :login_required, :except => [:forgot_password, :login, :set_new_password, :reset_password,:first_login_change_password]
@@ -29,11 +28,11 @@ def choose_layout
return 'dashboard' if action_name == 'dashboard'
'application'
end
-
+
def all
@users = User.active.all
end
-
+
def list_user
if params[:user_type] == 'Admin'
@users = User.active.find(:all, :conditions => {:admin => true}, :order => 'first_name ASC')
@@ -104,7 +103,7 @@ def list_parent_user
end
def change_password
-
+
if request.post?
@user = current_user
if User.authenticate?(@user.username, params[:user][:old_password])
@@ -145,7 +144,7 @@ def user_change_password
end
end
-
+
end
end
@@ -154,14 +153,14 @@ def create
@user = User.new(params[:user])
if request.post?
-
+
if @user.save
flash[:notice] = "#{t('flash17')}"
redirect_to :controller => 'user', :action => 'edit', :id => @user.username
else
flash[:notice] = "#{t('flash16')}"
end
-
+
end
end
@@ -174,7 +173,7 @@ def delete
end
redirect_to :controller => 'user'
end
-
+
def dashboard
@user = current_user
@config = Configuration.available_modules
diff --git a/app/controllers/weekday_controller.rb b/app/controllers/weekday_controller.rb
index 2a9556db0..f03f07ffa 100755
--- a/app/controllers/weekday_controller.rb
+++ b/app/controllers/weekday_controller.rb
@@ -1,67 +1,66 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class WeekdayController < ApplicationController
before_filter :login_required
+ before_filter :week_array, :only => [:index, :week, :create]
filter_access_to :all
+
def index
- @batches = Batch.active
+ @batches = Batch.active
@weekdays = Weekday.default
- @day = ["#{t('sunday')}", "#{t('monday')}", "#{t('tuesday')}", "#{t('wednesday')}", "#{t('thursday')}", "#{t('friday')}", "#{t('saturday')}"]
- @days = ["0", "1", "2", "3", "4", "5", "6"]
end
def week
@batch = nil
- @days = ["0", "1", "2", "3", "4", "5", "6"]
- @day = ["#{t('sunday')}", "#{t('monday')}", "#{t('tuesday')}", "#{t('wednesday')}", "#{t('thursday')}", "#{t('friday')}", "#{t('saturday')}"]
- if params[:batch_id] == ''
+ if params[:batch_id].blank?
@weekdays = Weekday.default
else
@weekdays = Weekday.for_batch(params[:batch_id])
- @b = Batch.find params[:batch_id]
+ @b = Batch.find params[:batch_id]
end
render :update do |page|
page.replace_html "weekdays", :partial => "weekdays"
end
end
-
-
def create
- @day = ["#{t('sunday')}", "#{t('monday')}", "#{t('tuesday')}", "#{t('wednesday')}", "#{t('thursday')}", "#{t('friday')}", "#{t('saturday')}"]
- batch = params[:weekday][:batch_id]
if request.post?
- new_weekdays = params[:weekdays]||[]
- batch = params[:weekday][:batch_id].present? ? params[:weekday][:batch_id] : nil
- old = Weekday.find(:all,:conditions=>{:batch_id=>batch,:is_deleted=>false})
- batch_id = params[:weekday][:batch_id].present? ? params[:weekday][:batch_id] : 0
- old_weekdays = old.map{|w| w.weekday}
- flash[:notice] = ""
- (new_weekdays-old_weekdays).each do |new|
+ new_weekdays = params[:weekdays] || []
+ batch_id = params[:weekday][:batch_id].present? ? params[:weekday][:batch_id] : nil
+ old = Weekday.find(:all, :conditions => { :batch_id => batch_id, :is_deleted => false })
+ old_weekdays = old.map{ |w| w.weekday }
+ flash[:notice] = ""
+ (new_weekdays - old_weekdays).each do |new|
Weekday.add_day(batch_id, new)
end
- (old_weekdays-new_weekdays).each do |week|
- weekday = Weekday.find_by_weekday(week.to_s,:conditions=>{:batch_id=>batch})
+ (old_weekdays - new_weekdays).each do |week|
+ weekday = Weekday.find_by_weekday(week.to_s, :conditions => { :batch_id => batch_id })
weekday.deactivate
end
flash[:notice] = "#{t('weekdays_modified')}"
end
redirect_to :action => "index"
end
+
+ private
+
+ def week_array
+ @day = ["#{t('sunday')}", "#{t('monday')}", "#{t('tuesday')}", "#{t('wednesday')}", "#{t('thursday')}", "#{t('friday')}", "#{t('saturday')}"]
+ @days = ["0", "1", "2", "3", "4", "5", "6"]
+ end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 2201b23f8..9b01f11a8 100755
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
module ApplicationHelper
def get_stylesheets
@@ -158,7 +158,7 @@ def render_generic_hook
h[:description] = t(hook[:description])
hooks << h
end
- end
+ end
return hooks.to_json
end
end
diff --git a/app/helpers/archived_employee_helper.rb b/app/helpers/archived_employee_helper.rb
deleted file mode 100755
index 4093a848f..000000000
--- a/app/helpers/archived_employee_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-module ArchivedEmployeeHelper
-end
diff --git a/app/helpers/assessment_scores_helper.rb b/app/helpers/assessment_scores_helper.rb
deleted file mode 100644
index e5b9de373..000000000
--- a/app/helpers/assessment_scores_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module AssessmentScoresHelper
-end
diff --git a/app/helpers/assessment_tools_helper.rb b/app/helpers/assessment_tools_helper.rb
deleted file mode 100644
index 7b0f20d3c..000000000
--- a/app/helpers/assessment_tools_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module AssessmentToolsHelper
-end
diff --git a/app/helpers/autosuggest_menu_helper.rb b/app/helpers/autosuggest_menu_helper.rb
index 656764687..b7db198f8 100644
--- a/app/helpers/autosuggest_menu_helper.rb
+++ b/app/helpers/autosuggest_menu_helper.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
module AutosuggestMenuHelper
def autosuggest_menuitems
diff --git a/app/helpers/cce_exam_categories_helper.rb b/app/helpers/cce_exam_categories_helper.rb
deleted file mode 100644
index 5d6e1a19f..000000000
--- a/app/helpers/cce_exam_categories_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module CceExamCategoriesHelper
-end
diff --git a/app/helpers/cce_grade_sets_helper.rb b/app/helpers/cce_grade_sets_helper.rb
deleted file mode 100644
index a4f6aec80..000000000
--- a/app/helpers/cce_grade_sets_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module CceGradeSetsHelper
-end
diff --git a/app/helpers/cce_reports_helper.rb b/app/helpers/cce_reports_helper.rb
deleted file mode 100644
index b873d4236..000000000
--- a/app/helpers/cce_reports_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module CceReportsHelper
-end
diff --git a/app/helpers/cce_weightages_helper.rb b/app/helpers/cce_weightages_helper.rb
deleted file mode 100644
index 108cfcc60..000000000
--- a/app/helpers/cce_weightages_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module CceWeightagesHelper
-end
diff --git a/app/helpers/class_designations_helper.rb b/app/helpers/class_designations_helper.rb
deleted file mode 100644
index 2b85cf528..000000000
--- a/app/helpers/class_designations_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module ClassDesignationsHelper
-end
diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb
index 5cbe31d81..053b0bd8c 100755
--- a/app/helpers/courses_helper.rb
+++ b/app/helpers/courses_helper.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
module CoursesHelper
def setup_course(course)
- returning(course) do |c|
+ course.tap do |c|
c.batches.build if c.batches.empty?
end
end
diff --git a/app/helpers/descriptive_indicators_helper.rb b/app/helpers/descriptive_indicators_helper.rb
deleted file mode 100644
index ad6a63add..000000000
--- a/app/helpers/descriptive_indicators_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module DescriptiveIndicatorsHelper
-end
diff --git a/app/helpers/electives_helper.rb b/app/helpers/electives_helper.rb
deleted file mode 100755
index 46de5c034..000000000
--- a/app/helpers/electives_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-module ElectivesHelper
-end
diff --git a/app/helpers/exam_ajax_helper.rb b/app/helpers/exam_ajax_helper.rb
deleted file mode 100755
index 3904b92ee..000000000
--- a/app/helpers/exam_ajax_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-module ExamAjaxHelper
-end
diff --git a/app/helpers/fa_criterias_helper.rb b/app/helpers/fa_criterias_helper.rb
deleted file mode 100644
index 6cae813a0..000000000
--- a/app/helpers/fa_criterias_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module FaCriteriasHelper
-end
diff --git a/app/helpers/fa_groups_helper.rb b/app/helpers/fa_groups_helper.rb
deleted file mode 100644
index ecbb9e50a..000000000
--- a/app/helpers/fa_groups_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module FaGroupsHelper
-end
diff --git a/app/helpers/observation_groups_helper.rb b/app/helpers/observation_groups_helper.rb
deleted file mode 100644
index 62a667eee..000000000
--- a/app/helpers/observation_groups_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module ObservationGroupsHelper
-end
diff --git a/app/helpers/observations_helper.rb b/app/helpers/observations_helper.rb
deleted file mode 100644
index 251a946b5..000000000
--- a/app/helpers/observations_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module ObservationsHelper
-end
diff --git a/app/helpers/ranking_levels_helper.rb b/app/helpers/ranking_levels_helper.rb
deleted file mode 100644
index 017043d0c..000000000
--- a/app/helpers/ranking_levels_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module RankingLevelsHelper
-end
diff --git a/app/helpers/remote_link_renderer.rb b/app/helpers/remote_link_renderer.rb
index 643b616f7..74d7c5347 100644
--- a/app/helpers/remote_link_renderer.rb
+++ b/app/helpers/remote_link_renderer.rb
@@ -1,29 +1,29 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class RemoteLinkRenderer < WillPaginate::LinkRenderer
def prepare(collection, options, template)
@remote = options.delete(:remote) || {}
super
end
-protected
+ protected
+
def page_link(page, text, attributes = {})
- @template.link_to_remote(text, {:url => url_for(page), :method => :post,:eval_scripts=>true}.merge(@remote), attributes)
+ @template.link_to_remote(text, { :url => url_for(page), :method => :post, :eval_scripts =>true }.merge(@remote), attributes)
end
end
\ No newline at end of file
diff --git a/app/helpers/scheduled_jobs_helper.rb b/app/helpers/scheduled_jobs_helper.rb
deleted file mode 100644
index c3b616bb7..000000000
--- a/app/helpers/scheduled_jobs_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module ScheduledJobsHelper
-end
diff --git a/app/helpers/sms_settings_helper.rb b/app/helpers/sms_settings_helper.rb
deleted file mode 100755
index 9e7e3da40..000000000
--- a/app/helpers/sms_settings_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-module SmsSettingsHelper
-end
diff --git a/app/helpers/student_attendance_helper.rb b/app/helpers/student_attendance_helper.rb
deleted file mode 100755
index 91b928c87..000000000
--- a/app/helpers/student_attendance_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-module StudentAttendanceHelper
-end
diff --git a/app/helpers/students_helper.rb b/app/helpers/students_helper.rb
index 5f8781495..ac7b386d3 100644
--- a/app/helpers/students_helper.rb
+++ b/app/helpers/students_helper.rb
@@ -1,9 +1,23 @@
-# To change this template, choose Tools | Templates
-# and open the template in the editor.
-
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
+#
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
module StudentsHelper
- def link_to_remove_fields(name, c)
- c.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", {:class=>"delete_button_img"})
+ def link_to_remove_fields(name, c)
+ c.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", { :class => "delete_button_img" })
end
def link_to_add_fields(name, c, association)
@@ -11,6 +25,6 @@ def link_to_add_fields(name, c, association)
fields = c.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :c => builder)
end
- link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"),{:class=>"add_button_img"})
+ link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"),{ :class => "add_button_img" })
end
end
diff --git a/app/helpers/timetable_entries_helper.rb b/app/helpers/timetable_entries_helper.rb
deleted file mode 100644
index 11ea434a5..000000000
--- a/app/helpers/timetable_entries_helper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-module TimetableEntriesHelper
-end
diff --git a/app/helpers/timetables_helper.rb b/app/helpers/timetables_helper.rb
index 0b1ac0c97..08753f78f 100644
--- a/app/helpers/timetables_helper.rb
+++ b/app/helpers/timetables_helper.rb
@@ -1,55 +1,59 @@
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
+#
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
module TimetablesHelper
- def formatted_timetable_cell(tt)
- ## Produces view for one particular timetable entry cell
- unless tt.blank?
- unless tt.subject.blank?
- "#{tt.subject.code}\n"
- end
+ def subject_code(tte)
+ if tte && tte.subject.present?
+ "#{tte.subject.code}\n"
end
end
- def formatted_timetable_cell_2(tt,emp)
- ## Produces view for one particular timetable entry cell
- unless tt.blank?
- unless tt.subject.blank?
- unless tt.subject.elective_group.nil?
- sub=tt.subject.elective_group.subjects.select{|s| s.employees.include?(emp)}
- "#{sub.first.code}\n" unless sub.empty?
- else
- "#{tt.subject.code}\n"
- end
- end
+
+ def subject_name(tte)
+ if tte && tte.subject.present?
+ "#{tte.subject.name}\n"
end
end
- def subject_name(tt)
- ## Produces view for one particular timetable entry cell
- unless tt.blank?
- unless tt.subject.blank?
- "#{tt.subject.name}\n"
+
+ def elective_subject_code(tte, emp)
+ if tte && tte.subject.present?
+ if tte.subject.elective_group.present?
+ sub = tte.subject.elective_group.subjects.select { |s| s.employees.include?(emp) }
+ "#{sub.first.code}\n" unless sub.empty?
+ else
+ "#{tte.subject.code}\n"
end
end
end
- def timetable_batch(tt)
- ## Produces view for one particular timetable entry cell
- unless tt.blank?
- unless tt.batch.blank?
- "#{tt.batch.full_name}"
- end
+
+ def timetable_batch(tte)
+ if tte && tte.batch.present?
+ "#{tte.batch.full_name}"
end
end
- def employee_name(tt)
- ## Produces view for one particular timetable entry cell
- unless tt.blank?
- unless tt.employee.blank?
- "#{tt.employee.first_name}"
- end
+
+ def employee_name(tte)
+ if tte && tte.employee.present?
+ "#{tte.employee.first_name}"
end
end
- def employee_full_name(tt)
- ## Produces view for one particular timetable entry cell
- unless tt.blank?
- unless tt.employee.blank?
- "#{tt.employee.full_name}"
- end
+
+ def employee_full_name(tte)
+ if tte && tte.employee.present?
+ "#{tte.employee.full_name}"
end
end
end
\ No newline at end of file
diff --git a/app/models/additional_field.rb b/app/models/additional_field.rb
index 24952aa70..f0132c964 100755
--- a/app/models/additional_field.rb
+++ b/app/models/additional_field.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AdditionalField < ActiveRecord::Base
has_many :additional_field_options, :dependent=>:destroy
validates_presence_of :name
- validates_format_of :name, :with => /^[^~`@%$*()\-\[\]{}"':;\/.,\\=+|]*$/i,
+ validates_format_of :name, :with => /\A[^~`@%$*()\-\[\]{}"':;\/.,\\=+|]*\z/i,
:message => "#{t('must_contain_only_letters_numbers_space')}"
validates_uniqueness_of :name,:case_sensitive => false
diff --git a/app/models/additional_field_option.rb b/app/models/additional_field_option.rb
index 127885d67..21f6ecefd 100644
--- a/app/models/additional_field_option.rb
+++ b/app/models/additional_field_option.rb
@@ -1,5 +1,5 @@
class AdditionalFieldOption < ActiveRecord::Base
-
belongs_to :additional_field
+ belongs_to :school
end
diff --git a/app/models/archived_employee.rb b/app/models/archived_employee.rb
index c03c2c9a5..95b757d49 100755
--- a/app/models/archived_employee.rb
+++ b/app/models/archived_employee.rb
@@ -1,36 +1,34 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedEmployee < ActiveRecord::Base
belongs_to :employee_category
belongs_to :employee_position
belongs_to :employee_grade
belongs_to :employee_department
belongs_to :nationality, :class_name => 'Country'
- has_many :archived_employee_bank_details
- has_many :archived_employee_additional_details
- before_save :status_false
+ has_many :archived_employee_bank_details, :foreign_key => 'employee_id'
+ has_many :archived_employee_additional_details, :foreign_key => 'employee_id'
+ before_save :set_status_false
- def status_false
- unless self.status==0
- self.status=0
- end
- end
+ has_attached_file :photo,
+ :styles => { :thumb => '100x100#', :small => '150x150>' },
+ :url => '/system/:class/:attachment/:id/:style/:basename.:extension',
+ :path => ':rails_root/public/system/:class/:attachment/:id/:style/:basename.:extension'
def image_file=(input_data)
return if input_data.blank?
@@ -39,16 +37,15 @@ def image_file=(input_data)
self.photo_data = input_data.read
end
-
- has_attached_file :photo,
- :styles => {
- :thumb=> "100x100#",
- :small => "150x150>"},
- :url => "/system/:class/:attachment/:id/:style/:basename.:extension",
- :path => ":rails_root/public/system/:class/:attachment/:id/:style/:basename.:extension"
-
def full_name
"#{first_name} #{middle_name} #{last_name}"
end
+ private
+
+ def set_status_false
+ self.status = false unless status?
+ true
+ end
+
end
diff --git a/app/models/archived_employee_additional_detail.rb b/app/models/archived_employee_additional_detail.rb
index dfefd69c6..87d95ed6b 100755
--- a/app/models/archived_employee_additional_detail.rb
+++ b/app/models/archived_employee_additional_detail.rb
@@ -1,22 +1,21 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedEmployeeAdditionalDetail < ActiveRecord::Base
- belongs_to :archived_employee
+ belongs_to :archived_employee, :foreign_key => 'employee_id'
belongs_to :additional_field
end
diff --git a/app/models/archived_employee_bank_detail.rb b/app/models/archived_employee_bank_detail.rb
index 9ca4a63e7..3a4daf32f 100755
--- a/app/models/archived_employee_bank_detail.rb
+++ b/app/models/archived_employee_bank_detail.rb
@@ -1,22 +1,21 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedEmployeeBankDetail < ActiveRecord::Base
- belongs_to :archived_employee
+ belongs_to :archived_employee, :foreign_key => 'employee_id'
belongs_to :bank_field
end
diff --git a/app/models/archived_employee_salary_structure.rb b/app/models/archived_employee_salary_structure.rb
index d85582013..44bcbdc69 100755
--- a/app/models/archived_employee_salary_structure.rb
+++ b/app/models/archived_employee_salary_structure.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedEmployeeSalaryStructure < ActiveRecord::Base
- has_many :payroll_categories
+ has_many :payroll_categories
end
diff --git a/app/models/archived_exam_score.rb b/app/models/archived_exam_score.rb
index 9f5f340cc..dfd0053ea 100755
--- a/app/models/archived_exam_score.rb
+++ b/app/models/archived_exam_score.rb
@@ -1,78 +1,69 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedExamScore < ActiveRecord::Base
belongs_to :student
belongs_to :exam
belongs_to :grading_level
-
-
before_save :calculate_grade
def calculate_percentage
percentage = self.marks.to_i * 100 / self.exam.maximum_marks
end
- def grouped_exam_subject_total(subject,student,type,batch = "")
- if batch == ""
- batch = student.batch.id
- end
+ def grouped_exam_subject_total(subject ,student ,type ,batch = "")
+ batch = student.batch_id if batch.blank?
+
if type == 'grouped'
grouped_exams = GroupedExam.find_all_by_batch_id(batch)
exam_groups = []
grouped_exams.each do |x|
eg = ExamGroup.find(x.exam_group_id)
- exam_groups.push ExamGroup.find(x.exam_group_id)
+ exam_groups << eg if eg
end
else
exam_groups = ExamGroup.find_all_by_batch_id(batch)
end
+
total_marks = 0
exam_groups.each do |exam_group|
- unless exam_group.exam_type == 'Grades'
+ if exam_group.exam_type != 'Grades'
exam = Exam.find_by_subject_id_and_exam_group_id(subject.id,exam_group.id)
- unless exam.nil?
- exam_score = ArchivedExamScore.find_by_student_id(student.id, :conditions=>{:exam_id=>exam.id})
- total_marks = total_marks+ (exam_score.marks || 0) unless exam_score.nil?
+ if exam.present?
+ exam_score = ArchivedExamScore.find_by_student_id(student.id, :conditions=>{:exam_id => exam.id})
+
+ total_marks = total_marks + (exam_score.marks || 0) unless exam_score.nil?
end
end
end
total_marks
end
-
def batch_wise_aggregate(student,batch)
check = ExamGroup.find_all_by_batch_id(batch.id)
var = []
- check.each do |x|
- if x.exam_type == 'Grades'
- var << 1
- end
- end
+ check.each {|x| var << 1 if x.exam_type == 'Grades' }
if var.empty?
grouped_exam = GroupedExam.find_all_by_batch_id(batch.id)
if grouped_exam.empty?
exam_groups = ExamGroup.find_all_by_batch_id(batch.id)
else
exam_groups = []
- grouped_exam.each do |x|
- exam_groups.push ExamGroup.find(x.exam_group_id)
- end
+ grouped_exam.each {|x| exam_groups << ExamGroup.find(x.exam_group_id)}
end
exam_groups.size
max_total = 0
@@ -81,21 +72,21 @@ def batch_wise_aggregate(student,batch)
max_total = max_total + exam_group.archived_total_marks(student)[1]
marks_total = marks_total + exam_group.archived_total_marks(student)[0]
end
- aggr = (marks_total*100/max_total) unless max_total ==0
+ aggr = (marks_total * 100 / max_total) unless max_total ==0
else
- aggr = 'nil'
+ aggr = nil
end
-
end
private
+
def calculate_grade
exam = self.exam
exam_group = exam.exam_group
exam_type = exam_group.exam_type
student_batch = ArchivedStudent.find(self.student_id).batch_id
- unless exam_type == 'Grades'
- unless self.marks.nil?
+ if exam_type != 'Grades'
+ if self.marks.present?
percent_score = self.marks.to_i * 100 / self.exam.maximum_marks
grade = GradingLevel.percentage_to_grade(percent_score, student_batch)
self.grading_level_id = grade.id if exam_type == 'MarksAndGrades'
@@ -104,5 +95,4 @@ def calculate_grade
end
end
end
-
end
diff --git a/app/models/archived_guardian.rb b/app/models/archived_guardian.rb
index 34c56e08d..5c55e5968 100755
--- a/app/models/archived_guardian.rb
+++ b/app/models/archived_guardian.rb
@@ -1,32 +1,29 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedGuardian < ActiveRecord::Base
belongs_to :country
belongs_to :ward, :class_name => 'ArchivedStudent'
-
-
def full_name
"#{first_name} #{last_name}"
end
- def is_immediate_contact?
+ def immediate_contact?
ward.immediate_contact_id == id
end
end
\ No newline at end of file
diff --git a/app/models/archived_student.rb b/app/models/archived_student.rb
index 7bd59e2ca..0497d1422 100755
--- a/app/models/archived_student.rb
+++ b/app/models/archived_student.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ArchivedStudent < ActiveRecord::Base
include CceReportMod
-
+
belongs_to :country
belongs_to :batch
belongs_to :student_category
@@ -29,14 +28,12 @@ class ArchivedStudent < ActiveRecord::Base
has_many :students_subjects, :primary_key=>:former_id, :foreign_key=>'student_id'
has_many :subjects ,:through => :students_subjects
-
+
has_many :cce_reports, :primary_key=>:former_id, :foreign_key=>'student_id'
has_many :assessment_scores, :primary_key=>:former_id, :foreign_key=>'student_id'
has_many :exam_scores, :primary_key=>:former_id, :foreign_key=>'student_id'
- before_save :is_active_false
-
- #has_and_belongs_to_many :graduated_batches, :class_name => 'Batch', :join_table => 'batch_students',:foreign_key => 'student_id' ,:finder_sql =>'SELECT * FROM `batches`,`archived_students` INNER JOIN `batch_students` ON `batches`.id = `batch_students`.batch_id WHERE (`batch_students`.student_id = `archived_students`.former_id )'
+ before_save :inactive_student
has_attached_file :photo,
:styles => {
@@ -45,10 +42,9 @@ class ArchivedStudent < ActiveRecord::Base
:url => "/system/:class/:attachment/:id/:style/:basename.:extension",
:path => ":rails_root/public/system/:class/:attachment/:id/:style/:basename.:extension"
- def is_active_false
- unless self.is_active==0
- self.is_active=0
- end
+ def inactive_student
+ self.is_active = false
+ true
end
def gender_as_text
@@ -64,23 +60,23 @@ def full_name
end
def immediate_contact
- ArchivedGuardian.find(self.immediate_contact_id) unless self.immediate_contact_id.nil?
+ ArchivedGuardian.find(self.immediate_contact_id) if self.immediate_contact_id.present?
end
def all_batches
- self.graduated_batches + self.batch.to_a
+ self.graduated_batches + [self.batch]
end
def graduated_batches
- # SELECT * FROM `batches` INNER JOIN `batch_students` ON `batches`.id = `batch_students`.batch_id
- Batch.find(:all,:conditions=> ["batch_students.student_id = #{former_id.to_i}"], :joins =>'INNER JOIN batch_students ON batches.id = batch_students.batch_id' )
+ # SELECT * FROM batches INNER JOIN batch_students ON batches.id = batch_students.batch_id
+ Batch.find(:all,:conditions=> ["batch_students.student_id = ?", former_id], :joins =>'INNER JOIN batch_students ON batches.id = batch_students.batch_id' )
end
- def additional_detail(additional_field)
- StudentAdditionalDetail.find_by_additional_field_id_and_student_id(additional_field,self.former_id)
+ def additional_detail(additional_field_id)
+ StudentAdditionalDetail.find_by_additional_field_id_and_student_id(additional_field_id, self.former_id)
end
- def has_retaken_exam(subject_id)
+ def has_retaken_exam?(subject_id)
retaken_exams = PreviousExamScore.find_all_by_student_id(self.former_id)
if retaken_exams.empty?
return false
@@ -91,7 +87,6 @@ def has_retaken_exam(subject_id)
end
return false
end
-
end
-end
\ No newline at end of file
+end
diff --git a/app/models/assessment_score.rb b/app/models/assessment_score.rb
index 03eb74579..ec5ac3b0c 100644
--- a/app/models/assessment_score.rb
+++ b/app/models/assessment_score.rb
@@ -1,26 +1,26 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AssessmentScore < ActiveRecord::Base
belongs_to :student
belongs_to :descriptive_indicator
belongs_to :exam
- named_scope :co_scholastic, {:conditions=>{:exam_id=>nil}}
- named_scope :scholastic, {:conditions=>['exam_id > 0']}
+ named_scope :co_scholastic, :conditions => { :exam_id => nil }
+ named_scope :scholastic, :conditions => ['exam_id > 0']
# belongs_to :cce_grade
end
diff --git a/app/models/assessment_tool.rb b/app/models/assessment_tool.rb
index 38efa03ba..c1e12e382 100644
--- a/app/models/assessment_tool.rb
+++ b/app/models/assessment_tool.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class AssessmentTool < ActiveRecord::Base
# belongs_to :descriptive_indicator
# has_many :assessment_scores
diff --git a/app/models/attendance.rb b/app/models/attendance.rb
index 56fe18f86..d51b29b34 100755
--- a/app/models/attendance.rb
+++ b/app/models/attendance.rb
@@ -1,56 +1,45 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Attendance < ActiveRecord::Base
belongs_to :student
belongs_to :batch
- validates_presence_of :reason,:month_date,:batch_id,:student_id
- validates_uniqueness_of :student_id, :scope => [:month_date],:message=>"already marked as absent"
- named_scope :by_month, lambda { |d| { :conditions => { :month_date => d.beginning_of_month..d.end_of_month } } }
- named_scope :by_month_and_batch, lambda { |d,b| {:conditions => { :month_date => d.beginning_of_month..d.end_of_month,:batch_id=>b } } }
- #validate :student_current_batch
+ validates_presence_of :reason, :month_date, :batch_id, :student_id
+ validates_uniqueness_of :student_id, :scope => [:month_date], :message => "already marked as absent"
+ named_scope :by_month, lambda { |d| { :conditions => { :month_date => d.beginning_of_month..d.end_of_month } } }
+ named_scope :by_month_and_batch, lambda { |d, b| { :conditions => { :month_date => d.beginning_of_month..d.end_of_month, :batch_id => b } } }
+ validate :student_current_batch, :valid_month_date
- def validate
- unless self.student.nil?
- if self.student.batch_id == self.batch_id
- return true
- else
- errors.add('batch_id',"attendance is not marked for present batch")
- return false
- end
- end
+ def full_day?
+ forenoon? && afternoon?
end
- def after_validate
- unless self.month_date.nil?
- errors.add("#{t('attendance_before_the_date_of_admission')}") if self.student.present? and self.month_date < self.student.admission_date
- else
- errors.add("#{t('month_date_cant_be_blank')}")
- end
+ def half_day?
+ forenoon? || afternoon?
end
- def is_full_day
- forenoon == true and afternoon == true
- end
+ private
- def is_half_day
- forenoon == true or afternoon == true
- end
-
+ def student_current_batch
+ errors.add('batch_id', "attendance is not marked for present batch") if student && student.batch_id != batch_id
+ end
+
+ def valid_month_date
+ errors.add('month_date', "#{t('attendance_before_the_date_of_admission')}") if month_date && student && month_date < student.admission_date
+ end
end
\ No newline at end of file
diff --git a/app/models/batch.rb b/app/models/batch.rb
index ab31374c1..c84261158 100755
--- a/app/models/batch.rb
+++ b/app/models/batch.rb
@@ -1,23 +1,22 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Batch < ActiveRecord::Base
- GRADINGTYPES = {"1"=>"GPA","2"=>"CWA","3"=>"CCE"}
+ GRADINGTYPES = { '1' => 'GPA', '2' => 'CWA', '3' => 'CCE' }
belongs_to :course
@@ -26,42 +25,41 @@ class Batch < ActiveRecord::Base
has_many :grouped_batches
has_many :archived_students
has_many :grading_levels, :conditions => { :is_deleted => false }
- has_many :subjects, :conditions => { :is_deleted => false }
- has_many :employees_subjects, :through =>:subjects
+ has_many :subjects, :conditions => { :is_deleted => false }
+ has_many :employees_subjects, :through => :subjects
has_many :exam_groups
- has_many :fee_category , :class_name => "FinanceFeeCategory"
+ has_many :fee_category, :class_name => 'FinanceFeeCategory'
has_many :elective_groups
has_many :finance_fee_collections
has_many :finance_transactions, :through => :students
has_many :batch_events
- has_many :events , :through =>:batch_events
- has_many :batch_fee_discounts , :foreign_key => 'receiver_id'
- has_many :student_category_fee_discounts , :foreign_key => 'receiver_id'
+ has_many :events, :through => :batch_events
+ has_many :batch_fee_discounts, :foreign_key => 'receiver_id'
+ has_many :student_category_fee_discounts, :foreign_key => 'receiver_id'
has_many :attendances
has_many :subject_leaves
has_many :timetable_entries
has_many :cce_reports
has_many :assessment_scores
-
has_and_belongs_to_many :graduated_students, :class_name => 'Student', :join_table => 'batch_students'
delegate :course_name,:section_name, :code, :to => :course
delegate :grading_type, :cce_enabled?, :observation_groups, :cce_weightages, :to=>:course
- validates_presence_of :name, :start_date, :end_date
+ validates_presence_of :name, :started_on, :ended_on
attr_accessor :job_type
- named_scope :active,{ :conditions => { :is_deleted => false, :is_active => true },:joins=>:course,:select=>"`batches`.*,CONCAT(courses.code,'-',batches.name) as course_full_name",:order=>"course_full_name"}
- named_scope :inactive,{ :conditions => { :is_deleted => false, :is_active => false },:joins=>:course,:select=>"`batches`.*,CONCAT(courses.code,'-',batches.name) as course_full_name",:order=>"course_full_name"}
- named_scope :deleted,{:conditions => { :is_deleted => true },:joins=>:course,:select=>"`batches`.*,CONCAT(courses.code,'-',batches.name) as course_full_name",:order=>"course_full_name"}
- named_scope :cce, {:select => "batches.*",:joins => :course,:conditions=>["courses.grading_type = #{GRADINGTYPES.invert["CCE"]}"],:order=>:code}
+ named_scope :active, { :conditions => { :is_deleted => false, :is_active => true }, :joins => :course, :select => 'batches.*, CONCAT(courses.code, "-", batches.name) AS course_full_name', :order => 'course_full_name' }
+ named_scope :inactive, { :conditions => { :is_deleted => false, :is_active => false }, :joins => :course, :select => 'batches.*, CONCAT(courses.code, "-", batches.name) AS course_full_name', :order => 'course_full_name' }
+ named_scope :deleted, { :conditions => { :is_deleted => true }, :joins => :course, :select => 'batches.*, CONCAT(courses.code, "-", batches.name) AS course_full_name', :order => 'course_full_name' }
+ named_scope :cce, { :select => 'batches.*', :joins => :course, :conditions => ['courses.grading_type = ?', GRADINGTYPES.invert['CCE']], :order => :code }
def validate
- errors.add(:start_date, "#{t('should_be_before_end_date')}.") \
- if self.start_date > self.end_date \
- if self.start_date and self.end_date
+ if self.started_on && self.ended_on && self.started_on > self.ended_on
+ errors.add(:started_on, "#{t('should_be_before_end_date')}.")
+ end
end
def full_name
@@ -71,7 +69,7 @@ def full_name
def course_section_name
"#{course_name} - #{section_name}"
end
-
+
def inactivate
update_attribute(:is_deleted, true)
self.employees_subjects.destroy_all
@@ -83,7 +81,7 @@ def grading_level_list
end
def fee_collection_dates
- FinanceFeeCollection.find_all_by_batch_id(self.id,:conditions => "is_deleted = false")
+ FinanceFeeCollection.find_all_by_batch_id(self.id, :conditions => { :is_deleted => false })
end
def all_students
@@ -91,19 +89,19 @@ def all_students
end
def normal_batch_subject
- Subject.find_all_by_batch_id(self.id,:conditions=>["elective_group_id IS NULL AND is_deleted = false"])
+ Subject.find_all_by_batch_id(self.id, :conditions => { :elective_group_id => nil, :is_deleted => false })
end
-
+
def elective_batch_subject(elect_group)
Subject.find_all_by_batch_id_and_elective_group_id(self.id,elect_group,:conditions=>["elective_group_id IS NOT NULL AND is_deleted = false"])
end
def all_elective_subjects
- elective_groups.map(&:subjects).compact.flatten.select{|subject| subject.is_deleted == false}
+ elective_groups.map(&:subjects).compact.flatten.select { |subject| !subject.is_deleted? }
end
def has_own_weekday
- Weekday.find_all_by_batch_id(self.id,:conditions=>{:is_deleted=>false}).present?
+ Weekday.find_all_by_batch_id(self.id, :conditions => { :is_deleted => false }).any?
end
def allow_exam_acess(user)
@@ -115,7 +113,7 @@ def allow_exam_acess(user)
end
def is_a_holiday_for_batch?(day)
- return true if Event.holidays.count(:all, :conditions => ["start_date <=? AND end_date >= ?", day, day] ) > 0
+ return true if Event.holidays.count(:all, :conditions => ["started_on <=? AND ended_on >= ?", day, day] ) > 0
false
end
@@ -129,12 +127,12 @@ def holiday_event_dates
end
return event_holidays #array of holiday event dates
end
-
- def return_holidays(start_date,end_date)
+
+ def return_holidays(started_on,ended_on)
@common_holidays ||= Event.holidays.is_common
@batch_holidays=self.events(:all,:conditions=>{:is_holiday=>true})
all_holiday_events = @batch_holidays+@common_holidays
- all_holiday_events.reject!{|h| !(h.start_date>=start_date and h.end_date<=end_date)}
+ all_holiday_events.reject!{|h| !(h.started_on >= started_on && h.ended_on <= ended_on)}
event_holidays = []
all_holiday_events.each do |event|
event_holidays+=event.dates
@@ -142,16 +140,16 @@ def return_holidays(start_date,end_date)
return event_holidays #array of holiday event dates
end
- def find_working_days(start_date,end_date)
+ def find_working_days(started_on,ended_on)
start=[]
- start<["student_id = ? and month_date >= ? and month_date <= ?",student.id,start_date,end_date])
+ leaves = Attendance.find(:all,:conditions=>["student_id = ? and month_date >= ? and month_date <= ?",student.id,started_on,ended_on])
absents = 0
unless leaves.empty?
leaves.each do|leave|
@@ -557,7 +555,7 @@ def generate_previous_batch_reports
end
end
-
+
def subject_hours(starting_date,ending_date,subject_id)
unless subject_id == 0
@@ -565,10 +563,10 @@ def subject_hours(starting_date,ending_date,subject_id)
unless subject.elective_group.nil?
subject=subject.elective_group.subjects.first
end
- # Timetable.all(:conditions=>["('#{starting_date}' BETWEEN start_date AND end_date) OR ('#{ending_date}' BETWEEN start_date AND end_date) OR (start_date BETWEEN '#{starting_date}' AND #{ending_date}) OR (end_date BETWEEN '#{starting_date}' AND '#{ending_date}')"])
- entries = TimetableEntry.find(:all,:joins=>:timetable,:include=>:weekday,:conditions=>["((? BETWEEN start_date AND end_date) OR (? BETWEEN start_date AND end_date) OR (start_date BETWEEN ? AND ?) OR (end_date BETWEEN ? AND ?)) AND timetable_entries.subject_id = ? AND timetable_entries.batch_id = ?",starting_date,ending_date,starting_date,ending_date,starting_date,ending_date,subject.id,id]).group_by(&:timetable_id)
+ # Timetable.all(:conditions=>["('#{starting_date}' BETWEEN started_on AND ended_on) OR ('#{ending_date}' BETWEEN started_on AND ended_on) OR (started_on BETWEEN '#{starting_date}' AND #{ending_date}) OR (ended_on BETWEEN '#{starting_date}' AND '#{ending_date}')"])
+ entries = TimetableEntry.find(:all,:joins=>:timetable,:include=>:weekday,:conditions=>["((? BETWEEN started_on AND ended_on) OR (? BETWEEN started_on AND ended_on) OR (started_on BETWEEN ? AND ?) OR (ended_on BETWEEN ? AND ?)) AND timetable_entries.subject_id = ? AND timetable_entries.batch_id = ?",starting_date,ending_date,starting_date,ending_date,starting_date,ending_date,subject.id,id]).group_by(&:timetable_id)
else
- entries = TimetableEntry.find(:all,:joins=>:timetable,:include=>:weekday,:conditions=>["((? BETWEEN start_date AND end_date) OR (? BETWEEN start_date AND end_date) OR (start_date BETWEEN ? AND ?) OR (end_date BETWEEN ? AND ?)) AND timetable_entries.batch_id = ?",starting_date,ending_date,starting_date,ending_date,starting_date,ending_date,id]).group_by(&:timetable_id)
+ entries = TimetableEntry.find(:all,:joins=>:timetable,:include=>:weekday,:conditions=>["((? BETWEEN started_on AND ended_on) OR (? BETWEEN started_on AND ended_on) OR (started_on BETWEEN ? AND ?) OR (ended_on BETWEEN ? AND ?)) AND timetable_entries.batch_id = ?",starting_date,ending_date,starting_date,ending_date,starting_date,ending_date,id]).group_by(&:timetable_id)
end
timetable_ids=entries.keys
hsh2=Hash.new
@@ -580,7 +578,7 @@ def subject_hours(starting_date,ending_date,subject_id)
hsh[k]=val.group_by(&:day_of_week)
end
timetables.each do |tt|
- ([starting_date,start_date.to_date,tt.start_date].max..[tt.end_date,end_date.to_date,ending_date,Configuration.default_time_zone_present_time.to_date].min).each do |d|
+ ([starting_date,started_on,tt.started_on].max..[tt.ended_on,ended_on,ending_date,Configuration.default_time_zone_present_time.to_date].min).each do |d|
hsh2[d]=hsh[tt.id][d.wday]
end
end
@@ -612,7 +610,7 @@ def delete_coscholastic_reports
def fa_groups
FaGroup.all(:joins=>:subjects, :conditions=>{:subjects=>{:batch_id=>id}}).uniq
end
-
+
def create_scholastic_reports
report_hash={}
fa_groups.each do |fg|
@@ -656,7 +654,7 @@ def employees
def perform
#this is for cce_report_generation use flags if need job for other works
-
+
if job_type=="1"
generate_batch_reports
elsif job_type=="2"
@@ -685,6 +683,24 @@ def check_credit_points
def user_is_authorized?(u)
employees.collect(&:user_id).include? u.id
end
-
-
+
+ def self.create_reports(batch_ids)
+ errors = []
+ batches = self.find_all_by_id(batch_ids)
+ batches.each do |batch|
+ if batch.check_credit_points
+ batch.job_type = "3"
+ Delayed::Job.enqueue(batch)
+ batch.delete_student_cce_report_cache
+ else
+ errors += ["Incomplete grading level credit points for #{batch.full_name}, report generation failed."]
+ end
+ end
+ notice = self.create_report_notice(batches)
+ [notice, errors]
+ end
+
+ def self.create_report_notice(batches)
+ "Report generation in queue for batches #{batches.map(&:full_name).join(", ")}. Click Here to view the scheduled job."
+ end
end
diff --git a/app/models/batch_event.rb b/app/models/batch_event.rb
index ce5fb25e4..ff613c9a8 100755
--- a/app/models/batch_event.rb
+++ b/app/models/batch_event.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchEvent < ActiveRecord::Base
belongs_to :batch
belongs_to :event
diff --git a/app/models/batch_group.rb b/app/models/batch_group.rb
index e933eaea6..9ca7ab483 100644
--- a/app/models/batch_group.rb
+++ b/app/models/batch_group.rb
@@ -1,32 +1,29 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchGroup < ActiveRecord::Base
belongs_to :course
- has_many :grouped_batches, :dependent=>:destroy
- has_many :batches, :through=>:grouped_batches
+ has_many :grouped_batches, :dependent => :destroy
+ has_many :batches, :through => :grouped_batches
validates_presence_of :name, :course_id
- def has_active_batches
- self.batches.each do|b|
- return true if (b.is_active and !b.is_deleted)
- end
- return false
+ def has_active_batches?
+ batches.any? { |b| b.is_active? && !b.is_deleted? }
end
end
diff --git a/app/models/batch_student.rb b/app/models/batch_student.rb
index f0ae03099..0a8af1b0c 100644
--- a/app/models/batch_student.rb
+++ b/app/models/batch_student.rb
@@ -1,23 +1,22 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchStudent < ActiveRecord::Base
belongs_to :batch
belongs_to :student
- belongs_to :school
- validates_presence_of :student_id,:batch_id
+ validates_presence_of :student_id, :batch_id
end
diff --git a/app/models/cce_exam_category.rb b/app/models/cce_exam_category.rb
index 830725747..0c8b43f67 100644
--- a/app/models/cce_exam_category.rb
+++ b/app/models/cce_exam_category.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceExamCategory < ActiveRecord::Base
has_many :cce_weightages
has_many :cce_exam_categories_exam_groups
diff --git a/app/models/cce_grade.rb b/app/models/cce_grade.rb
index 27bded1f1..92cd80c8a 100644
--- a/app/models/cce_grade.rb
+++ b/app/models/cce_grade.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceGrade < ActiveRecord::Base
# has_many :assessment_scores
belongs_to :cce_grade_set
diff --git a/app/models/cce_grade_set.rb b/app/models/cce_grade_set.rb
index dffcff186..fad6d05b9 100644
--- a/app/models/cce_grade_set.rb
+++ b/app/models/cce_grade_set.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceGradeSet < ActiveRecord::Base
has_many :observation_groups
has_many :cce_grades#,:dependent => :destroy
diff --git a/app/models/cce_report.rb b/app/models/cce_report.rb
index 09bf36f31..c98e00443 100644
--- a/app/models/cce_report.rb
+++ b/app/models/cce_report.rb
@@ -1,28 +1,31 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceReport < ActiveRecord::Base
belongs_to :batch
belongs_to :student
-# has_and_belongs_to_many :exams
belongs_to :observable, :polymorphic=>true
belongs_to :exam
named_scope :scholastic,{:conditions=>{:observable_type=>"FaCriteria"}}
named_scope :coscholastic,{:conditions=>{:observable_type=>"Observation"}}
+
+ def self.find_student(type, student_id)
+ type == "former" ? ArchivedStudent.find(student_id) : Student.find(student_id)
+ end
end
diff --git a/app/models/cce_weightage.rb b/app/models/cce_weightage.rb
index 17dae56f5..04aaa4e3b 100644
--- a/app/models/cce_weightage.rb
+++ b/app/models/cce_weightage.rb
@@ -1,25 +1,22 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class CceWeightage < ActiveRecord::Base
has_and_belongs_to_many :courses
belongs_to :cce_exam_category
- validates_presence_of :weightage,:criteria_type
- def validate
- errors.add_to_base("CCE Exam category can't be blank") if self.cce_exam_category_id.blank?
- end
+ validates_presence_of :weightage,:criteria_type, :cce_exam_category_id
end
diff --git a/app/models/class_designation.rb b/app/models/class_designation.rb
index 870649038..d81519536 100644
--- a/app/models/class_designation.rb
+++ b/app/models/class_designation.rb
@@ -1,36 +1,36 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ClassDesignation < ActiveRecord::Base
validates_presence_of :name
- validates_numericality_of :cgpa,:if=>:has_gpa
- validates_numericality_of :marks, :if=>:has_cwa
+ validates_numericality_of :cgpa, :if => :has_gpa?
+ validates_numericality_of :marks, :if => :has_cwa?
belongs_to :course
- def has_gpa
- self.course.gpa_enabled?
+ def has_gpa?
+ course && course.gpa_enabled?
end
- def has_cwa
- self.course.cwa_enabled? or self.course.normal_enabled?
+ def has_cwa?
+ course && (course.cwa_enabled? || course.normal_enabled?)
end
- HUMANIZED_COLUMNS = {:cgpa => "CGPA"}
+ HUMANIZED_COLUMNS = { :cgpa => "CGPA" }
def self.human_attribute_name(attribute)
HUMANIZED_COLUMNS[attribute.to_sym] || super
diff --git a/app/models/class_timing.rb b/app/models/class_timing.rb
index d314e751c..1e08efd57 100755
--- a/app/models/class_timing.rb
+++ b/app/models/class_timing.rb
@@ -1,44 +1,62 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ClassTiming < ActiveRecord::Base
- has_many :timetable_entries, :dependent=>:destroy
+ has_many :timetable_entries, :dependent => :destroy
belongs_to :batch
validates_presence_of :name
- validates_uniqueness_of :name, :scope => [:batch_id , :is_deleted]
-
- named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted=>false, :is_break => false}, :order =>'start_time ASC' } }
- named_scope :default, :conditions => { :batch_id => nil, :is_break => false, :is_deleted=>false }, :order =>'start_time ASC'
- named_scope :active_for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted=>false}, :order =>'start_time ASC' } }
- named_scope :active, :conditions => { :batch_id => nil, :is_deleted=>false }, :order =>'start_time ASC'
-
- def validate
- errors.add(:end_time, "#{t('should_be_later')}.") \
- if self.start_time > self.end_time \
- unless self.start_time.nil? or self.end_time.nil?
- self_check= self.new_record? ? "" : "id != #{self.id} and "
- start_overlap = !ClassTiming.find(:first, :conditions=>[self_check+"start_time < ? and end_time > ? and is_deleted = ? and batch_id #{self.batch_id.nil? ? 'is null' : '='+ self.batch_id.to_s}", self.start_time,self.start_time,false]).nil?
- end_overlap = !ClassTiming.find(:first, :conditions=>[self_check+"start_time < ? and end_time > ? and is_deleted = ? and batch_id #{self.batch_id.nil? ? 'is null' : '='+ self.batch_id.to_s}", self.end_time,self.end_time,false]).nil?
- between_overlap = !ClassTiming.find(:first, :conditions=>[self_check+"start_time < ? and end_time > ? and is_deleted = ? and batch_id #{self.batch_id.nil? ? 'is null' : '='+ self.batch_id.to_s}",self.end_time, self.start_time,false]).nil?
- errors.add(:start_time, "#{t('overlap_existing_class_timing')}.") if start_overlap
- errors.add(:end_time, "#{t('overlap_existing_class_timing')}.") if end_overlap
- errors.add_to_base("#{t('class_time_overlaps_with_existing')}.") if between_overlap
- errors.add(:start_time,"#{t('is_same_as_end_time')}") if self.start_time == self.end_time
+ validates_uniqueness_of :name, :scope => [:batch_id , :is_deleted]
+
+ named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted => false, :is_break => false }, :order =>'start_time ASC' } }
+ named_scope :default, :conditions => { :batch_id => nil, :is_break => false, :is_deleted => false }, :order => 'start_time ASC'
+ named_scope :active_for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted => false }, :order => 'start_time ASC'} }
+ named_scope :active, :conditions => { :batch_id => nil, :is_deleted => false }, :order => 'start_time ASC'
+ validate :end_date_is_later_than_start_date, :start_time_same_end_time, :check_start_overlap, :check_between_overlap, :check_end_overlap
+
+ private
+
+ def overlap_condition(first_time, second_time)
+ self_check = new_record? ? '' : "id != #{connection.quote(self.id)} AND "
+ self_batch_id = batch_id.nil? ? 'batch_id IS NULL' : 'batch_id = ' + connection.quote(batch_id.to_s)
+ start_date_and_end_date_exists? && !!ClassTiming.find(:first, :conditions => [self_check + self_batch_id + " AND start_time < ? AND end_time > ? AND is_deleted = ?", first_time, second_time, false])
+ end
+
+ def start_date_and_end_date_exists?
+ start_time && end_time
+ end
+
+ def end_date_is_later_than_start_date
+ errors.add(:end_time, "#{t('should_be_later')}.") if start_date_and_end_date_exists? && start_time > end_time
+ end
+
+ def start_time_same_end_time
+ errors.add(:start_time,"#{t('is_same_as_end_time')}") if start_date_and_end_date_exists? && start_time == end_time
+ end
+
+ def check_start_overlap
+ errors.add(:start_time, "#{t('overlap_existing_class_timing')}.") if overlap_condition(start_time, start_time)
+ end
+
+ def check_between_overlap
+ errors.add_to_base("#{t('class_time_overlaps_with_existing')}.") if overlap_condition(end_time, start_time)
+ end
+
+ def check_end_overlap
+ errors.add(:end_time, "#{t('overlap_existing_class_timing')}.") if overlap_condition(end_time, end_time)
end
end
diff --git a/app/models/configuration.rb b/app/models/configuration.rb
index 94f136b95..28aff32e0 100755
--- a/app/models/configuration.rb
+++ b/app/models/configuration.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Configuration < ActiveRecord::Base
STUDENT_ATTENDANCE_TYPE_OPTIONS = [["#{t('daily_text')}", "Daily"], ["#{t('subject_wise_text')}", "SubjectWise"]]
@@ -47,7 +46,7 @@ def get_config_value(key)
c = find_by_config_key(key)
c.nil? ? nil : c.config_value
end
-
+
def save_institution_logo(upload)
directory, filename = "#{RAILS_ROOT}/public/uploads/image", 'institute_logo.jpg'
path = File.join(directory, filename) # create the file path
@@ -79,14 +78,14 @@ def get_multiple_configs_as_hash(keys)
def get_grading_types
grading_types = Course::GRADINGTYPES
types= all(:conditions=>{:config_key=>grading_types.values, :config_value=>"1"},:group=>:config_key)
- grading_types.keys.select{|k| types.collect(&:config_key).include? grading_types[k]}
+ grading_types.keys.select{|k| types.collect(&:config_key).include? grading_types[k]}
end
def default_country
default_country_value = self.find_by_config_key('DefaultCountry').config_value.to_i
return default_country_value
end
-
+
def set_grading_types(updates)
#expects an array of integers types
grading_types = Course::GRADINGTYPES
@@ -116,7 +115,7 @@ def default_time_zone_present_time
end
return local_tzone_time
end
-
+
def cce_enabled?
get_config_value("CCE") == "1"
end
diff --git a/app/models/country.rb b/app/models/country.rb
index c80d65761..e3ad32766 100755
--- a/app/models/country.rb
+++ b/app/models/country.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Country < ActiveRecord::Base
default_scope :order=>'name ASC'
end
diff --git a/app/models/course.rb b/app/models/course.rb
index 38303313d..3dc0d3008 100755
--- a/app/models/course.rb
+++ b/app/models/course.rb
@@ -1,25 +1,25 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Course < ActiveRecord::Base
- GRADINGTYPES = {"1"=>"GPA","2"=>"CWA","3"=>"CCE"}
-
+ GRADINGTYPES = { '1' => 'GPA', '2' => 'CWA', '3' => 'CCE' }
+ INVERT_GRADINGTYPES = GRADINGTYPES.invert
+
validates_presence_of :course_name, :code
validate :presence_of_initial_batch, :on => :create
@@ -31,27 +31,23 @@ class Course < ActiveRecord::Base
accepts_nested_attributes_for :batches
has_and_belongs_to_many :observation_groups
has_and_belongs_to_many_with_deferred_save :cce_weightages
-
- before_save :cce_weightage_valid
- named_scope :active, :conditions => { :is_deleted => false }, :order => 'course_name asc'
- named_scope :deleted, :conditions => { :is_deleted => true }, :order => 'course_name asc'
- named_scope :cce, {:select => "courses.*",:conditions=>{:grading_type => GRADINGTYPES.invert["CCE"]}, :order => 'course_name asc'}
+ validate :cce_weightage_valid
- def presence_of_initial_batch
- errors.add_to_base "#{t('should_have_an_initial_batch')}" if batches.length == 0
- end
+ named_scope :active, :conditions => { :is_deleted => false }, :order => 'course_name ASC'
+ named_scope :deleted, :conditions => { :is_deleted => true }, :order => 'course_name ASC'
+ named_scope :cce, { :select => 'courses.*', :conditions => { :grading_type => GRADINGTYPES.invert['CCE'] }, :order => 'course_name ASC' }
def inactivate
update_attribute(:is_deleted, true)
end
-
+
def full_name
"#{course_name} #{section_name}"
end
def active_batches
- self.batches.all(:conditions=>{:is_active=>true,:is_deleted=>false})
+ self.batches.all(:conditions => { :is_active => true, :is_deleted => false })
end
def has_batch_groups_with_active_batches
@@ -60,43 +56,44 @@ def has_batch_groups_with_active_batches
return false
else
batch_groups.each do|b|
- return true if b.has_active_batches==true
+ return true if b.has_active_batches?
end
end
return false
end
- def find_course_rank(batch_ids,sort_order)
- batches = Batch.find_all_by_id(batch_ids)
+ def find_course_rank(batch_ids, sort_order)
+ batches = Batch.find_all_by_id(batch_ids)
@students = Student.find_all_by_batch_id(batches)
- @grouped_exams = GroupedExam.find_all_by_batch_id(batches)
- ordered_scores = []
- student_scores = []
+ ordered_scores = []
+ student_scores = []
ranked_students = []
- @students.each do|student|
- score = GroupedExamReport.find_by_student_id_and_batch_id_and_score_type(student.id,student.batch_id,"c")
+
+ @students.each do |student|
+ score = GroupedExamReport.find_by_student_id_and_batch_id_and_score_type(student.id, student.batch_id, 'c')
marks = 0
- unless score.nil?
- marks = score.marks
- end
+ marks = score.marks if score.present?
ordered_scores << marks
- student_scores << [student.id,marks]
+ student_scores << [student.id, marks]
end
+
ordered_scores = ordered_scores.compact.uniq.sort.reverse
+
@students.each do |student|
m = 0
- student_scores.each do|student_score|
- if student_score[0]==student.id
+ student_scores.each do |student_score|
+ if student_score[0] == student.id
m = student_score[1]
end
end
- if sort_order=="" or sort_order=="rank-ascend" or sort_order=="rank-descend"
- ranked_students << [(ordered_scores.index(m) + 1),m,student.id,student]
+ if sort_order == '' || sort_order == 'rank-ascend' || sort_order == 'rank-descend'
+ ranked_students << [(ordered_scores.index(m) + 1), m.to_f, student.id, student]
else
- ranked_students << [student.full_name,(ordered_scores.index(m) + 1),m,student.id,student]
+ ranked_students << [student.full_name, (ordered_scores.index(m) + 1), m.to_f, student.id, student]
end
end
- if sort_order=="" or sort_order=="rank-ascend" or sort_order=="name-ascend"
+
+ if sort_order == '' || sort_order == 'rank-ascend'
ranked_students = ranked_students.sort
else
ranked_students = ranked_students.sort.reverse
@@ -104,20 +101,21 @@ def find_course_rank(batch_ids,sort_order)
end
def cce_enabled?
- Configuration.cce_enabled? and grading_type == "3"
+ Configuration.cce_enabled? && grading_type == INVERT_GRADINGTYPES['CCE']
end
def gpa_enabled?
- Configuration.has_gpa? and self.grading_type=="1"
+ Configuration.has_gpa? && grading_type == INVERT_GRADINGTYPES['GPA']
end
def cwa_enabled?
- Configuration.has_cwa? and self.grading_type=="2"
+ Configuration.has_cwa? && grading_type == INVERT_GRADINGTYPES['CWA']
end
def normal_enabled?
- self.grading_type.nil? or self.grading_type=="0"
+ self.grading_type.nil? || self.grading_type == '0'
end
+
# def guardian_email_list
# email_addresses = []
# students = self.students
@@ -135,34 +133,36 @@ def normal_enabled?
# end
# email_addresses
# end
- class << self
- def grading_types
- hsh = ActiveSupport::OrderedHash.new
- hsh["0"]="Normal"
- types = Configuration.get_grading_types
- types.each{|t| hsh[t] = GRADINGTYPES[t]}
- hsh
- end
- def grading_types_as_options
- grading_types.invert.sort_by{|k,v| v}
- end
+
+ def self.grading_types
+ hsh = {}
+ hsh["0"] = "Normal"
+ types = Configuration.get_grading_types
+ types.each { |t| hsh[t] = GRADINGTYPES[t] }
+ hsh
+ end
+
+ def self.grading_types_as_options
+ grading_types.invert.sort_by { |k, v| v }
end
def cce_weightages_for_exam_category(cce_exam_cateogry_id)
- cce_weightages.all(:conditions=>{:cce_exam_category_id=>cce_exam_cateogry_id})
+ cce_weightages.all(:conditions => { :cce_exam_category_id => cce_exam_cateogry_id })
end
private
+ def presence_of_initial_batch
+ errors.add_to_base "#{t('should_have_an_initial_batch')}" if batches.length == 0
+ end
+
def cce_weightage_valid
+
cce_weightages.group_by(&:criteria_type).values.each do |v|
- unless v.collect(&:cce_exam_category_id).length == v.collect(&:cce_exam_category_id).uniq.length
- errors.add(:cce_weightages,"can't assign more than one FA or SA under a single exam category.")
- return false
+ if v.collect(&:cce_exam_category_id).count != v.collect(&:cce_exam_category_id).uniq.count
+ errors.add(:cce_weightages, "can't assign more than one FA or SA under a single exam category.")
end
end
- true
-
end
end
\ No newline at end of file
diff --git a/app/models/descriptive_indicator.rb b/app/models/descriptive_indicator.rb
index b03d2c518..605b7754e 100644
--- a/app/models/descriptive_indicator.rb
+++ b/app/models/descriptive_indicator.rb
@@ -1,21 +1,21 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class DescriptiveIndicator < ActiveRecord::Base
belongs_to :describable,:polymorphic=>true
has_many :assessment_scores
diff --git a/app/models/elective.rb b/app/models/elective.rb
index 381db7ed9..0f6d28907 100755
--- a/app/models/elective.rb
+++ b/app/models/elective.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Elective < ActiveRecord::Base
diff --git a/app/models/elective_group.rb b/app/models/elective_group.rb
index 601b8c575..52a77168c 100755
--- a/app/models/elective_group.rb
+++ b/app/models/elective_group.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ElectiveGroup < ActiveRecord::Base
belongs_to :batch
has_many :subjects
diff --git a/app/models/event.rb b/app/models/event.rb
index 188fd4aee..fdae4b80c 100755
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -1,23 +1,23 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Event < ActiveRecord::Base
validates_presence_of :title, :description, :start_date, :end_date
+ validate :valid_date
named_scope :holidays, :conditions => {:is_holiday => true}
named_scope :exams, :conditions => {:is_exam => true}
@@ -26,54 +26,16 @@ class Event < ActiveRecord::Base
has_many :user_events, :dependent => :destroy
belongs_to :origin , :polymorphic => true
- def validate
- unless self.start_date.nil? or self.end_date.nil?
- errors.add(:end_time, "#{t('can_not_be_before_the_start_time')}") if self.end_date < self.start_date
- end
+ def student_event?(student)
+ fiance_fee_collection_event?(student) || user_event?(student)
end
- def is_student_event(student)
- flag = false
- base = self.origin
- unless base.blank?
- if base.respond_to?('batch_id')
- if base.batch_id == student.batch_id
- finance = base.fee_table
- if finance.present?
- flag = true if finance.map{|fee|fee.student_id}.include?(student.id)
- end
- end
- end
- end
- user_events = self.user_events
- unless user_events.nil?
- flag = true if user_events.map{|x|x.user_id }.include?(student.user.id)
- end
- return flag
+ def employee_event?(user)
+ !!user_events && user_events.map{|x|x.user_id }.include?(user.id)
end
- def is_employee_event(user)
- user_events = self.user_events
- unless user_events.nil?
- return true if user_events.map{|x|x.user_id }.include?(user.id)
- end
- return false
- end
-
- def is_active_event
- flag = false
- unless self.origin.nil?
- if self.origin.respond_to?('is_deleted')
- unless self.origin.is_deleted
- flag = true
- end
- else
- flag = true
- end
- else
- flag = true
- end
- return flag
+ def active_event?
+ !!(origin.nil? || (origin && origin.respond_to?('is_deleted') && !origin.is_deleted))
end
def dates
@@ -81,11 +43,25 @@ def dates
end
class << self
- def is_a_holiday?(day)
- return true if Event.holidays.count(:all, :conditions => ["start_date <=? AND end_date >= ?", day, day] ) > 0
- false
+ def a_holiday?(day)
+ Event.holidays.find(:all, :conditions => ["start_date <= ? AND end_date >= ?", day.beginning_of_day, day.end_of_day]).any?
end
end
-
-end
+ private
+
+ def valid_date
+ errors.add(:end_time, "#{t('can_not_be_before_the_start_time')}") if start_date && end_date && end_date < start_date
+ end
+
+ def fiance_fee_collection_event?(student)
+ if origin && origin.respond_to?('batch_id') && origin.batch_id == student.batch_id
+ !!origin.fee_table && origin.fee_table.map{|fee|fee.student_id}.include?(student.id)
+ end
+ end
+
+ def user_event?(student)
+ !!user_events && user_events.map{ |x|x.user_id }.include?(student.user.id)
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/exam.rb b/app/models/exam.rb
index be043f6ec..781d45c41 100755
--- a/app/models/exam.rb
+++ b/app/models/exam.rb
@@ -1,87 +1,59 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Exam < ActiveRecord::Base
validates_presence_of :start_time, :end_time
validates_numericality_of :maximum_marks, :minimum_marks, :allow_nil => true
- validates_presence_of :maximum_marks, :minimum_marks, :if => :validation_should_present?, :on=>:update
+ validates_presence_of :maximum_marks, :minimum_marks, :if => :validation_should_present?, :on => :update
+ validate :minmarks_cant_be_more_than_maxmarks, :end_time_cannot_before_start_time
belongs_to :exam_group
belongs_to :subject, :conditions => { :is_deleted => false }
before_destroy :removable?
- before_save :update_exam_group_date
+ before_save :update_exam_group_date, :update_weightage
+ after_create :create_exam_event
+ after_update :update_exam_event
- has_one :event ,:as=>:origin
+ has_one :event, :as => :origin
has_many :exam_scores
+ accepts_nested_attributes_for :exam_scores
+
has_many :archived_exam_scores
has_many :previous_exam_scores
has_many :assessment_scores
# has_and_belongs_to_many :cce_reports
- accepts_nested_attributes_for :exam_scores
-
def validation_should_present?
- if self.exam_group.exam_type=="Grades"
- return false
- else
- return true
- end
- end
-
- def removable?
- self.exam_scores.reject{|es| es.marks.nil? and es.grading_level_id.nil?}.empty?
-
- end
-
- def validate
- errors.add_to_base("#{t('minmarks_cant_be_more_than_maxmarks')}") \
- if minimum_marks and maximum_marks and minimum_marks > maximum_marks
- errors.add_to_base("#{t('minmarks_cant_be_more_than_maxmarks')}") \
- if minimum_marks and maximum_marks and minimum_marks > maximum_marks
- unless self.start_time.nil? or self.end_time.nil?
- errors.add_to_base("#{t('end_time_cannot_before_start_time')}")if self.end_time < self.start_time
- end
- end
-
- def before_save
- self.weightage = 0 if self.weightage.nil?
- #update_exam_group_date
- end
-
- def after_create
- create_exam_event
+ self.exam_group.exam_type != "Grades"
end
- def after_update
- update_exam_event
+ def removable?
+ self.exam_scores.reject{|es| es.marks.nil? && es.grading_level_id.nil?}.empty?
end
def score_for(student_id)
- exam_score = self.exam_scores.find(:first, :conditions => { :student_id => student_id })
- exam_score.nil? ? ExamScore.new : exam_score
+ self.exam_scores.find_or_initialize_by_student_id(student_id)
end
def class_average_marks
results = ExamScore.find_all_by_exam_id(self)
- scores = results.collect { |x| x.marks unless x.marks.nil?}
+ scores = results.collect { |x| x.marks if x.marks }
scores.delete(nil)
- return (scores.sum / scores.size) unless scores.size == 0
- return 0
+ scores.size == 0 ? 0 : scores.sum / scores.size
end
def fa_groups
@@ -89,27 +61,40 @@ def fa_groups
end
private
+
+ def minmarks_cant_be_more_than_maxmarks
+ errors.add_to_base("#{t('minmarks_cant_be_more_than_maxmarks')}") if minimum_marks && maximum_marks and minimum_marks > maximum_marks
+ end
+
+ def end_time_cannot_before_start_time
+ errors.add_to_base("#{t('end_time_cannot_before_start_time')}") if start_time && end_time and self.end_time < self.start_time
+ end
+
+ def update_weightage
+ self.weightage = 0 if self.weightage.nil?
+ end
+
def update_exam_group_date
group = self.exam_group
- group.update_attribute(:exam_date, self.start_time.to_date) if !group.exam_date.nil? and self.start_time.to_date < group.exam_date
+ group.update_attribute(:exam_date, self.start_time.to_date) if group.exam_date and self.start_time.to_date < group.exam_date
end
def create_exam_event
if self.event.blank?
- new_event = Event.create do |e|
- e.title = "#{t('exam_text')}"
- e.description = "#{self.exam_group.name} #{t('for')} #{self.subject.batch.full_name} - #{self.subject.name}"
- e.start_date = self.start_time
- e.end_date = self.end_time
- e.is_exam = true
- e.origin = self
- end
- batch_event = BatchEvent.create do |be|
- be.event_id = new_event.id
- be.batch_id = self.exam_group.batch_id
- end
+ new_event = Event.create(
+ :title => "#{t('exam_text')}",
+ :description => "#{self.exam_group.name} #{t('for')} #{self.try(:subject).try(:batch).try(:full_name)} - #{self.try(:subject).try(:name)}",
+ :start_date => self.start_time,
+ :end_date => self.end_time,
+ :is_exam => true,
+ :origin => self
+ )
+ batch_event = BatchEvent.create(
+ :event_id => new_event.id,
+ :batch_id => self.exam_group.batch_id
+ )
#self.event_id = new_event.id
- self.update_attributes(:event_id=>new_event.id)
+ self.update_attributes(:event_id => new_event.id)
end
end
diff --git a/app/models/exam_group.rb b/app/models/exam_group.rb
index 06eadf80d..a4c8e26fa 100755
--- a/app/models/exam_group.rb
+++ b/app/models/exam_group.rb
@@ -1,154 +1,113 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamGroup < ActiveRecord::Base
- validates_presence_of :name
+ attr_accessor :maximum_marks, :minimum_marks, :weightage
belongs_to :batch
belongs_to :grouped_exam
-
- has_many :exams, :dependent => :destroy
- before_destroy :removable?
belongs_to :cce_exam_category
+ has_many :exams, :dependent => :destroy
accepts_nested_attributes_for :exams
-
- attr_accessor :maximum_marks, :minimum_marks, :weightage
+ validates_presence_of :name
validates_associated :exams
+ validates_uniqueness_of :cce_exam_category_id, :scope => :batch_id, :message => "already assigned for another Exam Group", :unless => lambda { |e| e.cce_exam_category_id.nil? }
- validates_uniqueness_of :cce_exam_category_id, :scope=>:batch_id, :message=>"already assigned for another Exam Group",:unless => lambda { |e| e.cce_exam_category_id.nil?}
-
- def removable?
- self.exams.reject{|e| e.removable?}.empty?
- end
+ before_save :set_exam_date
+ before_validation :grade_exam_marks
- def before_save
- self.exam_date = self.exam_date || Date.today
- end
-
- def before_validation
- if self.exam_type.downcase == "grades"
- self.exams.each do |ex|
- ex.maximum_marks = 0
- ex.minimum_marks = 0
- end
- end
+ def removable?
+ self.exams.all?{ |e| e.removable? }
end
+ # TODO: all these methods can be refactor using meta programing
def batch_average_marks(marks)
- batch = self.batch
- exams = self.exams
batch_students = batch.students
total_students_marks = 0
- # total_max_marks = 0
students_attended = []
exams.each do |exam|
batch_students.each do |student|
- exam_score = ExamScore.find_by_student_id_and_exam_id(student.id,exam.id)
- unless exam_score.nil?
- unless exam_score.marks.nil?
- total_students_marks = total_students_marks+exam_score.marks
- unless students_attended.include? student.id
- students_attended.push student.id
- end
- end
+ exam_score = ExamScore.find_by_student_id_and_exam_id(student.id, exam.id)
+ if exam_score && exam_score.marks
+ total_students_marks += exam_score.marks
+ students_attended << student.id unless students_attended.include?(student.id)
end
end
- # total_max_marks = total_max_marks+exam.maximum_marks
end
- unless students_attended.size == 0
- batch_average_marks = total_students_marks/students_attended.size
+
+ batch_average_marks = if students_attended.size == 0
+ 0
else
- batch_average_marks = 0
+ total_students_marks / students_attended.size
end
- return batch_average_marks if marks == 'marks'
- # return total_max_marks if marks == 'percentage'
+ batch_average_marks if marks == 'marks'
end
def weightage
- grp = GroupedExam.find_by_batch_id_and_exam_group_id(self.batch.id,self.id)
- unless grp.nil?
- weight = grp.weightage
- else
- weight=0
- end
- return weight
+ grp = GroupedExam.find_by_batch_id_and_exam_group_id(self.batch.id, self.id)
+ grp.present? ? grp.weightage : 0
end
def archived_batch_average_marks(marks)
- batch = self.batch
- exams = self.exams
batch_students = ArchivedStudent.find_all_by_batch_id(self.batch.id)
total_students_marks = 0
- # total_max_marks = 0
students_attended = []
exams.each do |exam|
batch_students.each do |student|
- exam_score = ArchivedExamScore.find_by_student_id_and_exam_id(student.id,exam.id)
- unless exam_score.nil?
- unless exam_score.marks.nil?
- total_students_marks = total_students_marks+exam_score.marks
- unless students_attended.include? student.id
- students_attended.push student.id
- end
- end
+ exam_score = ArchivedExamScore.find_by_student_id_and_exam_id(student.id, exam.id)
+ if exam_score && exam_score.marks
+ total_students_marks += exam_score.marks
+ students_attended << student.id unless students_attended.include?(student.id)
end
end
- # total_max_marks = total_max_marks+exam.maximum_marks
end
- unless students_attended.size == 0
- batch_average_marks = total_students_marks/students_attended.size
+ batch_average_marks = if students_attended.size == 0
+ 0
else
- batch_average_marks = 0
+ total_students_marks / students_attended.size
end
- return batch_average_marks if marks == 'marks'
+ batch_average_marks if marks == 'marks'
end
def batch_average_percentage
-
end
def subject_wise_batch_average_marks(subject_id)
- batch = self.batch
subject = Subject.find(subject_id)
- exam = Exam.find_by_exam_group_id_and_subject_id(self.id,subject.id)
+ exam = Exam.find_by_exam_group_id_and_subject_id(self.id, subject.id)
batch_students = batch.students
total_students_marks = 0
- # total_max_marks = 0
students_attended = []
batch_students.each do |student|
- exam_score = ExamScore.find_by_student_id_and_exam_id(student.id,exam.id)
- unless exam_score.nil?
- total_students_marks = total_students_marks+ (exam_score.marks || 0)
- unless students_attended.include? student.id
- students_attended.push student.id
- end
+ exam_score = ExamScore.find_by_student_id_and_exam_id(student.id, exam.id)
+ if exam_score.present?
+ total_students_marks += (exam_score.marks || 0)
+ students_attended << student.id unless students_attended.include?(student.id)
end
end
- # total_max_marks = total_max_marks+exam.maximum_marks
- unless students_attended.size == 0
- subject_wise_batch_average_marks = total_students_marks/students_attended.size.to_f
+
+ batch_average_marks = if students_attended.size == 0
+ 0
else
- subject_wise_batch_average_marks = 0
+ total_students_marks / students_attended.size.to_f
end
- return subject_wise_batch_average_marks
- # return total_max_marks if marks == 'percentage'
+ batch_average_marks
end
def total_marks(student)
@@ -156,11 +115,13 @@ def total_marks(student)
total_marks = 0
max_total = 0
exams.each do |exam|
- exam_score = ExamScore.find_by_exam_id_and_student_id(exam.id,student.id)
- total_marks = total_marks + (exam_score.marks || 0) unless exam_score.nil?
- max_total = max_total + exam.maximum_marks unless exam_score.nil?
+ exam_score = ExamScore.find_by_exam_id_and_student_id(exam.id, student.id)
+ if exam_score.present?
+ total_marks += (exam_score.marks || 0)
+ max_total += exam.maximum_marks
+ end
end
- result = [total_marks,max_total]
+ [total_marks, max_total]
end
def archived_total_marks(student)
@@ -168,15 +129,29 @@ def archived_total_marks(student)
total_marks = 0
max_total = 0
exams.each do |exam|
- exam_score = ArchivedExamScore.find_by_exam_id_and_student_id(exam.id,student.id)
+ exam_score = ArchivedExamScore.find_by_exam_id_and_student_id(exam.id, student.id)
total_marks = total_marks + (exam_score.marks || 0 ) unless exam_score.nil?
max_total = max_total + exam.maximum_marks unless exam_score.nil?
end
- result = [total_marks,max_total]
+ result = [total_marks, max_total]
end
def course
batch.course if batch
end
-end
\ No newline at end of file
+ private
+
+ def set_exam_date
+ self.exam_date ||= Date.today
+ end
+
+ def grade_exam_marks
+ if self.exam_type && self.exam_type.downcase == "grades"
+ self.exams.each do |ex|
+ ex.maximum_marks = 0
+ ex.minimum_marks = 0
+ end
+ end
+ end
+end
diff --git a/app/models/exam_score.rb b/app/models/exam_score.rb
index 20579a3a1..e4a379a7f 100755
--- a/app/models/exam_score.rb
+++ b/app/models/exam_score.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ExamScore < ActiveRecord::Base
belongs_to :student
belongs_to :exam
@@ -24,111 +23,89 @@ class ExamScore < ActiveRecord::Base
before_save :calculate_grade
before_save :check_existing
-
+ validate :marks_cannot_be_greater_than_maximum_marks
validates_presence_of :student_id
- validates_presence_of :exam_id,:message => "Name/Batch Name/Subject Code is invalid"
- validates_numericality_of :marks,:allow_nil => true
-
-
+ validates_presence_of :exam_id, :message => "Name/Batch Name/Subject Code is invalid"
+ validates_numericality_of :marks, :allow_nil => true
- def check_existing
- exam_score = ExamScore.find(:first,:conditions => {:exam_id => self.exam_id,:student_id => self.student_id})
- if exam_score
- self.id = exam_score.id
- self.instance_variable_set("@new_record",false) #If the record exists,then make the new record as a copy of the existing one and allow rails to chhose
- #the update operation instead of insert.
- end
- return true
- end
-
-
- def validate
- unless self.marks.nil?
- unless self.exam.nil?
- if self.exam.maximum_marks.to_f < self.marks.to_f
- errors.add('marks','cannot be greater than maximum marks')
- return false
- else
- return true
- end
- end
- end
- end
-
-
def calculate_percentage
percentage = self.marks.to_f * 100 / self.exam.maximum_marks.to_f
end
- def grouped_exam_subject_total(subject,student,type,batch = "")
- if batch == ""
- batch = student.batch.id
- end
+ def exam_groups_from(batch, type)
if type == 'grouped'
- grouped_exams = GroupedExam.find_all_by_batch_id(batch)
- exam_groups = []
- grouped_exams.each do |x|
- eg = ExamGroup.find(x.exam_group_id)
- exam_groups.push ExamGroup.find(x.exam_group_id)
- end
+ exam_group_ids = GroupedExam.find_all_by_batch_id(batch).map(&:exam_group_id)
+ ExamGroup.find_all_by_id(exam_group_ids)
else
- exam_groups = ExamGroup.find_all_by_batch_id(batch)
+ ExamGroup.find_all_by_batch_id(batch)
end
+ end
+
+ def grouped_exam_subject_total(subject, student, type, batch = "")
+ batch = student.batch_id if batch.blank?
+ exam_groups = exam_groups_from(batch, type)
total_marks = 0
exam_groups.each do |exam_group|
- unless exam_group.exam_type == 'Grades'
- exam = Exam.find_by_subject_id_and_exam_group_id(subject.id,exam_group.id)
- unless exam.nil?
- exam_score = ExamScore.find_by_student_id(student.id, :conditions=>{:exam_id=>exam.id})
- marks = exam_score.nil? ? 0 : exam_score.marks.nil? ? 0 : exam_score.marks
- total_marks = total_marks + marks unless exam_score.nil?
+ if exam_group.exam_type != 'Grades'
+ exam = Exam.find_by_subject_id_and_exam_group_id(subject.id, exam_group.id)
+ if exam.present?
+ exam_score = ExamScore.find_by_student_id_and_exam_id(student.id, exam.id)
+ total_marks += exam_score && exam_score.marks ? exam_score.marks : 0
end
end
end
- total_marks
+ total_marks.to_f
end
-
+ def var_from(batch_id)
+ ExamGroup.find_all_by_batch_id(batch_id).map do |group|
+ 1 if group.exam_type == 'Grades'
+ end.compact
+ end
- def batch_wise_aggregate(student,batch)
- check = ExamGroup.find_all_by_batch_id(batch.id)
- var = []
- check.each do |x|
- if x.exam_type == 'Grades'
- var << 1
- end
- end
- if var.empty?
- grouped_exam = GroupedExam.find_all_by_batch_id(batch.id)
- if grouped_exam.empty?
- exam_groups = ExamGroup.find_all_by_batch_id(batch.id)
+ def batch_wise_aggregate(student, batch)
+ if var_from(batch.id).empty?
+ grouped_exams = GroupedExam.find_all_by_batch_id(batch.id)
+ exam_groups = if grouped_exams.empty?
+ ExamGroup.find_all_by_batch_id(batch.id)
else
- exam_groups = []
- grouped_exam.each do |x|
- exam_groups.push ExamGroup.find(x.exam_group_id)
- end
+ ExamGroup.find_all_by_id(grouped_exams.map(&:exam_group_id))
end
- exam_groups.size
max_total = 0
marks_total = 0
exam_groups.each do |exam_group|
- max_total = max_total + exam_group.total_marks(student)[1]
- marks_total = marks_total + exam_group.total_marks(student)[0]
+ max_total += exam_group.total_marks(student)[1]
+ marks_total += exam_group.total_marks(student)[0]
end
- aggr = (marks_total*100/max_total) unless max_total==0
+ marks_total * 100 / max_total unless max_total == 0
else
- aggr = 'nil'
+ nil
end
-
end
private
+
+ def marks_cannot_be_greater_than_maximum_marks
+ if marks.present? && exam.present? && exam.maximum_marks.to_f < marks.to_f
+ errors.add(:marks, 'cannot be greater than maximum marks')
+ end
+ end
+
+ def check_existing
+ exam_score = ExamScore.first(:conditions => {:exam_id => self.exam_id, :student_id => self.student_id})
+ if exam_score
+ self.id = exam_score.id
+ self.instance_variable_set("@new_record",false) #If the record exists,then make the new record as a copy of the existing one and allow rails to chhose
+ #the update operation instead of insert.
+ end
+ true
+ end
+
def calculate_grade
- exam = self.exam
exam_group = exam.exam_group
exam_type = exam_group.exam_type
- unless exam_type == 'Grades'
- unless self.marks.nil?
+ if exam_type != 'Grades'
+ if self.marks.present?
percent_score = self.marks.to_i * 100 / self.exam.maximum_marks
grade = GradingLevel.percentage_to_grade(percent_score, self.exam.exam_group.batch_id)
self.grading_level_id = grade.id if exam_type == 'MarksAndGrades'
@@ -136,6 +113,7 @@ def calculate_grade
self.grading_level_id = nil
end
end
+ true
end
end
diff --git a/app/models/fa_criteria.rb b/app/models/fa_criteria.rb
index d28bb9c53..0950a3bfc 100644
--- a/app/models/fa_criteria.rb
+++ b/app/models/fa_criteria.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FaCriteria < ActiveRecord::Base
has_many :descriptive_indicators, :as=>:describable
has_many :assessment_scores, :through=>:descriptive_indicators
diff --git a/app/models/fa_group.rb b/app/models/fa_group.rb
index 538a3041f..7c7fbeee1 100644
--- a/app/models/fa_group.rb
+++ b/app/models/fa_group.rb
@@ -1,25 +1,25 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FaGroup < ActiveRecord::Base
has_many :fa_criterias
has_and_belongs_to_many :subjects
belongs_to :cce_exam_category
- has_many :cce_reports, :through=>:fa_criterias
+ has_many :cce_reports, :through=>:fa_criterias
named_scope :active,:conditions=>{:is_deleted=>false}
@@ -28,5 +28,5 @@ def validate
errors.add_to_base("CCE exam category can't be blank") if self.cce_exam_category_id.blank?
errors.add_to_base("Description can't be blank") if self.desc.blank?
end
-
+
end
diff --git a/app/models/fedena_mailer.rb b/app/models/fedena_mailer.rb
index 3a0dfcdd7..1f06b4fa3 100755
--- a/app/models/fedena_mailer.rb
+++ b/app/models/fedena_mailer.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FedenaMailer < ActionMailer::Base
def email(sender,recipients, subject, message)
recipient_emails = (recipients.class == String) ? recipients.gsub(' ','').split(',').compact : recipients.compact
@@ -30,5 +29,5 @@ def setup_email(sender, emails, subject, message)
@sent_on = Time.now
@body['message'] = message
end
-
+
end
diff --git a/app/models/finance/asset.rb b/app/models/finance/asset.rb
index 1bf2cc8bc..051c58272 100755
--- a/app/models/finance/asset.rb
+++ b/app/models/finance/asset.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Asset < ActiveRecord::Base
validates_presence_of :title, :amount
validates_numericality_of :amount
diff --git a/app/models/finance/batch_fee_collection_discount.rb b/app/models/finance/batch_fee_collection_discount.rb
index efb6b9058..ae78bcb7a 100644
--- a/app/models/finance/batch_fee_collection_discount.rb
+++ b/app/models/finance/batch_fee_collection_discount.rb
@@ -1,44 +1,40 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchFeeCollectionDiscount < FeeCollectionDiscount
-
- belongs_to :receiver ,:class_name=>'Batch'
+ belongs_to :receiver, :class_name => 'Batch'
belongs_to :finance_fee_collection
- validates_presence_of :receiver_id , :message => "#{t('batch_cant_be_blank')}"
+ validates_presence_of :receiver_id, :message => "#{t('batch_cant_be_blank')}"
def total_payable(student = nil)
- if student.nil?
- payable = finance_fee_collection.fee_category.fee_particulars.active.map(&:amount).compact.flatten.sum
+ if student
+ finance_fee_collection.fees_particulars(student).map(&:amount).compact.flatten.sum
else
- payable = finance_fee_collection.fees_particulars(student).map(&:amount).compact.flatten.sum
+ finance_fee_collection.fee_category.fee_particulars.active.map(&:amount).compact.flatten.sum
end
- payable
end
-
+
def discount(student = nil)
- if is_amount == false
- super
- elsif is_amount == true
+ if is_amount?
payable = student.nil? ? total_payable : total_payable(student)
percentage = (super.to_f / payable.to_f).to_f * 100
percentage
+ else
+ super
end
end
end
diff --git a/app/models/finance/batch_fee_discount.rb b/app/models/finance/batch_fee_discount.rb
index 87e84c849..c551c5c4e 100644
--- a/app/models/finance/batch_fee_discount.rb
+++ b/app/models/finance/batch_fee_discount.rb
@@ -1,44 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BatchFeeDiscount < FeeDiscount
+ belongs_to :receiver, :class_name => 'Batch'
- belongs_to :receiver ,:class_name=>'Batch'
- validates_presence_of :receiver_id , :message => "#{t('batch_cant_be_blank')}"
-
- validates_uniqueness_of :name, :scope=>[:receiver_id, :type]
-
- # validates_uniqueness_of :receiver_id, :scope=>[:type,:finance_fee_category_id],:message=>'Discount already exists for batch'
-
- def total_payable
- payable = finance_fee_category.fee_particulars.map(&:amount).compact.flatten.sum
- payable
- end
-
- def discount
- if is_amount == false
- super
- elsif is_amount == true
- payable = total_payable
- percentage = (super.to_f / payable.to_f).to_f * 100
- percentage
- end
- end
+ validates_presence_of :receiver_id, :message => "#{t('batch_cant_be_blank')}"
+ validates_uniqueness_of :name, :scope => [:receiver_id, :type]
+ # validates_uniqueness_of :receiver_id, :scope => [:type, :finance_fee_category_id],:message => 'Discount already exists for batch'
end
diff --git a/app/models/finance/fee_collection_discount.rb b/app/models/finance/fee_collection_discount.rb
index e4e9f6495..56cd99123 100644
--- a/app/models/finance/fee_collection_discount.rb
+++ b/app/models/finance/fee_collection_discount.rb
@@ -1,31 +1,30 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FeeCollectionDiscount < ActiveRecord::Base
def category_name
- c =StudentCategory.find(self.receiver_id)
- c.name unless c.nil?
+ c = StudentCategory.find_by_id(self.receiver_id)
+ c.name if c
end
def student_name
- s =Student.find(self.receiver_id)
- "#{s.first_name} (#{s.admission_no})" unless s.nil?
+ s = Student.find_by_id(self.receiver_id)
+ "#{s.first_name} (#{s.admission_no})" if s
end
end
diff --git a/app/models/finance/fee_collection_particular.rb b/app/models/finance/fee_collection_particular.rb
index 6dc0c0504..0e9ea23d8 100644
--- a/app/models/finance/fee_collection_particular.rb
+++ b/app/models/finance/fee_collection_particular.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FeeCollectionParticular < ActiveRecord::Base
belongs_to :finance_fee_collection
belongs_to :student_category
diff --git a/app/models/finance/fee_discount.rb b/app/models/finance/fee_discount.rb
index 442366ddb..78e3e1eee 100644
--- a/app/models/finance/fee_discount.rb
+++ b/app/models/finance/fee_discount.rb
@@ -1,65 +1,55 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FeeDiscount < ActiveRecord::Base
belongs_to :finance_fee_category
validates_presence_of :name, :discount, :type
validates_numericality_of :discount
-
- def validate
- if is_amount == false
- if discount.to_f < 0.00 or discount.to_f > 100.00
- errors.add("discount","must be between 0 to 100")
- end
- elsif is_amount == true
- payable = finance_fee_category.fee_particulars.map(&:amount).compact.flatten.sum
- if discount.to_f > payable.to_f
- errors.add("discount","cannot be greater than total payable amount")
- end
- end
- end
+ validate :discount_must_be_between_0_to_100, :discount_cannot_be_greater_than_total_payable_amount
def total_payable
- payable = finance_fee_category.fee_particulars.map(&:amount).compact.flatten.sum
- payable
+ finance_fee_category.fee_particulars.map(&:amount).compact.flatten.sum
end
def discount
- if is_amount == false
- super
- elsif is_amount == true
- payable = total_payable
- percentage = (super.to_f / payable.to_f).to_f * 100
- percentage
- end
+ is_amount? ? (super.to_f / total_payable.to_f).to_f * 100 : super
end
-
-
def category_name
- c =StudentCategory.find(self.receiver_id)
+ c = StudentCategory.find_by_id(self.receiver_id)
c.name unless c.nil?
end
def student_name
- s =Student.find(self.receiver_id)
+ s = Student.find_by_id(self.receiver_id)
"#{s.first_name} (#{s.admission_no})" unless s.nil?
end
+ private
+ def discount_must_be_between_0_to_100
+ errors.add(:discount,"must be between 0 to 100") if !is_amount? && discount.to_f < 0.00 || discount.to_f > 100.00
+ end
+
+ def discount_cannot_be_greater_than_total_payable_amount
+ if is_amount?
+ payable = finance_fee_category.fee_particulars.map(&:amount).compact.flatten.sum
+ errors.add(:discount,"cannot be greater than total payable amount") if discount.to_f > payable.to_f
+ end
+ end
+
end
diff --git a/app/models/finance/finance_donation.rb b/app/models/finance/finance_donation.rb
index 43afda1c7..d1f288950 100755
--- a/app/models/finance/finance_donation.rb
+++ b/app/models/finance/finance_donation.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceDonation < ActiveRecord::Base
belongs_to :transaction, :class_name => 'FinanceTransaction', :dependent => :destroy
validates_presence_of :donor, :amount
diff --git a/app/models/finance/finance_fee.rb b/app/models/finance/finance_fee.rb
index c1eaa8156..c3947971a 100755
--- a/app/models/finance/finance_fee.rb
+++ b/app/models/finance/finance_fee.rb
@@ -1,35 +1,29 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceFee < ActiveRecord::Base
-
+
belongs_to :finance_fee_collection ,:foreign_key => 'fee_collection_id'
has_many :finance_transactions ,:as=>:finance
has_many :components, :class_name => 'FinanceFeeComponent', :foreign_key => 'fee_id'
belongs_to :student
-
def check_transaction_done
- unless self.transaction_id.nil?
- return true
- else
- return false
- end
+ self.transaction_id.present?
end
def former_student
diff --git a/app/models/finance/finance_fee_category.rb b/app/models/finance/finance_fee_category.rb
index c31e735c9..980e19387 100755
--- a/app/models/finance/finance_fee_category.rb
+++ b/app/models/finance/finance_fee_category.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceFeeCategory < ActiveRecord::Base
belongs_to :batch
belongs_to :student
-#
+
has_many :fee_particulars, :class_name => "FinanceFeeParticular"
has_many :fee_collections, :class_name => "FinanceFeeCollection"
has_many :fee_discounts
@@ -29,85 +28,75 @@ class FinanceFeeCategory < ActiveRecord::Base
@@per_page = 10
validates_presence_of :name
- validates_presence_of :batch_id,:message=>"#{t('not_specified')}"
- validates_uniqueness_of :name, :scope=>[:batch_id, :is_deleted],:if=> 'is_deleted == false'
+ validates_presence_of :batch_id,:message => "#{t('not_specified')}"
+ validates_uniqueness_of :name, :scope => [:batch_id, :is_deleted], :if => 'is_deleted == false'
def fees(student)
FinanceFeeParticular.find_all_by_finance_fee_category_id(self.id,
- :conditions => ["((student_category_id IS NULL AND admission_no IS NULL )OR(student_category_id = '#{student.student_category_id}'AND admission_no IS NULL) OR (student_category_id IS NULL AND admission_no = '#{student.admission_no}')) and is_deleted=0"])
+ :conditions => ["((student_category_id IS NULL AND admission_no IS NULL) OR (student_category_id = ? AND admission_no IS NULL) OR (student_category_id IS NULL AND admission_no = ?)) AND is_deleted = ?", student.student_category_id, student.admission_no, false])
end
def check_fee_collection
- fee_collection = FinanceFeeCollection.find_all_by_fee_category_id(self.id,:conditions=>{:is_deleted=>0})
- fee_collection.empty? ? true : false
+ FinanceFeeCollection.find_all_by_fee_category_id(self.id, :conditions => { :is_deleted => 0 }).empty?
end
def check_fee_collection_for_additional_fees
- flag =0
fee_collection = FinanceFeeCollection.find_all_by_fee_category_id(self.id)
- fee_collection.each do |fee|
- flag = 1 if fee.check_fee_category == true
- end
- flag == 1 ? true : false
-
+ fee_collection.each { |fee| return true if fee.check_fee_category == true }
+ return false
end
def delete_particulars
- self.fee_particulars.each do |fees|
- fees.update_attributes(:is_deleted => true)
- end
+ self.fee_particulars.each { |fees| fees.update_attributes(:is_deleted => true) }
end
- def student_fee_balance(student,date)
- particulars= FinanceFeeParticular.find_all_by_finance_fee_category_id(self.id,
- :conditions => ["((student_category_id IS NULL AND admission_no IS NULL )OR(student_category_id = '#{student.student_category_id}'AND admission_no IS NULL) OR (student_category_id IS NULL AND admission_no = '#{student.admission_no}')) and is_deleted=0"])
+ def student_fee_balance(student, date)
+ particulars = FinanceFeeParticular.find_all_by_finance_fee_category_id(self.id,
+ :conditions => ["( (student_category_id IS NULL AND admission_no IS NULL) OR (student_category_id = ? AND admission_no IS NULL) OR (student_category_id IS NULL AND admission_no = ?) ) AND is_deleted = ?", student.student_category_id, student.admission_no, false])
financefee = student.finance_fee_by_date(date)
- paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{financefee.transaction_id}\")") unless financefee.transaction_id.blank?
+ paid_fees = FinanceTransaction.find(:all, :conditions => ["FIND_IN_SET(id, ?)", financefee.transaction_id]) unless financefee.transaction_id.blank?
batch_discounts = BatchFeeDiscount.find_all_by_finance_fee_category_id(self.id)
- student_discounts = StudentFeeDiscount.find_all_by_finance_fee_category_id_and_receiver_id(self.id,student.id)
- category_discounts = StudentCategoryFeeDiscount.find_all_by_finance_fee_category_id(self.id, :joins=>'INNER JOIN students ON fee_discounts.receiver_id = students.student_category_id')
+ student_discounts = StudentFeeDiscount.find_all_by_finance_fee_category_id_and_receiver_id(self.id, student.id)
+ category_discounts = StudentCategoryFeeDiscount.find_all_by_finance_fee_category_id(self.id, :joins => 'INNER JOIN students ON fee_discounts.receiver_id = students.student_category_id')
total_discount = 0
total_discount += batch_discounts.map{|s| s.discount}.sum unless batch_discounts.nil?
total_discount += student_discounts.map{|s| s.discount}.sum unless student_discounts.nil?
total_discount += category_discounts.map{|s| s.discount}.sum unless category_discounts.nil?
- if total_discount > 100
- total_discount = 100
- end
- total_fees =0
- unless particulars.nil?
+ total_discount = 100 if total_discount > 100
+
+ total_fees = 0
+ if particulars.present?
total_fees += particulars.collect{|x|x.amount.to_f}.sum
total_fees = (total_fees - ((total_fees*total_discount)/100))
-
- unless paid_fees.nil?
+
+ if paid_fees.present?
paid = 0
paid += paid_fees.collect{|x|x.amount.to_f}.sum
total_fees -= paid
trans = FinanceTransaction.find(financefee.transaction_id)
- unless trans.nil?
- total_fees += trans.fine_amount.to_f if trans.fine_included
- end
+ total_fees += trans.fine_amount.to_f if trans && trans.fine_included
end
end
return total_fees
end
def self.common_active
- self.find(:all , :conditions => ["finance_fee_categories.is_master = '#{1}' and finance_fee_categories.is_deleted = '#{false}'"], :joins=>"INNER JOIN batches on finance_fee_categories.batch_id = batches.id AND batches.is_active = 1 AND batches.is_deleted = 0 ",:group => :name)
+ self.find(:all , :conditions => ["finance_fee_categories.is_master = ? AND finance_fee_categories.is_deleted = ?", 1, false], :joins => "INNER JOIN batches on finance_fee_categories.batch_id = batches.id AND batches.is_active = 1 AND batches.is_deleted = 0 ", :group => :name)
end
def is_collection_open
- collection = FinanceFeeCollection.find_all_by_fee_category_id(self.id,:conditions=>"start_date < '#{Date.today.to_date}' and due_date > '#{Date.today.to_date}'")
- collection.reject!{ |c|c.no_transaction_present } unless collection.nil?
+ collection = FinanceFeeCollection.find_all_by_fee_category_id(self.id, :conditions => ["start_date < ? AND due_date > ?", Date.today.to_date, Date.today.to_date])
+ collection.reject!{ |c| c.no_transaction_present } unless collection.nil?
collection.present?
end
def have_common_particular?
- self.fee_particulars.find_all_by_student_category_id_and_admission_no(nil,nil).count > 0 ? true : false
+ self.fee_particulars.find_all_by_student_category_id_and_admission_no(nil, nil).count > 0
end
-
-
+
+
end
diff --git a/app/models/finance/finance_fee_collection.rb b/app/models/finance/finance_fee_collection.rb
index bd2bdaa00..774080d2c 100755
--- a/app/models/finance/finance_fee_collection.rb
+++ b/app/models/finance/finance_fee_collection.rb
@@ -1,60 +1,49 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceFeeCollection < ActiveRecord::Base
belongs_to :batch
- has_many :finance_fees, :foreign_key =>"fee_collection_id",:dependent=>:destroy
+ has_many :finance_fees, :foreign_key => "fee_collection_id", :dependent => :destroy
has_many :finance_transactions, :through => :finance_fees
has_many :students, :through => :finance_fees
- has_many :fee_collection_particulars ,:dependent=>:destroy
- has_many :fee_collection_discounts ,:dependent=>:destroy
- belongs_to :fee_category,:class_name => "FinanceFeeCategory"
+ has_many :fee_collection_particulars, :dependent => :destroy
+ has_many :fee_collection_discounts, :dependent => :destroy
+ belongs_to :fee_category, :class_name => "FinanceFeeCategory"
has_one :event, :as => :origin
-
- validates_presence_of :name,:start_date,:fee_category_id,:end_date,:due_date
+ validates_presence_of :name, :start_date, :fee_category_id, :end_date, :due_date
+ validate :valid_date
after_create :create_associates
- def validate
- unless self.start_date.nil? or self.end_date.nil?
- errors.add_to_base("#{t('start_date_cant_be_after_end_date')}") if self.start_date > self.end_date
- errors.add_to_base("#{t('start_date_cant_be_after_due_date')}") if self.start_date > self.due_date
- errors.add_to_base("#{t('end_date_cant_be_after_due_date')}") if self.end_date > self.due_date
- else
- end
- end
-
def full_name
"#{name} - #{start_date.to_s}"
end
def fee_transactions(student_id)
- FinanceFee.find_by_fee_collection_id_and_student_id(self.id,student_id)
+ FinanceFee.find_by_fee_collection_id_and_student_id(self.id, student_id)
end
def check_transaction(transactions)
- transactions.finance_fees_id.nil? ? false : true
-
+ !!transactions.finance_fees_id
end
def fee_table
- self.finance_fees.all(:conditions=>"is_paid = 0")
+ self.finance_fees.all(:conditions => { :is_paid => false })
end
def self.shorten_string(string, count)
@@ -62,7 +51,7 @@ def self.shorten_string(string, count)
shortened = string[0, count]
splitted = shortened.split(/\s/)
words = splitted.length
- splitted[0, words-1].join(" ") + ' ...'
+ splitted[0, words - 1].join(" ") + ' ...'
else
string
end
@@ -70,73 +59,39 @@ def self.shorten_string(string, count)
def check_fee_category
finance_fees = FinanceFee.find_all_by_fee_collection_id(self.id)
- flag = 1
finance_fees.each do |f|
- flag = 0 unless f.transaction_id.nil?
+ return false unless f.transaction_id.nil?
end
- flag == 1 ? true : false
+ return true
end
def no_transaction_present
f = FinanceFee.find_all_by_fee_collection_id(self.id)
- f.reject! {|x|x.transaction_id.nil?} unless f.nil?
+ f.reject! { |x| x.transaction_id.nil? } unless f.nil?
f.blank?
end
- def create_associates
-
- batch_discounts = BatchFeeDiscount.find_all_by_finance_fee_category_id(self.fee_category_id)
- batch_discounts.each do |discount|
- discount_attributes = discount.attributes
- discount_attributes.delete "type"
- discount_attributes.delete "finance_fee_category_id"
- discount_attributes["finance_fee_collection_id"]= self.id
- BatchFeeCollectionDiscount.create(discount_attributes)
- end
- category_discount = StudentCategoryFeeDiscount.find_all_by_finance_fee_category_id(self.fee_category_id)
- category_discount.each do |discount|
- discount_attributes = discount.attributes
- discount_attributes.delete "type"
- discount_attributes.delete "finance_fee_category_id"
- discount_attributes["finance_fee_collection_id"]= self.id
- StudentCategoryFeeCollectionDiscount.create(discount_attributes)
- end
- student_discount = StudentFeeDiscount.find_all_by_finance_fee_category_id(self.fee_category_id)
- student_discount.each do |discount|
- discount_attributes = discount.attributes
- discount_attributes.delete "type"
- discount_attributes.delete "finance_fee_category_id"
- discount_attributes["finance_fee_collection_id"]= self.id
- StudentFeeCollectionDiscount.create(discount_attributes)
- end
- particlulars = FinanceFeeParticular.find_all_by_finance_fee_category_id(self.fee_category_id,:conditions=>"is_deleted=0")
- particlulars.each do |p|
- particlulars_attributes = p.attributes
- particlulars_attributes.delete "finance_fee_category_id"
- particlulars_attributes["finance_fee_collection_id"]= self.id
- FeeCollectionParticular.create(particlulars_attributes)
- end
- end
-
def fees_particulars(student)
FeeCollectionParticular.find_all_by_finance_fee_collection_id(self.id,
- :conditions => ["((student_category_id IS NULL AND admission_no IS NULL )OR(student_category_id = '#{student.student_category_id}'AND admission_no IS NULL) OR (student_category_id IS NULL AND admission_no = '#{student.admission_no}')) and is_deleted=0"])
+ :conditions => ["((student_category_id IS NULL AND admission_no IS NULL) OR (student_category_id = ? AND admission_no IS NULL) OR (student_category_id IS NULL AND admission_no = ?)) and is_deleted = ?", student.student_category_id, student.admission_no, false])
end
- def transaction_total(start_date,end_date)
- trans = self.finance_transactions.all(:conditions=>"transaction_date >= '#{start_date}' AND transaction_date <= '#{end_date}'")
+ def transaction_total(start_date, end_date)
+ trans = self.finance_transactions.all(:conditions => { :transaction_date => start_date..end_date })
total = trans.map{|t|t.amount}.sum
end
-
- def student_fee_balance(student)
- particulars= self.fees_particulars(student)
+
+ def student_fee_balance(student_id)
+ student = Student.find(student_id)
+ particulars = self.fees_particulars(student)
financefee = self.fee_transactions(student.id)
+
- paid_fees = FinanceTransaction.find(:all,:conditions=>"FIND_IN_SET(id,\"#{financefee.transaction_id}\")") unless financefee.transaction_id.blank?
+ paid_fees = FinanceTransaction.find(:all, :conditions => [ "FIND_IN_SET(id, ?)", financefee.transaction_id ]) unless financefee.transaction_id.blank?
batch_discounts = BatchFeeCollectionDiscount.find_all_by_finance_fee_collection_id(self.id)
- student_discounts = StudentFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(self.id,student.id)
- category_discounts = StudentCategoryFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(self.id,student.student_category_id)
+ student_discounts = StudentFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(self.id, student.id)
+ category_discounts = StudentCategoryFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(self.id, student.student_category_id)
total_discount = 0
total_discount += batch_discounts.map{|s| s.discount}.sum unless batch_discounts.nil?
total_discount += student_discounts.map{|s| s.discount}.sum unless student_discounts.nil?
@@ -145,9 +100,8 @@ def student_fee_balance(student)
total_discount = 100
end
- total_fees =0
- particulars.map { |s| total_fees += s.amount.to_f} unless particulars.nil?
- total_fees -= total_fees*(total_discount/100)
+ total_fees = particulars.inject(0) { |result, s| result + s.amount.to_f } unless particulars.nil?
+ total_fees -= total_fees*(total_discount / 100)
unless paid_fees.nil?
paid = 0
@@ -161,4 +115,47 @@ def student_fee_balance(student)
return total_fees
end
+ private
+
+ def valid_date
+ if self.start_date.present? && self.end_date.present?
+ errors.add_to_base("#{t('start_date_cant_be_after_end_date')}") if self.start_date > self.end_date
+ errors.add_to_base("#{t('start_date_cant_be_after_due_date')}") if self.start_date > self.due_date
+ errors.add_to_base("#{t('end_date_cant_be_after_due_date')}") if self.end_date > self.due_date
+ end
+ end
+
+ def create_associates
+ batch_discounts = BatchFeeDiscount.find_all_by_finance_fee_category_id(self.fee_category_id)
+ batch_discounts.each do |discount|
+ discount_attributes = discount.attributes
+ discount_attributes.delete "type"
+ discount_attributes.delete "finance_fee_category_id"
+ discount_attributes["finance_fee_collection_id"]= self.id
+ BatchFeeCollectionDiscount.create(discount_attributes)
+ end
+ category_discount = StudentCategoryFeeDiscount.find_all_by_finance_fee_category_id(self.fee_category_id)
+ category_discount.each do |discount|
+ discount_attributes = discount.attributes
+ discount_attributes.delete "type"
+ discount_attributes.delete "finance_fee_category_id"
+ discount_attributes["finance_fee_collection_id"]= self.id
+ StudentCategoryFeeCollectionDiscount.create(discount_attributes)
+ end
+ student_discount = StudentFeeDiscount.find_all_by_finance_fee_category_id(self.fee_category_id)
+ student_discount.each do |discount|
+ discount_attributes = discount.attributes
+ discount_attributes.delete "type"
+ discount_attributes.delete "finance_fee_category_id"
+ discount_attributes["finance_fee_collection_id"]= self.id
+ StudentFeeCollectionDiscount.create(discount_attributes)
+ end
+ particlulars = FinanceFeeParticular.find_all_by_finance_fee_category_id(self.fee_category_id,:conditions=>"is_deleted=0")
+ particlulars.each do |p|
+ particlulars_attributes = p.attributes
+ particlulars_attributes.delete "finance_fee_category_id"
+ particlulars_attributes["finance_fee_collection_id"]= self.id
+ FeeCollectionParticular.create(particlulars_attributes)
+ end
+ end
end
diff --git a/app/models/finance/finance_fee_particular.rb b/app/models/finance/finance_fee_particular.rb
index 626ae9998..49af43e23 100755
--- a/app/models/finance/finance_fee_particular.rb
+++ b/app/models/finance/finance_fee_particular.rb
@@ -1,39 +1,33 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceFeeParticular < ActiveRecord::Base
belongs_to :finance_fee_category
belongs_to :student_category
- validates_presence_of :name,:amount
+ validates_presence_of :name, :amount
validates_numericality_of :amount, :greater_than_or_equal_to => 0, :message => "#{t('must_be_positive')}"
- named_scope :active,{ :conditions => { :is_deleted => false}}
+ named_scope :active, { :conditions => { :is_deleted => false } }
cattr_reader :per_page
@@per_page = 10
-
+
def deleted_category
- flag = false
- category = self.student_category
- unless category.blank?
- flag = true if category.is_deleted
- end
- return flag
+ self.student_category.present? && self.student_category.is_deleted?
end
end
diff --git a/app/models/finance/finance_fee_structure_element.rb b/app/models/finance/finance_fee_structure_element.rb
index a7b76e727..d12483edc 100755
--- a/app/models/finance/finance_fee_structure_element.rb
+++ b/app/models/finance/finance_fee_structure_element.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceFeeStructureElement < ActiveRecord::Base
# t.decimal :amount, :precision => 8, :scale => 2
@@ -23,135 +22,119 @@ class FinanceFeeStructureElement < ActiveRecord::Base
# t.references :batch
# t.references :student_category
# t.references :student
- # t.references :finance_fee
# t.references :parent
# t.references :fee_collection
-
+
belongs_to :batch
belongs_to :student_category
belongs_to :student
- belongs_to :finance_fee
belongs_to :parent, :class_name => 'FinanceFeeStructureElement'
belongs_to :fee_collection, :class_name => 'FinanceFeeCollection'
has_one :descendant, :class_name => 'FinanceFeeStructureElement', :foreign_key => 'parent_id'
def has_descendant_for_student?(student)
- FinanceFeeStructureElement.exists?(:parent_id => id, :student_id => student.id, :deleted => false)
+ FinanceFeeStructureElement.exists?(:parent_id => id,
+ :student_id => student.id,
+ :deleted => false)
end
class << self
+ def all_fee_components
+ all(:conditions => {:batch_id => nil,
+ :student_category_id => nil,
+ :student_id => nil,
+ :deleted => false})
+ end
+
+ def all_fee_components_by_batch
+ all(:conditions => "batch_id IS NOT NULL AND
+ student_id IS NULL AND
+ student_category_id IS NULL AND
+ deleted = false")
+ end
+
+ def all_fee_components_by_category
+ all(:conditions => "student_category_id IS NOT NULL AND
+ batch_id IS NULL")
+ end
+
+ def all_fee_components_by_batch_and_category
+ all(:conditions => "batch_id IS NOT NULL AND
+ student_category_id IS NOT NULL")
+ end
+
+ def fee_components_by_batch_and_category(batch_id, student_category_id)
+ all(:conditions => { batch_id: batch_id,
+ student_category_id: student_category_id,
+ student_id: nil,
+ deleted: false })
+ end
+
+ def student_fee_components_by_batch(batch_id)
+ all(:conditions => { batch_id: batch_id,
+ student_category_id: nil,
+ fee_collection_id: nil,
+ student_id: nil,
+ deleted: false })
+ end
+
+ def student_fee_components_by_collection(date)
+ all(:conditions => { student_category_id: nil,
+ fee_collection_id: date,
+ student_id: nil,
+ deleted: false })
+ end
+
+ def student_fee_components_by_student(student_id)
+ all(:conditions => { batch_id: nil,
+ student_category_id: nil,
+ student_id: student_id,
+ parent_id: nil,
+ deleted: false })
+ end
+
+ def student_current_fee_cycle(student_id, date)
+ all(:conditions => ["student_id = ? AND
+ fee_collection_id = ? AND
+ parent_id IS NOT NULL AND
+ deleted = false", student_id, date])
+ end
+
+ def batch_fee_component_by_batch(batch_id)
+ all(:conditions => ["batch_id = ? AND
+ student_category_id IS NOT NULL", batch_id])
+ end
+
def get_all_fee_components
elements = {}
- elements[:all] = find(:all,
- :conditions => {
- :batch_id => nil,
- :student_category_id => nil,
- :student_id => nil,
- :deleted => false
- })
- elements[:by_batch] = find(:all,
- :conditions => "
- batch_id IS NOT NULL AND
- student_id IS NULL AND
- student_category_id IS NULL AND
- deleted = false
- ")
- elements[:by_category] = find(:all, :conditions => "
- student_category_id IS NOT NULL AND
- batch_id IS NULL
- ")
- elements[:by_batch_and_category] = find(:all, :conditions => "
- batch_id IS NOT NULL AND
- student_category_id IS NOT NULL
- ")
+ elements[:all] = all_fee_components
+ elements[:by_batch] = all_fee_components_by_batch
+ elements[:by_category] = all_fee_components_by_category
+ elements[:by_batch_and_category] = all_fee_components_by_batch_and_category
elements
end
- def get_student_fee_components(student,date)
+ def get_student_fee_components(student, date)
elements = {}
- elements[:all] = find(:all,
- :conditions => "
- batch_id IS NULL AND
- student_category_id IS NULL AND
- student_id IS NULL AND
- deleted = false"
- )
- elements[:by_batch] = find(:all,
- :conditions => "
- batch_id = #{student.batch_id} AND
- student_category_id IS NULL AND
- fee_collection_id = NULL AND
- student_id IS NULL AND
- deleted = false
- ")
- elements[:by_batch_and_fee_collection] = find(:all,
- :conditions => "
-
- student_category_id IS NULL AND
- fee_collection_id = #{date} AND
- student_id IS NULL AND
- deleted = false
- ")
- elements[:by_category] = find(:all, :conditions => "
- batch_id IS NULL AND
- student_category_id = #{student.student_category_id} AND
- student_id IS NULL AND
- deleted = false
- ")
- elements[:by_batch_and_category] = find(:all, :conditions => "
- batch_id = #{student.batch_id} AND
- student_category_id = #{student.student_category_id} AND
- student_id IS NULL AND
- deleted = false
- ")
- elements[:student] = find(:all, :conditions => "
- batch_id IS NULL AND
- student_category_id IS NULL AND
- student_id = #{student.id} AND
- parent_id IS NULL AND
- deleted = false
- ")
- elements[:student_current_fee_cycle] = find(:all, :conditions => "
- student_id = #{student.id} AND
- fee_collection_id = #{date} AND
- parent_id IS NOT NULL AND
- deleted = false
- ")
+ elements[:all] = all_fee_components
+ elements[:by_batch] = student_fee_components_by_batch(student.batch_id)
+ elements[:by_batch_and_fee_collection] = student_fee_components_by_collection(date)
+ elements[:by_category] = fee_components_by_batch_and_category(nil, student.student_category_id)
+ elements[:by_batch_and_category] = fee_components_by_batch_and_category(student.batch_id,
+ student.student_category_id)
+ elements[:student] = student_fee_components_by_student(student.id)
+ elements[:student_current_fee_cycle] = student_current_fee_cycle(student.id, date)
elements
end
def get_batch_fee_components(batch)
elements = {}
- elements[:all] = find(:all,
- :conditions => "
- batch_id IS NULL AND
- student_category_id IS NULL AND
- student_id IS NULL AND
- deleted = false"
- )
- elements[:by_batch] = find(:all,
- :conditions => "
- batch_id = #{batch.id} AND
- student_category_id IS NULL AND
- student_id IS NULL AND
- deleted = false
- ")
- elements[:by_category] = find(:all, :conditions => "
- student_category_id IS NOT NULL AND
- batch_id IS NULL
- ")
- elements[:by_batch_and_category] = find(:all, :conditions => "
- batch_id = #{batch.id} AND
- student_category_id IS NOT NULL
- ")
- elements
-
+ elements[:all] = all_fee_components
+ elements[:by_batch] = fee_components_by_batch_and_category(batch.id, nil)
+ elements[:by_category] = all_fee_components_by_category
+ elements[:by_batch_and_category] = batch_fee_component_by_batch(batch.id)
elements
-
end
-
end
-
-
end
diff --git a/app/models/finance/finance_transaction.rb b/app/models/finance/finance_transaction.rb
index da21711a6..1a572035c 100755
--- a/app/models/finance/finance_transaction.rb
+++ b/app/models/finance/finance_transaction.rb
@@ -1,136 +1,124 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceTransaction < ActiveRecord::Base
belongs_to :category, :class_name => 'FinanceTransactionCategory', :foreign_key => 'category_id'
belongs_to :student
belongs_to :finance, :polymorphic => true
belongs_to :payee, :polymorphic => true
cattr_reader :per_page
- validates_presence_of :title,:amount,:transaction_date
- validates_presence_of :category,:message=>"#{t('not_specified')}."
+ validates_presence_of :title, :amount, :transaction_date
+ validates_presence_of :category, :message => "#{t('not_specified')}"
validates_numericality_of :amount, :greater_than_or_equal_to => 0, :message => "#{t('must_be_positive')}"
after_create :create_auto_transaction
after_update :update_auto_transaction
after_destroy :delete_auto_transaction
- after_create :add_voucher_or_receipt_number
+ after_create :add_voucher_or_receipt_number
- def self.report(start_date,end_date,page)
- cat_names = ['Fee','Salary','Donation']
+ def self.report(start_date, end_date, page)
+ cat_names = ['Fee', 'Salary', 'Donation']
FedenaPlugin::FINANCE_CATEGORY.each do |category|
cat_names << "#{category[:category_name]}"
end
- fixed_cat_ids = FinanceTransactionCategory.find(:all,:conditions=>{:name=>cat_names}).collect(&:id)
- self.find(:all,
- :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id NOT IN (#{fixed_cat_ids.join(",")})"],
- :order => 'transaction_date' )
+
+ fixed_cat_ids = FinanceTransactionCategory.find(:all, :conditions => { :name => cat_names }).collect(&:id)
+ self.find(:all,
+ :conditions => ["transaction_date >= ? AND transaction_date <= ? AND category_id NOT IN (?)", start_date, end_date, fixed_cat_ids.join(",")],
+ :order => 'transaction_date')
end
- def self.grand_total(start_date,end_date)
+ def self.grand_total(start_date, end_date)
fee_id = FinanceTransactionCategory.find_by_name("Fee").id
donation_id = FinanceTransactionCategory.find_by_name("Donation").id
- cat_names = ['Fee','Salary','Donation']
+ cat_names = ['Fee', 'Salary', 'Donation']
plugin_name = []
+
FedenaPlugin::FINANCE_CATEGORY.each do |category|
cat_names << "#{category[:category_name]}"
plugin_name << "#{category[:category_name]}"
end
- fixed_categories = FinanceTransactionCategory.find(:all,:conditions=>{:name=>cat_names})
+ fixed_categories = FinanceTransactionCategory.find(:all, :conditions => { :name => cat_names })
fixed_cat_ids = fixed_categories.collect(&:id)
fixed_transactions = FinanceTransaction.find(:all ,
- :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id IN (#{fixed_cat_ids.join(",")})"])
+ :conditions => ["transaction_date >= ? AND transaction_date <= ? AND category_id IN (#{fixed_cat_ids.join(",")})", start_date, end_date])
other_transactions = FinanceTransaction.find(:all ,
- :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id NOT IN (#{fixed_cat_ids.join(",")})"])
- # transactions_fees = FinanceTransaction.find(:all,
- # :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id ='#{fee_id}'"])
- # donations = FinanceTransaction.find(:all,
- # :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id ='#{donation_id}'"])
+ :conditions => ["transaction_date >= ? AND transaction_date <= ? AND category_id NOT IN (#{fixed_cat_ids.join(",")})", start_date, end_date])
trigger = FinanceTransactionTrigger.find(:all)
hr = Configuration.find_by_config_value("HR")
income_total = 0
expenses_total = 0
- fees_total =0
+ fees_total = 0
salary = 0
-
- unless hr.nil?
+
+ if hr
salary = MonthlyPayslip.total_employees_salary(start_date, end_date)
expenses_total += salary[:total_salary].to_f
end
-
+
transactions_fees = fixed_transactions.reject{|tr|tr.category_id != fee_id}
donations = fixed_transactions.reject{|tr|tr.category_id != donation_id}
donations.each do |d|
- if d.master_transaction_id == 0
- income_total +=d.amount
- else
- expenses_total +=d.amount
- end
-
+ d.master_transaction_id == 0 ? income_total += d.amount : expenses_total += d.amount
end
+
transactions_fees.each do |fees|
- income_total +=fees.amount
+ income_total += fees.amount
fees_total += fees.amount
end
# plugin transactions
plugin_name.each do |p|
category = fixed_categories.reject{|cat|cat.name.downcase != p.downcase}
- unless category.blank?
+ if category.present?
cat_id = category.first.id
transactions_plugin = fixed_transactions.reject{|tr|tr.category_id != cat_id}
transactions_plugin.each do |t|
- if t.category.is_income?
- income_total +=t.amount
- else
- expenses_total +=t.amount
- end
+ t.category.is_income? ? income_total += t.amount : expenses_total += t.amount
end
end
end
-
+
other_transactions.each do |t|
- if t.category.is_income? and t.master_transaction_id == 0
- income_total +=t.amount
+ if t.category.is_income? && t.master_transaction_id == 0
+ income_total += t.amount
else
- expenses_total +=t.amount
+ expenses_total += t.amount
end
end
- income_total-expenses_total
-
+ income_total - expenses_total
end
- def self.total_fees(start_date,end_date)
+ def self.total_fees(start_date, end_date)
fee_id = FinanceTransactionCategory.find_by_name("Fee").id
fees = 0
fees = FinanceTransaction.find(:all,
- :conditions => ["transaction_date >= '#{start_date.to_date}' and transaction_date <= '#{end_date.to_date}'and category_id ='#{fee_id}'"]).map{|ft| ft.amount}.sum
+ :conditions => ["transaction_date >= ? AND transaction_date <= ? AND category_id = ?", start_date.to_date, end_date.to_date, fee_id]).map{|ft| ft.amount}.sum
end
- def self.total_other_trans(start_date,end_date)
- cat_names = ['Fee','Salary','Donation']
+ def self.total_other_trans(start_date, end_date)
+ cat_names = ['Fee', 'Salary', 'Donation']
FedenaPlugin::FINANCE_CATEGORY.each do |category|
cat_names << "#{category[:category_name]}"
end
- fixed_cat_ids = FinanceTransactionCategory.find(:all,:conditions=>{:name=>cat_names}).collect(&:id)
+ fixed_cat_ids = FinanceTransactionCategory.find(:all, :conditions => { :name => cat_names }).collect(&:id)
fees = 0
- transactions = FinanceTransaction.find(:all, :conditions => ["created_at >= '#{start_date}' and created_at <= '#{end_date}'and category_id NOT IN (#{fixed_cat_ids.join(",")})"])
+ transactions = FinanceTransaction.find(:all, :conditions => ["created_at >= ? AND created_at <= ? AND category_id NOT IN (#{fixed_cat_ids.join(",")})", start_date, end_date])
transactions_income = transactions.reject{|x| !x.category.is_income? }.compact
transactions_expense = transactions.reject{|x| x.category.is_income? }.compact
income = 0
@@ -141,70 +129,36 @@ def self.total_other_trans(start_date,end_date)
transactions_expense.each do |f|
expense += f.amount
end
- [income,expense]
+ [income, expense]
end
- def self.donations_triggers(start_date,end_date)
- donation_id = FinanceTransactionCategory.find_by_name("Donation").id
- donations_income =0
- donations_expenses =0
- donations = FinanceTransaction.find(:all,:conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}' and master_transaction_id = 0 and category_id ='#{donation_id}'"])
- trigger = FinanceTransaction.find(:all,:conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}' and master_transaction_id != 0 and category_id ='#{donation_id}'"])
- donations.each do |d|
- if d.category.is_income?
- donations_income+=d.amount
- else
- donations_expenses+=d.amount
+ def self.donations_triggers(start_date, end_date)
+ donation = FinanceTransactionCategory.find_by_name("Donation")
+ donations_income = 0
+ donations_expenses = 0
+ if donation
+ donations = FinanceTransaction.find(:all, :conditions => ["transaction_date >= ? AND transaction_date <= ? AND master_transaction_id = 0 AND category_id = ?", start_date, end_date, donation.id])
+ trigger = FinanceTransaction.find(:all, :conditions => ["transaction_date >= ? AND transaction_date <= ? AND master_transaction_id != 0 AND category_id = ?", start_date, end_date, donation.id])
+ donations.each do |d|
+ d.category.is_income? ? donations_income += d.amount : donations_expenses += d.amount
+ end
+ trigger.each do |t|
+ donations_expenses += t.amount
end
end
- trigger.each do |t|
- #unless t.finance_category.id.nil?
- # if d.category_id == t.finance_category.id
- donations_expenses += t.amount
- #end
- #end
- end
- donations_income-donations_expenses
-
+ donations_income - donations_expenses
end
- def self.expenses(start_date,end_date)
- expenses = FinanceTransaction.find(:all, :select=>'finance_transactions.*', :joins=>' INNER JOIN finance_transaction_categories ON finance_transaction_categories.id = finance_transactions.category_id',\
- :conditions => ["finance_transaction_categories.is_income = 0 and finance_transaction_categories.id != 1 and transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'"])
- expenses
- end
-
- def self.incomes(start_date,end_date)
- incomes = FinanceTransaction.find(:all, :select=>'finance_transactions.*', :joins=>' INNER JOIN finance_transaction_categories ON finance_transaction_categories.id = finance_transactions.category_id',\
- :conditions => ["finance_transaction_categories.is_income = 1 and transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}' "])
- incomes = incomes.reject{|income| (income.category.is_fixed or income.master_transaction_id != 0)}
- incomes
+ def self.expenses(start_date, end_date)
+ expenses = FinanceTransaction.find(:all, :select => 'finance_transactions.*', :joins => 'INNER JOIN finance_transaction_categories ON finance_transaction_categories.id = finance_transactions.category_id',
+ :conditions => ["finance_transaction_categories.is_income = 0 AND finance_transaction_categories.id != 1 AND transaction_date >= ? AND transaction_date <= ?", start_date, end_date])
end
- def create_auto_transaction
- if self.master_transaction_id == 0
- trigger = FinanceTransactionTrigger.find(:all,:conditions=>['finance_category_id = ?',self.category_id])
- trigger.each do |t|
- trigger_amount = (self.amount * t.percentage ) / 100
- FinanceTransaction.create(:title=> self.title + ' - ' + t.title.to_s ,:transaction_date=>self.transaction_date, \
- :amount=>trigger_amount,:category_id =>self.category_id,:master_transaction_id=>self.id)
- end
- end
- end
-
- def update_auto_transaction
- FinanceTransaction.find_all_by_master_transaction_id(self.id).each do |f|
- f.destroy
- end
- if self.master_transaction_id == 0
- trigger = FinanceTransactionTrigger.find(:all,:conditions=>['finance_category_id = ?',self.category_id])
- trigger.each do |t|
- trigger_amount = (self.amount * t.percentage ) / 100
- FinanceTransaction.create(:title=> self.title + ' - ' + t.title.to_s ,:transaction_date=>self.transaction_date, \
- :amount=>trigger_amount,:category_id =>self.category_id,:master_transaction_id=>self.id)
- end
- end
+ def self.incomes(start_date, end_date)
+ incomes = FinanceTransaction.find(:all, :select => 'finance_transactions.*', :joins => 'INNER JOIN finance_transaction_categories ON finance_transaction_categories.id = finance_transactions.category_id',
+ :conditions => ["finance_transaction_categories.is_income = 1 AND transaction_date >= ? AND transaction_date <= ?", start_date, end_date])
+ incomes = incomes.reject{|income| (income.category.fixed? || income.master_transaction_id != 0)}
end
def student_payee
@@ -212,52 +166,78 @@ def student_payee
stu ||= ArchivedStudent.find_by_former_id(self.payee_id)
end
+ private
- def delete_auto_transaction
- FinanceTransaction.find_all_by_master_transaction_id(self.id).each do |f|
- f.destroy
+ def create_auto_transaction
+ if self.master_transaction_id == 0
+ trigger = FinanceTransactionTrigger.find(:all, :conditions => ['finance_category_id = ?', self.category_id])
+ trigger.each do |t|
+ trigger_amount = (self.amount * t.percentage) / 100
+ FinanceTransaction.create(:title => self.title + ' - ' + t.title.to_s , :transaction_date => self.transaction_date,
+ :amount => trigger_amount, :category_id => self.category_id, :master_transaction_id => self.id)
+ end
+ end
end
- end
- def self.total_transaction_amount(transaction_category,start_date,end_date)
- amount = 0
- finance_transaction_category = FinanceTransactionCategory.find_by_name("#{transaction_category}")
- category_type = finance_transaction_category.is_income ? "income" : "expense"
- transactions = FinanceTransaction.find(:all,
- :conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'and category_id ='#{finance_transaction_category.id}'"])
- transactions.each {|transaction| amount += transaction.amount}
- return {:amount=>amount,:category_type=>category_type}
- end
-
- def add_voucher_or_receipt_number
- if self.category.is_income and self.master_transaction_id == 0
- last_transaction = FinanceTransaction.last(:conditions=>"receipt_no IS NOT NULL")
- last_receipt_no = last_transaction.receipt_no unless last_transaction.nil?
- unless last_receipt_no.nil?
- receipt_split = last_receipt_no.to_s.scan(/[A-Z]+|\d+/i)
- if receipt_split[1].blank?
- receipt_number = receipt_split[0].next
- else
- receipt_number = receipt_split[0]+receipt_split[1].next
+ def update_auto_transaction
+ FinanceTransaction.find_all_by_master_transaction_id(self.id).each do |f|
+ f.destroy
+ end
+ if self.master_transaction_id == 0
+ trigger = FinanceTransactionTrigger.find(:all, :conditions => ['finance_category_id = ?', self.category_id])
+ trigger.each do |t|
+ trigger_amount = (self.amount * t.percentage) / 100
+ FinanceTransaction.create(:title => self.title + ' - ' + t.title.to_s, :transaction_date => self.transaction_date,
+ :amount => trigger_amount, :category_id => self.category_id, :master_transaction_id => self.id)
end
- else
- receipt_number = "1"
end
- self.update_attributes(:receipt_no=>receipt_number)
- else
- last_transaction = FinanceTransaction.last(:conditions=>"voucher_no IS NOT NULL")
- last_voucher_no = last_transaction.voucher_no unless last_transaction.nil?
- unless last_voucher_no.nil?
- voucher_split = last_voucher_no.to_s.scan(/[A-Z]+|\d+/i)
- if voucher_split[1].blank?
- voucher_number = voucher_split[0].next
+ end
+
+ def delete_auto_transaction
+ FinanceTransaction.find_all_by_master_transaction_id(self.id).each do |f|
+ f.destroy
+ end
+ end
+
+ def self.total_transaction_amount(transaction_category,start_date,end_date)
+ amount = 0
+ finance_transaction_category = FinanceTransactionCategory.find_by_name("#{transaction_category}")
+ category_type = finance_transaction_category.is_income ? "income" : "expense"
+ transactions = FinanceTransaction.find(:all,
+ :conditions => ["transaction_date >= ? AND transaction_date <= AND category_id = ?", start_date, end_date, finance_transaction_category.id])
+ transactions.each {|transaction| amount += transaction.amount}
+ return {:amount=>amount,:category_type=>category_type}
+ end
+
+ def add_voucher_or_receipt_number
+ if self.category.is_income && self.master_transaction_id == 0
+ last_transaction = FinanceTransaction.last(:conditions => "receipt_no IS NOT NULL")
+ last_receipt_no = last_transaction.receipt_no if last_transaction
+ if last_receipt_no
+ receipt_split = last_receipt_no.to_s.scan(/[A-Z]+|\d+/i)
+ if receipt_split[1].blank?
+ receipt_number = receipt_split[0].next
+ else
+ receipt_number = receipt_split[0] + receipt_split[1].next
+ end
else
- voucher_number = voucher_split[0]+voucher_split[1].next
+ receipt_number = "1"
end
+ self.update_attributes(:receipt_no => receipt_number)
else
- voucher_number = "1"
+ last_transaction = FinanceTransaction.last(:conditions => "voucher_no IS NOT NULL")
+ last_voucher_no = last_transaction.voucher_no if last_transaction
+ if last_voucher_no
+ voucher_split = last_voucher_no.to_s.scan(/[A-Z]+|\d+/i)
+ if voucher_split[1].blank?
+ voucher_number = voucher_split[0].next
+ else
+ voucher_number = voucher_split[0]+voucher_split[1].next
+ end
+ else
+ voucher_number = "1"
+ end
+ self.update_attributes(:voucher_no=>voucher_number)
end
- self.update_attributes(:voucher_no=>voucher_number)
end
- end
end
diff --git a/app/models/finance/finance_transaction_category.rb b/app/models/finance/finance_transaction_category.rb
index f7d95e96e..8310b8d67 100755
--- a/app/models/finance/finance_transaction_category.rb
+++ b/app/models/finance/finance_transaction_category.rb
@@ -1,70 +1,57 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceTransactionCategory < ActiveRecord::Base
- has_many :finance_transactions,:class_name => 'FinanceTransaction', :foreign_key => 'category_id'
- has_one :trigger, :class_name => "FinanceTransactionTrigger", :foreign_key => "category_id"
-
+ has_many :finance_transactions, :class_name => 'FinanceTransaction', :foreign_key => 'category_id'
+ has_one :trigger, :class_name => "FinanceTransactionTrigger", :foreign_key => "finance_category_id"
validates_presence_of :name
validates_uniqueness_of :name, :case_sensitive => false
named_scope :expense_categories, :conditions => "is_income = false AND name NOT LIKE 'Salary'and deleted = 0"
- # named_scope :income_categories, :conditions => "is_income = true AND name NOT IN ('Fee','Salary','Donation','Library','Hostel','Transport') and deleted = 0"
- # def self.expense_categories
- # FinanceTransactionCategory.all(:conditions => "is_income = false AND name NOT LIKE 'Salary'")
- # end
- #
- # def self.income_categories
- # FinanceTransactionCategory.all(:conditions => "is_income = true AND name NOT LIKE 'Fee' AND name NOT LIKE 'Donation'")
- # end
-
- def self.income_categories
- cat_names = ["'Fee'","'Salary'","'Donation'"]
+ def self.income_category_names
+ cat_names = ['Fee', 'Salary', 'Donation']
FedenaPlugin::FINANCE_CATEGORY.each do |category|
- cat_names << "'#{category[:category_name]}'"
+ cat_names << "#{category[:category_name]}"
end
- self.find(:all,:conditions=>"is_income = true AND name NOT IN (#{cat_names.join(',')}) and deleted = 0")
+ cat_names
end
- def is_fixed
- cat_names = ['fee','salary','donation']
- FedenaPlugin::FINANCE_CATEGORY.each do |category|
- cat_names << "#{category[:category_name].downcase}"
- end
- return true if cat_names.include?(self.name.downcase)
- return false
+ INCOME_CATEGORY_NAMES = self.income_category_names
+ FIX_CATEGORY_NAMES = INCOME_CATEGORY_NAMES.map(&:downcase)
+
+ def self.income_categories
+ self.all(:conditions => ["is_income = true AND name NOT IN (?) and deleted = 0", INCOME_CATEGORY_NAMES])
end
- def total_income(start_date,end_date)
- if is_income
- self.finance_transactions.find(:all,:conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}' and master_transaction_id=0"]).map{|ft| ft.amount}.sum
- else
- 0
- end
+ def fixed?
+ FIX_CATEGORY_NAMES.include?(self.name.downcase)
+ end
+
+ def total_income(start_date, end_date)
+ is_income ? self.finance_transactions.sum(:amount, :conditions => ["transaction_date BETWEEN ? AND ? and master_transaction_id = 0", start_date, end_date]) : 0
end
def total_expense(start_date,end_date)
if is_income
- self.finance_transactions.find(:all,:conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}' and master_transaction_id!=0"]).map{|ft| ft.amount}.sum
+ self.finance_transactions.sum(:amount, :conditions => ["transaction_date BETWEEN ? AND ? and master_transaction_id != 0", start_date, end_date])
else
- self.finance_transactions.find(:all,:conditions => ["transaction_date >= '#{start_date}' and transaction_date <= '#{end_date}'"]).map{|ft| ft.amount}.sum
+ self.finance_transactions.sum(:amount, :conditions => ["transaction_date BETWEEN ? AND ?", start_date, end_date])
end
end
diff --git a/app/models/finance/finance_transaction_trigger.rb b/app/models/finance/finance_transaction_trigger.rb
index d51d00faa..f144a85c9 100755
--- a/app/models/finance/finance_transaction_trigger.rb
+++ b/app/models/finance/finance_transaction_trigger.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class FinanceTransactionTrigger < ActiveRecord::Base
belongs_to :finance_category, :class_name => "FinanceTransactionCategory", :foreign_key => 'finance_category_id'
validates_presence_of :percentage
diff --git a/app/models/finance/liability.rb b/app/models/finance/liability.rb
index 90e1f87ec..ccee24dc7 100755
--- a/app/models/finance/liability.rb
+++ b/app/models/finance/liability.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Liability < ActiveRecord::Base
validates_presence_of :title, :amount
validates_numericality_of :amount
diff --git a/app/models/finance/student_category_fee_collection_discount.rb b/app/models/finance/student_category_fee_collection_discount.rb
index fc983e9a4..b3be6acd8 100644
--- a/app/models/finance/student_category_fee_collection_discount.rb
+++ b/app/models/finance/student_category_fee_collection_discount.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentCategoryFeeCollectionDiscount < FeeCollectionDiscount
@@ -30,7 +30,7 @@ def total_payable(student = nil)
end
payable
end
-
+
def discount(student = nil)
if is_amount == false
super
diff --git a/app/models/finance/student_category_fee_discount.rb b/app/models/finance/student_category_fee_discount.rb
index b34bd8085..337807e5a 100644
--- a/app/models/finance/student_category_fee_discount.rb
+++ b/app/models/finance/student_category_fee_discount.rb
@@ -1,50 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentCategoryFeeDiscount < FeeDiscount
- belongs_to :receiver ,:class_name=>'StudentCategory'
- validates_presence_of :receiver_id , :message => "#{t('student_category_cant_be_blank')}"
-
- validates_uniqueness_of :name, :scope=>[:finance_fee_category_id, :type]
+ belongs_to :receiver, :class_name => 'StudentCategory'
+ validates_presence_of :receiver_id, :message => "#{t('student_category_cant_be_blank')}"
+ validates_uniqueness_of :name, :scope => [:finance_fee_category_id, :type]
#validates_uniqueness_of :receiver_id, :scope=>[:type,:finance_fee_category_id],:message=>'Discount already exists for the student category'
-
- def total_payable
- payable = finance_fee_collection.fee_category.fee_particulars.map(&:amount).compact.flatten.sum
- payable
- end
-
- def discount
- if is_amount == false
- super
- elsif is_amount == true
- payable = total_payable
- percentage = (super.to_f / payable.to_f).to_f * 100
- percentage
- end
- end
-
- def category_name
- c =StudentCategory.find(self.receiver_id)
- c.name unless c.nil?
- end
-
end
diff --git a/app/models/finance/student_fee_collection_discount.rb b/app/models/finance/student_fee_collection_discount.rb
index 8462dff86..f90b5106c 100644
--- a/app/models/finance/student_fee_collection_discount.rb
+++ b/app/models/finance/student_fee_collection_discount.rb
@@ -1,32 +1,28 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentFeeCollectionDiscount < FeeCollectionDiscount
- belongs_to :receiver ,:class_name=>'Student'
-
- validates_presence_of :receiver_id , :message => "#{t('student_admission_no_cant_be_blank')}"
-
-
+ belongs_to :receiver ,:class_name => 'Student'
+ validates_presence_of :receiver_id, :message => "#{t('student_admission_no_cant_be_blank')}"
def student_name
- s =Student.find(self.receiver_id)
+ s = Student.find(self.receiver_id)
"#{s.first_name} (#{s.admission_no})" unless s.nil?
end
-
+
end
diff --git a/app/models/finance/student_fee_discount.rb b/app/models/finance/student_fee_discount.rb
index c3fc5e7ec..362383398 100644
--- a/app/models/finance/student_fee_discount.rb
+++ b/app/models/finance/student_fee_discount.rb
@@ -1,45 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentFeeDiscount < FeeDiscount
-
- belongs_to :receiver ,:class_name=>'Student'
-
- validates_presence_of :receiver_id , :message => "#{t('student_admission_no_cant_be_blank')}"
-
- validates_uniqueness_of :name, :scope=>[:finance_fee_category_id, :type, :receiver_id ]
+ belongs_to :receiver, :class_name => 'Student'
+ validates_presence_of :receiver_id, :message => "#{t('student_admission_no_cant_be_blank')}"
+ validates_uniqueness_of :name, :scope => [:finance_fee_category_id, :type, :receiver_id]
# validates_uniqueness_of :receiver_id, :scope=>[:type,:finance_fee_category_id],:message=>'Discount already exists for the student'
-
- def total_payable
- payable = finance_fee_category.fee_particulars.map(&:amount).compact.flatten.sum
- payable
- end
-
- def discount
- if is_amount == false
- super
- elsif is_amount == true
- payable = total_payable
- percentage = (super.to_f / payable.to_f).to_f * 100
- percentage
- end
- end
-
end
diff --git a/app/models/grading_level.rb b/app/models/grading_level.rb
index e5dfb78a2..4a33091dc 100755
--- a/app/models/grading_level.rb
+++ b/app/models/grading_level.rb
@@ -1,66 +1,60 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class GradingLevel < ActiveRecord::Base
belongs_to :batch
validates_presence_of :name, :min_score
- validates_presence_of :credit_points, :if=>:batch_has_gpa
- validates_uniqueness_of :name, :scope => [:batch_id, :is_deleted],:case_sensitive => false
+ validates_presence_of :credit_points, :if => :batch_has_gpa?
+ validates_uniqueness_of :name, :scope => [:batch_id, :is_deleted]#, :case_sensitive => false
- default_scope :order => 'min_score desc'
+ default_scope :order => 'min_score DESC'
named_scope :default, :conditions => { :batch_id => nil, :is_deleted => false }
- named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted => false } } }
+ named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b, :is_deleted => false } } }
def inactivate
- update_attribute :is_deleted, true
- end
-
- def batch_has_gpa
- self.batch_id and self.batch.gpa_enabled?
+ update_attribute(:is_deleted, true)
end
def to_s
name
end
- def self.exists_for_batch?(batch_id)
- batch_grades = GradingLevel.find_all_by_batch_id(batch_id, :conditions=> 'is_deleted = false')
+ def self.exists_for_batch?(batch_id)
+ batch_grades = GradingLevel.find_all_by_batch_id(batch_id, :conditions => { :is_deleted => false })
default_grade = GradingLevel.default
- if batch_grades.blank? and default_grade.blank?
- return false
+ batch_grades.present? && default_grade.present?
+ end
+
+ def self.percentage_to_grade(percent_score, batch_id)
+ batch_grades = GradingLevel.for_batch(batch_id)
+ if batch_grades.empty?
+ grade = GradingLevel.default.find(:first, :conditions => [ 'min_score <= ?', percent_score.round ], :order => 'min_score DESC')
else
- return true
+ grade = GradingLevel.for_batch(batch_id).find(:first,
+ :conditions => [ 'min_score <= ?', percent_score.round ], :order => 'min_score DESC')
end
+ grade
end
-
- class << self
- def percentage_to_grade(percent_score, batch_id)
- batch_grades = GradingLevel.for_batch(batch_id)
- if batch_grades.empty?
- grade = GradingLevel.default.find :first,
- :conditions => [ "min_score <= ?", percent_score.round ], :order => 'min_score desc'
- else
- grade = GradingLevel.for_batch(batch_id).find :first,
- :conditions => [ "min_score <= ?", percent_score.round ], :order => 'min_score desc'
- end
- grade
- end
+ private
+
+ def batch_has_gpa?
+ batch_id? && batch.gpa_enabled?
end
+
end
diff --git a/app/models/grouped_batch.rb b/app/models/grouped_batch.rb
index b6f2cacc1..e8bca4b59 100644
--- a/app/models/grouped_batch.rb
+++ b/app/models/grouped_batch.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class GroupedBatch < ActiveRecord::Base
belongs_to :batch_group
belongs_to :batch
diff --git a/app/models/grouped_exam.rb b/app/models/grouped_exam.rb
index 902c10e2c..c7b4a6d63 100755
--- a/app/models/grouped_exam.rb
+++ b/app/models/grouped_exam.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class GroupedExam < ActiveRecord::Base
has_many :exam_groups
end
diff --git a/app/models/grouped_exam_report.rb b/app/models/grouped_exam_report.rb
index a6a8d09f8..cf302bee4 100644
--- a/app/models/grouped_exam_report.rb
+++ b/app/models/grouped_exam_report.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class GroupedExamReport < ActiveRecord::Base
belongs_to :batch
belongs_to :student
diff --git a/app/models/guardian.rb b/app/models/guardian.rb
index 8bf086a76..f24222ac0 100755
--- a/app/models/guardian.rb
+++ b/app/models/guardian.rb
@@ -1,36 +1,32 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Guardian < ActiveRecord::Base
belongs_to :country
belongs_to :ward, :class_name => 'Student'
belongs_to :user
- validates_presence_of :first_name, :relation,:ward_id
- validates_format_of :email, :with => /^[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i, :allow_blank=>true,
+ validates_presence_of :first_name, :relation, :ward_id
+ validates_format_of :email, :with => /\A[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}\z/i, :allow_blank => true,
:message => "#{t('must_be_a_valid_email_address')}"
before_destroy :immediate_contact_nil
+ validate :cant_be_a_future_date
- def validate
- errors.add(:dob, "#{t('cant_be_a_future_date')}.") if self.dob > Date.today unless self.dob.nil?
- end
-
- def is_immediate_contact?
+ def immediate_contact?
ward.immediate_contact_id == id
end
@@ -53,30 +49,32 @@ def create_guardian_user(student)
user = User.new do |u|
u.first_name = self.first_name
u.last_name = self.last_name
- u.username = "p"+student.admission_no.to_s
+ u.username = "p" + student.admission_no.to_s
u.password = "p#{student.admission_no.to_s}123"
u.role = 'Parent'
u.email = ( email == '' or User.active.find_by_email(self.email) ) ? "" :self.email.to_s
- end
+ end
self.update_attributes(:user_id => user.id) if user.save
end
-
-
def self.shift_user(student)
self.find_all_by_ward_id(student.id).each do |g|
parent_user = g.user
- parent_user.soft_delete if parent_user.present? and (parent_user.is_deleted==false)
+ parent_user.soft_delete if parent_user.present? && (parent_user.is_deleted == false)
end
- current_guardian = student.immediate_contact
- current_guardian.create_guardian_user(student) if current_guardian.present?
+
+ current_guardian = student.immediate_contact
+ current_guardian.create_guardian_user(student) if current_guardian.present?
+ end
+
+ private
+ def cant_be_a_future_date
+ errors.add(:dob, "#{t('cant_be_a_future_date')}.") if self.dob && self.dob > Date.current
end
def immediate_contact_nil
- student = self.ward
- if student.present? and (student.immediate_contact_id==self.id)
- student.update_attributes(:immediate_contact_id=>nil)
+ if ward.present? && immediate_contact?
+ ward.update_attributes(:immediate_contact_id => nil)
end
end
-
end
diff --git a/app/models/hr/apply_leave.rb b/app/models/hr/apply_leave.rb
index df5deef27..9e2d3f685 100755
--- a/app/models/hr/apply_leave.rb
+++ b/app/models/hr/apply_leave.rb
@@ -1,67 +1,94 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ApplyLeave < ActiveRecord::Base
- validates_presence_of :employee_leave_types_id, :start_date, :end_date, :reason
+ validates_presence_of :employee_leave_type_id, :start_date, :end_date, :reason
belongs_to :employee
belongs_to :employee_leave_type
before_create :check_leave_count
-
+
cattr_reader :per_page
@@per_page = 12
def check_leave_count
- unless self.start_date.nil? or self.end_date.nil?
+ unless self.start_date.nil? || self.end_date.nil?
errors.add_to_base("#{t('end_date_cant_before_start_date')}") if self.end_date < self.start_date
-
end
- unless self.start_date.nil? or self.end_date.nil? or self.employee_leave_types_id.nil?
- leave = EmployeeLeave.find_by_employee_id(self.employee_id, :conditions=> "employee_leave_type_id = '#{self.employee_leave_types_id}'")
- leave_required = (self.end_date.to_date-self.start_date.to_date).numerator+1
- if self.start_date.to_date < self.employee.joining_date.to_date
- errors.add_to_base("#{t('date_marked_is_before_join_date')}")
- else
+ unless self.start_date.nil? || self.end_date.nil? || self.employee_leave_type_id.nil?
+ leave = EmployeeLeave.find_by_employee_id_and_employee_leave_type_id(self.employee_id,
+ self.employee_leave_type_id)
+ leave_required = (self.end_date.to_date-self.start_date.to_date).numerator + 1
+ if self.employee.present? && self.start_date.to_date < self.employee.joining_date.to_date
+ errors.add_to_base("#{t('date_marked_is_before_join_date')}")
+ elsif leave.present?
if leave.leave_taken.to_f == leave.leave_count.to_f
errors.add_to_base("#{t('you_have_already_availed')}")
-
else
if self.is_half_day == true
new_leave_count = (leave_required)/2
if leave.leave_taken.to_f+new_leave_count.to_f > leave.leave_count.to_f
errors.add_to_base("#{t('no_of_leaves_exceeded_max_allowed')}")
-
end
else
new_leave_count = leave_required.to_f
if leave.leave_taken.to_f+new_leave_count.to_f > leave.leave_count.to_f
errors.add_to_base("#{t('no_of_leaves_exceeded_max_allowed')}")
-
end
end
end
end
end
- if self.errors.present?
- return false
- else
- return true
+
+ self.errors.present? ? false : true
+ end
+
+ def approve(manager_remark)
+ update_attributes(:approved => true,
+ :viewed_by_manager => true,
+ :manager_remark => manager_remark)
+ end
+
+ def deny(manager_remark)
+ update_attributes(:viewed_by_manager => true,
+ :manager_remark => manager_remark)
+ end
+
+ def create_employee_attendance(day)
+ EmployeeAttendance.create(:attendance_date => day,
+ :employee_id => self.id,
+ :employee_leave_type_id => employee_leave_type_id,
+ :reason => reason,
+ :is_half_day => is_half_day)
+ end
+
+ def calculate_reset_count(params)
+ if self.approve(params[:manager_remark])
+ (start_date..end_date).each do |day|
+ unless day.sunday?
+ create_employee_attendance(day)
+ att = EmployeeAttendance.find_by_attendance_date(day)
+ att.try(:update_attributes, { is_half_day: is_half_day })
+ reset_count = EmployeeLeave.find_by_employee_id_and_employee_leave_type_id(employee_id,
+ employee_leave_type_id)
+ reset_count.update_leave_taken_by(is_half_day)
+ end
+ end
end
end
end
diff --git a/app/models/hr/bank_field.rb b/app/models/hr/bank_field.rb
index 23109796f..02df4f6b6 100755
--- a/app/models/hr/bank_field.rb
+++ b/app/models/hr/bank_field.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class BankField < ActiveRecord::Base
validates_presence_of :name
end
diff --git a/app/models/hr/employee.rb b/app/models/hr/employee.rb
index 515f49893..f5b3d9ef9 100755
--- a/app/models/hr/employee.rb
+++ b/app/models/hr/employee.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Employee < ActiveRecord::Base
belongs_to :employee_category
belongs_to :employee_position
@@ -24,7 +23,7 @@ class Employee < ActiveRecord::Base
belongs_to :nationality, :class_name => 'Country'
belongs_to :user
belongs_to :reporting_manager,:class_name => "Employee"
-
+
has_many :employees_subjects
has_many :subjects ,:through => :employees_subjects
has_many :timetable_entries
@@ -36,11 +35,11 @@ class Employee < ActiveRecord::Base
has_many :finance_transactions, :as => :payee
has_many :employee_attendances
- validates_format_of :email, :with => /^[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i, :allow_blank=>true,
+ validates_format_of :email, :with => /\A[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}\z/i, :allow_blank=>true,
:message => "#{t('must_be_a_valid_email_address')}"
validates_presence_of :employee_category_id, :employee_number, :first_name, :employee_position_id,
- :employee_department_id, :date_of_birth,:joining_date,:nationality_id
+ :employee_department_id, :date_of_birth, :joining_date, :nationality_id
validates_uniqueness_of :employee_number
validates_associated :user
@@ -52,6 +51,12 @@ class Employee < ActiveRecord::Base
:path => ":rails_root/public/system/:class/:attachment/:id/:style/:basename.:extension"
VALID_IMAGE_TYPES = ['image/gif', 'image/png','image/jpeg', 'image/jpg']
+ EMPLOYEE_QUERY_VARIABLES = [
+ :employee_department_id,
+ :employee_category_id,
+ :employee_position_id,
+ :employee_grade_id
+ ]
validates_attachment_content_type :photo, :content_type =>VALID_IMAGE_TYPES,
:message=>'Image can only be GIF, PNG, JPG',:if=> Proc.new { |p| !p.photo_file_name.blank? }
@@ -59,9 +64,7 @@ class Employee < ActiveRecord::Base
:message=>'must be less than 500 KB.',:if=> Proc.new { |p| p.photo_file_name_changed? }
def status_true
- unless self.status==1
- self.status=1
- end
+ self.status = true if self.status == false
end
def create_user_and_validate
@@ -78,9 +81,9 @@ def create_user_and_validate
changes_to_be_checked = ['employee_number','first_name','last_name','email']
check_changes = self.changed & changes_to_be_checked
# self.user.role ||= "Employee"
- unless check_changes.blank?
+ if check_changes.any?
emp_user = self.user
- emp_user.username = self.employee_number if check_changes.include?('employee_number')
+ emp_user.username = self.employee_number.to_s if check_changes.include?('employee_number')
emp_user.password = self.employee_number.to_s + "123" if check_changes.include?('employee_number')
emp_user.first_name = self.first_name if check_changes.include?('first_name')
emp_user.last_name = self.last_name if check_changes.include?('last_name')
@@ -92,14 +95,14 @@ def create_user_and_validate
def check_user_errors(user)
unless user.valid?
- user.errors.each{|attr,msg| errors.add(attr.to_sym,"#{msg}")}
+ user.errors.each{ |attr,msg| errors.add(attr.to_sym,"#{msg}") }
end
user.errors.blank?
end
def employee_batches
- batches_with_employees = Batch.active.reject{|b| b.employee_id.nil?}
- assigned_batches = batches_with_employees.reject{|e| !e.employee_id.split(",").include?(self.id.to_s)}
+ batches_with_employees = Batch.active.reject{ |b| b.employee_id.nil? }
+ assigned_batches = batches_with_employees.reject{ |e| !e.employee_id.split(",").include?(self.id.to_s) }
return assigned_batches
end
@@ -119,41 +122,30 @@ def max_hours_per_week
end
alias_method(:max_hours_day, :max_hours_per_day)
alias_method(:max_hours_week, :max_hours_per_week)
-
+
def next_employee
- next_st = self.employee_department.employees.first(:conditions => "id>#{self.id}",:order => "id ASC")
- next_st ||= employee_department.employees.first(:order => "id ASC")
+ next_st = self.employee_department.employees.first(:conditions => ["id > ?", self.id], :order => "id ASC")
next_st ||= self.employee_department.employees.first(:order => "id ASC")
end
def previous_employee
- prev_st = self.employee_department.employees.first(:conditions => "id<#{self.id}",:order => "id DESC")
- prev_st ||= employee_department.employees.first(:order => "id DESC")
- prev_st ||= self.employee_department.empoyees.first(:order => "id DESC")
+ prev_st = self.employee_department.employees.first(:conditions => ["id < ?", self.id], :order => "id DESC")
+ prev_st ||= self.employee_department.employees.first(:order => "id DESC")
end
def full_name
"#{first_name} #{middle_name} #{last_name}"
end
- def is_payslip_approved(date)
- approve = MonthlyPayslip.find_all_by_salary_date_and_employee_id(date,self.id,:conditions => ["is_approved = true"])
- if approve.empty?
- return false
- else
- return true
- end
+ def payslip_approved?(date)
+ MonthlyPayslip.find_all_by_salary_date_and_employee_id_and_is_approved(date, self.id, true).any?
end
- def is_payslip_rejected(date)
- approve = MonthlyPayslip.find_all_by_salary_date_and_employee_id(date,self.id,:conditions => ["is_rejected = true"])
- if approve.empty?
- return false
- else
- return true
- end
+
+ def payslip_rejected?(date)
+ MonthlyPayslip.find_all_by_salary_date_and_employee_id_and_is_rejected(date, self.id, true).any?
end
- def self.total_employees_salary(employees,start_date,end_date)
+ def self.total_employees_salary(employees, start_date, end_date)
salary = 0
employees.each do |e|
salary_dates = e.all_salaries(start_date,end_date)
@@ -165,54 +157,38 @@ def self.total_employees_salary(employees,start_date,end_date)
end
def employee_salary(salary_date)
-
- monthly_payslips = MonthlyPayslip.find(:all,
- :order => 'salary_date desc',
- :conditions => ["employee_id ='#{self.id}'and salary_date = '#{salary_date}' and is_approved = 1"])
- individual_payslip_category = IndividualPayslipCategory.find(:all,
- :order => 'salary_date desc',
- :conditions => ["employee_id ='#{self.id}'and salary_date >= '#{salary_date}'"])
+ monthly_payslips = MonthlyPayslip.find(:all, :order => 'salary_date desc', :conditions => ["employee_id = ? AND salary_date = ? AND is_approved = ?", self.id, salary_date, true])
+ individual_payslip_category = IndividualPayslipCategory.find(:all, :order => 'salary_date desc', :conditions => ["employee_id = ? AND salary_date >= ?", self.id, salary_date])
individual_category_non_deductionable = 0
individual_category_deductionable = 0
individual_payslip_category.each do |pc|
- unless pc.is_deduction == true
- individual_category_non_deductionable = individual_category_non_deductionable + pc.amount.to_f
- end
- end
-
- individual_payslip_category.each do |pc|
- unless pc.is_deduction == false
+ if pc.is_deduction?
individual_category_deductionable = individual_category_deductionable + pc.amount.to_f
+ else
+ individual_category_non_deductionable = individual_category_non_deductionable + pc.amount.to_f
end
end
non_deductionable_amount = 0
deductionable_amount = 0
monthly_payslips.each do |mp|
- category1 = PayrollCategory.find(mp.payroll_category_id)
- unless category1.is_deduction == true
+ category = PayrollCategory.find(mp.payroll_category_id)
+ if category.is_deduction?
+ deductionable_amount = deductionable_amount + mp.amount.to_f
+ else
non_deductionable_amount = non_deductionable_amount + mp.amount.to_f
end
end
- monthly_payslips.each do |mp|
- category2 = PayrollCategory.find(mp.payroll_category_id)
- unless category2.is_deduction == false
- deductionable_amount = deductionable_amount + mp.amount.to_f
- end
- end
net_non_deductionable_amount = individual_category_non_deductionable + non_deductionable_amount
net_deductionable_amount = individual_category_deductionable + deductionable_amount
- net_amount = net_non_deductionable_amount - net_deductionable_amount
- return net_amount.to_f
+ net_non_deductionable_amount - net_deductionable_amount
end
- def salary(start_date,end_date)
- MonthlyPayslip.find_by_employee_id(self.id,:order => 'salary_date desc',
- :conditions => ["salary_date >= '#{start_date.to_date}' and salary_date <= '#{end_date.to_date}' and is_approved = 1"]).salary_date
-
+ def salary(start_date, end_date)
+ MonthlyPayslip.find_by_employee_id(self.id, :order => 'salary_date desc', :conditions => ["salary_date >= ? AND salary_date <= ? and is_approved = ?", start_date.to_date, end_date.to_date, true]).salary_date
end
def archive_employee(status)
@@ -222,7 +198,7 @@ def archive_employee(status)
employee_attributes.delete "photo_file_size"
employee_attributes.delete "photo_file_name"
employee_attributes.delete "photo_content_type"
- employee_attributes["former_id"]= self.id
+ employee_attributes["former_id"] = self.id
archived_employee = ArchivedEmployee.new(employee_attributes)
archived_employee.photo = self.photo
if archived_employee.save
@@ -243,65 +219,79 @@ def archive_employee(status)
self.destroy
end
end
-
- def all_salaries(start_date,end_date)
- MonthlyPayslip.find_all_by_employee_id(self.id,:select =>"distinct salary_date" ,:order => 'salary_date desc',
- :conditions => ["salary_date >= '#{start_date.to_date}' and salary_date <= '#{end_date.to_date}' and is_approved = 1"])
+
+ def all_salaries(start_date, end_date)
+ MonthlyPayslip.find_all_by_employee_id(self.id, :select =>"distinct salary_date", :order => 'salary_date desc', :conditions => ["salary_date >= ? and salary_date <= ? and is_approved = ?", start_date.to_date, end_date.to_date, true])
end
- def self.calculate_salary(monthly_payslip,individual_payslip_category)
+ def self.calculate_salary(monthly_payslip, individual_payslip_category)
individual_category_non_deductionable = 0
individual_category_deductionable = 0
- unless individual_payslip_category.blank?
- individual_payslip_category.each do |pc|
- if pc.is_deduction == true
- individual_category_deductionable = individual_category_deductionable + pc.amount.to_f
- else
- individual_category_non_deductionable = individual_category_non_deductionable + pc.amount.to_f
- end
+
+ individual_payslip_category.each do |pc|
+ if pc.is_deduction?
+ individual_category_deductionable = individual_category_deductionable + pc.amount.to_f
+ else
+ individual_category_non_deductionable = individual_category_non_deductionable + pc.amount.to_f
end
end
+
non_deductionable_amount = 0
deductionable_amount = 0
- unless monthly_payslip.blank?
- monthly_payslip.each do |mp|
- unless mp.payroll_category.blank?
- if mp.payroll_category.is_deduction == true
- deductionable_amount = deductionable_amount + mp.amount.to_f
- else
- non_deductionable_amount = non_deductionable_amount + mp.amount.to_f
- end
+
+ monthly_payslip.each do |mp|
+ if mp.payroll_category.present?
+ if mp.payroll_category.is_deduction?
+ deductionable_amount = deductionable_amount + mp.amount.to_f
+ else
+ non_deductionable_amount = non_deductionable_amount + mp.amount.to_f
end
end
end
+
net_non_deductionable_amount = individual_category_non_deductionable + non_deductionable_amount
net_deductionable_amount = individual_category_deductionable + deductionable_amount
net_amount = net_non_deductionable_amount - net_deductionable_amount
- return_hash = {:net_amount=>net_amount,:net_deductionable_amount=>net_deductionable_amount,\
- :net_non_deductionable_amount=>net_non_deductionable_amount }
- return_hash
+ {:net_amount => net_amount, :net_deductionable_amount => net_deductionable_amount, :net_non_deductionable_amount => net_non_deductionable_amount }
end
def self.find_in_active_or_archived(id)
- employee = Employee.find(:first,:conditions=>"id=#{id}")
- if employee.blank?
- return ArchivedEmployee.find(:first,:conditions=>"former_id=#{id}")
- else
- return employee
- end
+ Employee.find_by_id(id) || ArchivedEmployee.find_by_id(id)
end
def has_dependency
- return true if self.monthly_payslips.present? or self.employee_salary_structures.present? or self.employees_subjects.present? \
- or self.apply_leaves.present? or self.finance_transactions.present? or self.timetable_entries.present? or self.employee_attendances.present?
- return true if FedenaPlugin.check_dependency(self,"permanant").present?
- return false
+ self.monthly_payslips.present? || self.employee_salary_structures.present? || self.employees_subjects.present? \
+ || self.apply_leaves.present? || self.finance_transactions.present? || self.timetable_entries.present? \
+ || self.employee_attendances.present? || FedenaPlugin.check_dependency(self,"permanant").present?
end
def former_dependency
FedenaPlugin.check_dependency(self,"former")
end
-
+
+ def self.search_employees(params)
+ if params[:query].length >= 3
+ conditions = "(first_name LIKE ? OR middle_name LIKE ? OR last_name LIKE ?" \
+ " OR employee_number LIKE ? OR (concat(first_name, \" \", last_name) LIKE ?))"
+ query_values = ["#{params[:query]}%","#{params[:query]}%","#{params[:query]}%",
+ params[:query], params[:query]]
+ elsif params[:query].present?
+ conditions = "employee_number = ? "
+ query_values = [params[:query]]
+ else
+ conditions = "1 = 1" # always true conditions to prevent wrong syntax error
+ query_values = []
+ end
+
+ EMPLOYEE_QUERY_VARIABLES.each do |key|
+ if params[key].present?
+ conditions << " AND #{key} = ?"
+ query_values << params[key]
+ end
+ end
+
+ Employee.all(conditions: [conditions] + query_values, order: "first_name asc")
+ end
end
diff --git a/app/models/hr/employee_additional_detail.rb b/app/models/hr/employee_additional_detail.rb
index a723aef0b..ad1b365aa 100755
--- a/app/models/hr/employee_additional_detail.rb
+++ b/app/models/hr/employee_additional_detail.rb
@@ -1,25 +1,26 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeAdditionalDetail < ActiveRecord::Base
belongs_to :employee
belongs_to :additional_field
-
+ validates_presence_of :additional_info, :if => Proc.new { |ead| ead.additional_field && ead.additional_field.is_mandatory? }
+ validate :destroy_if_additional_info_is_blank
+
def archive_employee_additional_detail(archived_employee)
additional_detail_attributes = self.attributes
additional_detail_attributes.delete "id"
@@ -27,28 +28,11 @@ def archive_employee_additional_detail(archived_employee)
self.delete if ArchivedEmployeeAdditionalDetail.create(additional_detail_attributes)
end
- def save
- unless self.destroyed?
- super
- end
- true
- end
+ private
- def validate
- if self.additional_field.is_mandatory == true
- if self.additional_info.blank?
- errors.add("additional_info","can't be blank")
- return false
- else
- return true
- end
- else
- if self.additional_info.blank?
- self.destroy
- return true
- else
- return true
- end
- end
+ def destroy_if_additional_info_is_blank
+ self.destroy if additional_field && !additional_field.is_mandatory? && additional_info.blank?
+ return true
end
+
end
diff --git a/app/models/hr/employee_attendance.rb b/app/models/hr/employee_attendance.rb
index 50164f5f4..542ec2835 100755
--- a/app/models/hr/employee_attendance.rb
+++ b/app/models/hr/employee_attendance.rb
@@ -1,32 +1,30 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeAttendance < ActiveRecord::Base
validates_presence_of :employee_leave_type_id, :reason
- validates_uniqueness_of :employee_id, :scope=> :attendance_date
+ validates_uniqueness_of :employee_id, :scope => :attendance_date
belongs_to :employee
belongs_to :employee_leave_type
- before_save :validate
+ validate :date_marked_is_earlier_than_joining_date
- def validate
- if self.attendance_date.to_date < self.employee.joining_date.to_date
- errors.add(:employee_attendance,"#{t('date_marked_is_earlier_than_joining_date')}")
- end
+ private
+ def date_marked_is_earlier_than_joining_date
+ errors.add(:employee_attendance,"#{t('date_marked_is_earlier_than_joining_date')}") if self.attendance_date && self.employee && self.employee.joining_date && self.attendance_date.to_date < self.employee.joining_date.to_date
end
-
+
end
diff --git a/app/models/hr/employee_bank_detail.rb b/app/models/hr/employee_bank_detail.rb
index e91b9816f..c0f1cc9be 100755
--- a/app/models/hr/employee_bank_detail.rb
+++ b/app/models/hr/employee_bank_detail.rb
@@ -1,29 +1,29 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeBankDetail < ActiveRecord::Base
belongs_to :employee
belongs_to :bank_field
- def archive_employee_bank_detail(archived_employee)
+ def archive_employee_bank_detail(archived_employee_id)
bank_detail_attributes = self.attributes
bank_detail_attributes.delete "id"
- bank_detail_attributes["employee_id"] = archived_employee
- self.delete if ArchivedEmployeeBankDetail.create(bank_detail_attributes)
+ bank_detail_attributes["employee_id"] = archived_employee_id
+ archive_employee_bank_detail = ArchivedEmployeeBankDetail.create(bank_detail_attributes)
+ self.delete if archive_employee_bank_detail.valid?
end
end
diff --git a/app/models/hr/employee_category.rb b/app/models/hr/employee_category.rb
index 6631fdae7..d0273297a 100755
--- a/app/models/hr/employee_category.rb
+++ b/app/models/hr/employee_category.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeCategory < ActiveRecord::Base
validates_presence_of :name, :prefix
validates_uniqueness_of :name, :prefix
diff --git a/app/models/hr/employee_department.rb b/app/models/hr/employee_department.rb
index 3bd217ee2..9ee5da6d6 100755
--- a/app/models/hr/employee_department.rb
+++ b/app/models/hr/employee_department.rb
@@ -1,29 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeDepartment < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name, :code
has_many :employees
has_many :employee_department_events
- has_many :events, :through=>:employee_department_events
- named_scope :active, :conditions => {:status => true }
-
+ has_many :events, :through => :employee_department_events
+ named_scope :active, :conditions => { :status => true }
def department_total_salary(start_date,end_date)
total = 0
diff --git a/app/models/hr/employee_department_event.rb b/app/models/hr/employee_department_event.rb
index 761842d0d..15d29c644 100755
--- a/app/models/hr/employee_department_event.rb
+++ b/app/models/hr/employee_department_event.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeDepartmentEvent < ActiveRecord::Base
belongs_to :event
belongs_to :employee_department
diff --git a/app/models/hr/employee_grade.rb b/app/models/hr/employee_grade.rb
index 12d099fa7..ae97742ac 100755
--- a/app/models/hr/employee_grade.rb
+++ b/app/models/hr/employee_grade.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeGrade < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name, :priority
@@ -23,10 +22,12 @@ class EmployeeGrade < ActiveRecord::Base
has_many :employee
named_scope :active, :conditions => {:status => true }
+ validate :max_hours_week_should_be_greater_than_max_hours_day
- def validate
- self.errors.add(:max_hours_week, "#{t('should_be_greater_than_max_period')}.") \
- if self.max_hours_day > self.max_hours_week \
- unless self.max_hours_day.nil? or self.max_hours_week.nil?
+ private
+ def max_hours_week_should_be_greater_than_max_hours_day
+ if self.max_hours_day && self.max_hours_week && self.max_hours_day > self.max_hours_week
+ self.errors.add(:max_hours_week, "#{t('should_be_greater_than_max_period')}.")
+ end
end
end
diff --git a/app/models/hr/employee_leave.rb b/app/models/hr/employee_leave.rb
index a67e3129e..b6af929b0 100755
--- a/app/models/hr/employee_leave.rb
+++ b/app/models/hr/employee_leave.rb
@@ -1,21 +1,46 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeLeave < ActiveRecord::Base
- belongs_to :employee_leave_type
+ belongs_to :employee_leave_type
+
+ def self.reset_all
+ EmployeeLeave.all.each(&:reset)
+ end
+
+ def reset
+ calculate_leave_days if employee_leave_type.status
+ end
+
+ def calculate_leave_days
+ default_leave_count = employee_leave_type.max_leave_count
+ if employee_leave_type.carry_forward && self.leave_taken <= self.leave_count
+ self.leave_count -= self.leave_taken
+ self.leave_count += default_leave_count.to_f
+ else
+ self.leave_count = default_leave_count.to_f
+ end
+ self.leave_taken = 0
+ self.reset_date = Date.today
+ self.save
+ end
+
+ def update_leave_taken_by(is_half_day)
+ self.leave_taken += is_half_day ? 0.5 : 1
+ self.save
+ end
end
diff --git a/app/models/hr/employee_leave_type.rb b/app/models/hr/employee_leave_type.rb
index 11fa1b4a0..31a249fbb 100755
--- a/app/models/hr/employee_leave_type.rb
+++ b/app/models/hr/employee_leave_type.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeLeaveType < ActiveRecord::Base
has_many :employee_leaves
has_many :employee_attendances
diff --git a/app/models/hr/employee_position.rb b/app/models/hr/employee_position.rb
index a85ea3271..428f76cb9 100755
--- a/app/models/hr/employee_position.rb
+++ b/app/models/hr/employee_position.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeePosition < ActiveRecord::Base
validates_presence_of :name, :employee_category_id
validates_uniqueness_of :name,:scope=>:employee_category_id
diff --git a/app/models/hr/employee_salary_structure.rb b/app/models/hr/employee_salary_structure.rb
index 2ad67d495..aaf6084c2 100755
--- a/app/models/hr/employee_salary_structure.rb
+++ b/app/models/hr/employee_salary_structure.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeeSalaryStructure < ActiveRecord::Base
belongs_to :payroll_category
belongs_to :employee
diff --git a/app/models/hr/employees_subject.rb b/app/models/hr/employees_subject.rb
index 8d602e86e..77ee83ed5 100755
--- a/app/models/hr/employees_subject.rb
+++ b/app/models/hr/employees_subject.rb
@@ -1,59 +1,60 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class EmployeesSubject < ActiveRecord::Base
- belongs_to :employee
- belongs_to :subject
- has_one :batch,:through=>:subject
+ belongs_to :employee
+ belongs_to :subject
+ has_one :batch, :through => :subject
- def self.allot_work(employee_subj_ids)
- status,error_carrier = false,self.new
- self.transaction do
- emp_subjs = []
- employee_subj_ids.each do |subj_id,emp_id|
- a = self.find_or_create_by_subject_id(:subject_id=>subj_id)
- a.employee_id = emp_id
- a.save
- emp_subjs << a
- end
+ def self.allot_work(subject_employee_ids)
+ status = true
+ employee_assignments = {}
- employee_assignments = emp_subjs.group_by{|es|es.employee_id}
- emp_assigned_hours = {}
- employee_assignments.each do |emp_id,emp_subs|
- emp_assigned_hours[emp_id] ||= {}
- emp_assigned_hours[emp_id][:assigned]=emp_subs.sum{|es| es.subject.max_weekly_classes} || 0
- emp_assigned_hours[emp_id][:max]=emp_subs.first.employee.max_hours_week || 0
- emp_assigned_hours[emp_id][:emp_name]=emp_subs.first.employee.full_name
- end
- overloaded_emps = emp_assigned_hours.reject{|emp_id,details| details[:assigned].to_i <= details[:max].to_i}
- status = overloaded_emps.blank?
+ subject_employee_ids.each do |subject_id, employee_id|
+ employee_assignments[employee_id] ||= []
+ employee_assignments[employee_id] << subject_id
+ end
+
+ transaction do
+ employee_assignments.each do |employee_id, subject_ids|
+ if employee_overloaded?(employee_id, subject_ids)
+ status = false
+ raise ActiveRecord::Rollback
+ end
-
- unless overloaded_emps.blank?
- puts overloaded_emps.inspect
- overloaded_emps.each do |emp_id,details|
- error_carrier.errors.add_to_base("#{details[:emp_name]} has #{details[:assigned]-details[:max].to_i} extra periods assigned")
+ subject_ids.each do |subject_id|
+ es = self.find_or_initialize_by_employee_id_and_subject_id(:subject_id => subject_id, :employee_id => employee_id)
+ if !es.save
+ status = false
+ raise ActiveRecord::Rollback
+ end
end
-# raise ActiveRecord::Rollback
end
end
- return [status,error_carrier]
+
+ status
+ end
+
+ def self.employee_overloaded?(employee_id, subject_ids)
+ employee = Employee.find(employee_id)
+ subjects = Subject.find(subject_ids)
+ assigned_hrs = subjects.sum { |s| s.max_weekly_classes } || 0
+ max_hrs = employee.max_hours_per_week || 0
+
+ assigned_hrs > max_hrs
end
-
-
end
diff --git a/app/models/hr/individual_payslip_category.rb b/app/models/hr/individual_payslip_category.rb
index b41127315..073616ea0 100755
--- a/app/models/hr/individual_payslip_category.rb
+++ b/app/models/hr/individual_payslip_category.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class IndividualPayslipCategory < ActiveRecord::Base
validates_numericality_of :amount, :allow_nil=>true
end
diff --git a/app/models/hr/monthly_payslip.rb b/app/models/hr/monthly_payslip.rb
index f1462b28d..94bd47965 100755
--- a/app/models/hr/monthly_payslip.rb
+++ b/app/models/hr/monthly_payslip.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class MonthlyPayslip < ActiveRecord::Base
validates_presence_of :salary_date
@@ -25,7 +24,7 @@ class MonthlyPayslip < ActiveRecord::Base
belongs_to :approver ,:class_name => 'User'
belongs_to :rejector ,:class_name => 'User'
- def approve(user_id,remark)
+ def approve(user_id, remark)
self.is_approved = true
self.approver_id = user_id
self.remark = remark
@@ -39,78 +38,64 @@ def reject(user_id, reason)
self.save
end
- def self.find_and_filter_by_department(salary_date,dept_id)
+ def self.find_and_filter_by_department(salary_date, dept_id)
payslips = ""
individual_payslip_category = ""
- unless dept_id =="All"
- active_employees_in_dept = Employee.find(:all,:select=>"id",:conditions=>"employee_department_id = #{dept_id}")
- archived_employees_in_dept = ArchivedEmployee.find(:all,:select=>"former_id",:conditions=>"employee_department_id = #{dept_id}")
+ if dept_id != "All"
+ active_employees_in_dept = Employee.find(:all, :select => "id", :conditions => ["employee_department_id = ?", dept_id])
+ archived_employees_in_dept = ArchivedEmployee.find(:all, :select => "former_id", :conditions => ["employee_department_id = ?", dept_id])
all_employees_in_dept = active_employees_in_dept.collect(&:id) + archived_employees_in_dept.collect{|a| a.former_id.to_i}
- payslips = self.find_all_by_salary_date(salary_date.to_date,:conditions=>["employee_id IN (?)",all_employees_in_dept],:order=> "payroll_category_id ASC",:include=>[:payroll_category])
- individual_payslip_category = IndividualPayslipCategory.find_all_by_salary_date(salary_date.to_date,:conditions=>["employee_id IN (?)",all_employees_in_dept],:order=>"id ASC")
+ payslips = self.find_all_by_salary_date(salary_date.to_date, :conditions => ["employee_id IN (?)", all_employees_in_dept], :order => "payroll_category_id ASC", :include => [:payroll_category])
+ individual_payslip_category = IndividualPayslipCategory.find_all_by_salary_date(salary_date.to_date, :conditions => ["employee_id IN (?)", all_employees_in_dept], :order => "id ASC")
else
- payslips = self.find_all_by_salary_date(salary_date.to_date,:order=> "payroll_category_id ASC",:include=>[:payroll_category])
- individual_payslip_category = IndividualPayslipCategory.find_all_by_salary_date(salary_date.to_date,:order=>"id ASC")
+ payslips = self.find_all_by_salary_date(salary_date.to_date, :order => "payroll_category_id ASC", :include => [:payroll_category])
+ individual_payslip_category = IndividualPayslipCategory.find_all_by_salary_date(salary_date.to_date, :order => "id ASC")
end
- grouped_monthly_payslips = payslips.group_by(&:employee_id) unless payslips.blank?
- grouped_individual_payslip_categories = individual_payslip_category.group_by(&:employee_id) unless individual_payslip_category.blank?
- return_hash = {:monthly_payslips=>grouped_monthly_payslips,:individual_payslip_category=>grouped_individual_payslip_categories }
- return_hash
+ grouped_monthly_payslips = payslips.group_by(&:employee_id) if payslips.present?
+ grouped_individual_payslip_categories = individual_payslip_category.group_by(&:employee_id) if individual_payslip_category.present?
+ { :monthly_payslips => grouped_monthly_payslips, :individual_payslip_category => grouped_individual_payslip_categories }
end
def active_or_archived_employee
- employee = Employee.find(:first,:conditions=>"id=#{self.employee_id}")
- if employee.blank?
- return ArchivedEmployee.find(:first,:conditions=>"former_id=#{self.employee_id}")
- else
- return employee
- end
+ employee = Employee.find(:first, :conditions => ["id = ?", self.employee_id])
+ archived_employee = ArchivedEmployee.find(:first, :conditions => ["former_id = ?", self.employee_id])
+ employee.present? ? employee : archived_employee
end
-
def status_as_text
- if is_approved ==true
- status = "#{t('approved')}"
- elsif is_rejected ==true
- status = "#{t('rejected')}"
- else
- status = "#{t('pending')}"
- end
- return status
+ is_approved ? "#{t('approved')}" : is_rejected ? "#{t('rejected')}" : "#{t('pending')}"
end
- def self.total_employees_salary(start_date,end_date,dept_id="")
+ def self.total_employees_salary(start_date, end_date, dept_id = "")
total_monthly_payslips = ""
- unless dept_id.blank?
- active_employees_in_dept = Employee.find(:all,:select=>"id",:conditions=>"employee_department_id = #{dept_id}")
- archived_employees_in_dept = ArchivedEmployee.find(:all,:select=>"former_id",:conditions=>"employee_department_id = #{dept_id}")
+ if dept_id.present?
+ active_employees_in_dept = Employee.find(:all, :select => "id", :conditions => ["employee_department_id = ?", dept_id])
+ archived_employees_in_dept = ArchivedEmployee.find(:all, :select => "former_id", :conditions => ["employee_department_id = ?", dept_id])
all_employees_in_dept = active_employees_in_dept.collect(&:id) + archived_employees_in_dept.collect{|a| a.former_id.to_i}
- total_monthly_payslips = self.find(:all,:select=>"employee_id,amount,payroll_category_id,salary_date",:order => 'salary_date desc',:conditions => ["salary_date >= ? and salary_date <= ? and is_approved = 1 and employee_id IN (?)",start_date.to_date,end_date.to_date,all_employees_in_dept],:include=>[:payroll_category])
+ total_monthly_payslips = self.find(:all, :select => "employee_id, amount, payroll_category_id, salary_date", :order => 'salary_date desc', :conditions => ["salary_date >= ? and salary_date <= ? and is_approved = 1 and employee_id IN (?)", start_date.to_date, end_date.to_date, all_employees_in_dept], :include => [:payroll_category])
else
- total_monthly_payslips = self.find(:all,:select=>"employee_id,amount,payroll_category_id,salary_date",:order => 'salary_date desc',:conditions => ["salary_date >= ? and salary_date <= ? and is_approved = 1",start_date.to_date,end_date.to_date],:include=>[:payroll_category])
+ total_monthly_payslips = self.find(:all, :select => "employee_id, amount, payroll_category_id, salary_date", :order => 'salary_date desc', :conditions => ["salary_date >= ? and salary_date <= ? and is_approved = 1", start_date.to_date, end_date.to_date], :include => [:payroll_category])
end
-
+
employee_ids = []
- employee_ids = total_monthly_payslips.collect(&:employee_id) unless total_monthly_payslips.blank?
- unless employee_ids.blank?
- employee_ids.uniq!
- total_individual_payslips = IndividualPayslipCategory.find(:all,:conditions =>"salary_date >= '#{start_date.to_date}' and salary_date <= '#{end_date.to_date}' AND employee_id IN (#{employee_ids.join(",")})",:order=>"id ASC")
+ total_individual_payslips = []
+ employee_ids = total_monthly_payslips.collect(&:employee_id) if total_monthly_payslips.any?
+ if employee_ids.any?
+ total_individual_payslips = IndividualPayslipCategory.find(:all, :conditions => ["salary_date >= ? and salary_date <= ? AND employee_id IN (?)", start_date.to_date, end_date.to_date, employee_ids.uniq.join(",")], :order => "id ASC")
end
total_salary = 0
- unless total_monthly_payslips.blank?
+ if total_monthly_payslips.any?
total_monthly_payslips.each do |payslip|
- total_salary += payslip.amount.to_f if payslip.payroll_category.is_deduction==false
- total_salary -= payslip.amount.to_f if payslip.payroll_category.is_deduction==true
+ payslip.payroll_category.is_deduction? ? total_salary -= payslip.amount.to_f : total_salary += payslip.amount.to_f
end
end
- unless total_individual_payslips.blank?
+ if total_individual_payslips.any?
total_individual_payslips.each do |payslip|
- total_salary += payslip.amount.to_f if payslip.is_deduction==false
- total_salary -= payslip.amount.to_f if payslip.is_deduction==true
+ payslip.is_deduction? ? total_salary -= payslip.amount.to_f : total_salary += payslip.amount.to_f
end
end
- {:total_salary=>total_salary,:monthly_payslips=>total_monthly_payslips,:individual_categories=>total_individual_payslips}
+ {:total_salary => total_salary, :monthly_payslips => total_monthly_payslips, :individual_categories => total_individual_payslips}
end
diff --git a/app/models/hr/payroll_category.rb b/app/models/hr/payroll_category.rb
index 6d4c9c5f3..b69f121c2 100755
--- a/app/models/hr/payroll_category.rb
+++ b/app/models/hr/payroll_category.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class PayrollCategory < ActiveRecord::Base
validates_uniqueness_of :name
validates_presence_of :name
diff --git a/app/models/language.rb b/app/models/language.rb
index dff8d4c0c..8757e43a5 100644
--- a/app/models/language.rb
+++ b/app/models/language.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Language < ActiveRecord::Base
named_scope :translation_available, :conditions => { :code => Configuration::LOCALES }
end
diff --git a/app/models/news.rb b/app/models/news.rb
index 5b199f358..dc24b44d4 100755
--- a/app/models/news.rb
+++ b/app/models/news.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class News < ActiveRecord::Base
belongs_to :author, :class_name => 'User'
has_many :comments, :class_name => 'NewsComment'
@@ -41,5 +40,5 @@ def reload_news_bar
def self.cache_fragment_name
'News_latest_fragment'
end
-
+
end
\ No newline at end of file
diff --git a/app/models/news_comment.rb b/app/models/news_comment.rb
index ccb75720b..7e9ae91a7 100755
--- a/app/models/news_comment.rb
+++ b/app/models/news_comment.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class NewsComment < ActiveRecord::Base
belongs_to :news
belongs_to :author, :class_name => 'User'
diff --git a/app/models/observation.rb b/app/models/observation.rb
index a9af19168..dfe66c881 100644
--- a/app/models/observation.rb
+++ b/app/models/observation.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Observation < ActiveRecord::Base
belongs_to :observation_group
has_many :descriptive_indicators, :as=>:describable
@@ -34,6 +34,6 @@ def prev_record
def validate
errors.add_to_base("Name can't be blank") if self.name.blank?
- errors.add_to_base("Description can't be blank") if self.desc.blank?
+ errors.add_to_base("Description can't be blank") if self.desc.blank?
end
end
diff --git a/app/models/observation_group.rb b/app/models/observation_group.rb
index 1c64b9ade..3a865d6ce 100644
--- a/app/models/observation_group.rb
+++ b/app/models/observation_group.rb
@@ -1,35 +1,38 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class ObservationGroup < ActiveRecord::Base
- has_many :observations
- has_many :descriptive_indicators, :through=>:observations
- belongs_to :cce_grade_set
- has_and_belongs_to_many :courses
-
- named_scope :active,:conditions=>{:is_deleted=>false}
-
- OBSERVATION_KINDS={'0'=>'Scholastic','1'=>'Co Scholastic Activity','3'=>'Co Scholastic Area'}
+ has_many :observations
+ has_many :descriptive_indicators, :through => :observations
+ belongs_to :cce_grade_set
+ has_and_belongs_to_many :courses
validates_presence_of :name
validates_presence_of :header_name
validates_presence_of :observation_kind #,:max_marks
- def validate
- errors.add_to_base("CCE grade set can't be blank") if self.cce_grade_set_id.blank?
- errors.add_to_base("Description can't be blank") if self.desc.blank?
- end
+ validates_presence_of :cce_grade_set_id
+ validates_presence_of :desc
+
+ named_scope :active, :conditions => { :is_deleted => false }
+
+ OBSERVATION_KINDS = {
+ '0' => 'Scholastic',
+ '1' => 'Co Scholastic Activity',
+ '3' => 'Co Scholastic Area'
+ }
+
end
diff --git a/app/models/period_entry.rb b/app/models/period_entry.rb
index 0624c61a2..02001a192 100755
--- a/app/models/period_entry.rb
+++ b/app/models/period_entry.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class PeriodEntry < ActiveRecord::Base
belongs_to :batch
belongs_to :class_timing
diff --git a/app/models/previous_exam_score.rb b/app/models/previous_exam_score.rb
index b17693c83..fdb27cbae 100644
--- a/app/models/previous_exam_score.rb
+++ b/app/models/previous_exam_score.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class PreviousExamScore < ActiveRecord::Base
belongs_to :student
belongs_to :exam
diff --git a/app/models/privilege.rb b/app/models/privilege.rb
index 1b4e766e4..abaaec619 100755
--- a/app/models/privilege.rb
+++ b/app/models/privilege.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Privilege < ActiveRecord::Base
has_and_belongs_to_many :users
belongs_to :privilege_tag
diff --git a/app/models/ranking_level.rb b/app/models/ranking_level.rb
index b1588cca1..51fcdfb21 100644
--- a/app/models/ranking_level.rb
+++ b/app/models/ranking_level.rb
@@ -1,35 +1,35 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class RankingLevel < ActiveRecord::Base
- validates_presence_of :name
- validates_numericality_of :gpa,:if=>:has_gpa
- validates_numericality_of :marks, :if=>:has_cwa
- validates_numericality_of :subject_count, :allow_nil=>true
+ validates_presence_of :name
+ validates_numericality_of :gpa, :if => :has_gpa?
+ validates_numericality_of :marks, :if => :has_cwa?
+ validates_numericality_of :subject_count, :allow_nil => true
belongs_to :course
LIMIT_TYPES = %w(upper lower exact)
- def has_gpa
- self.course.gpa_enabled?
+ def has_gpa?
+ course && course.gpa_enabled?
end
- def has_cwa
- self.course.cwa_enabled? or self.course.normal_enabled?
+ def has_cwa?
+ course && (course.cwa_enabled? || course.normal_enabled?)
end
end
diff --git a/app/models/reminder.rb b/app/models/reminder.rb
index a7500b8bf..f93d90a6d 100755
--- a/app/models/reminder.rb
+++ b/app/models/reminder.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Reminder < ActiveRecord::Base
validates_presence_of :body
- belongs_to :user , :foreign_key => 'sender'
- belongs_to :to_user, :class_name=>"User",:foreign_key => 'recipient'
+ belongs_to :user, :foreign_key => 'sender'
+ belongs_to :to_user, :class_name => 'User', :foreign_key => 'recipient'
cattr_reader :per_page
@@per_page = 12
diff --git a/app/models/school.rb b/app/models/school.rb
new file mode 100644
index 000000000..07b90d4b1
--- /dev/null
+++ b/app/models/school.rb
@@ -0,0 +1,4 @@
+class School < ActiveRecord::Base
+ has_one :school_details
+ has_one :additional_field_option
+end
diff --git a/app/models/school_detail.rb b/app/models/school_detail.rb
index da1369bcd..8c8163d6c 100644
--- a/app/models/school_detail.rb
+++ b/app/models/school_detail.rb
@@ -1,21 +1,23 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SchoolDetail < ActiveRecord::Base
+ belongs_to :school
+
has_attached_file :logo,
:styles => { :original=> "150x110#"},
:url => "/system/:class/:attachment/:id_partition/:style/:basename.:extension",
diff --git a/app/models/sms_log.rb b/app/models/sms_log.rb
index 41864089f..f0dd57ef7 100644
--- a/app/models/sms_log.rb
+++ b/app/models/sms_log.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SmsLog < ActiveRecord::Base
belongs_to :sms_message
diff --git a/app/models/sms_message.rb b/app/models/sms_message.rb
index 8393169f7..6d93181ab 100644
--- a/app/models/sms_message.rb
+++ b/app/models/sms_message.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SmsMessage < ActiveRecord::Base
has_many :sms_logs
diff --git a/app/models/sms_setting.rb b/app/models/sms_setting.rb
index ab6e6b5f7..b64d2b929 100755
--- a/app/models/sms_setting.rb
+++ b/app/models/sms_setting.rb
@@ -1,61 +1,52 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SmsSetting < ActiveRecord::Base
def application_sms_active
- application_sms = SmsSetting.find_by_settings_key("ApplicationEnabled")
- return true if application_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("ApplicationEnabled", true)
end
def student_sms_active
- student_sms = SmsSetting.find_by_settings_key("StudentSmsEnabled")
- return true if student_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("StudentSmsEnabled", true)
end
def student_admission_sms_active
- student_sms = SmsSetting.find_by_settings_key("StudentAdmissionEnabled")
- return true if student_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("StudentAdmissionEnabled", true)
end
def parent_sms_active
- parent_sms = SmsSetting.find_by_settings_key("ParentSmsEnabled")
- return true if parent_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("ParentSmsEnabled", true)
end
def employee_sms_active
- employee_sms = SmsSetting.find_by_settings_key("EmployeeSmsEnabled")
- return true if employee_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("EmployeeSmsEnabled", true)
end
def attendance_sms_active
- attendance_sms = SmsSetting.find_by_settings_key("AttendanceEnabled")
- return true if attendance_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("AttendanceEnabled", true)
end
def event_news_sms_active
- event_news_sms = SmsSetting.find_by_settings_key("NewsEventsEnabled")
- return true if event_news_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("NewsEventsEnabled", true)
end
def exam_result_schedule_sms_active
- result_schedule_sms = SmsSetting.find_by_settings_key("ExamScheduleResultEnabled")
- return true if result_schedule_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("ExamScheduleResultEnabled", true)
end
def self.get_sms_config
@@ -66,7 +57,6 @@ def self.get_sms_config
end
def self.application_sms_status
- application_sms = SmsSetting.find_by_settings_key("ApplicationEnabled")
- return true if application_sms and application_sms.is_enabled
+ !!SmsSetting.find_by_settings_key_and_is_enabled("ApplicationEnabled", true)
end
end
diff --git a/app/models/student.rb b/app/models/student.rb
index 8cce394aa..0a5b93d60 100755
--- a/app/models/student.rb
+++ b/app/models/student.rb
@@ -1,25 +1,24 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Student < ActiveRecord::Base
include CceReportMod
-
+
belongs_to :country
belongs_to :batch
belongs_to :student_category
@@ -29,7 +28,7 @@ class Student < ActiveRecord::Base
has_one :immediate_contact
has_one :student_previous_data
has_many :student_previous_subject_mark
- has_many :guardians, :foreign_key => 'ward_id'
+ has_many :guardians, :foreign_key => 'ward_id', :dependent => :destroy
has_many :finance_transactions, :as => :payee
has_many :attendances
has_many :finance_fees
@@ -44,25 +43,20 @@ class Student < ActiveRecord::Base
has_many :assessment_scores
has_many :exam_scores
has_many :previous_exam_scores
-
-
- named_scope :active, :conditions => { :is_active => true }
- named_scope :with_full_name_only, :select=>"id, CONCAT_WS('',first_name,' ',last_name) AS name,first_name,last_name", :order=>:first_name
- named_scope :with_name_admission_no_only, :select=>"id, CONCAT_WS('',first_name,' ',last_name,' - ',admission_no) AS name,first_name,last_name,admission_no", :order=>:first_name
-
- named_scope :by_first_name, :order=>'first_name',:conditions => { :is_active => true }
validates_presence_of :admission_no, :admission_date, :first_name, :batch_id, :date_of_birth
validates_uniqueness_of :admission_no
validates_presence_of :gender
- validates_format_of :email, :with => /^[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i, :allow_blank=>true,
+ validates_inclusion_of :gender, :in => %w( m f M F ), :message => "#{t('model_errors.student.error2')}."
+ validates_format_of :email, :with => /\A[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}\z/i, :allow_blank=>true,
:message => "#{t('must_be_a_valid_email_address')}"
- validates_format_of :admission_no, :with => /^[A-Z0-9_-]*$/i,
+ validates_format_of :admission_no, :with => /\A[A-Z0-9_-]*\z/i,
:message => "#{t('must_contain_only_letters')}"
+ validate :date_of_birth_must_not_be_future, :check_admission_no
validates_associated :user
- before_validation :create_user_and_validate
+ before_validation :create_user_and_validate
before_save :is_active_true
has_attached_file :photo,
@@ -76,54 +70,11 @@ class Student < ActiveRecord::Base
:message=>'Image can only be GIF, PNG, JPG',:if=> Proc.new { |p| !p.photo_file_name.blank? }
validates_attachment_size :photo, :less_than => 512000,\
:message=>'must be less than 500 KB.',:if=> Proc.new { |p| p.photo_file_name_changed? }
-
- def validate
- errors.add(:date_of_birth, "#{t('cant_be_a_future_date')}.") if self.date_of_birth >= Date.today \
- unless self.date_of_birth.nil?
- errors.add(:gender, "#{t('model_errors.student.error2')}.") unless ['m', 'f'].include? self.gender.downcase \
- unless self.gender.nil?
- errors.add(:admission_no, "#{t('model_errors.student.error3')}.") if self.admission_no=='0'
- errors.add(:admission_no, "#{t('should_not_be_admin')}") if self.admission_no.to_s.downcase== 'admin'
-
- end
-
- def is_active_true
- unless self.is_active==1
- self.is_active=1
- end
- end
-
- def create_user_and_validate
- if self.new_record?
- user_record = self.build_user
- user_record.first_name = self.first_name
- user_record.last_name = self.last_name
- user_record.username = self.admission_no.to_s
- user_record.password = self.admission_no.to_s + "123"
- user_record.role = 'Student'
- user_record.email = self.email.blank? ? "" : self.email.to_s
- check_user_errors(user_record)
- return false unless errors.blank?
- else
- self.user.role = "Student"
- changes_to_be_checked = ['admission_no','first_name','last_name','email','immediate_contact_id']
- check_changes = self.changed & changes_to_be_checked
- unless check_changes.blank?
- self.user.username = self.admission_no if check_changes.include?('admission_no')
- self.user.first_name = self.first_name if check_changes.include?('first_name')
- self.user.last_name = self.last_name if check_changes.include?('last_name')
- self.user.email = self.email if check_changes.include?('email')
- check_user_errors(self.user)
- end
- if check_changes.include?('immediate_contact_id') or check_changes.include?('admission_no')
- Guardian.shift_user(self)
- end
-
- end
- self.email = "" if self.email.blank?
- return false unless errors.blank?
- end
+ named_scope :active, :conditions => { :is_active => true }
+ named_scope :with_full_name_only, :select => "id, CONCAT_WS('', first_name, ' ', last_name) AS name, first_name, last_name", :order => :first_name
+ named_scope :with_name_admission_no_only, :select => "id, CONCAT_WS('', first_name, ' ', last_name, ' - ', admission_no) AS name, first_name, last_name, admission_no", :order => :first_name
+ named_scope :by_first_name, :order => 'first_name', :conditions => { :is_active => true }
def check_user_errors(user)
unless user.valid?
@@ -141,9 +92,11 @@ def full_name
end
def gender_as_text
- return 'Male' if gender.downcase == 'm'
- return 'Female' if gender.downcase == 'f'
- nil
+ case gender.downcase
+ when 'm' then 'Male'
+ when 'f' then 'Female'
+ else nil
+ end
end
def graduated_batches
@@ -151,7 +104,7 @@ def graduated_batches
end
def all_batches
- self.graduated_batches + self.batch.to_a
+ self.graduated_batches << self.batch
end
def immediate_contact
@@ -166,29 +119,28 @@ def image_file=(input_data)
end
def next_student
- next_st = self.batch.students.first(:conditions => "id > #{self.id}", :order => "id ASC")
- next_st ||= batch.students.first(:order => "id ASC")
+ next_st = self.batch.students.first(:conditions => ["id > ?", self.id], :order => "id ASC")
+ next_st ||= self.batch.students.first(:order => "id ASC")
end
def previous_student
- prev_st = self.batch.students.first(:conditions => "id < #{self.id}", :order => "admission_no DESC")
- prev_st ||= batch.students.first(:order => "id DESC")
+ prev_st = self.batch.students.first(:conditions => ["id < ?", self.id], :order => "admission_no DESC")
prev_st ||= self.batch.students.first(:order => "id DESC")
end
def previous_fee_student(date)
- fee = FinanceFee.first(:conditions => "student_id < #{self.id} and fee_collection_id = #{date}", :joins=>'INNER JOIN students ON finance_fees.student_id = students.id',:order => "student_id DESC")
- prev_st = fee.student unless fee.blank?
- fee ||= FinanceFee.first(:conditions=>"fee_collection_id = #{date}", :joins=>'INNER JOIN students ON finance_fees.student_id = students.id',:order => "student_id DESC")
- prev_st ||= fee.student unless fee.blank?
+ fee = FinanceFee.first(:conditions => ["student_id < ? AND fee_collection_id = ?", self.id, date], :joins => 'INNER JOIN students ON finance_fees.student_id = students.id', :order => "student_id DESC")
+ prev_st = fee.student if fee.present?
+ fee ||= FinanceFee.find_by_fee_collection_id(date, :joins => 'INNER JOIN students ON finance_fees.student_id = students.id', :order => "student_id DESC")
+ prev_st ||= fee.student if fee.present?
# prev_st ||= self.batch.students.first(:order => "id DESC")
end
def next_fee_student(date)
- fee = FinanceFee.first(:conditions => "student_id > #{self.id} and fee_collection_id = #{date}", :joins=>'INNER JOIN students ON finance_fees.student_id = students.id', :order => "student_id ASC")
+ fee = FinanceFee.first(:conditions => ["student_id > ? AND fee_collection_id = ?", self.id, date], :joins => 'INNER JOIN students ON finance_fees.student_id = students.id', :order => "student_id ASC")
next_st = fee.student unless fee.nil?
- fee ||= FinanceFee.first(:conditions=>"fee_collection_id = #{date}", :joins=>'INNER JOIN students ON finance_fees.student_id = students.id',:order => "student_id ASC")
+ fee ||= FinanceFee.find_by_fee_collection_id(date, :joins => 'INNER JOIN students ON finance_fees.student_id = students.id', :order => "student_id ASC")
next_st ||= fee.student unless fee.nil?
# prev_st ||= self.batch.students.first(:order => "id DESC")
end
@@ -199,21 +151,21 @@ def finance_fee_by_date(date)
def check_fees_paid(date)
particulars = date.fees_particulars(self)
- total_fees=0
+ total_fees = 0
financefee = date.fee_transactions(self.id)
batch_discounts = BatchFeeCollectionDiscount.find_all_by_finance_fee_collection_id(date.id)
- student_discounts = StudentFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(date.id,self.id)
- category_discounts = StudentCategoryFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(date.id,self.student_category_id)
+ student_discounts = StudentFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(date.id, self.id)
+ category_discounts = StudentCategoryFeeCollectionDiscount.find_all_by_finance_fee_collection_id_and_receiver_id(date.id, self.student_category_id)
total_discount = 0
- total_discount += batch_discounts.map{|s| s.discount}.sum unless batch_discounts.nil?
- total_discount += student_discounts.map{|s| s.discount}.sum unless student_discounts.nil?
- total_discount += category_discounts.map{|s| s.discount}.sum unless category_discounts.nil?
+ total_discount += batch_discounts.map{ |s| s.discount }.sum if batch_discounts.present?
+ total_discount += student_discounts.map{ |s| s.discount }.sum if student_discounts.present?
+ total_discount += category_discounts.map{ |s| s.discount }.sum if category_discounts.present?
if total_discount > 100
total_discount = 100
end
particulars.map { |s| total_fees += s.amount.to_f}
- total_fees -= total_fees*(total_discount/100)
- paid_fees_transactions = FinanceTransaction.find(:all,:select=>'amount,fine_amount',:conditions=>"FIND_IN_SET(id,\"#{financefee.transaction_id}\")") unless financefee.nil?
+ total_fees -= total_fees * (total_discount / 100)
+ paid_fees_transactions = FinanceTransaction.find(:all,:select=>'amount, fine_amount', :conditions => ["FIND_IN_SET(id, ?)", financefee.transaction_id]) unless financefee.nil?
paid_fees = 0
paid_fees_transactions.map { |m| paid_fees += (m.amount.to_f - m.fine_amount.to_f) } unless paid_fees_transactions.nil?
amount_pending = total_fees.to_f - paid_fees.to_f
@@ -231,51 +183,41 @@ def check_fees_paid(date)
# end
end
- def has_retaken_exam(subject_id)
+ def has_retaken_exam?(subject_id)
retaken_exams = PreviousExamScore.find_all_by_student_id(self.id)
- if retaken_exams.empty?
- return false
- else
+ if retaken_exams.any?
exams = Exam.find_all_by_id(retaken_exams.collect(&:exam_id))
if exams.collect(&:subject_id).include?(subject_id)
return true
end
- return false
end
-
end
def check_fee_pay(date)
- date.finance_fees.first(:conditions=>"student_id = #{self.id}").is_paid
+ date.finance_fees.first(:conditions => ["student_id = ?", self.id]).is_paid
end
def self.next_admission_no
'' #stub for logic to be added later.
end
-
+
def get_fee_strucure_elements(date)
- elements = FinanceFeeStructureElement.get_student_fee_components(self,date)
+ elements = FinanceFeeStructureElement.get_student_fee_components(self, date)
elements[:all] + elements[:by_batch] + elements[:by_category] + elements[:by_batch_and_category]
end
def total_fees(particulars)
- total = 0
- particulars.each do |fee|
- total += fee.amount
- end
- total
+ particulars.inject(0) { |total, fee| total + fee.amount }
end
def has_associated_fee_particular?(fee_category)
- status = false
- status = true if fee_category.fee_particulars.find_all_by_admission_no(admission_no).count > 0
- status = true if student_category_id.present? and fee_category.fee_particulars.find_all_by_student_category_id(student_category_id).count > 0
- return status
+ fee_category.fee_particulars.find_all_by_admission_no(admission_no).count > 0 \
+ || student_category_id.present? && fee_category.fee_particulars.find_all_by_student_category_id(student_category_id).count > 0
end
def archive_student(status)
student_attributes = self.attributes
- student_attributes["former_id"]= self.id
+ student_attributes["former_id"] = self.id
student_attributes["status_description"] = status
student_attributes.delete "id"
student_attributes.delete "has_paid_fees"
@@ -301,157 +243,103 @@ def archive_student(status)
# end
#
end
-
+
end
-
+
def check_dependency
- return true if self.finance_transactions.present? or self.graduated_batches.present? or self.attendances.present? or self.finance_fees.present?
- return true if FedenaPlugin.check_dependency(self,"permanant").present?
- return false
+ self.finance_transactions.present? || self.graduated_batches.present? || self.attendances.present? || self.finance_fees.present? || FedenaPlugin.check_dependency(self,"permanant").present?
end
def former_dependency
plugin_dependencies = FedenaPlugin.check_dependency(self,"former")
end
- def assessment_score_for(indicator_id,exam_id,batch_id)
- assessment_score = self.assessment_scores.find(:first, :conditions => { :student_id => self.id,:descriptive_indicator_id=>indicator_id,:exam_id=>exam_id,:batch_id=>batch_id })
- assessment_score.nil? ? assessment_scores.build(:descriptive_indicator_id=>indicator_id,:exam_id=>exam_id,:batch_id=>batch_id) : assessment_score
+ def assessment_score_for(indicator_id, exam_id, batch_id)
+ self.assessment_scores.find_by_student_id_and_descriptive_indicator_id_and_exam_id_and_batch_id(self.id, indicator_id, exam_id, batch_id) \
+ || assessment_scores.build(:descriptive_indicator_id => indicator_id, :exam_id => exam_id, :batch_id => batch_id)
end
- def observation_score_for(indicator_id,batch_id)
- assessment_score = self.assessment_scores.find(:first, :conditions => { :student_id => self.id,:descriptive_indicator_id=>indicator_id,:batch_id=>batch_id })
- assessment_score.nil? ? assessment_scores.build(:descriptive_indicator_id=>indicator_id,:batch_id=>batch_id) : assessment_score
+
+ def observation_score_for(indicator_id, batch_id)
+ self.assessment_scores.find_by_student_id_and_descriptive_indicator_id_and_batch_id(self.id, indicator_id, batch_id) \
+ || assessment_scores.build(:descriptive_indicator_id => indicator_id, :batch_id => batch_id)
end
- def has_higher_priority_ranking_level(ranking_level_id,type,subject_id)
+ def has_higher_priority_ranking_level(ranking_level_id, type, subject_id)
ranking_level = RankingLevel.find(ranking_level_id)
- higher_levels = RankingLevel.find(:all,:conditions=>["course_id = ? AND priority < ?", ranking_level.course_id,ranking_level.priority])
+ higher_levels = RankingLevel.find(:all, :conditions=>["course_id = ? AND priority < ?", ranking_level.course_id, ranking_level.priority])
if higher_levels.empty?
return false
else
higher_levels.each do|level|
- if type=="subject"
+ if type == "subject"
score = GroupedExamReport.find_by_student_id_and_subject_id_and_batch_id_and_score_type(self.id,subject_id,self.batch_id,"s")
- unless score.nil?
- if self.batch.gpa_enabled?
- return true if((score.marks < level.gpa if level.marks_limit_type=="upper") or (score.marks >= level.gpa if level.marks_limit_type=="lower") or (score.marks == level.gpa if level.marks_limit_type=="exact"))
- else
- return true if((score.marks < level.marks if level.marks_limit_type=="upper") or (score.marks >= level.marks if level.marks_limit_type=="lower") or (score.marks == level.marks if level.marks_limit_type=="exact"))
- end
- end
- elsif type=="overall"
- unless level.subject_count.nil?
- unless level.full_course==true
+ return true if score.present? && check_score_marks(score.marks, level)
+
+ elsif type == "overall"
+ if level.subject_count.present?
+ if level.full_course == false
subjects = self.batch.subjects
- scores = GroupedExamReport.find(:all,:conditions=>{:student_id=>self.id,:batch_id=>self.batch.id,:subject_id=>subjects.collect(&:id),:score_type=>"s"})
+ scores = GroupedExamReport.find_all_by_student_id_and_batch_id_and_subject_id_and_score_type(self.id, self.batch.id, subjects.collect(&:id), 's')
else
- scores = GroupedExamReport.find(:all,:conditions=>{:student_id=>self.id,:score_type=>"s"})
+ scores = GroupedExamReport.find_all_by_student_id_and_score_type(self.id, 's')
end
- unless scores.empty?
- if self.batch.gpa_enabled?
- scores.reject!{|s| !((s.marks < level.gpa if level.marks_limit_type=="upper") or (s.marks >= level.gpa if level.marks_limit_type=="lower") or (s.marks == level.gpa if level.marks_limit_type=="exact"))}
- else
- scores.reject!{|s| !((s.marks < level.marks if level.marks_limit_type=="upper") or (s.marks >= level.marks if level.marks_limit_type=="lower") or (s.marks == level.marks if level.marks_limit_type=="exact"))}
- end
- unless scores.empty?
- sub_count = level.subject_count
- if level.subject_limit_type=="upper"
- return true if scores.count < sub_count
- elsif level.subject_limit_type=="exact"
- return true if scores.count == sub_count
- else
- return true if scores.count >= sub_count
- end
- end
+ if scores.any?
+ scores = reject_scores(scores, level)
+ return true if scores.any? && check_scores_count_and_subject_count(level.subject_limit_type, scores.count, level.subject_count)
end
else
- unless level.full_course==true
- score = GroupedExamReport.find_by_student_id(self.id,:conditions=>{:batch_id=>self.batch.id,:score_type=>"c"})
+ if level.full_course == false
+ score = GroupedExamReport.find_by_student_id_and_batch_id_and_score_type(self.id, self.batch.id, 'c')
else
total_student_score = 0
avg_student_score = 0
- marks = GroupedExamReport.find_all_by_student_id_and_score_type(self.id,"c")
- unless marks.empty?
- marks.map{|m| total_student_score+=m.marks}
- avg_student_score = total_student_score.to_f/marks.count.to_f
+ marks = GroupedExamReport.find_all_by_student_id_and_score_type(self.id, 'c')
+ if marks.any?
+ marks.map{|m| total_student_score += m.marks}
+ avg_student_score = total_student_score.to_f / marks.count.to_f
marks.first.marks = avg_student_score
score = marks.first
end
end
- unless score.nil?
- if self.batch.gpa_enabled?
- return true if((score.marks < level.gpa if level.marks_limit_type=="upper") or (score.marks >= level.gpa if level.marks_limit_type=="lower") or (score.marks == level.gpa if level.marks_limit_type=="exact"))
- else
- return true if((score.marks < level.marks if level.marks_limit_type=="upper") or (score.marks >= level.marks if level.marks_limit_type=="lower") or (score.marks == level.marks if level.marks_limit_type=="exact"))
- end
- end
+ return true if score.present? && check_score_marks(score.marks, level)
end
- elsif type=="course"
- unless level.subject_count.nil?
- scores = GroupedExamReport.find(:all,:conditions=>{:student_id=>self.id,:score_type=>"s"})
- unless scores.empty?
- if level.marks_limit_type=="upper"
- scores.reject!{|s| !(((s.marks < level.gpa unless level.gpa.nil?) if s.student.batch.gpa_enabled?) or (s.marks < level.marks unless level.marks.nil?))}
- elsif level.marks_limit_type=="exact"
- scores.reject!{|s| !(((s.marks == level.gpa unless level.gpa.nil?) if s.student.batch.gpa_enabled?) or (s.marks == level.marks unless level.marks.nil?))}
- else
- scores.reject!{|s| !(((s.marks >= level.gpa unless level.gpa.nil?) if s.student.batch.gpa_enabled?) or (s.marks >= level.marks unless level.marks.nil?))}
- end
- unless scores.empty?
- sub_count = level.subject_count
- unless level.full_course==true
+ elsif type == "course"
+ if level.subject_count.present?
+ scores = GroupedExamReport.find_all_by_student_id_and_score_type(self.id, 's')
+
+ if scores.any?
+ scores = reject_scores(scores, level)
+
+ if scores.any?
+ if level.full_course == false
batch_ids = scores.collect(&:batch_id)
batch_ids.each do|batch_id|
- unless batch_ids.empty?
+ if batch_ids.any?
count = batch_ids.count(batch_id)
- if level.subject_limit_type=="upper"
- return true if count < sub_count
- elsif level.subject_limit_type=="exact"
- return true if count == sub_count
- else
- return true if count >= sub_count
- end
+ return true if check_scores_count_and_subject_count(level.subject_limit_type, count, level.subject_count)
batch_ids.delete(batch_id)
end
end
else
- if level.subject_limit_type=="upper"
- return true if scores.count < sub_count
- elsif level.subject_limit_type=="exact"
- return true if scores.count == sub_count
- else
- return true if scores.count >= sub_count
- end
+ return true if check_scores_count_and_subject_count(level.subject_limit_type, scores.count, level.subject_count)
end
end
end
else
- unless level.full_course==true
- scores = GroupedExamReport.find(:all,:conditions=>{:student_id=>self.id,:score_type=>"c"})
- unless scores.empty?
- if level.marks_limit_type=="upper"
- scores.reject!{|s| !(((s.marks < level.gpa unless level.gpa.nil?) if s.student.batch.gpa_enabled?) or (s.marks < level.marks unless level.marks.nil?))}
- elsif level.marks_limit_type=="exact"
- scores.reject!{|s| !(((s.marks == level.gpa unless level.gpa.nil?) if s.student.batch.gpa_enabled?) or (s.marks == level.marks unless level.marks.nil?))}
- else
- scores.reject!{|s| !(((s.marks >= level.gpa unless level.gpa.nil?) if s.student.batch.gpa_enabled?) or (s.marks >= level.marks unless level.marks.nil?))}
- end
- return true unless scores.empty?
+ if level.full_course == false
+ scores = GroupedExamReport.find_all_by_student_id_and_score_type(self.id, 'c')
+ if scores.any?
+ scores = reject_scores(scores, level)
+ return true if scores.any?
end
else
total_student_score = 0
avg_student_score = 0
- marks = GroupedExamReport.find_all_by_student_id_and_score_type(self.id,"c")
- unless marks.empty?
- marks.map{|m| total_student_score+=m.marks}
- avg_student_score = total_student_score.to_f/marks.count.to_f
- if level.marks_limit_type=="upper"
- return true if(((avg_student_score < level.gpa unless level.gpa.nil?) if self.batch.gpa_enabled?) or (avg_student_score < level.marks unless level.marks.nil?))
- elsif level.marks_limit_type=="exact"
- return true if(((avg_student_score == level.gpa unless level.gpa.nil?) if self.batch.gpa_enabled?) or (avg_student_score == level.marks unless level.marks.nil?))
- else
- return true if(((avg_student_score >= level.gpa unless level.gpa.nil?) if self.batch.gpa_enabled?) or (avg_student_score >= level.marks unless level.marks.nil?))
- end
+ marks = GroupedExamReport.find_all_by_student_id_and_score_type(self.id, 'c')
+ if marks.any?
+ marks.map{|m| total_student_score += m.marks}
+ avg_student_score = total_student_score.to_f / marks.count.to_f
+ return true if check_score_marks(avg_student_score, level)
end
end
end
@@ -461,5 +349,68 @@ def has_higher_priority_ranking_level(ranking_level_id,type,subject_id)
return false
end
-
+ private
+
+ def date_of_birth_must_not_be_future
+ errors.add(:date_of_birth, "#{t('cant_be_a_future_date')}.") if self.date_of_birth.present? && self.date_of_birth >= Date.current
+ end
+
+ def check_admission_no
+ errors.add(:admission_no, "#{t('model_errors.student.error3')}.") if self.admission_no == '0'
+ errors.add(:admission_no, "#{t('should_not_be_admin')}") if self.admission_no.to_s.downcase == 'admin'
+ end
+
+ def is_active_true
+ self.is_active = true if self.is_active == false
+ end
+
+ def create_user_and_validate
+ if self.new_record?
+ user_record = self.build_user
+ user_record.first_name = self.first_name
+ user_record.last_name = self.last_name
+ user_record.username = self.admission_no.to_s
+ user_record.password = self.admission_no.to_s + "123"
+ user_record.role = 'Student'
+ user_record.email = self.email.blank? ? "" : self.email.to_s
+ check_user_errors(user_record)
+ else
+ self.user.role = "Student"
+ changes_to_be_checked = ['admission_no','first_name','last_name','email','immediate_contact_id']
+ check_changes = self.changed & changes_to_be_checked
+ if check_changes.any?
+ self.user.username = self.admission_no if check_changes.include?('admission_no')
+ self.user.first_name = self.first_name if check_changes.include?('first_name')
+ self.user.last_name = self.last_name if check_changes.include?('last_name')
+ self.user.email = self.email if check_changes.include?('email')
+ check_user_errors(self.user)
+ if check_changes.include?('immediate_contact_id') || check_changes.include?('admission_no')
+ Guardian.shift_user(self)
+ end
+ end
+ end
+ self.email = "" if self.email.blank?
+ return false unless errors.blank?
+ end
+
+ def check_score_marks(score_marks, level)
+ if self.batch.gpa_enabled?
+ return true if (score_marks < level.gpa && level.marks_limit_type == 'upper') || (score_marks >= level.gpa && level.marks_limit_type == 'lower') || (score_marks == level.gpa && level.marks_limit_type == 'exact')
+ else
+ return true if (score_marks < level.marks && level.marks_limit_type == 'upper') || (score_marks >= level.marks && level.marks_limit_type == 'lower') || (score_marks == level.marks && level.marks_limit_type == 'exact')
+ end
+ end
+
+ def reject_scores(scores, level)
+ if self.batch.gpa_enabled?
+ scores.reject{ |s| !((s.marks < level.gpa && level.marks_limit_type == 'upper') || (s.marks >= level.gpa && level.marks_limit_type == 'lower') || (s.marks == level.gpa && level.marks_limit_type == 'exact')) }
+ else
+ scores.reject{ |s| !((s.marks < level.marks && level.marks_limit_type == 'upper') || (s.marks >= level.marks && level.marks_limit_type == 'lower') || (s.marks == level.marks && level.marks_limit_type == 'exact')) }
+ end
+ end
+
+ def check_scores_count_and_subject_count(subject_limit_type, scores_count, subject_count)
+ return true if (scores_count < subject_count && subject_limit_type == 'upper') || (scores_count >= subject_count && subject_limit_type == 'lower') || (scores_count == subject_count && subject_limit_type == 'exact')
+ end
+
end
diff --git a/app/models/student_additional_detail.rb b/app/models/student_additional_detail.rb
index 4537d46b5..bf30a2abd 100755
--- a/app/models/student_additional_detail.rb
+++ b/app/models/student_additional_detail.rb
@@ -1,48 +1,38 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentAdditionalDetail < ActiveRecord::Base
belongs_to :student
belongs_to :student_additional_field, :foreign_key=>'additional_field_id'
- #validates_presence_of :additional_info
+ validates_presence_of :additional_info, :if => :student_additional_field_is_mandatory?
+ before_validation :destroy_when_additional_info_blank
def save
- unless self.destroyed?
- super
- end
+ super unless self.destroyed?
true
end
- def validate
- if self.student_additional_field.is_mandatory == true
- if self.additional_info.blank?
- errors.add("additional_info","can't be blank")
- return false
- else
- return true
- end
- else
- if self.additional_info.blank?
- self.destroy
- return true
- else
- return true
- end
- end
+ def student_additional_field_is_mandatory?
+ student_additional_field && student_additional_field.is_mandatory?
+ end
+
+ private
+
+ def destroy_when_additional_info_blank
+ self.destroy if self.additional_info.blank? || !student_additional_field_is_mandatory?
end
end
diff --git a/app/models/student_additional_field.rb b/app/models/student_additional_field.rb
index 55461b6e9..d98fddcb7 100755
--- a/app/models/student_additional_field.rb
+++ b/app/models/student_additional_field.rb
@@ -1,28 +1,28 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentAdditionalField < ActiveRecord::Base
belongs_to :student
belongs_to :student_additional_detail
- has_many :student_additional_field_options, :dependent=>:destroy
- validates_presence_of :name
- validates_uniqueness_of :name,:case_sensitive => false
- validates_format_of :name, :with => /^[^~`@%$*()\-\[\]{}"':;\/.,\\=+|]*$/i,
+ has_many :student_additional_field_options, :dependent => :destroy
+
+ validates_presence_of :name
+ validates_uniqueness_of :name, :case_sensitive => false
+ validates_format_of :name, :with => /\A[^~`@%$*()\-\[\]{}"':;\/.,\\=+|]*\z/i,
:message => "#{t('must_contain_only_letters_numbers_space')}"
- accepts_nested_attributes_for :student_additional_field_options, :allow_destroy=>true
+ accepts_nested_attributes_for :student_additional_field_options, :allow_destroy => true
end
diff --git a/app/models/student_additional_field_option.rb b/app/models/student_additional_field_option.rb
index 205baa6ef..d91c5db67 100644
--- a/app/models/student_additional_field_option.rb
+++ b/app/models/student_additional_field_option.rb
@@ -1,6 +1,3 @@
class StudentAdditionalFieldOption < ActiveRecord::Base
-
belongs_to :student_additional_field
-
-
end
diff --git a/app/models/student_category.rb b/app/models/student_category.rb
index f075edf62..ed7bffb7a 100755
--- a/app/models/student_category.rb
+++ b/app/models/student_category.rb
@@ -1,36 +1,34 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentCategory < ActiveRecord::Base
has_many :students
has_many :fee_category ,:class_name =>"FinanceFeeCategory"
before_destroy :check_dependence
validates_presence_of :name
- validates_uniqueness_of :name, :scope=>:is_deleted,:case_sensitive => false, :if=> 'is_deleted == false'
+ validates_uniqueness_of :name, :scope => :is_deleted,:case_sensitive => false, :if => 'is_deleted == false'
named_scope :active, :conditions => { :is_deleted => false}
def empty_students
Student.find_all_by_student_category_id(self.id).each do |s|
- s.update_attributes(:student_category_id=>nil)
+ s.update_attributes(:student_category_id => nil)
end
-
end
def check_dependence
@@ -38,6 +36,5 @@ def check_dependence
errors.add_to_base( "#{t('category_is_in_use')}")
return false
end
-
end
end
diff --git a/app/models/student_previous_data.rb b/app/models/student_previous_data.rb
index 4ca27398b..983650ce5 100755
--- a/app/models/student_previous_data.rb
+++ b/app/models/student_previous_data.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentPreviousData < ActiveRecord::Base
belongs_to :student
validates_presence_of :institution
diff --git a/app/models/student_previous_subject_mark.rb b/app/models/student_previous_subject_mark.rb
index ed644b062..2b581d6a4 100755
--- a/app/models/student_previous_subject_mark.rb
+++ b/app/models/student_previous_subject_mark.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentPreviousSubjectMark < ActiveRecord::Base
belongs_to :student
validates_presence_of :subject, :mark
diff --git a/app/models/students_subject.rb b/app/models/students_subject.rb
index 2619a510c..862d30fbb 100755
--- a/app/models/students_subject.rb
+++ b/app/models/students_subject.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class StudentsSubject < ActiveRecord::Base
belongs_to :student
belongs_to :subject
diff --git a/app/models/subject.rb b/app/models/subject.rb
index 3d6bb480b..e8544c42b 100755
--- a/app/models/subject.rb
+++ b/app/models/subject.rb
@@ -1,63 +1,56 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Subject < ActiveRecord::Base
-
belongs_to :batch
belongs_to :elective_group
- has_many :timetable_entries,:foreign_key=>'subject_id'
+ has_many :timetable_entries, :foreign_key => 'subject_id'
has_many :employees_subjects
- has_many :employees ,:through => :employees_subjects
has_many :students_subjects
- has_many :students, :through => :students_subjects
+ has_many :employees, :through => :employees_subjects
+ has_many :students, :through => :students_subjects
has_many :grouped_exam_reports
has_and_belongs_to_many_with_deferred_save :fa_groups
- validates_presence_of :name, :max_weekly_classes, :code,:batch_id
- validates_presence_of :credit_hours, :if=>:check_grade_type
+ validates_presence_of :name, :max_weekly_classes, :code, :batch_id
+ validates_presence_of :credit_hours, :if => :check_grade_type
validates_numericality_of :max_weekly_classes
- validates_numericality_of :amount,:allow_nil => true
- validates_uniqueness_of :code, :case_sensitive => false, :scope=>[:batch_id,:is_deleted] ,:if=> 'is_deleted == false'
+ validates_numericality_of :amount, :allow_nil => true
+ validates_uniqueness_of :code, :case_sensitive => false, :scope => [:batch_id, :is_deleted] , :if => lambda { |s| !s.is_deleted? }
named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i, :is_deleted => false } } }
named_scope :without_exams, :conditions => { :no_exams => false, :is_deleted => false }
named_scope :active, :conditions => { :is_deleted => false }
+ named_scope :not_in_exam_group, lambda { |exam_group| { :conditions => ['id NOT IN (?)', exam_group.exams.map(&:subject_id)] } }
- before_save :fa_group_valid
+ validate :fa_group_valid
def check_grade_type
- unless self.batch.nil?
- batch = self.batch
- batch.gpa_enabled? or batch.cwa_enabled?
- else
- return false
- end
+ batch && (batch.gpa_enabled? || batch.cwa_enabled?)
end
def inactivate
- update_attributes(:is_deleted=>true)
- self.employees_subjects.destroy_all
+ update_attributes(:is_deleted => true)
+ employees_subjects.destroy_all
end
def lower_day_grade
- subjects = Subject.find_all_by_elective_group_id(self.elective_group_id) unless self.elective_group_id.nil?
+ subjects = Subject.find_all_by_elective_group_id(self.elective_group_id) if elective_group
selected_employee = nil
subjects.each do |subject|
- employees = subject.employees
- employees.each do |employee|
+ subject.employees.each do |employee|
if selected_employee.nil?
selected_employee = employee
else
@@ -65,48 +58,45 @@ def lower_day_grade
end
end
end
- return selected_employee
+
+ selected_employee
end
def lower_week_grade
- subjects = Subject.find_all_by_elective_group_id(self.elective_group_id) unless self.elective_group_id.nil?
+ subjects = Subject.find_all_by_elective_group_id(self.elective_group_id) if elective_group
selected_employee = nil
subjects.each do |subject|
- employees = subject.employees
- employees.each do |employee|
+ subject.employees.each do |employee|
if selected_employee.nil?
selected_employee = employee
else
- selected_employee = employee if employee.max_hours_per_week.to_i < selected_employee.max_hours_per_week.to_i
+ selected_employee = employee if employee.max_hours_per_week.to_i < selected_employee.max_hours_per_week.to_i
end
end
end
- return selected_employee
+
+ selected_employee
end
def no_exam_for_batch(batch_id)
- grouped_exams = GroupedExam.find_all_by_batch_id(batch_id).collect(&:exam_group_id)
- return exam_not_created(grouped_exams)
+ exam_group_ids = GroupedExam.find_all_by_batch_id(batch_id).collect(&:exam_group_id)
+
+ exam_not_created(exam_group_ids)
end
def exam_not_created(exam_group_ids)
- exams = Exam.find_all_by_exam_group_id_and_subject_id(exam_group_ids,self.id)
- if exams.empty?
- return true
- else
- return false
- end
+ exams = Exam.find_all_by_exam_group_id_and_subject_id(exam_group_ids, self.id)
+ exams.empty?
end
private
def fa_group_valid
fa_groups.group_by(&:cce_exam_category_id).values.each do |fg|
- if fg.length > 2
+ if fg.count > 2
errors.add(:fa_group, "cannot have more than 2 fa group under a single exam category")
- return false
end
end
end
-
+
end
diff --git a/app/models/subject_leave.rb b/app/models/subject_leave.rb
index b764fbc2e..72967d4df 100644
--- a/app/models/subject_leave.rb
+++ b/app/models/subject_leave.rb
@@ -1,27 +1,27 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class SubjectLeave < ActiveRecord::Base
belongs_to :student
belongs_to :batch
belongs_to :subject
belongs_to :employee
belongs_to :class_timing
-
+
validates_presence_of :subject_id
validates_presence_of :batch_id
validates_presence_of :student_id
@@ -30,7 +30,10 @@ class SubjectLeave < ActiveRecord::Base
named_scope :by_month_and_subject, lambda { |d,s| { :conditions => { :month_date => d.beginning_of_month..d.end_of_month , :subject_id => s} } }
named_scope :by_month_batch_subject, lambda { |d,b,s| { :conditions => { :month_date => d.beginning_of_month..d.end_of_month , :subject_id => s,:batch_id=>b} } }
validates_uniqueness_of :student_id,:scope=>[:class_timing_id,:month_date],:message=>"already marked as absent"
- def validate
- errors.add("#{t('attendance_before_the_date_of_admission')}") if self.month_date < self.student.admission_date
+ validate :check_attendance_before_the_date_of_admission
+
+ private
+ def check_attendance_before_the_date_of_admission
+ errors.add("#{t('attendance_before_the_date_of_admission')}") if self.student && self.month_date < self.student.admission_date
end
end
diff --git a/app/models/time_zone.rb b/app/models/time_zone.rb
index 1f0b9c72e..26e8c7bf0 100644
--- a/app/models/time_zone.rb
+++ b/app/models/time_zone.rb
@@ -1,19 +1,19 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class TimeZone < ActiveRecord::Base
end
diff --git a/app/models/timetable.rb b/app/models/timetable.rb
index c8287c7ef..22188dfb8 100644
--- a/app/models/timetable.rb
+++ b/app/models/timetable.rb
@@ -1,20 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Timetable < ActiveRecord::Base
has_many :timetable_entries , :dependent=>:destroy
validates_presence_of :start_date
@@ -102,11 +102,11 @@ def self.subject_tte(subject_id,date)
def self.register_range(batch,date)
start=[]
- start<:start_date,:order=>:start_date).start_date.to_date
stop=[]
- stop<:end_date,:order=>:end_date).end_date.to_date
range=(start.max..stop.min).to_a - batch.holiday_event_dates
diff --git a/app/models/timetable_entry.rb b/app/models/timetable_entry.rb
index 379751e98..bc6e485b5 100755
--- a/app/models/timetable_entry.rb
+++ b/app/models/timetable_entry.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class TimetableEntry < ActiveRecord::Base
belongs_to :timetable
belongs_to :batch
@@ -23,5 +22,5 @@ class TimetableEntry < ActiveRecord::Base
belongs_to :subject
belongs_to :employee
belongs_to :weekday
- delegate :day_of_week,:to=>:weekday
-end
\ No newline at end of file
+ delegate :day_of_week, :to => :weekday
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index c69fd506b..3aed09cf6 100755
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,52 +1,50 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class User < ActiveRecord::Base
attr_accessor :password, :role, :old_password, :new_password, :confirm_password
- validates_uniqueness_of :username, :scope=> [:is_deleted],:if=> 'is_deleted == false' #, :email
+ validates_uniqueness_of :username, :scope => [:is_deleted], :if => 'is_deleted == false'
validates_length_of :username, :within => 1..20
validates_length_of :password, :within => 4..40, :allow_nil => true
- validates_format_of :username, :with => /^[A-Z0-9_-]*$/i,
+ validates_format_of :username, :with => /\A[A-Z0-9_-]*\z/i,
:message => "#{t('must_contain_only_letters')}"
- validates_format_of :email, :with => /^[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i, :allow_blank=>true,
+ validates_format_of :email, :with => /\A[A-Z0-9._%-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}\z/i, :allow_blank => true,
:message => "#{t('must_be_a_valid_email_address')}"
- validates_presence_of :role , :on=>:create
+ validates_presence_of :role, :on => :create
validates_presence_of :password, :on => :create
has_and_belongs_to_many :privileges
has_many :user_events
- has_many :events,:through=>:user_events
- has_one :student_record,:class_name=>"Student",:foreign_key=>"user_id"
- has_one :employee_record,:class_name=>"Employee",:foreign_key=>"user_id"
+ has_many :events, :through => :user_events
+ has_one :student_record, :class_name => 'Student', :foreign_key => 'user_id'
+ has_one :employee_record, :class_name => 'Employee', :foreign_key => 'user_id'
- named_scope :active, :conditions => { :is_deleted => false }
+ named_scope :active, :conditions => { :is_deleted => false }
named_scope :inactive, :conditions => { :is_deleted => true }
def before_save
- self.salt = random_string(8) if self.salt == nil
- self.hashed_password = Digest::SHA1.hexdigest(self.salt + self.password) unless self.password.nil?
+ self.salt = random_string(8) if self.salt.blank?
+ self.hashed_password = Digest::SHA1.hexdigest(self.salt + self.password) if self.password.present?
if self.new_record?
- self.admin, self.student, self.employee = false, false, false
- self.admin = true if self.role == 'Admin'
- self.student = true if self.role == 'Student'
- self.employee = true if self.role == 'Employee'
- self.parent = true if self.role == 'Parent'
+ self.admin = self.role == 'Admin'
+ self.student = self.role == 'Student'
+ self.employee = self.role == 'Employee'
+ self.parent = self.role == 'Parent'
self.is_first_login = true
end
end
@@ -56,19 +54,11 @@ def full_name
end
def check_reminders
- reminders =[]
- reminders = Reminder.find(:all , :conditions => ["recipient = '#{self.id}'"])
- count = 0
- reminders.each do |r|
- unless r.is_read
- count += 1
- end
- end
- return count
+ Reminder.find(:all, :conditions => { :recipient => self.id, :is_read => true }).count
end
def self.authenticate?(username, password)
- u = User.find_by_username username
+ u = User.find_by_username(username)
u.hashed_password == Digest::SHA1.hexdigest(u.salt + password)
end
@@ -80,11 +70,10 @@ def random_string(len)
end
def role_name
- return "#{t('admin')}" if self.admin?
- return "#{t('student_text')}" if self.student?
+ return "#{t('admin')}" if self.admin?
+ return "#{t('student_text')}" if self.student?
return "#{t('employee_text')}" if self.employee?
- return "#{t('parent')}" if self.parent?
- return nil
+ return "#{t('parent')}" if self.parent?
end
def role_symbols
@@ -124,28 +113,28 @@ def parent_record
end
def has_subject_in_batch(b)
- employee_record.subjects.collect(&:batch_id).include? b.id
+ employee_record.subjects.collect(&:batch_id).include?(b.id)
end
def days_events(date)
- all_events=[]
+ all_events = []
case(role_name)
- when "Admin"
- all_events=Event.find(:all,:conditions => ["? between date(events.start_date) and date(events.end_date)",date])
- when "Student"
- all_events+= events.all(:conditions=>["? between date(events.start_date) and date(events.end_date)",date])
- all_events+= student_record.batch.events.all(:conditions=>["? between date(events.start_date) and date(events.end_date)",date])
- all_events+= Event.all(:conditions=>["(? between date(events.start_date) and date(events.end_date)) and is_common = true",date])
- when "Parent"
- all_events+= events.all(:conditions=>["? between date(events.start_date) and date(events.end_date)",date])
- all_events+= parent_record.user.events.all(:conditions=>["? between date(events.start_date) and date(events.end_date)",date])
- all_events+= parent_record.batch.events.all(:conditions=>["? between date(events.start_date) and date(events.end_date)",date])
- all_events+= Event.all(:conditions=>["(? between date(events.start_date) and date(events.end_date)) and is_common = true",date])
- when "Employee"
- all_events+= events.all(:conditions=>["? between events.start_date and events.end_date",date])
- all_events+= employee_record.employee_department.events.all(:conditions=>["? between date(events.start_date) and date(events.end_date)",date])
- all_events+= Event.all(:conditions=>["(? between date(events.start_date) and date(events.end_date)) and is_exam = true",date])
- all_events+= Event.all(:conditions=>["(? between date(events.start_date) and date(events.end_date)) and is_common = true",date])
+ when 'Admin'
+ all_events = Event.find(:all, :conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ when 'Student'
+ all_events += events.all(:conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ all_events += student_record.batch.events.all(:conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ all_events += Event.all(:conditions => ['(? BETWEEN DATE(events.start_date) AND DATE(events.end_date)) AND is_common = ?', date, true])
+ when 'Parent'
+ all_events += events.all(:conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ all_events += parent_record.user.events.all(:conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ all_events += parent_record.batch.events.all(:conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ all_events += Event.all(:conditions => ['(? BETWEEN DATE(events.start_date) AND DATE(events.end_date)) AND is_common = ?', date, true])
+ when 'Employee'
+ all_events += events.all(:conditions => ['? BETWEEN events.start_date AND events.end_date', date])
+ all_events += employee_record.employee_department.events.all(:conditions => ['? BETWEEN DATE(events.start_date) AND DATE(events.end_date)', date])
+ all_events += Event.all(:conditions => ['(? BETWEEN DATE(events.start_date) AND DATE(events.end_date)) AND is_exam = ?', date, true])
+ all_events += Event.all(:conditions => ['(? BETWEEN DATE(events.start_date) AND DATE(events.end_date)) AND is_common = ?', date, true])
end
all_events
end
@@ -153,33 +142,34 @@ def days_events(date)
def next_event(date)
all_events=[]
case(role_name)
- when "Admin"
- all_events=Event.find(:all,:conditions => ["? < date(events.end_date)",date],:order=>"start_date")
- when "Student"
- all_events+= events.all(:conditions=>["? < date(events.end_date)",date])
- all_events+= student_record.batch.events.all(:conditions=>["? < date(events.end_date)",date],:order=>"start_date")
- all_events+= Event.all(:conditions=>["(? < date(events.end_date)) and is_common = true",date],:order=>"start_date")
- when "Parent"
- all_events+= events.all(:conditions=>["? < date(events.end_date)",date])
- all_events+= parent_record.user.events.all(:conditions=>["? < date(events.end_date)",date])
- all_events+= parent_record.batch.events.all(:conditions=>["? < date(events.end_date)",date],:order=>"start_date")
- all_events+= Event.all(:conditions=>["(? < date(events.end_date)) and is_common = true",date],:order=>"start_date")
- when "Employee"
- all_events+= events.all(:conditions=>["? < date(events.end_date)",date],:order=>"start_date")
- all_events+= employee_record.employee_department.events.all(:conditions=>["? < date(events.end_date)",date],:order=>"start_date")
- all_events+= Event.all(:conditions=>["(? < date(events.end_date)) and is_exam = true",date],:order=>"start_date")
- all_events+= Event.all(:conditions=>["(? < date(events.end_date)) and is_common = true",date],:order=>"start_date")
+ when 'Admin'
+ all_events = Event.find(:all,:conditions => ['? < DATE(events.end_date)', date], :order => 'start_date')
+ when 'Student'
+ all_events += events.all(:conditions => ['? < DATE(events.end_date)', date])
+ all_events += student_record.batch.events.all(:conditions => ['? < DATE(events.end_date)', date], :order => 'start_date')
+ all_events += Event.all(:conditions => ['(? < DATE(events.end_date)) AND is_common = ?', date, true], :order => 'start_date')
+ when 'Parent'
+ all_events += events.all(:conditions => ['? < DATE(events.end_date)', date])
+ all_events += parent_record.user.events.all(:conditions => ['? < DATE(events.end_date)', date])
+ all_events += parent_record.batch.events.all(:conditions => ['? < DATE(events.end_date)', date], :order => 'start_date')
+ all_events += Event.all(:conditions => ['(? < DATE(events.end_date)) AND is_common = ?', date, true], :order => 'start_date')
+ when 'Employee'
+ all_events += events.all(:conditions => ['? < DATE(events.end_date)', date], :order => 'start_date')
+ all_events += employee_record.employee_department.events.all(:conditions => ['? < DATE(events.end_date)', date], :order => 'start_date')
+ all_events += Event.all(:conditions => ['(? < DATE(events.end_date)) AND is_exam = ?', date, true], :order => 'start_date')
+ all_events += Event.all(:conditions => ['(? < DATE(events.end_date)) AND is_common = ?', date, true], :order => 'start_date')
end
- start_date=all_events.collect(&:start_date).min
+ start_date = all_events.collect(&:start_date).min
unless start_date
- return ""
+ return ''
else
- next_date=(start_date.to_date<=date ? date+1.days : start_date )
+ next_date = (start_date.to_date <= date ? date + 1.days : start_date )
next_date
end
end
+
def soft_delete
- self.update_attributes(:is_deleted =>true)
+ self.update_attributes(:is_deleted => true)
end
end
diff --git a/app/models/user_event.rb b/app/models/user_event.rb
index d703710df..deb6027ed 100644
--- a/app/models/user_event.rb
+++ b/app/models/user_event.rb
@@ -1,23 +1,23 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class UserEvent < ActiveRecord::Base
belongs_to :user
belongs_to :event
- validates_uniqueness_of :user_id,:scope =>:event_id
+ validates_uniqueness_of :user_id, :scope => :event_id
end
\ No newline at end of file
diff --git a/app/models/user_notifier.rb b/app/models/user_notifier.rb
index c4e9f6de0..01ff025ba 100755
--- a/app/models/user_notifier.rb
+++ b/app/models/user_notifier.rb
@@ -1,21 +1,20 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class UserNotifier < ActionMailer::Base
def forgot_password(user,current_url)
setup_email(user,current_url)
diff --git a/app/models/weekday.rb b/app/models/weekday.rb
index ba565e0df..b503d552d 100755
--- a/app/models/weekday.rb
+++ b/app/models/weekday.rb
@@ -1,63 +1,57 @@
-#Fedena
-#Copyright 2011 Foradian Technologies Private Limited
+# Fedena
+# Copyright 2011 Foradian Technologies Private Limited
#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
+# This product includes software developed at
+# Project Fedena - http://www.projectfedena.org/
#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
-#Unless required by applicable law or agreed to in writing, software
-#distributed under the License is distributed on an "AS IS" BASIS,
-#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#See the License for the specific language governing permissions and
-#limitations under the License.
-
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
class Weekday < ActiveRecord::Base
+
+ WEEKDAYS = {
+ '0' => I18n.t('sunday'),
+ '1' => I18n.t('monday'),
+ '2' => I18n.t('tuesday'),
+ '3' => I18n.t('wednesday'),
+ '4' => I18n.t('thursday'),
+ '5' => I18n.t('friday'),
+ '6' => I18n.t('saturday')
+ }
+
belongs_to :batch
- has_many :timetable_entries , :dependent=>:destroy
- default_scope :order => 'weekday asc'
- named_scope :default, :conditions => { :batch_id => nil,:is_deleted=>false}
- named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b.to_i,:is_deleted=>false } } }
+ has_many :timetable_entries, :dependent => :destroy
+
+ default_scope :order => 'weekday ASC'
+ named_scope :default, :conditions => { :batch_id => nil, :is_deleted => false }
+ named_scope :for_batch, lambda { |b| { :conditions => { :batch_id => b, :is_deleted => false } } }
def self.weekday_by_day(batch_id)
- days={}
weekdays = Weekday.find_all_by_batch_id(batch_id)
- if weekdays.empty?
- weekdays = Weekday.default
- end
- days=weekdays.group_by(&:day_of_week)
+ weekdays = Weekday.default if weekdays.empty?
+
+ weekdays.group_by(&:day_of_week)
end
def deactivate
- self.update_attribute(:is_deleted,true)
+ self.update_attribute(:is_deleted, true)
end
- def self.add_day(batch_id,day)
- unless batch_id==0
- unless Weekday.find_by_batch_id_and_day_of_week(batch_id,day).nil?
- Weekday.find_by_batch_id_and_day_of_week(batch_id,day).update_attributes(:is_deleted=>false,:day_of_week => day)
- else
- w=Weekday.new
- w.day_of_week = day
- w.weekday = day
- w.batch_id = batch_id
- w.is_deleted = false
- w.save
- end
+ def self.add_day(batch_id, day)
+ batch_id = nil if batch_id == 0
+
+ if weekday = Weekday.find_by_batch_id_and_day_of_week(batch_id, day)
+ weekday.update_attributes(:is_deleted => false, :day_of_week => day)
else
- unless Weekday.find_by_batch_id_and_day_of_week(nil,day).nil?
- Weekday.find_by_batch_id_and_day_of_week(nil,day).update_attributes(:is_deleted=>false,:day_of_week => day)
- else
- w=Weekday.new
- w.day_of_week = day
- w.weekday = day
- w.is_deleted = false
- w.save
- end
+ Weekday.create(:day_of_week => day, :weekday => day, :batch_id => batch_id, :is_deleted => false)
end
end
end
diff --git a/app/views/archived_student/academic_report.html.erb b/app/views/archived_student/academic_report.html.erb
index 4f4f074ec..e451d84a1 100755
--- a/app/views/archived_student/academic_report.html.erb
+++ b/app/views/archived_student/academic_report.html.erb
@@ -63,7 +63,7 @@
<% @g = 0 %>
<% end %>
<% end %>
- <% total_score = ArchivedExamScore.new() %>
+ <% total_score = ArchivedExamScore.new %>
<% if @mmg == @g %>
<% @employees.each do |e| %>
@@ -50,7 +50,7 @@
<% @leave_types.each do |lt1| %>
<% leave_count = EmployeeLeave.find_by_employee_leave_type_id_and_employee_id(lt1.id, e.id)%>
- <% unless leave_count.reset_date.nil? %>
+ <% if leave_count.present? && leave_count.reset_date.present? %>
<% report = EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(e.id, lt1.id, :conditions=> ["attendance_date >= '#{leave_count.reset_date}'"]) %>
<% else %>
<% report = EmployeeAttendance.find_all_by_employee_id_and_employee_leave_type_id(e.id, lt1.id) %>
diff --git a/app/views/employee_attendance/_employee_reset_success.erb b/app/views/employee_attendance/_employee_reset_success.erb
new file mode 100755
index 000000000..12a1e5a28
--- /dev/null
+++ b/app/views/employee_attendance/_employee_reset_success.erb
@@ -0,0 +1,45 @@
+<%-# Fedena
+#Copyright 2010 Foradian Technologies Private Limited
+#
+#This product includes software developed at
+#Project Fedena - http://www.projectfedena.org/
+#
+#Licensed under the Apache License, Version 2.0 (the "License");
+#you may not use this file except in compliance with the License.
+#You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing,
+#software distributed under the License is distributed on an
+#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#KIND, either express or implied. See the License for the
+#specific language governing permissions and limitations
+#under the License. -%>
+
+<% unless flash[:notice].nil? %>
+
<%= flash[:notice] %>
+ <% end %>
+
+
+
<%= t('leave_types') %>
+
<%= t('available_leave') %>
+
<%= t('leave_taken') %>
+
<%= t('last_reset_date') %>
+
+ <% @leave_count.each do |e| %>
+ <% leave_type = EmployeeLeaveType.find_by_id(e.employee_leave_type_id)%>
+ <% if leave_type.present? && leave_type.status %>
+
diff --git a/app/views/employee_attendance/_employee_reset_sucess.erb b/app/views/employee_attendance/_employee_reset_sucess.erb
deleted file mode 100755
index c1ffad778..000000000
--- a/app/views/employee_attendance/_employee_reset_sucess.erb
+++ /dev/null
@@ -1,45 +0,0 @@
-<%-# Fedena
-#Copyright 2010 Foradian Technologies Private Limited
-#
-#This product includes software developed at
-#Project Fedena - http://www.projectfedena.org/
-#
-#Licensed under the Apache License, Version 2.0 (the "License");
-#you may not use this file except in compliance with the License.
-#You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-#Unless required by applicable law or agreed to in writing,
-#software distributed under the License is distributed on an
-#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#KIND, either express or implied. See the License for the
-#specific language governing permissions and limitations
-#under the License. -%>
-
-<% unless flash[:notice].nil? %>
-
<%= flash[:notice] %>
- <% end %>
-
-
-
<%= t('leave_types') %>
-
<%= t('available_leave') %>
-
<%= t('leave_taken') %>
-
<%= t('last_reset_date') %>
-
- <% @leave_count.each do |e| %>
- <% leave_type =EmployeeLeaveType.find_by_id(e.employee_leave_type_id)%>
- <% if leave_type.status %>
-
<%= timetable_batch (entry.last) unless entry.blank? -%>
diff --git a/app/views/weekday/_new.html.erb b/app/views/weekday/_new.html.erb
index 9a919cb04..8f67ddf19 100755
--- a/app/views/weekday/_new.html.erb
+++ b/app/views/weekday/_new.html.erb
@@ -16,27 +16,23 @@
#KIND, either express or implied. See the License for the
#specific language governing permissions and limitations
#under the License. -%>
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/fckplugin.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/fckplugin.js
deleted file mode 100755
index 6d25ed067..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/fckplugin.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This is the sample plugin definition file.
- */
-
-// Register the related commands.
-FCKCommands.RegisterCommand( 'My_Find' , new FCKDialogCommand( FCKLang['DlgMyFindTitle'] , FCKLang['DlgMyFindTitle'] , FCKConfig.PluginsPath + 'findreplace/find.html' , 340, 170 ) ) ;
-FCKCommands.RegisterCommand( 'My_Replace' , new FCKDialogCommand( FCKLang['DlgMyReplaceTitle'], FCKLang['DlgMyReplaceTitle'] , FCKConfig.PluginsPath + 'findreplace/replace.html', 340, 200 ) ) ;
-
-// Create the "Find" toolbar button.
-var oFindItem = new FCKToolbarButton( 'My_Find', FCKLang['DlgMyFindTitle'] ) ;
-oFindItem.IconPath = FCKConfig.PluginsPath + 'findreplace/find.gif' ;
-
-FCKToolbarItems.RegisterItem( 'My_Find', oFindItem ) ; // 'My_Find' is the name used in the Toolbar config.
-
-// Create the "Replace" toolbar button.
-var oReplaceItem = new FCKToolbarButton( 'My_Replace', FCKLang['DlgMyReplaceTitle'] ) ;
-oReplaceItem.IconPath = FCKConfig.PluginsPath + 'findreplace/replace.gif' ;
-
-FCKToolbarItems.RegisterItem( 'My_Replace', oReplaceItem ) ; // 'My_Replace' is the name used in the Toolbar config.
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/find.gif b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/find.gif
deleted file mode 100755
index 81915f4f6..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/find.gif and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/find.html b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/find.html
deleted file mode 100755
index 546867ab0..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/find.html
+++ /dev/null
@@ -1,172 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- This is my Plugin!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/en.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/en.js
deleted file mode 100755
index df00c166f..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/en.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * English language file for the sample plugin.
- */
-
-FCKLang['DlgMyReplaceTitle'] = 'Plugin - Replace' ;
-FCKLang['DlgMyReplaceFindLbl'] = 'Find what:' ;
-FCKLang['DlgMyReplaceReplaceLbl'] = 'Replace with:' ;
-FCKLang['DlgMyReplaceCaseChk'] = 'Match case' ;
-FCKLang['DlgMyReplaceReplaceBtn'] = 'Replace' ;
-FCKLang['DlgMyReplaceReplAllBtn'] = 'Replace All' ;
-FCKLang['DlgMyReplaceWordChk'] = 'Match whole word' ;
-
-FCKLang['DlgMyFindTitle'] = 'Plugin - Find' ;
-FCKLang['DlgMyFindFindBtn'] = 'Find' ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/fr.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/fr.js
deleted file mode 100755
index 9aba77568..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/fr.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * French language file for the sample plugin.
- */
-
-FCKLang['DlgMyReplaceTitle'] = 'Plugin - Remplacer' ;
-FCKLang['DlgMyReplaceFindLbl'] = 'Chercher:' ;
-FCKLang['DlgMyReplaceReplaceLbl'] = 'Remplacer par:' ;
-FCKLang['DlgMyReplaceCaseChk'] = 'Respecter la casse' ;
-FCKLang['DlgMyReplaceReplaceBtn'] = 'Remplacer' ;
-FCKLang['DlgMyReplaceReplAllBtn'] = 'Remplacer Tout' ;
-FCKLang['DlgMyReplaceWordChk'] = 'Mot entier' ;
-
-FCKLang['DlgMyFindTitle'] = 'Plugin - Chercher' ;
-FCKLang['DlgMyFindFindBtn'] = 'Chercher' ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/it.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/it.js
deleted file mode 100755
index 414081ab7..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/lang/it.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Italian language file for the sample plugin.
- */
-
-FCKLang['DlgMyReplaceTitle'] = 'Plugin - Sostituisci' ;
-FCKLang['DlgMyReplaceFindLbl'] = 'Trova:' ;
-FCKLang['DlgMyReplaceReplaceLbl'] = 'Sostituisci con:' ;
-FCKLang['DlgMyReplaceCaseChk'] = 'Maiuscole/minuscole' ;
-FCKLang['DlgMyReplaceReplaceBtn'] = 'Sostituisci' ;
-FCKLang['DlgMyReplaceReplAllBtn'] = 'Sostituisci tutto' ;
-FCKLang['DlgMyReplaceWordChk'] = 'Parola intera' ;
-
-FCKLang['DlgMyFindTitle'] = 'Plugin - Cerca' ;
-FCKLang['DlgMyFindFindBtn'] = 'Cerca' ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/replace.gif b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/replace.gif
deleted file mode 100755
index ac0d89370..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/replace.gif and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/replace.html b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/replace.html
deleted file mode 100755
index ab028ae57..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/findreplace/replace.html
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- This is my Plugin!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/samples/fckplugin.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/samples/fckplugin.js
deleted file mode 100755
index b2ac6de6e..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/_plugins/samples/fckplugin.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This is a sample plugin definition file.
- */
-
-// Here we define our custom Style combo, with custom widths.
-var oMyBigStyleCombo = new FCKToolbarStyleCombo() ;
-oMyBigStyleCombo.FieldWidth = 250 ;
-oMyBigStyleCombo.PanelWidth = 300 ;
-FCKToolbarItems.RegisterItem( 'My_BigStyle', oMyBigStyleCombo ) ;
-
-
-// ##### Defining a custom context menu entry.
-
-// ## 1. Define the command to be executed when selecting the context menu item.
-var oMyCMCommand = new Object() ;
-oMyCMCommand.Name = 'OpenImage' ;
-
-// This is the standard function used to execute the command (called when clicking in the context menu item).
-oMyCMCommand.Execute = function()
-{
- // This command is called only when an image element is selected (IMG).
- // Get image URL (src).
- var sUrl = FCKSelection.GetSelectedElement().src ;
-
- // Open the URL in a new window.
- window.top.open( sUrl ) ;
-}
-
-// This is the standard function used to retrieve the command state (it could be disabled for some reason).
-oMyCMCommand.GetState = function()
-{
- // Let's make it always enabled.
- return FCK_TRISTATE_OFF ;
-}
-
-// ## 2. Register our custom command.
-FCKCommands.RegisterCommand( 'OpenImage', oMyCMCommand ) ;
-
-// ## 3. Define the context menu "listener".
-var oMyContextMenuListener = new Object() ;
-
-// This is the standard function called right before sowing the context menu.
-oMyContextMenuListener.AddItems = function( contextMenu, tag, tagName )
-{
- // Let's show our custom option only for images.
- if ( tagName == 'IMG' )
- {
- contextMenu.AddSeparator() ;
- contextMenu.AddItem( 'OpenImage', 'Open image in a new window (Custom)' ) ;
- }
-}
-
-// ## 4. Register our context menu listener.
-FCK.ContextMenu.RegisterListener( oMyContextMenuListener ) ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/application.xml b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/application.xml
deleted file mode 100755
index aec30231a..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/application.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
- net.fckeditor.air.samples.sample01
- FCKeditor Sample Application 1.0
- 1.0
- FCKeditor AIR Sample
- This is a sample AIR application including FCKeditor.
- Copyright (C) 2003-2008 Frederico Caldeira Knabben
-
- _samples/adobeair/sample01.html
- FCKeditor AIR Sample
- standard
- false
- true
- true
- true
- true
- 100
- 80
- 820
- 600
- 600 400
-
- FCKeditor/AIR Samples/Sample01
- FCKeditor/AIR Samples
-
- _samples/adobeair/icons/16.png
- _samples/adobeair/icons/32.png
- _samples/adobeair/icons/48.png
- _samples/adobeair/icons/128.png
-
- false
- false
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/128.png b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/128.png
deleted file mode 100755
index 88cb983ab..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/128.png and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/16.png b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/16.png
deleted file mode 100755
index 5465b763f..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/16.png and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/32.png b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/32.png
deleted file mode 100755
index e0cf25ed4..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/32.png and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/48.png b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/48.png
deleted file mode 100755
index 262ebccc5..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/icons/48.png and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/package.bat b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/package.bat
deleted file mode 100755
index d0a6b29e9..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/package.bat
+++ /dev/null
@@ -1,26 +0,0 @@
-@ECHO OFF
-
-::
-:: FCKeditor - The text editor for Internet - http://www.fckeditor.net
-:: Copyright (C) 2003-2008 Frederico Caldeira Knabben
-::
-:: == BEGIN LICENSE ==
-::
-:: Licensed under the terms of any of the following licenses at your
-:: choice:
-::
-:: - GNU General Public License Version 2 or later (the "GPL")
-:: http://www.gnu.org/licenses/gpl.html
-::
-:: - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-:: http://www.gnu.org/licenses/lgpl.html
-::
-:: - Mozilla Public License Version 1.1 or later (the "MPL")
-:: http://www.mozilla.org/MPL/MPL-1.1.html
-::
-:: == END LICENSE ==
-::
-
-:: adt -package SIGNING_OPTIONS air_file app_xml [file_or_dir | -C dir file_or_dir | -e file dir ...] ...
-
-"C:\Adobe AIR SDK\bin\adt" -package -storetype pkcs12 -keystore sample01_cert.pfx -storepass 123abc FCKeditor.air application.xml -C ../../ .
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/run.bat b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/run.bat
deleted file mode 100755
index 9a8bac879..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/run.bat
+++ /dev/null
@@ -1,26 +0,0 @@
-@ECHO OFF
-
-::
-:: FCKeditor - The text editor for Internet - http://www.fckeditor.net
-:: Copyright (C) 2003-2008 Frederico Caldeira Knabben
-::
-:: == BEGIN LICENSE ==
-::
-:: Licensed under the terms of any of the following licenses at your
-:: choice:
-::
-:: - GNU General Public License Version 2 or later (the "GPL")
-:: http://www.gnu.org/licenses/gpl.html
-::
-:: - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-:: http://www.gnu.org/licenses/lgpl.html
-::
-:: - Mozilla Public License Version 1.1 or later (the "MPL")
-:: http://www.mozilla.org/MPL/MPL-1.1.html
-::
-:: == END LICENSE ==
-::
-
-:: adl [-runtime runtime-directory] [-pubId publisher-id] [-nodebug] application.xml [rootdirectory] [-- arguments]
-
-"C:\Adobe AIR SDK\bin\adl" application.xml ../../
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/sample01.html b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/sample01.html
deleted file mode 100755
index 0f702b190..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/sample01.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
- FCKeditor - Adobe AIR Sample
-
-
-
-
-
-
-
-
- FCKeditor - Adobe AIR Sample
-
-
- This sample loads FCKeditor with full features enabled.
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/sample01_cert.pfx b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/sample01_cert.pfx
deleted file mode 100755
index ba81d1ecd..000000000
Binary files a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/adobeair/sample01_cert.pfx and /dev/null differ
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/fck.afpa b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/fck.afpa
deleted file mode 100755
index 99d03062f..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/fck.afpa
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/fck.afpa.code b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/fck.afpa.code
deleted file mode 100755
index f1015416b..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/fck.afpa.code
+++ /dev/null
@@ -1,165 +0,0 @@
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This is the class definition file for the sample pages.
- *
-
- DEFINE CLASS fckeditor AS custom
- cInstanceName =""
- BasePath =""
- cWIDTH =""
- cHEIGHT =""
- ToolbarSet =""
- cValue=""
- DIMENSION aConfig(10,2)
-
-&& -----------------------------------------------------------------------
- FUNCTION fckeditor( tcInstanceName )
- LOCAL lnLoop,lnLoop2
- THIS.cInstanceName = tcInstanceName
- THIS.BasePath = '../../../FCKeditor/'
- THIS.cWIDTH = '100%'
- THIS.cHEIGHT = '200'
- THIS.ToolbarSet = 'Default'
- THIS.cValue = ''
- FOR lnLoop=1 TO 10
- FOR lnLoop2=1 TO 2
- THIS.aConfig(lnLoop,lnLoop2) = ""
- NEXT
- NEXT
- RETURN
- ENDFUNC
-
-
-&& -----------------------------------------------------------------------
- FUNCTION CREATE()
- RETURN(THIS.CreateHtml())
- ENDFUNC
-
-&& -----------------------------------------------------------------------
- FUNCTION CreateHtml()
- LOCAL html
- LOCAL lcLink
-
- HtmlValue = THIS.cValue && HTMLSPECIALCHARS()
-
- html = [
]
- IF THIS.IsCompatible()
- lcLink = THIS.BasePath+[editor/fckeditor.html?InstanceName=]+THIS.cInstanceName
-
- IF ( !THIS.ToolbarSet == '' )
- lcLink = lcLink + [&Toolbar=]+THIS.ToolbarSet
- ENDIF
-
-&& Render the LINKED HIDDEN FIELD.
- html = html + []
-
-&& Render the configurations HIDDEN FIELD.
- html = html + [] +CHR(13)+CHR(10)
-
-&& Render the EDITOR IFRAME.
- html = html + []
- ELSE
- IF ( AT("%", THIS.cWIDTH)=0 )
- WidthCSS = THIS.cWIDTH + 'px'
- ELSE
- WidthCSS = THIS.cWIDTH
- ENDIF
-
- IF ( AT("%",THIS.cHEIGHT)=0 )
- HeightCSS = THIS.cHEIGHT + 'px'
- ELSE
- HeightCSS = THIS.cHEIGHT
- ENDIF
-
- html = html + []
- ENDIF
-
- html = html + [
]
-
- RETURN (html)
- ENDFUNC
-
-
-&& -----------------------------------------------------------------------
- FUNCTION IsCompatible()
- LOCAL llRetval
- LOCAL sAgent
-
- llRetval=.F.
-
- sAgent= LOWER(Request.ServerVariables("HTTP_USER_AGENT"))
-
- IF AT("msie",sAgent) >0 .AND. AT("mac",sAgent)=0 .AND. AT("opera",sAgent)=0
- iVersion=VAL(SUBSTR(sAgent,AT("msie",sAgent)+5,3))
- llRetval= iVersion > 5.5
- ELSE
- IF AT("gecko",sAgent)>0
- iVersion=VAL(SUBSTR(sAgent,AT("gecko/",sAgent)+6,8))
- llRetval =iVersion > 20030210
- ENDIF
- ENDIF
- RETURN (llRetval)
- ENDFUNC
-
-&& -----------------------------------------------------------------------
- FUNCTION GetConfigFieldString()
- LOCAL sParams
- LOCAL bFirst
- LOCAL sKey
- sParams = ""
- bFirst = .T.
- FOR lnLoop=1 TO 10 && ALEN(this.aconfig)
- IF !EMPTY(THIS.aConfig(lnLoop,1))
- IF bFirst = .F.
- sParams = sParams + "&"
- ELSE
- bFirst = .F.
- ENDIF
- sParams = sParams +THIS.aConfig(lnLoop,1)+[=]+THIS.aConfig(lnLoop,2)
- ELSE
- EXIT
- ENDIF
- NEXT
- RETURN(sParams)
- ENDFUNC
-&& -----------------------------------------------------------------------
-&& This function removes unwanted characters in URL parameters mostly entered by hackers
-
- FUNCTION StripAttacks
- LPARAMETERS tcString
- IF !EMPTY(tcString)
- tcString=STRTRAN(tcString,"&","")
- tcString=STRTRAN(tcString,"?","")
- tcString=STRTRAN(tcString,";","")
- tcString=STRTRAN(tcString,"!","")
- tcString=STRTRAN(tcString,"<%","")
- tcString=STRTRAN(tcString,"%>","")
- tcString=STRTRAN(tcString,"<","")
- tcString=STRTRAN(tcString,">","")
- tcString=STRTRAN(tcString,"..","")
- tcString=STRTRAN(tcString,"/","")
- tcString=STRTRAN(tcString,"\","")
- tcString=STRTRAN(tcString,":","")
- ELSE
- tcString=""
- ENDIF
- RETURN (tcString)
-
-ENDDEFINE
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample01.afp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample01.afp
deleted file mode 100755
index 2450e0db4..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample01.afp
+++ /dev/null
@@ -1,56 +0,0 @@
-<%
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This page lists the data posted by a form.
- *
-%>
-
-
-
- FCKeditor - AFP Sample 1
-
-
-
-
-
-
FCKeditor - AFP - Sample 1
- This sample displays a normal HTML form with an FCKeditor with full features enabled.
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample02.afp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample02.afp
deleted file mode 100755
index e1baf72ef..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample02.afp
+++ /dev/null
@@ -1,113 +0,0 @@
-<%
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This page is a basic Sample for FCKeditor integration in the AFP script language (www.afpages.de)
- *
-%>
-
-
-
- FCKeditor - AFP Sample 2
-
-
-
-
-
-
-
-
FCKeditor - AFP - Sample 2
- This sample shows the editor in all its available languages.
-
-
-
-
- Select a language:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample03.afp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample03.afp
deleted file mode 100755
index a219e74a0..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample03.afp
+++ /dev/null
@@ -1,91 +0,0 @@
-<%
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This page is a basic Sample for FCKeditor integration in the AFP script language (www.afpages.de)
- *
-%>
-
-
-
- FCKeditor - AFP Sample 3
-
-
-
-
-
-
-
-
FCKeditor - AFP - Sample 3
- This sample shows how to change the editor toolbar.
-
-
-
-
- Select the toolbar to load:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample04.afp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample04.afp
deleted file mode 100755
index a9d62d755..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sample04.afp
+++ /dev/null
@@ -1,98 +0,0 @@
-<%
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This page is a basic Sample for FCKeditor integration in the AFP script language (www.afpages.de)
- *
-%>
-
-
-
- FCKeditor - AFP Sample 4
-
-
-
-
-
-
-
-
FCKeditor - AFP - Sample 4
- This sample shows how to change the editor skin.
-
-
-
-
- Select the skin to load:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sampleposteddata.afp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sampleposteddata.afp
deleted file mode 100755
index 368d778fb..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/afp/sampleposteddata.afp
+++ /dev/null
@@ -1,60 +0,0 @@
-<%
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This page lists the data posted by a form.
- *
-%>
-
-
-
- FCKeditor - AFP - Samples - Posted Data
-
-
-
-
-
-
FCKeditor - Samples - Posted Data
- This page lists all data posted by the form.
-
-
-
-
Field Name
-
Value
-
-<%
- lcForm=REQUEST.Form()
- lcForm=STRTRAN(lcForm,"&",CHR(13)+CHR(10))
-
- FOR lnLoop=1 TO MEMLINES(lcForm)
- lcZeile=ALLTRIM(MLINE(lcForm,lnLoop))
- IF AT("=",lcZeile)>0
- lcVariable=UPPER(ALLTRIM(LEFT(lcZeile,AT("=",lcZeile)-1)))
- lcWert=ALLTRIM(RIGHT(lcZeile,LEN(lcZeile)-AT("=",lcZeile)))
- lcWert=Server.UrlDecode( lcWert )
- lcWert=STRTRAN(lcWert,"<","<")
- lcWert=STRTRAN(lcWert,">",">") && ... if wanted remove/translate HTML Chars ...
-
- ? [
]+lcVariable+[ =
]+lcWert+[
]
- ENDIF
- NEXT
-%>
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample01.asp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample01.asp
deleted file mode 100755
index 533e91ce2..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample01.asp
+++ /dev/null
@@ -1,62 +0,0 @@
-<%@ codepage="65001" language="VBScript" %>
-<% Option Explicit %>
-
-<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
- FCKeditor - ASP - Sample 1
-
-
- This sample displays a normal HTML form with an FCKeditor with full features enabled.
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample02.asp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample02.asp
deleted file mode 100755
index 5907c9786..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample02.asp
+++ /dev/null
@@ -1,108 +0,0 @@
-<%@ CodePage=65001 Language="VBScript"%>
-<% Option Explicit %>
-
-<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - ASP - Sample 2
- This sample shows the editor in all its available languages.
-
-
-
-
- Select a language:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample03.asp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample03.asp
deleted file mode 100755
index 8e65080b8..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample03.asp
+++ /dev/null
@@ -1,92 +0,0 @@
-<%@ CodePage=65001 Language="VBScript"%>
-<% Option Explicit %>
-
-<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - ASP - Sample 3
- This sample shows how to change the editor toolbar.
-
-
-
-
- Select the toolbar to load:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample04.asp b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample04.asp
deleted file mode 100755
index 8c21068a8..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/asp/sample04.asp
+++ /dev/null
@@ -1,98 +0,0 @@
-<%@ CodePage=65001 Language="VBScript"%>
-<% Option Explicit %>
-
-<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - ASP - Sample 4
- This sample shows how to change the editor skin.
-
-
-
-This sample displays a normal HTML form with a FCKeditor with full features enabled.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/cfm/sample01_mx.cfm b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/cfm/sample01_mx.cfm
deleted file mode 100755
index 48287412b..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/cfm/sample01_mx.cfm
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
FCKeditor - ColdFusion Component (CFC) - Sample 1
-
-This sample displays a normal HTML form with a FCKeditor with full features enabled.
-
-
-
-
-
- This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
-
-
-
-
- // Calculate basepath for FCKeditor. It's in the folder right above _samples
- basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 ) ;
-
- fckEditor = createObject( "component", "#basePath#fckeditor" ) ;
- fckEditor.instanceName = "myEditor" ;
- fckEditor.value = '
This is some sample text. You are using FCKeditor.
-This sample shows the editor in all its available languages.
-
-
-
- This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
-
-
-
-
- This sample shows how to change the editor toolbar.
-
-
-
- This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
-
-
-
-
- This sample shows how to change the editor skin.
-
-
-
- This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
-
-
-
-
- This sample displays a normal HTML form with an FCKeditor with full features enabled.
- It uses the "ReplaceTextarea" command to create the editor.
-
- This sample shows how to change the editor skin.
-
-
-
-
-
- Select the skin to load:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample06.config.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample06.config.js
deleted file mode 100755
index 9edada5e6..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample06.config.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Sample custom configuration settings used in the plugin sample page (sample06).
- */
-
-// Set our sample toolbar.
-FCKConfig.ToolbarSets['PluginTest'] = [
- ['SourceSimple'],
- ['My_Find','My_Replace','-','Placeholder'],
- ['StyleSimple','FontFormatSimple','FontNameSimple','FontSizeSimple'],
- ['Table','-','TableInsertRowAfter','TableDeleteRows','TableInsertColumnAfter','TableDeleteColumns','TableInsertCellAfter','TableDeleteCells','TableMergeCells','TableHorizontalSplitCell','TableCellProp'],
- ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink'],
- '/',
- ['My_BigStyle','-','Smiley','-','About']
-] ;
-
-// Change the default plugin path.
-FCKConfig.PluginsPath = FCKConfig.BasePath.substr(0, FCKConfig.BasePath.length - 7) + '_samples/_plugins/' ;
-
-// Add our plugin to the plugins list.
-// FCKConfig.Plugins.Add( pluginName, availableLanguages )
-// pluginName: The plugin name. The plugin directory must match this name.
-// availableLanguages: a list of available language files for the plugin (separated by a comma).
-FCKConfig.Plugins.Add( 'findreplace', 'en,fr,it' ) ;
-FCKConfig.Plugins.Add( 'samples' ) ;
-
-// If you want to use plugins found on other directories, just use the third parameter.
-var sOtherPluginPath = FCKConfig.BasePath.substr(0, FCKConfig.BasePath.length - 7) + 'editor/plugins/' ;
-FCKConfig.Plugins.Add( 'placeholder', 'de,en,es,fr,it,pl', sOtherPluginPath ) ;
-FCKConfig.Plugins.Add( 'tablecommands', null, sOtherPluginPath ) ;
-FCKConfig.Plugins.Add( 'simplecommands', null, sOtherPluginPath ) ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample06.html b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample06.html
deleted file mode 100755
index 69966de38..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample06.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
- FCKeditor - JavaScript - 6
-
- This sample shows some sample plugins implementations. Things to note:
-
-
In the toolbar, you will find sample "Find" and "Replace" plugins that do exactly
- the same thing that the built in ones do. It just shows how to do that with a custom
- implementation. Use the green toolbar buttons the test then.
-
There is also another sample plugin that is available in the package: the "Placeholder"
- command (use the yellow icon).
-
It also shows a custom context menu option when right cliking on images (insert
- a smiley to test it).
- This sample shows FCKeditor in a more complex form with two different instances.
- It also shows and interesting usage of the "OnFocus" and "OnBlur" events available
- in the JavaScript API.
-
- This sample shows a form with two FCKeditor instance loaded inside an IFRAME. Both instances share the same
- toolbar, available in the main page (top).
-
- This sample starts with a normal textarea and provides the ability to switch back
- and forth between the textarea and FCKeditor. It uses the JavaScript API to do the
- operations so it will work even if the internal implementation changes.
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample14.config.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample14.config.js
deleted file mode 100755
index a5dd12dd0..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample14.config.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Configuration settings used by the XHTML 1.1 sample page (sample14.html).
- */
-
-// Our intention is force all formatting features to use CSS classes or
-// semantic aware elements.
-
-// Load our custom CSS files for this sample.
-// We are using "BasePath" just for this sample convenience. In normal
-// situations it would be just pointed to the file directly,
-// like "/css/myfile.css".
-FCKConfig.EditorAreaCSS = FCKConfig.BasePath + '../_samples/html/sample14.styles.css' ;
-
-/**
- * Core styles.
- */
-FCKConfig.CoreStyles.Bold = { Element : 'span', Attributes : { 'class' : 'Bold' } } ;
-FCKConfig.CoreStyles.Italic = { Element : 'span', Attributes : { 'class' : 'Italic' } } ;
-FCKConfig.CoreStyles.Underline = { Element : 'span', Attributes : { 'class' : 'Underline' } } ;
-FCKConfig.CoreStyles.StrikeThrough = { Element : 'span', Attributes : { 'class' : 'StrikeThrough' } } ;
-
-/**
- * Font face
- */
-// List of fonts available in the toolbar combo. Each font definition is
-// separated by a semi-colon (;). We are using class names here, so each font
-// is defined by {Class Name}/{Combo Label}.
-FCKConfig.FontNames = 'FontComic/Comic Sans MS;FontCourier/Courier New;FontTimes/Times New Roman' ;
-
-// Define the way font elements will be applied to the document. The "span"
-// element will be used. When a font is selected, the font name defined in the
-// above list is passed to this definition with the name "Font", being it
-// injected in the "class" attribute.
-// We must also instruct the editor to replace span elements that are used to
-// set the font (Overrides).
-FCKConfig.CoreStyles.FontFace =
- {
- Element : 'span',
- Attributes : { 'class' : '#("Font")' },
- Overrides : [ { Element : 'span', Attributes : { 'class' : /^Font(?:Comic|Courier|Times)$/ } } ]
- } ;
-
-/**
- * Font sizes.
- */
-FCKConfig.FontSizes = 'FontSmaller/Smaller;FontLarger/Larger;FontSmall/8pt;FontBig/14pt;FontDouble/Double Size' ;
-FCKConfig.CoreStyles.Size =
- {
- Element : 'span',
- Attributes : { 'class' : '#("Size")' },
- Overrides : [ { Element : 'span', Attributes : { 'class' : /^Font(?:Smaller|Larger|Small|Big|Double)$/ } } ]
- } ;
-
-/**
- * Font colors.
- */
-FCKConfig.EnableMoreFontColors = false ;
-FCKConfig.FontColors = 'ff9900/FontColor1,0066cc/FontColor2,ff0000/FontColor3' ;
-FCKConfig.CoreStyles.Color =
- {
- Element : 'span',
- Attributes : { 'class' : '#("Color")' },
- Overrides : [ { Element : 'span', Attributes : { 'class' : /^FontColor(?:1|2|3)$/ } } ]
- } ;
-
-FCKConfig.CoreStyles.BackColor =
- {
- Element : 'span',
- Attributes : { 'class' : '#("Color")BG' },
- Overrides : [ { Element : 'span', Attributes : { 'class' : /^FontColor(?:1|2|3)BG$/ } } ]
- } ;
-
-/**
- * Indentation.
- */
-FCKConfig.IndentClasses = [ 'Indent1', 'Indent2', 'Indent3' ] ;
-
-/**
- * Paragraph justification.
- */
-FCKConfig.JustifyClasses = [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ] ;
-
-/**
- * Styles combo.
- */
-FCKConfig.StylesXmlPath = '' ;
-FCKConfig.CustomStyles =
- {
- 'Strong Emphasis' : { Element : 'strong' },
- 'Emphasis' : { Element : 'em' },
-
- 'Computer Code' : { Element : 'code' },
- 'Keyboard Phrase' : { Element : 'kbd' },
- 'Sample Text' : { Element : 'samp' },
- 'Variable' : { Element : 'var' },
-
- 'Deleted Text' : { Element : 'del' },
- 'Inserted Text' : { Element : 'ins' },
-
- 'Cited Work' : { Element : 'cite' },
- 'Inline Quotation' : { Element : 'q' }
- } ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample14.html b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample14.html
deleted file mode 100755
index c5833ae28..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sample14.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
- FCKeditor - JavaScript - Sample 14
-
-
- This sample shows FCKeditor configured to produce XHTML 1.1 compliant
- HTML. Deprecated elements or attributes, like the <font> and <u> elements
- or the "style" attribute, are avoided.
-
-
-
-<%
-
-' This function is useful only for this sample page se whe can display the
-' posted data accordingly. This processing is usually not done on real
-' applications, where the posted data must be saved on a DB or file. In those
-' cases, no processing must be done, and the data is saved as posted.
-Function ModifyForOutput( value )
-
- ModifyForOutput = Server.HTMLEncode( value )
-
-End Function
-
-%>
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sampleposteddata.html b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sampleposteddata.html
deleted file mode 100755
index d8537991f..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/html/sampleposteddata.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
- FCKeditor - Samples - Posted Data
-
-
-
-
-
-
- FCKeditor - Samples - Posted Data
-
-
- This page lists all data posted by the form. It uses the "QueryString" to search
- for data submitted using the "GET" method, so it is limited to 2KB.
-
-
-
-
-
- Field
-
- Value
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample01.lasso b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample01.lasso
deleted file mode 100755
index f868069ac..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample01.lasso
+++ /dev/null
@@ -1,55 +0,0 @@
-[//lasso
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Sample page.
- */
-]
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
FCKeditor - Lasso - Sample 1
- This sample displays a normal HTML form with an FCKeditor with full features
- enabled.
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample02.lasso b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample02.lasso
deleted file mode 100755
index bd74329f7..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample02.lasso
+++ /dev/null
@@ -1,109 +0,0 @@
-[//lasso
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Sample page.
- */
-]
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - Lasso - Sample 2
- This sample shows the editor in all its available languages.
-
-
-
-
- Select a language:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample03.lasso b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample03.lasso
deleted file mode 100755
index 6890dc984..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample03.lasso
+++ /dev/null
@@ -1,87 +0,0 @@
-[//lasso
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Sample page.
- */
-]
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - Lasso - Sample 3
- This sample shows how to change the editor toolbar.
-
-
-
-
- Select the toolbar to load:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample04.lasso b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample04.lasso
deleted file mode 100755
index 0e39eb969..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sample04.lasso
+++ /dev/null
@@ -1,93 +0,0 @@
-[//lasso
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Sample page.
- */
-]
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - Lasso - Sample 4
- This sample shows how to change the editor skin.
-
-
-
-
- Select the skin to load:
-
-
-
-
-
-
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sampleposteddata.lasso b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sampleposteddata.lasso
deleted file mode 100755
index 257de3487..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/lasso/sampleposteddata.lasso
+++ /dev/null
@@ -1,50 +0,0 @@
-[//lasso
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Sample page.
- */
-]
-
-
-
- FCKeditor - Samples - Posted Data
-
-
-
-
-
-
FCKeditor - Samples - Posted Data
- This page lists all data posted by the form.
-
-
-
-
Field Name
-
Value
-
-[iterate(client_postparams, local('this'))]
-
-
[#this->first]
-
[#this->second]
-
-[/iterate]
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample01.cgi b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample01.cgi
deleted file mode 100755
index 3b6debc9c..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample01.cgi
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env perl
-
-#####
-# FCKeditor - The text editor for Internet - http://www.fckeditor.net
-# Copyright (C) 2003-2008 Frederico Caldeira Knabben
-#
-# == BEGIN LICENSE ==
-#
-# Licensed under the terms of any of the following licenses at your
-# choice:
-#
-# - GNU General Public License Version 2 or later (the "GPL")
-# http://www.gnu.org/licenses/gpl.html
-#
-# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-# http://www.gnu.org/licenses/lgpl.html
-#
-# - Mozilla Public License Version 1.1 or later (the "MPL")
-# http://www.mozilla.org/MPL/MPL-1.1.html
-#
-# == END LICENSE ==
-#
-# Sample page.
-#####
-
-## START: Hack for Windows (Not important to understand the editor code... Perl specific).
-if(Windows_check()) {
- chdir(GetScriptPath($0));
-}
-
-sub Windows_check
-{
- # IIS,PWS(NT/95)
- $www_server_os = $^O;
- # Win98 & NT(SP4)
- if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
- # AnHTTPd/Omni/IIS
- if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
- # Win Apache
- if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
- if($www_server_os=~ /win/i) { return(1); }
- return(0);
-}
-
-sub GetScriptPath {
- local($path) = @_;
- if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
- $path;
-}
-## END: Hack for IIS
-
-require '../../fckeditor.pl';
-
-# When $ENV{'PATH_INFO'} cannot be used by perl.
-# $DefRootPath = "/XXXXX/_samples/perl/sample01.cgi"; Please write in script.
-
-my $DefServerPath = "";
-my $ServerPath;
-
- $ServerPath = &GetServerPath();
- print "Content-type: text/html\n\n";
- print <<"_HTML_TAG_";
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
FCKeditor - Perl - Sample 1
- This sample displays a normal HTML form with an FCKeditor with full features
- enabled.
-
-
-
-
-_HTML_TAG_
-
-################
-#Please use this function, rewriting it depending on a server's environment.
-################
-sub GetServerPath
-{
-my $dir;
-
- if($DefServerPath) {
- $dir = $DefServerPath;
- } else {
- if($ENV{'PATH_INFO'}) {
- $dir = $ENV{'PATH_INFO'};
- } elsif($ENV{'FILEPATH_INFO'}) {
- $dir = $ENV{'FILEPATH_INFO'};
- } elsif($ENV{'REQUEST_URI'}) {
- $dir = $ENV{'REQUEST_URI'};
- }
- }
- return($dir);
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample02.cgi b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample02.cgi
deleted file mode 100755
index dd7c26de3..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample02.cgi
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env perl
-
-#####
-# FCKeditor - The text editor for Internet - http://www.fckeditor.net
-# Copyright (C) 2003-2008 Frederico Caldeira Knabben
-#
-# == BEGIN LICENSE ==
-#
-# Licensed under the terms of any of the following licenses at your
-# choice:
-#
-# - GNU General Public License Version 2 or later (the "GPL")
-# http://www.gnu.org/licenses/gpl.html
-#
-# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-# http://www.gnu.org/licenses/lgpl.html
-#
-# - Mozilla Public License Version 1.1 or later (the "MPL")
-# http://www.mozilla.org/MPL/MPL-1.1.html
-#
-# == END LICENSE ==
-#
-# Sample page.
-#####
-
-## START: Hack for Windows (Not important to understand the editor code... Perl specific).
-if(Windows_check()) {
- chdir(GetScriptPath($0));
-}
-
-sub Windows_check
-{
- # IIS,PWS(NT/95)
- $www_server_os = $^O;
- # Win98 & NT(SP4)
- if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
- # AnHTTPd/Omni/IIS
- if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
- # Win Apache
- if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
- if($www_server_os=~ /win/i) { return(1); }
- return(0);
-}
-
-sub GetScriptPath {
- local($path) = @_;
- if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
- $path;
-}
-## END: Hack for IIS
-
-require '../../fckeditor.pl';
-
-# When $ENV{'PATH_INFO'} cannot be used by perl.
-# $DefRootPath = "/XXXXX/_samples/perl/sample02.cgi"; Please write in script.
-
-my $DefServerPath = "";
-my $ServerPath;
-
- $ServerPath = &GetServerPath();
-
- if($ENV{'REQUEST_METHOD'} eq "POST") {
- read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
- } else {
- $buffer = $ENV{'QUERY_STRING'};
- }
- @pairs = split(/&/,$buffer);
- foreach $pair (@pairs) {
- ($name,$value) = split(/=/,$pair);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- $value =~ s/\t//g;
- $value =~ s/\r\n/\n/g;
- $FORM{$name} .= "\0" if(defined($FORM{$name}));
- $FORM{$name} .= $value;
- }
-
- print "Content-type: text/html\n\n";
- print <<"_HTML_TAG_";
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - Perl - Sample 2
- This sample shows the editor in all its available languages.
-
-
-
-
- Select a language:
-
-
-
-
-
-
-
-
-
-
-_HTML_TAG_
-
-################
-#Please use this function, rewriting it depending on a server's environment.
-################
-sub GetServerPath
-{
-my $dir;
-
- if($DefServerPath) {
- $dir = $DefServerPath;
- } else {
- if($ENV{'PATH_INFO'}) {
- $dir = $ENV{'PATH_INFO'};
- } elsif($ENV{'FILEPATH_INFO'}) {
- $dir = $ENV{'FILEPATH_INFO'};
- } elsif($ENV{'REQUEST_URI'}) {
- $dir = $ENV{'REQUEST_URI'};
- }
- }
- return($dir);
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample03.cgi b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample03.cgi
deleted file mode 100755
index ef9d723ce..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample03.cgi
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/usr/bin/env perl
-
-#####
-# FCKeditor - The text editor for Internet - http://www.fckeditor.net
-# Copyright (C) 2003-2008 Frederico Caldeira Knabben
-#
-# == BEGIN LICENSE ==
-#
-# Licensed under the terms of any of the following licenses at your
-# choice:
-#
-# - GNU General Public License Version 2 or later (the "GPL")
-# http://www.gnu.org/licenses/gpl.html
-#
-# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-# http://www.gnu.org/licenses/lgpl.html
-#
-# - Mozilla Public License Version 1.1 or later (the "MPL")
-# http://www.mozilla.org/MPL/MPL-1.1.html
-#
-# == END LICENSE ==
-#
-# Sample page.
-#####
-
-## START: Hack for Windows (Not important to understand the editor code... Perl specific).
-if(Windows_check()) {
- chdir(GetScriptPath($0));
-}
-
-sub Windows_check
-{
- # IIS,PWS(NT/95)
- $www_server_os = $^O;
- # Win98 & NT(SP4)
- if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
- # AnHTTPd/Omni/IIS
- if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
- # Win Apache
- if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
- if($www_server_os=~ /win/i) { return(1); }
- return(0);
-}
-
-sub GetScriptPath {
- local($path) = @_;
- if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
- $path;
-}
-## END: Hack for IIS
-
-require '../../fckeditor.pl';
-
-# When $ENV{'PATH_INFO'} cannot be used by perl.
-# $DefRootPath = "/XXXXX/_samples/perl/sample03.cgi"; Please write in script.
-
-my $DefServerPath = "";
-my $ServerPath;
-
- $ServerPath = &GetServerPath();
-
- if($ENV{'REQUEST_METHOD'} eq "POST") {
- read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
- } else {
- $buffer = $ENV{'QUERY_STRING'};
- }
- @pairs = split(/&/,$buffer);
- foreach $pair (@pairs) {
- ($name,$value) = split(/=/,$pair);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- $value =~ s/\t//g;
- $value =~ s/\r\n/\n/g;
- $FORM{$name} .= "\0" if(defined($FORM{$name}));
- $FORM{$name} .= $value;
- }
-
- print "Content-type: text/html\n\n";
- print <<"_HTML_TAG_";
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - Perl - Sample 3
- This sample shows how to change the editor toolbar.
-
-
-
-
- Select the toolbar to load:
-
-
-
-
-
-
-
-
-
-
-_HTML_TAG_
-
-################
-#Please use this function, rewriting it depending on a server's environment.
-################
-sub GetServerPath
-{
-my $dir;
-
- if($DefServerPath) {
- $dir = $DefServerPath;
- } else {
- if($ENV{'PATH_INFO'}) {
- $dir = $ENV{'PATH_INFO'};
- } elsif($ENV{'FILEPATH_INFO'}) {
- $dir = $ENV{'FILEPATH_INFO'};
- } elsif($ENV{'REQUEST_URI'}) {
- $dir = $ENV{'REQUEST_URI'};
- }
- }
- return($dir);
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample04.cgi b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample04.cgi
deleted file mode 100755
index 4eb232cce..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sample04.cgi
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/env perl
-
-#####
-# FCKeditor - The text editor for Internet - http://www.fckeditor.net
-# Copyright (C) 2003-2008 Frederico Caldeira Knabben
-#
-# == BEGIN LICENSE ==
-#
-# Licensed under the terms of any of the following licenses at your
-# choice:
-#
-# - GNU General Public License Version 2 or later (the "GPL")
-# http://www.gnu.org/licenses/gpl.html
-#
-# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-# http://www.gnu.org/licenses/lgpl.html
-#
-# - Mozilla Public License Version 1.1 or later (the "MPL")
-# http://www.mozilla.org/MPL/MPL-1.1.html
-#
-# == END LICENSE ==
-#
-# Sample page.
-#####
-
-## START: Hack for Windows (Not important to understand the editor code... Perl specific).
-if(Windows_check()) {
- chdir(GetScriptPath($0));
-}
-
-sub Windows_check
-{
- # IIS,PWS(NT/95)
- $www_server_os = $^O;
- # Win98 & NT(SP4)
- if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
- # AnHTTPd/Omni/IIS
- if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
- # Win Apache
- if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
- if($www_server_os=~ /win/i) { return(1); }
- return(0);
-}
-
-sub GetScriptPath {
- local($path) = @_;
- if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
- $path;
-}
-## END: Hack for IIS
-
-require '../../fckeditor.pl';
-
-# When $ENV{'PATH_INFO'} cannot be used by perl.
-# $DefRootPath = "/XXXXX/_samples/perl/sample04.cgi"; Please write in script.
-
-my $DefServerPath = "";
-my $ServerPath;
-
- $ServerPath = &GetServerPath();
-
- if($ENV{'REQUEST_METHOD'} eq "POST") {
- read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
- } else {
- $buffer = $ENV{'QUERY_STRING'};
- }
- @pairs = split(/&/,$buffer);
- foreach $pair (@pairs) {
- ($name,$value) = split(/=/,$pair);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- $value =~ s/\t//g;
- $value =~ s/\r\n/\n/g;
- $FORM{$name} .= "\0" if(defined($FORM{$name}));
- $FORM{$name} .= $value;
- }
-
-#!!Caution javascript \ Quart
-
- print "Content-type: text/html\n\n";
- print <<"_HTML_TAG_";
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - Perl - Sample 4
- This sample shows how to change the editor skin.
-
-
-
-
- Select the skin to load:
-
-
-
-
-
-
-
-
-
-
-_HTML_TAG_
-
-################
-#Please use this function, rewriting it depending on a server's environment.
-################
-sub GetServerPath
-{
-my $dir;
-
- if($DefServerPath) {
- $dir = $DefServerPath;
- } else {
- if($ENV{'PATH_INFO'}) {
- $dir = $ENV{'PATH_INFO'};
- } elsif($ENV{'FILEPATH_INFO'}) {
- $dir = $ENV{'FILEPATH_INFO'};
- } elsif($ENV{'REQUEST_URI'}) {
- $dir = $ENV{'REQUEST_URI'};
- }
- }
- return($dir);
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sampleposteddata.cgi b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sampleposteddata.cgi
deleted file mode 100755
index 974e3a613..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/perl/sampleposteddata.cgi
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env perl
-
-#####
-# FCKeditor - The text editor for Internet - http://www.fckeditor.net
-# Copyright (C) 2003-2008 Frederico Caldeira Knabben
-#
-# == BEGIN LICENSE ==
-#
-# Licensed under the terms of any of the following licenses at your
-# choice:
-#
-# - GNU General Public License Version 2 or later (the "GPL")
-# http://www.gnu.org/licenses/gpl.html
-#
-# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-# http://www.gnu.org/licenses/lgpl.html
-#
-# - Mozilla Public License Version 1.1 or later (the "MPL")
-# http://www.mozilla.org/MPL/MPL-1.1.html
-#
-# == END LICENSE ==
-#
-# This page lists the data posted by a form.
-#####
-
-## START: Hack for Windows (Not important to understand the editor code... Perl specific).
-if(Windows_check()) {
- chdir(GetScriptPath($0));
-}
-
-sub Windows_check
-{
- # IIS,PWS(NT/95)
- $www_server_os = $^O;
- # Win98 & NT(SP4)
- if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
- # AnHTTPd/Omni/IIS
- if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
- # Win Apache
- if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
- if($www_server_os=~ /win/i) { return(1); }
- return(0);
-}
-
-sub GetScriptPath {
- local($path) = @_;
- if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
- $path;
-}
-## END: Hack for IIS
-
-require '../../fckeditor.pl';
-
- if($ENV{'REQUEST_METHOD'} eq "POST") {
- read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
- } else {
- $buffer = $ENV{'QUERY_STRING'};
- }
- @pairs = split(/&/,$buffer);
- foreach $pair (@pairs) {
- ($name,$value) = split(/=/,$pair);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- $value =~ s/\t//g;
- $value =~ s/\r\n/\n/g;
- $FORM{$name} .= "\0" if(defined($FORM{$name}));
- $FORM{$name} .= $value;
- }
-
- print "Content-type: text/html\n\n";
- print <<"_HTML_TAG_";
-
-
-
-
- FCKeditor - Samples - Posted Data
-
-
-
-
-
-
FCKeditor - Samples - Posted Data
- This page lists all data posted by the form.
-
-
- This sample displays a normal HTML form with an FCKeditor with full features
- enabled.
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/php/sample02.php b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/php/sample02.php
deleted file mode 100755
index 3682b611f..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/php/sample02.php
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
- FCKeditor - Sample
-
-
-
-
-
-
-
FCKeditor - PHP - Sample 2
- This sample shows the editor in all its available languages.
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/py/sample01.py b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/py/sample01.py
deleted file mode 100755
index c56f16e58..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/py/sample01.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python
-
-"""
-FCKeditor - The text editor for Internet - http://www.fckeditor.net
-Copyright (C) 2003-2008 Frederico Caldeira Knabben
-
-== BEGIN LICENSE ==
-
-Licensed under the terms of any of the following licenses at your
-choice:
-
- - GNU General Public License Version 2 or later (the "GPL")
- http://www.gnu.org/licenses/gpl.html
-
- - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- http://www.gnu.org/licenses/lgpl.html
-
- - Mozilla Public License Version 1.1 or later (the "MPL")
- http://www.mozilla.org/MPL/MPL-1.1.html
-
-== END LICENSE ==
-
-Sample page.
-"""
-
-import cgi
-import os
-
-# Ensure that the fckeditor.py is included in your classpath
-import fckeditor
-
-# Tell the browser to render html
-print "Content-Type: text/html"
-print ""
-
-# Document header
-print """
-
-
- FCKeditor - Sample
-
-
-
-
-
-
FCKeditor - Python - Sample 1
- This sample displays a normal HTML form with an FCKeditor with full features
- enabled.
-
-
-"""
-
-# For testing your environments
-print ""
-for key in os.environ.keys():
- print "%s: %s " % (key, os.environ.get(key, ""))
-print ""
-
-# Document footer
-print """
-
-
-"""
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/py/sampleposteddata.py b/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/py/sampleposteddata.py
deleted file mode 100755
index b3a9f0e17..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/_samples/py/sampleposteddata.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-
-"""
-FCKeditor - The text editor for Internet - http://www.fckeditor.net
-Copyright (C) 2003-2008 Frederico Caldeira Knabben
-
-== BEGIN LICENSE ==
-
-Licensed under the terms of any of the following licenses at your
-choice:
-
- - GNU General Public License Version 2 or later (the "GPL")
- http://www.gnu.org/licenses/gpl.html
-
- - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- http://www.gnu.org/licenses/lgpl.html
-
- - Mozilla Public License Version 1.1 or later (the "MPL")
- http://www.mozilla.org/MPL/MPL-1.1.html
-
-== END LICENSE ==
-
-This page lists the data posted by a form.
-"""
-
-import cgi
-import os
-
-# Tell the browser to render html
-print "Content-Type: text/html"
-print ""
-
-try:
- # Create a cgi object
- form = cgi.FieldStorage()
-except Exception, e:
- print e
-
-# Document header
-print """
-
-
- FCKeditor - Samples - Posted Data
-
-
-
-
-
-"""
-
-# This is the real work
-print """
-
FCKeditor - Samples - Posted Data
- This page lists all data posted by the form.
-
-
-
-
Field Name
-
Value
-
-"""
-for key in form.keys():
- try:
- value = form[key].value
- print """
-
[#2000] The #
- character is now properly encoded in file names returned by the File Browser.
-
[#1945] New folders
- and file names are now properly sanitized against control characters.
-
[#1944] Backslash
- character is now disallowed in current folder path.
-
[#1055] Added
- logic to override JavaScript errors occurring inside the editing frame due to user
- added JavaScript code.
-
[#1647] Hitting
- ENTER on list items containing block elements will now create new list item elements,
- instead of adding further blocks to the same list item.
-
[#1411] Label
- only combos now get properly grayed out when moving to source view.
-
[#2009] Fixed
- an important bug regarding styles removal on styled text boundaries, introduced
- with the 2.6 Beta 1.
-
[#2011] Internal
- CSS <style> tags where being outputted when FullPage=true.
-
[#2016] The Link
- dialog now properly selects the first field when opening it to modify mailto or
- anchor links. This problem was also throwing an error in IE.
-
[#2021] The caret
- will no longer remain behind in the editing area when the placeholder dialog is
- opened.
-
[#2024] Fixed
- JavaScript error in IE when the user tries to open dialogs in Source mode.
-
[#1853] Setting
- ShiftEnterMode to p or div now works correctly when EnterMode is br.
-
[#1838] Fixed
- the issue where context menus sometimes don't disappear after selecting an option.
-
-
[#2028] Fixed
- JavaScript error when EnterMode=br and user tries to insert a page break.
-
[#2002] Fixed
- the issue where the maximize editor button does not vertically expand the editing
- area in Firefox.
[#1832] Calling
- FCK.InsertHtml() in non-IE browsers would now activate the document processor as
- expected.
-
[#1998] The native
- XMLHttpRequest class is now used in IE, whenever it is available.
-
[#1792] In IE,
- the browser was able to enter in an infinite loop when working with multiple editors
- in the same page.
-
[#1948] Some
- CSS rules are reset to dialog elements to avoid conflict with the page CSS.
-
[#1965] IE was
- having problems with SpellerPages, causing some errors to be thrown when completing
- the spell checking in some situations.
-
[#2042] The FitWindow
- command was throwing an error if executed in an editor where its relative button
- is not present in the toolbar.
-
[#922] Implemented
- a generic document processor for <OBJECT> and <EMBED> tags.
-
[#1831] Fixed
- the issue where the placeholder icon for <EMBED> tags does not always show
- up in IE7.
-
[#2049] Fixed
- a deleted cursor CSS attribute in the minified CSS inside fck_dialog_common.js.
-
[#1806] In IE,
- the caret will not any more move to the previous line when selecting a Format style
- inside an empty paragraph.
-
[#1990] In IE,
- dialogs using API calls which deals with the selection, like InsertHtml now can
- be sure the selection will be placed in the correct position.
-
[#1997] With
- IE, the first character of table captions where being lost on table creation.
-
The selection and cursor position was not being properly handled when creating some
- elements like forms and tables.
-
[#662] In the
- Perl sample files, the GetServerPath function will now calculate the path properly.
-
-
- Version 2.6 Beta 1
-
- New Features and Improvements:
-
-
[#35] New
- (and cool!) floating dialog system, avoiding problems with popup blockers
- and enhancing the editor usability.
[#123] Full support
- for document.domain with automatic domain detection.
-
[#1622] New
- inline CSS cache feature, making it possible to avoid downloading the CSS
- files for the editing area and skins. For that, it is enough to set the EditorAreaCSS,
- SkinEditorCSS and SkinDialogCSS to string values in the format "/absolute/path/for/urls/|<minified
- CSS styles". All internal CSS links are already using this feature.
-
New language file for Canadian French.
-
-
- Fixed Bugs:
-
-
[#1643] Resolved
- several "strict warning" messages in Firefox when running FCKeditor.
-
[#1522] The ENTER
- key will now work properly in IE with the cursor at the start of a formatted block.
-
[#1503] It's
- possible to define in the Styles that a Style (with an empty class) must be shown
- selected only when no class is present in the current element, and selecting that
- item will clear the current class (it does apply to any attribute, not only classes).
-
[#191] The scrollbars
- are now being properly shown in Firefox Mac when placing FCKeditor inside a hidden
- div.
-
[#503] Orphaned
- <li> elements now get properly enclosed in a <ul> on output.
-
[#309] The ENTER
- key will not any more break <button> elements at the beginning of paragraphs.
-
[#1654] The editor
- was not loading on a specific unknown situation. The breaking point has been removed.
-
[#1707] The editor
- no longer hangs when operating on documents imported from Microsoft Word.
-
[#1514] Floating
- panels attached to a shared toolbar among multiple FCKeditor instances are no longer
- misplaced when the editing areas are absolutely or relatively positioned.
-
[#1715] The ShowDropDialog
- is now enforced only when ForcePasteAsPlainText = true.
-
[#1336] Sometimes
- the autogrow plugin didn't work properly in Firefox.
-
[#1728] External
- toolbars are now properly sized in Opera.
-
[#1782] Clicking
- on radio buttons or checkboxes in the editor in IE will no longer cause lockups
- in IE.
-
[#805] The FCKConfig.Keystrokes
- commands where executed even if the command itself was disabled.
-
[#982] The button
- to empty the box in the "Paste from Word" has been removed as it leads to confusion
- for some users.
-
[#1682] Editing
- control elements in Firefox, Opera and Safari now works properly.
-
[#1613] The editor
- was surrounded by a <div> element that wasn't really needed.
-
[#676] If a form
- control was moved in IE after creating it, then it did lose its name.
-
[#738] It wasn't
- possible to change the type of an existing button.
-
[#1854] Indentation
- now works inside table cells.
-
[#1717] The editor
- was entering on looping on some specific cases when dealing with invalid source
- markup.
-
[#1530] Pasting
- text into the "Find what" fields in the Find and Replace dialog would now activate
- the find and replace buttons.
-
[#1828] The Find/Replace
- dialog will no longer display wrong starting positions for the match when there
- are multiple and identical characters preceding the character at the real starting
- point of the match.
-
[#1878] Fixed
- a JavaScript error which occurs in the Find/Replace dialog when the user presses
- "Find" or "Replace" after the "No match found" message has appeared.
-
[#1355] Line
- breaks and spaces are now conserved when converting to and from the "Formatted"
- format.
-
[#1670] Improved
- the background color behind smiley icons and special characters in their corresponding
- dialogs.
-
[#1693] Custom
- error messages are now properly displayed in the file browser.
-
[#970] The text
- and value fields in the selection box dialog will no longer extend beyond the dialog
- limits when the user inputs a very long text or value for one of the selection options.
-
[#479] Fixed the
- issue where pressing Enter in an <o:p> tag in IE does not generate line breaks.
-
[#481] Fixed the
- issue where the image preview in image dialog sometimes doesn't display after selecting
- the image from server browser.
-
[#1488] PHP integration:
- the FCKeditor class is now more PHP5/6 friendly ("public" keyword is used instead
- of depreciated "var").
-
[#1815] PHP integration:
- removed closing tag: "?>", so no additional whitespace added when files are included.
-
[#1906] PHP file
- browser: fixed problems with DetectHtml() function when open_basedir was set.
-
[#1871] PHP file
- browser: permissions applied with the chmod command are now configurable.
-
[#1872] Perl
- file browser: permissions applied with the chmod command are now configurable.
-
[#1873] Python
- file browser: permissions applied with the chmod command are now configurable.
-
[#1572] ColdFusion
- integration: fixed issues with setting the editor height.
-
[#1692] ColdFusion
- file browser: it is possible now to define TempDirectory to avoid issues with GetTempdirectory()
- returning an empty string.
-
[#1379] ColdFusion
- file browser: resolved issues with OnRequestEnd.cfm breaking the file browser.
-
[#1509] InsertHtml()
- in IE will no longer turn the preceding normal whitespace into .
-
[#958] The AddItem
- method now has an additional fifth parameter "customData" that will be sent to the
- Execute method of the command for that menu item, allowing a single command to be
- used for different menu items..
-
[#1502] The RemoveFormat
- command now also removes the attributes from the cleaned text. The list of attributes
- is configurable with FCKConfig.RemoveAttributes.
-
[#1596] On Safari,
- dialogs have now right-to-left layout when it runs a RTL language, like Arabic.
-
[#1344] Added
- warning message on Copy and Cut operation failure on IE due to paste permission
- settings.
-
[#1868] Links
- to file browser has been changed to avoid requests containing double dots.
-
[#1229] Converting
- multiple contiguous paragraphs to Formatted will now be merged into a single <PRE>
- block.
-
[#1627] Samples
- failed to load from local filesystem in IE7.
The new "FCKeditor.ReplaceAllTextareas" function is being introduced,
- making it possible to replace many (or unknown) <textarea> elements in a single
- call. The replacement can be also filtered by CSS class name, or by a custom function
- evaluator.
-
It is now possible to set the default BasePath for all editor instances by setting
- FCKeditor.BasePath. This is extremely useful when working with
- the ReplaceAllTextareas function.
-
-
-
-
- Fixed Bugs:
-
-
[#339] [#681] The SpellerPages
- spell checker will now completely ignore the presence of HTML tags in the text.
-
-
[#1643] Resolved
- several "strict warning" messages in Firefox when running FCKeditor.
-
[#1603] Certain
- specific markup was making FCKeditor entering in a loop, blocking its execution.
-
-
[#1664] The ENTER
- key will not any more swap the order of the tags when hit at the end of paragraphs.
-
-
-
- Version 2.5
-
- New Features and Improvements:
-
-
The heading options have been moved to the top, in the default settings for the
- Format combo.
-
-
- Fixed Bugs:
-
-
The focus is now correctly set when working on Safari.
-
[#1436] Nested
- context menu panels are now correctly closed on Safari.
-
Empty anchors are now properly created on Safari.
-
[#1359] FCKeditor
- will no longer produce the strange visual effect of creating a selected space and
- then deleting it in Internet Explorer.
-
[#1399] Removed
- the empty entry in the language selection box of sample03.html.
-
[#1400] Fixed
- the issue where the style selection box in sample14.html is not context sensitive.
-
[#1401] Completed
- Hebrew translation of the user interface.
-
[#1409] Completed
- Finnish translation of the user interface.
-
[#1414] Fixed
- the issue where entity code words written inside a <pre> block in Source mode
- are not converted to the corresponding characters after switching back to editor
- mode.
-
[#1418] Fixed
- the issue where a detached toolbar would flicker when FCKeditor is being loaded.
-
[#1419] Fixed
- the issue where pressing Delete in the middle of two lists would incorrectly move
- contents after the lists to the character position.
-
[#1420] Fixed
- the issue where empty list items can become collapsed and uneditable when it has
- one of more indented list items directly under it.
-
[#1431] Fixed
- the issue where pressing Enter in a <pre> block in Internet Explorer would
- move the caret one space forward instead of sending it to the next line.
-
[#1472] Completed
- Arabic translation of the user interface.
-
[#1474] Fixed
- the issue where reloading a page containing FCKeditor may provoke JavaScript errors
- in Internet Explorer.
-
[#1478] Fixed
- the issue where parsing fckstyles.xml fails if the file contains no <style>
- nodes.
-
[#1491] Fixed
- the issue where FCKeditor causes the selection to include an "end of line" character
- in list items even though the list item is empty.
-
[#1496] Fixed
- the issue where attributes under <area> and <map> nodes are destroyed
- or left unprotected when switching to and from Source mode.
-
[#1500] Fixed
- the issue where the function _FCK_PaddingNodeListener() is called excessively which
- negatively affects performance.
-
[#1514] Fixed
- the issue where floating menus are incorrectly positioned when the toolbar or the
- editor frame are not static positioned.
-
[#1518] Fixed
- the issue where excessive <BR> nodes are not removed after a paragraph is
- split when creating lists.
-
[#1521] Fixed
- JavaScript error and erratic behavior of the Replace dialog.
-
[#1524] Fixed
- the issue where the caret jumps to the beginning or end of a list block and when
- user is trying to select the end of a list item.
-
Completed Simplified Chinese translation of the user interface.
-
Completed Estonian translation of the user interface.
-
[#1406] Editor
- was always "dirty" if flash is available in the contents.
-
[#1561] Non standard
- elements are now properly applied if defined in the styles XML file.
-
[#1412] The _QuickUploadLanguage
- value is now work properly for Perl.
-
Several compatibility fixes for Firefox 3 (Beta 1):
-
-
[#1558] Nested
- context menu close properly when one of their options is selected.
-
[#1556] Dialogs
- contents are now showing completely, without scrollbar.
-
[#1559] It is
- not possible to have more than one panel opened at the same time.
[#1557] The "Automatic"
- and "More colors..." buttons were improperly styled in the color selector panels
- (Opera too).
-
[#1462] The enter
- key will not any more scroll the main window.
-
-
-
[#1562] Fixed
- the issue where empty paragraphs are added around page breaks each time the user
- switches to Source mode.
-
[#1578] The editor
- will now scroll correctly when hitting enter in front of a paragraph.
-
[#1579] Fixed
- the issue where the create table and table properties dialogs are too narrow for
- certain translations.
-
[#1580] Completed
- Polish translation of the user interface.
-
[#1591] Fixed
- JavaScript error when using the blockquote command in an empty document in IE.
-
[#1592] Fixed
- the issue where attempting to remove a blockquote with an empty paragraph would
- leave behind an empty blockquote IE.
-
[#1594] Undo/Redo
- will now work properly for the color selectors.
-
[#1597] The color
- boxes are now properly rendered in the color selector panels on sample14.html.
-
-
- Version 2.5 Beta
-
- New Features and Improvements:
-
-
[#624] [#634] [#1300] [#1301]
- Official compatibility support with Opera 9.50 and Safari 3
- (WebKit based browsers actually). These browsers are still in Beta, but we are confident
- that we'll have amazing results as soon as they get stable. We are continuously
- collaborating with Opera Software and Apple to bring a wonderful FCKeditor experience
- over their browser platforms.
-
[#494] Introduced
- the new Style System. We are not anymore relaying on browser features
- to apply and remove styles, which guarantees that the editor will behave in
- the same way in all browsers. It is an incredibly flexible system,
- which aims to fit all developer's needs, from Flash content or HTML4 to XHTML 1.0
- Strict or XHTML 1.1:
-
-
All basic formatting features, like Bold and Italic, can be precisely controlled
- by using the configuration file (CoreStyles setting). It means that now,
- the Bold button, for example, can produce <b>, <strong>, <span class...>,
- <span style...> or anything the developer prefers.
-
Again with the CoreStyles setting, each block format, font, size, and even
- the color pickers can precisely reflect end developer's needs.
-
Because of the above changes, font sizes are much more flexible. Any kind of
- font unit can be used, including a mix of units.
-
All styles, including toolbar bottom styles, are precisely controlled when being
- applied to the document. FCKeditor uses an element table derived from the W3C XHTML
- DTDs to precisely create the elements, guarantee standards compliant code.
-
No more <font> tags... well... actually, the system is so flexible
- that it is up to you to use them or not.
-
It is possible to configure FCKeditor to produce a truly semantic aware and
- XHTML 1.1 compliant code. Check out sample14.html.
-
It's also possible to precisely control which inline elements must be removed with
- the "Remove All" button, by using the "RemoveFormatTags"
- setting.
-
[#1231] [#160] Paragraph indentation
- and justification now uses style attributes and don't create unnecessary
- elements, and <blockquote> is not anymore used for it. Now, even CSS classes
- can be used to indent or align text.
-
All paragraph formatting features work well when EnterMode=br.
-
[#172] All paragraph
- formatting features work well when list items too.
-
-
-
[#1197] [#132] The toolbar
- now presents a new button for Blockquote. The indentation button
- will not anymore be used for that.
-
[#125] Table's
- columns size can now be changed by dragging on cell borders, with
- the "dragresizetable" plugin.
-
The EditorAreaCSS config option can now also be set to a string of paths separated
- by commas.
-
[#212] New "Show
- Blocks" command button in toolbar to show block details in the editing
- area.
-
[#915] The
- undo/redo system has been revamped to work the same across Internet Explorer
- and Gecko-based browsers (e.g. Firefox). A number of critical bugs in the undo/redo
- system are also fixed.
-
[#194] The editor
- now uses the Data Processor technology, which makes it possible
- to handle different input formats. A sample of it may be found at "editor/plugins/bbcode/_sample",
- that shows some simple BBCode support.
-
[#145] The "htaccess.txt"
- file has been renamed to ".htaccess" as it doesn't bring security concerns, being
- active out of the box.
-
File Browser and Quick Upload changes:
-
-
[#163] Attention: The default connector
- in fckconfig.js has been changed from ASP to PHP. If you are using ASP remember
- to change the _FileBrowserLanguage and _QuickUploadLanguage settings in your fckconfig.js.
- [#454] The file
- browser and upload connectors have been unified so they can reuse the same configuration
- settings.
-
[#865] The ASP
- and PHP connectors have been improved so it's easy to select the location of the
- destination folder for each file type, and it's no longer necessary to use the "file",
- "image", "flash" subfolders
- Attention: The location of
- all the connectors have been changed in the fckconfig.js file. Please check your
- settings to match the current ones. Also review carefully the config file for your
- server language.
[#575] The Python
- connector has been rewritten as a WSGI app to be fully compatible with the latest
- python frameworks and servers. The QuickUpload feature has been added as well as
- all the features available in the PHP connector. Thanks to Mariano Reingart.
-
[#561] The ASP
- connector provides an AbsolutePath setting so it's possible to set the url to a
- full domain or a relative path and specify that way the physical folder where the
- files are stored..
-
[#333] The Quick
- Upload now can use the same ServerPath parameter as the full connector.
-
[#199] The AllowedCommands
- configuration setting is available in the asp and php connectors so it's possible
- to disallow the upload of files (although the "select file" button will still be
- available in the file browser).
-
-
-
[#100] A new configuration
- directive "FCKConfig.EditorAreaStyles" has been implemented to allow setting editing
- area styles from JavaScript.
-
[#102] HTML code
- generated by the "Paste As Plain Text" feature now obeys the EnterMode setting.
-
[#1266] Introducing
- the HtmlEncodeOutput setting to instruct the editor to HTML-encode some characters
- (&, < and >) in the posted data.
-
[#357] Added a
- "Remove Anchor" option in the context menu for anchors.
-
[#1060] Compatibility
- checks with Firefox 3.0 Alpha.
-
[#817] [#1077] New "Merge
- Down/Right" commands for merging tables cells in non-Gecko browsers.
-
[#1288] The "More
- Colors..." button in color selector popup has been made optional and configurable
- by the EnableMoreFontColors option.
-
[#356] The
- Find and Replace dialogs are now unified into a single dialog with tabs.
-
[#549] Added a
- 'None' option to the FCKConfig.ToolbarLocation option to allow for hidden toolbars.
-
-
[#1313] An XHTML
- 1.1 target editor sample has been created as sample14.html.
-
The ASP, ColdFusion and PHP integration have been aligned to our standards.
-
-
- Fixed Bugs:
-
-
[#71] [#243] [#267]
- The editor now takes care to not create invalid nested block elements, like creating
- <form> or <hr> inside <p>.
[SF
- Patch 1315722] Avoid getting a cached version of the folder contents after uploading
- a file
-
[SF
- Patch 1386086] The php connector has been protected so mkdir doesn't fail if
- there are double slashes.
-
[#943] The PHP
- connector now specifies that the included files are relative to the current path.
-
[#560] The PHP
- connector will work better if the connector or the userfiles folder is a symlink.
-
[#784] Fixed a
- non initialized $php_errormsg in the PHP connector.
-
[#802] The replace
- dialog will now advance its searching position correctly and is able to search for
- strings spanning across multiple inline tags.
-
[#944] The _samples
- didn't work directly from the Mac filesystem.
-
[#946] Toolbar
- images didn't show in non-IE browsers if the path contained a space.
-
[#291] [#395] [#932] Clicking outside the editor
- it was possible to paste or apply formatting to the rest of the page in IE.
-
[#137] Fixed FCKConfig.TabSpaces
- being ignored, and weird behaviors when pressing tab in edit source mode.
-
[#268] Fixed special
- XHTML characters present in event attribute values being converted inappropriately
- when switching to source view.
-
[#272] The toolbar
- was cut sometimes in IE to just one row if there are multiple instances of the editor.
-
[#515] Tables
- in Firefox didn't inherit font styles properly in Standards mode.
-
[#321] If FCKeditor
- is initially hidden in Firefox it will no longer be necessary to call the oEditor.MakeEditable()
- function.
-
[#299] The 'Browse
- Server' button in the Image and Flash dialogs was a little too high.
-
[#931] The BodyId
- and BodyClass configuration settings weren't applied in the preview window.
-
[#583] The "noWrap"
- attribute for table cells was getting an empty value in Firefox. Thanks to geirhelge.
-
[#141] Fixed incorrect
- startup focus in Internet Explorer after page reloads.
-
[#143] Fixed browser
- lockup when the user writes <!--{PS..x}> into the editor in source mode.
-
[#174] Fixed incorrect
- positioning of FCKeditor in full screen mode.
-
[#978] Fixed a
- SpellerPages error with ColdFusion when no suggestions where available for a word.
-
[#977] The "shape"
- attribute of <area> had its value changed to uppercase in IE.
-
[#996] "OnPaste"
- event listeners will now get executed only once.
-
[#289] Removed
- debugging popups from page load regarding JavaScript and CSS loading errors.
-
[#328] [#346] [#404] Fixed a number of problems
- regarding <pre> blocks:
-
-
Leading whitespaces and line breaks in <pre> blocks are trimmed when the user
- switches between editor mode and source mode;
-
Pressing Enter inside a <pre> block would split the block into two, but the
- expected behavior is simply inserting a line break;
-
Simple line breaks inside <pre> blocks entered in source mode are being turned
- into <br> tags when the user switches to editor mode and back.
-
-
-
[#581] Fixed the
- issue where the "Maximize the editor size" toolbar button stops working if any of
- the following occurs:
-
-
There exists a form input whose name or id is "style" in FCKeditor's host form;
-
There exists a form input whose name or id is "className" in FCKeditor's host form;
-
There exists a form and a form input whose name of id is "style" in the editing
- frame.
-
-
-
[#183] Fixed the
- issue when FCKeditor is being executed in a custom application with the WebBrowser
- ActiveX control, hiding the WebBrowser control would incorrectly invoke FCKeditor's
- cleanup routines, causing FCKeditor to stop working.
-
[#539] Fixed the
- issue where right clicking on a table inside the editing frame in Firefox would
- cause the editor the scroll to the top of the document.
-
[#523] Fixed the
- issue where, under certain circumstances, FCKeditor would obtain focus at startup
- even though FCKConfig.StartupFocus is set to false.
-
[#393] Fixed the
- issue where if an inline tag is at the end of the document, the user would have
- no way of escaping from the inline tag if he continues typing at the end of the
- document. FCKeditor's behaviors regarding inline tags has been made to be more like
- MS Word's:
-
-
If the caret is moved to the end of a hyperlink by the keyboard, then hyperlink
- mode is disabled.
-
If the caret is moved to the end of other styled inline tags by any key other than
- the End key (like bold text or italic text), the original bold/italic/... modes
- would continue to be effective.
-
If the caret is moved to the end of other styled inline tags by the End key, all
- style tag modes (e.g. bold, italic, underline, etc.) would be canceled. This is
- not consistent with MS Word, but provides a convenient way for the user to escape
- the inline tag at the end of a line.
-
-
-
[#338] Fixed the
- issue where the configuration directive FCKConfig.ForcePasteAsPlainText is ignored
- when new contents are pasted into the editor via drag-and drop from outside of the
- editor.
-
[#1026] Fixed
- the issue where the cursor or selection positions are not restored with undo/redo
- commands correctly in IE, under some circumstances.
-
[#1160] [#1184] Home, End
- and Tab keys are working properly for numeric fields in dialogs.
-
[#68] The style
- system now properly handles Format styles when EnterMode=br.
-
[#525] The union
- of successive DIVs will work properly now if EnterMode!=div.
-
[#1227] The color
- commands used an unnecessary temporary variable. Thanks to Matthias Miller
-
[#67] [#277] [#427]
- [#428] [#965] [#1178]
- [#1267] The list
- insertion/removal/indent/outdent logic in FCKeditor has been rewritten, such that:
-
-
Text separated by <br> will always be treated as separate items during list
- insertion regardless of browser;
-
List removal will now always obey the FCKConfig.EnterMode setting;
-
List indentation will be XHTML 1.1 compliant - all child elements under an <ol>
- or <ul> must be <li> nodes;
-
IE editor hacks like <ul type="1"> will no longer appear;
-
Excessive <div> nodes are no longer inserted into list items due to alignment
- changes.
-
-
-
[#205] Fixed the
- issue where visible <br> tags at the end of paragraphs are incorrectly removed
- after switching to and from source mode.
-
[#1050] Fixed
- a minor PHP/XML incompatibility bug in editor/dialog/fck_docprops.html.
-
[#462] Fixed an
- algorithm bug in switching from source mode to WYSIWYG mode which causes the browser
- to spin up and freeze for broken HTML code inputs.
-
[#1019] Table
- command buttons are now disabled when the current selection is not inside a table.
-
[#135] Fixed the
- issue where context menus are misplaced in FCKeditor when FCKeditor is created inside
- a <div> node with scrolling.
-
[#1067] Fixed
- the issue where context menus are misplaced in Safari when FCKeditor is scrolled
- down.
-
[#1081] Fixed
- the issue where undoing table deletion in IE7 would cause JavaScript errors.
-
[#1061] Fixed
- the issue where backspace and delete cannot delete special characters in Firefox
- under some circumstances.
-
[#403] Fixed the
- issue where switching to and from source mode in full page mode under IE would add
- excessive line breaks to <style> blocks.
-
[#121] Fixed the
- issue where maximizing FCKeditor inside a frameset would resize FCKeditor to the
- whole window's size instead of just the container frame's size.
-
[#1093] Fixed
- the issue where pressing Enter inside an inline tag would not create a new paragraph
- correctly.
-
[#1089] Fixed
- the issue where pressing Enter inside a <pre> block do not generate visible
- line breaks in IE.
-
[#332] Hitting
- Enter when the caret is at the end of a hyperlink will no longer continue the link
- at the new paragraph.
-
[#1121] Hitting
- Enter with FCKConfig.EnterMode=br will now scroll the document correctly when the
- new lines have exceeded the lower boundary of the editor frame.
-
[#1063] [#1084] [#1092] Fixed a few Norwegian
- language translation errors.
-
[#1148] Fixed
- the issue where the "Automatic" and "More Colors..." buttons
- in the color selection panel are not centered in Safari.
-
[#1187] Fixed
- the issue where the "Paste as plain text" command cannot be undone in
- non-IE browsers.
-
[#1222] Ctrl-Backspace
- operations will now save undo snapshots in all browsers.
-
[#1223] Fixed
- the issue where the insert link dialog would save multiple undo snapshots for a
- single operation.
-
[#247] Fixed the
- issue where deleting everything in the document in IE would create an empty <p>
- block in the document regardless of EnterMode setting.
-
[#1280] Fixed
- the issue where opening a combo box will cause the editor frames to lose focus when
- there are multiple editors in the same document.
-
[#363] Fixed the
- issue where the Find dialog does not work under Opera.
-
[#50] Fixed the
- issue where the Paste button is always disabled in Safari.
-
[#389] Pasting
- text with comments from Word won't generate errors in IE, thanks to the idea from
- Swift.
-
The pasting area in the Paste from Word dialog is focused on initial load
-
Some fixes related to html comment handling in the Word clean up routine
-
[#1303] <col>
- is correctly treated as an empty element.
-
[#969] Removed
- unused files (fcknumericfield.htc and moz-bindings.xml).
-
[#1166] Fixed
- the issue where <meta> tags are incorrectly outputted with closing tags in
- full page mode.
-
[#1200] Fixed
- the issue where context menus sometimes disappear prematurely before the user can
- click on any items in Opera.
-
[#1315] Fixed
- the issue where the source view text area in Safari is displayed with an excessive
- blue border.
-
[#1201] Fixed
- the issue where hitting Backspace or Delete inside a table cell deletes the table
- cell instead of its contents in Opera.
-
[#1311] Fixed
- the issue where undoing and redoing a special character insertion would send the
- caret to incorrect positions. (e.g. the beginning of document)
-
[#923] Font colors
- are now properly applied on links.
-
[#1316] Fixed
- the issue where the image dialog expands to a size too big in Safari.
-
[#1306] [#894] The undo system
- can now undo text formatting steps like setting fonts to bold and italic.
-
[#95] Fixed the
- issue where FCKeditor breaks <meta> tags in full page mode in some circumstances.
-
[#175] Fixed the
- issue where entering an email address with a '%' sign in the insert link dialog
- would cause JavaScript error.
-
[#180] Improved
- backward compatibility with older PHP versions. FCKeditor can now work with PHP
- versions down to 4.0.
-
[#192] Document
- modifying actions from the FCKeditor JavaScript API will now save undo steps.
-
[#246] Using text
- formatting commands in EnterMode=div will no longer cause tags to randomly disappear.
-
[#327] It is no
- longer possible for the browser's back action to misfire when a user presses backspace
- while an image is being selected in FCKeditor.
[#390] Text alignment
- and justification commands now respects EnterMode=br paragraph rules.
-
[#534] Pressing
- Ctrl-End while the document contains a list towards the end will no longer make
- the cursor disappear.
-
[#906] It is now
- possible to have XHTML 1.0 Strict compliant output from a document pasted from Word.
-
[#929] Pressing
- the Enter key will now produce an undo step.
-
[#934] Fixed the
- "Cannot execute code from a freed script" error in IE from editor dialogs.
-
[#942] Server
- based spell checking with ColdFusion integration no longer breaks fir non en_US
- languages.
-
[#1056] Deleting
- everything in the editor document and moving the cursor around will no longer leave
- the cursor hanging beyond the top of the editor document.
It is now possible to set the default target when creating links, with the new "DefaultLinkTarget"
- setting.
-
[#436] The new
- "FirefoxSpellChecker" setting is available, to enable/disable the
- Firefox built-in spellchecker while typing. Even if word suggestions will not appear
- in the FCKeditor context menu, this feature is useful to quickly identify misspelled
- words.
-
[#311] The new
- "BrowserContextMenuOnCtrl" setting is being introduced, to enable/disable
- the ability of displaying the default browser's context menu when right-clicking
- with the CTRL key pressed.
-
-
- Fixed Bugs:
-
-
[#300] The fck_internal.css
- file was not validating with the W3C CSS Validation Service.
-
[#336] Ordered
- list didn't keep the Type attribute properly (it was converted to lowercase when
- the properties dialog was opened again).
-
[#318] Multiple
- linked images are merged in a single link in IE.
-
[#350] The <marquee>
- element will no longer append unwanted <p> </p> to the code.
-
[#351] The content
- was being lost for images or comments only HTML inserted directly in the editor
- source or loaded in the editor.
-
[#388] Creating
- links in lines separated by <br> in IE can lead to a merge of the links.
-
[#325] Calling
- the GetXHTML can distort visually the rendering in Firefox.
-
[#391] When ToolbarLocation=Out,
- a "Security Warning" alert was being shown in IE if under https. Thanks to reister.
-
[#360] Form "name"
- was being set to "[object]" if it contained an element with id="name".
-
Fixed a type that was breaking the ColdFusion SpellerPages integration file when
- no spelling errors were found.
-
The ColdFusion SpellerPages integration was not working it Aspell was installed
- in a directory with spaces in the name.
-
Added option to SpellerPages to ignore "alt" attributes.
-
[#451] Classes
- for images in IE didn't take effect immediately.
-
[#430] Links with
- a class did generate a span in Firefox when removing them.
-
[#274] The PHP
- quick upload still tried to use the uppercased types instead of the lowercased ones.
-
-
[#416] The PHP
- quick upload didn't check for the existence of the folder before saving.
-
[#467] If InsertHtml
- was called in IE with a comment (or any protected source at the beginning) it was
- lost.
-
[SF
- BUG-1518766] Mozilla 1.7.13 wasn't recognized properly as an old Gecko engine.
-
[#324] Improperly
- nested tags could lead to a crash in IE.
-
[#455] Files and
- folders with non-ANSI names were returned with a double UTF-8 encoding in the PHP
- File Manager.
-
[#273] The extensions
- "sh", "shtml", "shtm" and "phtm" have been added to the list of denied extensions
- on upload.
-
[#453] No more
- errors when hitting del inside an empty table cell.
-
The perl connector cgi file has been changed to Unix line endings.
-
[#202] Regression:
- The HR tag will not anymore break the contents loaded in the editor.
[#505] Regression:
- IE crashed if a table caption was deleted.
-
[#82] [#359] <object> and <embed>
- tags are not anymore lost in IE.
-
[#493] If the
- containing form had a button named "submit" the "Save" command didn't work in Firefox.
-
[#414] If tracing
- was globally enabled in Asp.Net 2.0 then the Asp.Net connector did fail.
-
[#520] The "Select
- Field" properties dialog was not correctly handling select options with &, <
- and >.
-
[#258] The Asp
- integration didn't pass boolean values in English, using instead the locale of the
- server and failing.
-
[#487] If an image
- with dimensions set as styles was opened with the image manager and then the dialog
- was canceled the dimensions in the style were lost.
-
[#220] The creation
- of links or anchors in a selection that results on more than a single link created
- will not anymore leave temporary links in the source. All links will be defined
- as expected.
-
[#182] [#261] [#511] Special characters, like
- percent signs or accented chars, and spaces are now correctly returned by the File
- Browser.
-
[#281] Custom
- toolbar buttons now render correctly in all skins.
-
[#527] If the
- configuration for a toolbar isn't fully valid, try to keep on parsing it.
[SF
- Patch-1726781] Updated the upload class for asp to handle large files and other
- data in the forms. Thanks to NetRube.
-
[#225] With ColdFusion,
- the target directory is now being automatically created if needed when "quick uploading".
- Thanks to sirmeili.
-
[#295] [#510] Corrected some
- path resolution issues with the File Browser connector for ColdFusion.
-
[#239] The <xml>
- tag will not anymore cause troubles.
-
[SF
- BUG-1721787] If the editor is run from a virtual dir, the PHP connector will
- detect that and avoid generating a wrong folder.
-
[#431] PHP: The
- File Browser now displays an error message when it is not able to create the configured
- target directory for files (instead of sending broken XML responses).
-
-
- Version 2.4.2
-
- Fixed Bugs:
-
-
[#279] The UTF-8
- BOM was being included in the wrong files, affecting mainly PHP installations.
-
-
- Version 2.4.1
-
- New Features and Improvements:
-
-
[#118] The SelectAll
- command now is available in Source Mode.
-
The new open source FCKpackager sub-project is now available. It replaces the FCKeditor.Packager
- software to compact the editor source.
-
With Firefox, if a paste execution is blocked by the browser security settings,
- the new "Paste" popup is shown to the user to complete the pasting operation.
-
-
- Fixed Bugs:
-
-
Various fixes to the ColdFusion File Browser connector.
-
We are now pointing the download of ieSpell to their pages, instead to a direct
- file download from one of their mirrors. This disables the ability of "click and
- go" (which can still be achieved by pointing the download to a file in your server),
- but removes any troubles with mirrors link changes (and they change it frequently).
-
The Word cleanup has been changed to remove "display:none" tags that may come from
- Word.
-
[SF
- BUG-1659613] The 2.4 version introduced a bug in the flash handling code that
- generated out of memory errors in IE7.
[#114] The correct
- entity is now used to fill empty blocks when ProcessHTMLEntities is disabled.
-
[#90] The editor
- was wrongly removing some <br> tags from the code.
-
[#139] The CTRL+F
- and CTRL+S keystroke default behaviors are now preserved.
-
[#138] We are
- not providing a CTRL + ALT combination in the default configuration file because
- it may be incompatible with some keyboard layouts. So, the CTRL + ALT + S combination
- has been changed to CTRL + SHIFT + S.
-
[#129] In IE,
- it was not possible to paste if "Allow paste operation via script" was disabled
- in the browser security settings.
-
[#112] The enter
- key now behaves correctly on lists with Firefox, when the EnterMode is set to 'br'.
-
[#152] Invalid
- self-closing tags are now being fixed before loading.
-
A few tags were being ignored to the check for required contents (not getting stripped
- out, as expected). Fixed.
-
[#202] The HR
- tag will not anymore break the contents loaded in the editor.
-
[#211] Some invalid
- inputs, like "<p>" where making the caret disappear in Firefox.
-
[#99] The <div>
- element is now considered a block container if EnterMode=p|br. It acts like a simple
- block only if EnterMode=div.
-
Hidden fields will now show up as an icon in IE, instead of a normal text field.
- They are also selectable and draggable, in all browsers.
-
[#213] Styles
- are now preserved when hitting enter at the end of a paragraph.
-
[#77] If ShiftEnterMode
- is set to a block tag (p or div), the desired block creation in now enforced, instead
- of copying the current block (which is still the behavior of the simple enter).
-
[#209] Links and
- images URLs will now be correctly preserved with Netscape 7.1.
-
[#165] The enter
- key now honors the EnterMode settings when outdenting a list item.
-
[#190] Toolbars
- may be wrongly positioned. Fixed.
-
[#254] The IgnoreEmptyParagraphValue
- setting is now correctly handled in Firefox.
-
[#248] The behavior
- of the backspace key has been fixed on some very specific cases.
The new and powerful Keyboard Accelerator System is being introduced.
- You can now precisely control the commands to execute when some key combinations
- are activated by the user. It guarantees that all browsers will have the same behavior
- regarding the shortcuts.
- It also makes it possible to remove buttons from the toolbar and still invoke their
- features by using the keyboard instead.
-
- It also blocks all default "CTRL based shortcuts" imposed by the browsers, so if
- you don't want users to underline text, just remove the CTRL+U combination from
- the keystrokes table. Take a look at the FCKConfig.Keystrokes setting in the fckconfig.js
- file.
-
The new "ProtectedTags" configuration option is being introduced.
- It will accept a list of tags (separated by a pipe "|"), which will have no effect
- during editing, but will still be part of the document DOM. This can be used mainly
- for non HTML standard, custom tags.
-
Dialog box commands can now open resizable dialogs (by setting oCommand.Resizable
- = true).
-
Updated support for AFP. Thanks to Soenke Freitag.
-
New language file:
-
Afrikaans (by Willem Petrus Botha).
-
-
-
[SF
- Patch-1456343] New sample file showing how to dynamically exchange a textarea
- and an instance of FCKeditor. Thanks to Finn Hakansson
[SF
- Patch-1472654] The server side script location for SpellerPages can now be set
- in the configuration file, by using the SpellerPagesServerScript setting.
-
Attention: All connectors are now pointing by
- default to the "/userfiles/" folder instead of "/UserFiles/" (case change). Also,
- the inner folders for each type (file, image, flash and media) are all lower-cased
- too.
-
Attention: The UseBROnCarriageReturn configuration
- is not anymore valid. The EnterMode setting can now be used to precisely set the
- enter key behavior.
[SF
- BUG-1015230] Toolbar buttons now update their state on shortcut keys activation.
-
[SF
- BUG-1485621] It is now possible to precisely control which shortcut keys can
- be used.
-
[SF
- BUG-1573714] [SF
- BUG-1593323] Paste was not working in IE if both AutoDetectPasteFromWord
- and ForcePasteAsPlainText settings were set to "false".
-
[SF
- BUG-1578306] The context menu was wrongly positioned if the editing document
- was set to render in strict mode. Thanks to Alfonso Martinez.
Fixed Safari and Opera detection system (for development purposes only).
-
Paste from Notepad was including font information in IE. Fixed.
-
[SF
- BUG-1584092] When replacing text area, names with spaces are now accepted.
-
Depending on the implementation of toolbar combos (mainly for custom plugins) the
- editor area was loosing the focus when clicking in the combo label. Fixed.
-
[SF
- BUG-1596937] InsertHtml() was inserting the HTML outside the editor area on
- some very specific cases.
-
[SF
- BUG-1585548] On very specific, rare and strange cases, the XHTML processor was
- not working properly in IE. Fixed.
[SF
- BUG-1515441] [SF
- BUG-1451071] The "Insert/Edit Link" and "Select All" buttons are now working
- properly when the editor is running on a IE Modal dialog.
-
On some very rare cases, IE was throwing a memory error when hiding the context
- menus. Fixed.
[SF
- BUG-1535946] The IE dialog system has been changed to better work with custom
- dialogs.
-
[SF
- BUG-1599520] The table dialog was producing empty tags when leaving some of
- its fields empty.
-
[SF
- BUG-1599545] HTML entities are now processed on attribute values too.
-
[SF
- BUG-1598517] Meta tags are now protected from execution during editing (avoiding
- the "redirect" meta to be activated).
-
[SF
- BUG-1415601] Firefox internals: styleWithCSS is used instead of the deprecated
- useCSS whenever possible.
-
All JavaScript Core extension function have been renamed to "PascalCase" (some were
- in "camelCase"). This may have impact on plugins that use any of those functions.
-
[SF
- BUG-1592311] Operations in the caption of tables are now working correctly in
- both browsers.
[SF
- BUG-1577247] Unneeded call to captureEvents and releaseEvents.
-
[SF
- BUG-1610790] On some specific situations, the call to form.submit(), in form
- were FCKeditor has been unloaded by code, was throwing the "Can't execute code from
- a freed script" error.
-
[SF
- BUG-1613167] If the configuration was missing the FCKConfig.AdditionalNumericEntities
- entry an error appeared.
The project has been relicensed under the terms of the
- GPL / LGPL / MPL licenses. This change will remove many licensing compatibility
- issues with other open source licenses, making the editor even more "open" than
- before.
-
Attention: The default directory in the distribution
- package is now named "fckeditor" (in lowercase) instead of "FCKeditor". This
- change may impact installations on case sensitive OSs, like Linux.
-
Attention: The "Universal Keyboard" has been removed
- from the package. The license of those files was unclear so they can't be included
- alongside the rest of FCKeditor.
-
-
- Version 2.3.2
-
- New Features and Improvements:
-
-
Users can now decide if the template dialog will replace the entire contents of
- the editor or simply place the template in the cursor position. This feature can
- be controlled by the "TemplateReplaceAll" and "TemplateReplaceCheckbox" configuration
- options.
-
[SF
- Patch-1237693] A new configuration option (ProcessNumericEntities)
- is now available to tell the editor to convert non ASCII chars to their relative
- numeric entity references. It is disabled by default.
-
The new "AdditionalNumericEntities" setting makes it possible to
- define a set of characters to be transformed to their relative numeric entities.
- This is useful when you don't want the code to have simple quotes ('), for example.
-
The Norwegian language file (no.js) has been duplicated to include the Norwegian
- Bokmal (nb.js) in the supported interface languages. Thanks to Martin Kronstad.
-
-
Two new patterns have been added to the Universal Keyboard:
-
-
Persian. Thanks to Pooyan Mahdavi
-
Portuguese. Thanks to Bo Brandt.
-
-
-
[SF
- Patch-1517322] It is now possible to define the start number on numbered lists.
- Thanks to Marcel Bennett.
-
The Font Format combo will now reflect the EditorAreaCSS styles.
-
[SF
- Patch-1461539] The File Browser connector can now optionally return a "url"
- attribute for the files. Thanks to Pent.
-
[SF
- BUG-1090851] The new "ToolbarComboPreviewCSS" configuration option has been
- created, so it is possible to point the Style and Format toolbar combos to a different
- CSS, avoiding conflicts with the editor area CSS.
-
[SF
- Feature-1421309] [SF
- BUG-1489402] It is now possible to configure the Quick Uploder target path
- to consider the file type (ex: Image or File) in the target path for uploads.
-
The JavaScript integration file has two new things:
-
-
The "CreateHtml()" function in the FCKeditor object, used to retrieve the HTML of
- an editor instance, instead of writing it directly to the page (as done by "Create()").
-
The global "FCKeditor_IsCompatibleBrowser()" function, which tells if the executing
- browser is compatible with FCKeditor. This makes it possible to do any necessary
- processing depending on the compatibility, without having to create and editor instance.
-
-
-
-
- Fixed Bugs:
-
-
[SF
- BUG-1525242] [SF
- BUG-1500050] All event attributes (like onclick or onmouseover) are now
- being protected before loading the editor. In this way, we avoid firing those events
- during editing (IE issue) and they don't interfere in other specific processors
- in the editor.
-
Small security fixes to the File Browser connectors.
-
[SF
- BUG-1546226] Small fix to the ColdFusion CFC integration file.
-
[SF
- Patch-1407500] The Word Cleanup function was breaking the HTML on pasting, on
- very specific cases. Fixed, thanks to Frode E. Moe.
[SF
- Patch-1511294] Small fix for the File Browser compatibility with IE 5.5.
-
[SF
- Patch-1503178] Small improvement to stop IE from loading smiley images when
- one smiley is quickly selected from a huge list of smileys. Thanks to stuckhere.
-
[SF
- BUG-1549112] The Replace dialog window now escapes regular expression specific
- characters in the find and replace fields.
[SF
- BUG-1545732] [SF
- BUG-1490919] No security errors will be thrown when loading FCKeditor in
- page inside a FRAME defined in a different domain.
-
[SF
- BUG-1512817] [SF
- BUG-1571345] Fixed the "undefined" addition to the content when ShowBorders
- = false and FullPage = true in Firefox. Thanks to Brett.
-
[SF
- BUG-1512798] BaseHref will now work well on FullPage, even if no <head>
- is available.
-
[SF
- BUG-1509923] The DocumentProcessor is now called when using InserHtml().
-
[SF
- BUG-1505964] The DOCTYPE declaration is now preserved when working in FullPage.
-
[SF
- BUG-1553727] The editor was throwing an error when inserting complex templates.
- Fixed.
-
[SF
- Patch-1564930] [SF
- BUG-1562828] In IE, anchors where incorrectly copied when using the Paste
- from Word button. Fixed, thanks to geirhelge.
[SF
- BUG-1435195] Scrollbars are now visible in the File Browser (for custom implementations).
-
[SF
- BUG-1438296] The "ForceSimpleAmpersand" setting is now being honored in all
- tags.
-
If a popup blocker blocks context menu operations, the correct alert message is
- displayed now, instead of a ugly JavaScript error.
-
[SF
- BUG-1454116] The GetXHTML() function will not change the IsDirty() value of
- the editor.
-
The spell check may not work correctly when using SpellerPages with ColdFusion.
- Fixed.
-
[SF
- BUG-1481861] HTML comments are now removed by the Word Cleanup System.
-
[SF
- BUG-1489390] A few missing hard coded combo options used in some dialogs are
- now localizable.
-
[SF
- BUG-1505448] The Form dialog now retrieves the value of the "action" attribute
- exactly as defined in the source.
-
[SF
- Patch-1517322] Solved an issue when the toolbar has buttons with simple icons
- (usually used by plugins) mixed with icons coming from a strip (the default toolbar
- buttons).
-
[SF
- Patch-1575261] Some fields in the Table and Cell Properties dialogs were being
- cut. Fixed.
-
Fixed a startup compatibility issue with Firefox 1.0.4.
-
-
- Version 2.3.1
-
- Fixed Bugs:
-
-
[SF
- BUG-1506126] Fixed the Catalan language file, which had been published with
- problems in accented letters.
-
More performance improvements in the default File Browser.
[SF
- BUG-1509073] Fixed the "Image Properties" dialog window, which was making invalid
- calls to the "editor/dialog/" directory, generating error 400 entries in the web
- server log.
-
[SF
- BUG-1507294] [SF
- BUG-1507953] The editing area was getting a fixed size when using the "SetHTML"
- API command or even when switching back from the source view. Fixed.
-
[SF
- BUG-1507755] Fixed a conflict between the "DisableObjectResizing" and "ShowBorders"
- configuration options over IE.
-
Opera 9 tries to "mimic" Gecko in the browser detection system of FCKeditor. As
- this browser is not "yet" supported, the editor was broken on it. It has been fixed,
- and now a textarea is displayed, as in any other unsupported browser. Support for
- Opera is still experimental and can be activated by setting the property "EnableOpera"
- to true when creating an instance of the editor with the JavaScript integration
- files.
-
With Opera 9, the toolbar was jumping on buttons rollover.
-
[SF
- BUG-1509479] The iframes used in Firefox for all editor panels (dropdown combos,
- context menu, etc...) are now being placed right before the main iframe that holds
- the editor. In this way, if the editor container element is removed from the DOM
- (by DHTML) they are removed together with it.
-
[SF
- BUG-1271070] [SF
- BUG-1411430] The editor API now works well on DHTML pages that create and
- remove instances of FCKeditor dynamically.
-
A second call to a page with the editor was not working correctly with Firefox 1.0.x.
- Fixed.
-
[SF
- BUG-1511460] Small correction to the <script> protected source regex.
- Thanks to Randall Severy.
-
[SF
- BUG-1521754] Small fix to the paths of the internal CSS files used by FCKeditor.
- Thanks to johnw_ceb.
-
[SF
- BUG-1511442] The <base> tag is now correctly handled in IE, no matter
- its position in the source code.
-
[SF
- BUG-1507773] The "Lock" and "Reset" buttons in the Image Properties dialog window
- are not anymore jumping with Firefox 1.5.
-
-
- Version 2.3
-
- New Features and Improvements:
-
-
The Toolbar Sharing system has been completed. See sample10.html
- and sample11.html.*
-
[SF
- Patch-1407500] Small enhancement to the Find and Replace dialog windows.
-
-
- Fixed Bugs:
-
-
Small security fixes.
-
The context menu system has been optimized. Nested menus now open "onmouseover".
-
-
An error in the image preloader system was making the toolbar strip being downloaded
- once for each button on slow connections. Some enhancements have also been made
- so now the smaple05.html is loading fast for all skins.
-
Fixed many memory leak issues with IE.
-
[SF
- BUG-1489768] The panels (context menus, toolbar combos and color selectors),
- where being displayed in the wrong position if the contents of the editor, or its
- containing window were scrolled down.
-
[SF
- BUG-1493176] Using ASP, the connector was not working on servers with buffer
- disable by default.
-
[SF
- BUG-1491784] Language files have been updated to not include html entities.
[SF
- BUG-1493173] [SF
- BUG-1499708] We now assume that, if a user is in source editing, he/she
- wants to control the HTML, so the editor doesn't make changes to it when posting
- the form being in source view or when calling the GetXHTML function in the API.
-
-
[SF
- BUG-1490610] The FitWindow is now working on elements set with relative position.
-
[SF
- BUG-1493438] The "Word Wrap" combo in the cell properties dialog now accepts
- only Yes/No (no more <Not Set> value).
-
The context menu is now being hidden when a nested menu option is selected.
-
Table cell context menu operations are now working correctly.
-
[SF
- BUG-1494549] The code formatter was having problems with dollar signs inside
- <pre> tags.
-
[SF
- Patch-1459740] The "src" element of images can now be set by styles definitions.
- Thanks to joelwreed.
[SF
- Patch-1349765] Small fix to the FCKSelection.GetType over Firefox. Thanks to
- Alfonso Martinez.
-
[SF
- Patch-1495422] The editor now creates link based on the URL when no selection
- is available. Thanks to Dominik Pesch.
-
[SF
- Patch-1478859] On some circumstances, the Yahoo popup blocker was blocking the
- File Browser window, giving no feedback to the user. Now an alert message is displayed.
-
When using the editor in a RTL localized interface, like Arabic, the toolbar combos
- were not showing completely in the first click. Fixed.
-
[SF
- BUG-1500212] All "_samples/html" samples are now working when loading directly
- from the Windows Explorer. Thanks to Alfonso Martinez.
-
The "FitWindow" feature was breaking the editor under Firefox 1.0.x.
-
[SF
- Patch-1500032] In Firefox, the caret position now follows the user clicks when
- clicking in the white area bellow the editor contents. Thanks to Alfonso Martinez.
-
[SF
- BUG-1499522] In Firefox, the link dialog window was loosing the focus (and quickly
- reacquiring it) when opening. This behavior was blocking the dialog in some Linux
- installations.
-
Drastically improved the loading performance of the file list in the default File
- Browser.
-
[SF
- BUG-1503059] The default "BasePath" for FCKeditor in all integration files has
- been now unified to "/fckeditor/" (lower-case). This is the usual casing system
- in case sensitive OSs like Linux.
-
The "DisableFFTableHandles" setting is now honored when switching the full screen
- mode with FitWindow.
-
Some fixes has been applied to the cell merging in Firefox.
-
-
- * This version has been partially sponsored by Footsteps
- and Kentico.
-
- Version 2.3 Beta
-
- New Features and Improvements:
-
-
Extremely Fast Loading! The editor now loads more than 3
- times faster than before, with no impact on its advanced features.
-
New toolbar system:
-
-
[SF
- Feature-1454850] The toolbar will now load much faster. All
- images have being merged in a single image file using a unique system available
- only with FCKeditor.
-
The "Text Color" and "Background Color" commands buttons have
- enhancements on the interface.
-
Attention: As a completely
- new system has being developed. Skins created for versions prior this one will not
- work. Skin styles definitions have being merged, added and removed. All skins have
- been a little bit reviewed.
-
It is possible to detach the toolbar from an editor instance and
- share it with other instances. In this way you may have only one toolbar (in the
- top of the window, for example, that can be used by many editors (see
- sample10.html). This feature is still under development (issues with IE
- focus still to be solved).*
-
-
-
New context menu system:
-
-
It uses the same (fast) loading system as the toolbar.
-
Sub-Menus are now available to group features (try the context menu over a table
- cell).
-
It is now possible to create your own context menu entries by creating plugins.
-
-
-
-
New "FitWindow" toolbar button, based on the
- plugin published by Paul Moers. Thanks Paul!
-
"Auto Grow" Plugin: automatically resizes the editor
- until a maximum height, based on its contents size.**
-
[SF
- Feature-1444943] Multiple CSS files can now be used in the
- editing area. Just define FCKConfig.EditorAreaCSS as an array of strings (each one
- is a path to a different css file). It works also as a simple string, as on prior
- versions.
-
New language files:
-
Bengali / Bangla (by Richard Walledge).
-
English (Canadian) (by Kevin Bennett).
-
Khmer (by Sengtha Chay).
-
-
-
The source view is now available in the editing area on Gecko browsers. Previously
- a popup was used for it (due to a Firefox bug).
-
As some people may prefer the popup way for source editing, a new configuration
- option (SourcePopup) has being introduced.
-
The IEForceVScroll configuration option has been removed. The editor now automatically
- shows the vertical scrollbar when needed (for XHTML doctypes).
-
The configuration file doesn't define a default DOCTYPE to be used now.
-
It is now possible to easily change the toolbar using the JavaScript API by just
- calling <EditorInstance>.ToolbarSet.Load( '<ToolbarName>' ). See _testcases/010.html
- for a sample.
-
The "OnBlur" and "OnFocus" JavaScript API events are now compatible
- with all supported browsers.
-
Some few updates in the Lasso connector and uploader.
-
The GeckoUseSPAN setting is now set to "false" by default. In this way, the code
- produced by the bold, italic and underline commands are the same on all browsers.
-
-
- Fixed Bugs:
-
-
Important security fixes have been applied to the File Manager, Uploader
- and Connectors. Upgrade is highly recommended. Thanks to Alberto Moro,
- Baudouin Lamourere and James Bercegay.
-
[SF
- BUG-1399966] [SF
- BUG-1249853] The "BaseHref" configuration is now working with
- Firefox in both normal and full page modes.
-
[SF
- BUG-1405263] A typo in the configuration file was impacting the Quick Upload
- feature.
-
Nested <ul> and <ol> tags are now generating valid html.
-
The "wmode" and "quality" attributes are now preserved for Flash
- embed tags, in case they are entered manually in the source view. Also, empty attributes
- are removed from that tag.
-
Tables where not being created correctly on Opera.
-
The XHTML processor will ignore invalid tags with names ending with ":",
- like http:.
-
On Firefox, the scrollbar is not anymore displayed on toolbar dropdown commands
- when not needed.
-
Some small fixes have being done to the dropdown commands rendering for FF.
-
-
The table dialog window has been a little bit enlarged to avoid contents being cropped
- on some languages, like Russian.
-
[SF
- BUG-1465203] The ieSpell download URL has been updated. The problem is that
- they don't have a fixed URL for it, so let's hope the mirror will be up for it.
-
Small "lenght" type corrected in the select dialog window. Thanks to Bernd Nussbaumer.
-
The about box is now showing correctly in Firefox 1.5.
-
[SF
- Patch-1464020] [SF
- BUG-1155793] The "Unlink" command is now working correctly under Firefox
- if you don't have a complete link selection. Thanks to Johnny Egeland.
-
In the File Manager, it was not possible to upload files to folders with ampersands
- in the name. Thanks to Mike Pone.
-
[SF
- BUG-1178359] Elements from the toolbar are not anymore draggable in the editing
- area.
-
[SF
- BUG-1487544] Fixed a small issue in the code formatter for <br /> and
- <hr /> tags.
-
The "Background Color" command now works correctly when the GeckoUseSPAN setting
- is disabled (default).
-
Links are now rendered in blue with Firefox (they were black before). Actually,
- an entry for it has been added to the editing area CSS, so you can customize with
- the color you prefer.
-
-
- * This version has been partially sponsored by Footsteps
- and Kentico.
-
- ** This version has been partially sponsored by Nextide.
-
- Version 2.2
-
- New Features and Improvements:
-
-
Let's welcome Wim Lemmens (didgiman). He's our new responsible for the ColdFusion
- integration. In this version we are introducing his new files with the following
- changes:
-
-
The "Uploader", used for quick uploads, is now available
- natively for ColdFusion.
-
Small bugs have been corrected in the File Browser connector.
-
The samples now work as is, even if you don't install the editor in the "/FCKeditor"
- directory.
-
-
-
And a big welcome also to "Andrew Liu", our responsible for the
- Python integration. This version is bringing native support for Python
- , including the File Browser connector and Quick Upload.
-
The "IsDirty()" and "ResetIsDirty()"
- functions have been added to the JavaScript API to check if the editor
- content has been changed.*
-
New language files:
-
-
Hindi (by Utkarshraj Atmaram)
-
Latvian (by Janis Klavinš)
-
-
-
For the interface, now we have complete RTL support also for
- the drop-down toolbar commands, color selectors and context menu.
-
[SF
- BUG-1325113] [SF
- BUG-1277661] The new "Delete Table" command is available in the
- Context Menu when right-clicking inside a table.
-
The "FCKConfig.DisableTableHandles" configuration option is now working
- on Firefox 1.5.
-
The new "OnBlur" and "OnFocus"
- events have been added to the JavaScript API (IE only). See "_samples/html/sample09.html" *
-
-
Attention: The "GetHTML"
- function has been deprecated. It now returns the same value as "GetXHTML".
- The same is valid for the "EnableXHTML" and "EnableSourceXHTML"
- that have no effects now. The editor now works with XHTML output only.
-
Attention: A new "PreserveSessionOnFileBrowser"
- configuration option has been introduced. It makes it possible to set whenever is
- needed to maintain the user session in the File Browser. It is disabled by default,
- as it has very specific usage and may cause the File Browser to be blocked by popup
- blockers. If you have custom File Browsers that depends on session information,
- remember to activate it.
-
Attention: The "fun"
- smileys set has been removed from the package. If you are using it, you must manually
- copy it to newer installations and upgrades.
-
Attention: The "mcpuk"
- file browser has been removed from the package. We have no ways to support it. There
- were also some licensing issues with it. Its web site can still be found at
- http://mcpuk.net/fbxp/.
-
It is now possible to set different CSS styles for the chars in the Special Chars
- dialog window by adding the "SpecialCharsOut" and "SpecialCharsOver"
- in the "fck_dialog.css" skin file.*
-
[SF
- Patch-1268726] Added table "summary" support in the table dialog.
- Thanks to Sebastien-Mahe.
-
[SF
- Patch-1284380] It is now possible to define the icon of a FCKToolbarPanelButton
- object without being tied to the skin path (just like FCKToolbarButton). Thanks
- to Ian Sullivan.
You can set the QueryString value "fckdebug=true" to activate "debug
- mode" in the editor (showing the debug window), overriding the configurations.
- The "AllowQueryStringDebug" configuration option is also available so
- you can disable this feature.
[SF
- BUG-1162809] [SF
- BUG-1205638] The "Image" and "Flash" dialog windows
- now loads the preview correctly if the "BaseHref" configuration option
- is set.
-
[SF
- BUG-1329807] The alert boxes are now showing correctly when doing cut/copy/paste
- operations on Firefox installations when it is not possible to execute that operations
- due to security settings.
-
A new "Panel" system (used in the drop-dowm toolbar commands, color selectors
- and context menu) has been developed. The following bugs have been fixed with it:
-
-
[SF
- BUG-1186927] On IE, sometimes the context menu was being partially hidden.*
-
-
On Firefox, the context menu was flashing in the wrong position before showing.
-
-
On Firefox 1.5, the Color Selector was not working.
-
On Firefox 1.5, the fonts in the panels were too big.
[SF
- BUG-1315954] No error is thrown when pasting some case specific code from editor
- to editor.
-
[SF
- BUG-1341553] A small fix for a security alert in the File Browser has been
- applied.
-
[SF
- BUG-1370953] [SF
- BUG-1339898] [SF
- BUG-1323319] A message will be shown to the user (instead of a JS error) if
- a "popup blocker" blocks the "Browser Server" button. Thanks
- to Erwin Verdonk.
-
[SF
- BUG-1370355] Anchor links that points to a single character anchor, like "#A",
- are now correctly detected in the Link dialog window. Thanks to Ricky Casey.
-
[SF
- BUG-1368998] Custom error processing has been added to the file upload on the
- File Browser.
-
[SF
- BUG-1367802] [SF
- BUG-1207740] A message is shown to the user if a dialog box is blocked by
- a popup blocker in Firefox.
-
[SF
- BUG-1358891] [SF
- BUG-1340960] The editor not works locally (without a web server) on directories
- where the path contains spaces.
-
[SF
- BUG-1357247] The editor now intercepts SHIFT + INS keystrokes when needed.
-
[SF
- BUG-1328488] Attention: The Page
- Break command now produces different tags to avoid XHTML compatibility
- issues. Any Page Break previously applied to content produced with previous versions
- of FCKeditor will not me rendered now, even if they will still be working correctly.
-
-
It is now possible to allow cut/copy/past operations on Firefox using the user.js file.
-
[SF
- BUG-1336792] A fix has been applied to the XHTML processor to allow tag names
- with the "minus" char (-).
-
[SF
- BUG-1339560] The editor now correctly removes the "selected" option
- for checkboxes and radio buttons.
-
The Table dialog box now selects the table correctly when right-clicking on objects
- (like images) placed inside the table.
-
Attention: A few changes have been
- made in the skins. If you have a custom skin, it is recommended you to make a diff
- of the fck_contextmenu.css file of the default skin with your implementation.
-
Mouse select (marking things in blue, like selecting text) has been disabled
- on panels (drop-down menu commands, color selector and context menu) and toolbar,
- for both IE and Firefox.
-
On Gecko, fake borders will not be applied to tables with the border attribute set
- to more than 0, but placed inside tables with border set to 0.
-
[SF
- BUG-1360717] A wrapping issue in the "Silver" skin has been corrected.
- Thanks to Ricky Casey.
-
[SF
- BUG-1251145] In IE, the focus is now maintained in the text when clicking in
- the empty area following it.
-
[SF
- BUG-1181386] [SF
- BUG-1237791] The "Stylesheet Classes" field in the Link dialog
- window in now applied correctly on IE. Thanks to Andrew Crowe.
-
The "Past from Word" dialog windows is now showing correctly on Firefox
- on some languages.
-
[SF
- BUG-1315008] [SF
- BUG-1241992] IE, when selecting objects (like images) and hitting the "Backspace"
- button, the browser's "back" will not get executed anymore and the object
- will be correctly deleted.
-
The "AutoDetectPasteFromWord" is now working correctly in IE. Thanks to
- Juan Ant. Gómez.
-
A small enhancement has been made in the Word pasting detection. Thanks to Juan
- Ant. Gómez.
-
[SF
- BUG-1090686] No more conflict with Firefox "Type-Ahead Find" feature.
-
-
[SF
- BUG-942653] [SF
- BUG-1155856] The "width" and "height" of images sized
- using the inline handlers are now correctly loaded in the image dialog box.
-
[SF
- BUG-1209093] When "Full Page Editing" is active, in the "Document
- Properties" dialog, the "Browse Server" button for the page background
- is now correctly hidden if "ImageBrowser" is set to "false"
- in the configurations file. Thanks to Richard.
[SF
- BUG-1244480] The editor now will look first to linked fields "ids"
- and second to "names".
-
[SF
- BUG-1252905] The "InsertHtml" function now preserves URLs as entered.
-
-
[SF
- BUG-1266317] Toolbar commands are not anymore executed outside the editor.
-
[SF
- BUG-1365664] The "wrap=virtual" attribute has been removed from the
- integration files for validation purposes. No big impact.
-
[SF
- BUG-972193] Now just one click is needed to active the cursor inside the editor.
-
-
The hidden fields used by the editor are now protected from changes using the "Web
- Developer Add-On > Forms > Display Forms Details" extension. Thanks to
- Jean-Marie Griess.
-
On IE, the "Format" toolbar dropdown now reflects the current paragraph
- type on IE. Because of a bug in the browser, it is quite dependent on the browser
- language and the editor interface language (both must be the same). Also, as the
- "Normal (DIV)" type is seen by IE as "Normal", to avoid confusion,
- both types are ignored by this fix.
-
On some very rare cases, IE was loosing the "align" attribute for DIV
- tags. Fixed.
-
[SF
- BUG-1388799] The code formatter was removing spaces on the beginning of lines
- inside PRE tags. Fixed.
-
[SF
- BUG-1387135] No more "NaN" values in the image dialog, when changing
- the sizes in some situations.
-
Corrected a small type in the table handler.
-
You can now set the "z-index" for floating panels (toolbar dropdowns,
- color selectors, context menu) in Firefox, avoiding having them hidden under another
- objects. By default it is set to 10,000. Use the FloatingPanelsZIndex configuration
- option to change this value.
-
-
- Special thanks to
- Alfonso Martinez, who have provided many patches and suggestions for the
- following features / fixes present in this version. I encourage all you to
- donate to Alfonso, as a way to say thanks for his nice open source approach.
- Thanks Alfonso!. Check out his contributions:
-
-
[SF
- BUG-1352539] [SF
- BUG-1208348] With Firefox, no more "fake" selections are appearing
- when inserting images, tables, special chars or when using the "insertHtml"
- function.
-
[SF
- Patch-1382588] The "FCKConfig.DisableImageHandles" configuration option
- is not working on Firefox 1.5.
-
[SF
- Patch-1368586] Some fixes have been applied to the Flash dialog box and the
- Flash pre-processor.
[SF
- Patch-1357445] Add support for DIV in the Format drop-down combo for Firefox.
-
-
[SF
- BUG-1350465] [SF
- BUG-1376175] The "Cell Properties" dialog now works correctly
- when right-clicking in an object (image, for example) placed inside the cell itself.
-
-
[SF
- Patch-1349166] On IE, there is now support for namespaces on tags names.
-
[SF
- Patch-1350552] Fix the display issue when applying styles on tables.
-
[SF
- Patch-1352320 ] Fixed a wrong usage of the "parentElement"
- property on Gecko.
-
[SF
- Patch-1355007] The new "FCKDebug.OutputObject" function is available
- to dump all object information in the debug window.
-
[SF
- Patch-1329500] It is now possible to delete table columns when clicking on a
- TH cell of the column.
-
[SF
- Patch-1315351] It is now possible to pass the image width and height to the
- "SetUrl" function of the Flash dialog box.
-
[SF
- Patch-1327384] TH tags are now correctly handled by the source code formatter
- and the "FillEmptyBlocks" configuration option.
-
[SF
- Patch-1327406] Fake borders are now displayed for TH elements on tables with
- border set to 0. Also, on Firefox, it will now work even if the border attribute
- is not defined and the borders are not dotted.
-
Hidden fields now get rendered on Firefox.
-
The BasePath is now included in the debugger URL to avoid problems when calling
- it from plugins.
The new "Insert Page Break" command (for printing) has
- been introduced.*
-
The editor package now has a root directory called "FCKeditor".
-
-
- Fixed Bugs:
-
-
[SF
- BUG-1326285] [SF
- BUG-1316430] [SF
- BUG-1323662] [SF
- BUG-1326223] We are doing a little step back with this version.
- The ENTER and BACKSPACE behavior changes for Firefox have been remove. It is a nice
- feature, but we need much more testing on it. It introduced some bugs and so
- its preferable to not have that feature, avoiding problems (even if that feature
- was intended to solve some issues).
-
[SF
- BUG-1275714] Comments in the beginning of the source are now preserved when
- using the "undo" and "redo" commands.
-
The "undo" and "redo" commands now work for the Style command.
-
-
An error in the execution of the pasting commands on Firefox has been fixed.
-
[SF
- BUG-1326184] No strange (invalid) entities are created when using Firefox. Also,
- the used by the FillEmptyBlocks setting is maintained even if you disable
- the ProcessHTMLEntities setting.
[SF
- BUG-1200328] The editor now offers a way to "protect" part of the
- source to remain untouched while editing or changing views. Just use the "FCKConfig.ProtectedSource"
- object to configure it and customize to your needs. It is based on regular expressions.
- See fckconfig.js for some samples.
-
The editor now offers native support for Lasso. Thanks and welcome to
- our new developer Jason Huck.
-
New language files are available:
-
-
Faraose (by Símin Lassaberg and Helgi Arnthorsson)
-
-
Malay (by Fairul Izham Mohd Mokhlas)
-
Mongolian (by Lkamtseren Odonbaatar)
-
Vietnamese (by Phan Binh Giang)
-
-
-
A new configurable ColdFusion connector is available. Thanks to Mark Woods.
- Many enhancements has been introduced with it.
-
The PHP connector for the default File Browser now sorts the folders and files names.
-
-
[SF
- BUG-1289372] [SF
- BUG-1282758] In the PHP connector it is now possible to set the absolute
- (server) path to the User Files directory, avoiding problems with Virtual Directories,
- Symbolic Links or Aliases. Take a look at the config.php file.
-
The ASP.Net uploader (for Quick Uploads) has been added to the package.
-
A new way to define simple "combo" toolbar items , like
- Style and Font, has been introduced. Thanks to Steve Lineberry. See
- sample06.html and the "simplecommands" plugin to fully understand
- it.
-
A new test case has been added that shows how to set the editor background dynamically
- without using a CSS.
The new "OnAfterLinkedFieldUpdate" event has been introduced. If
- is fired when the editor updates its hidden associated field.
-
Attention: The color of the right border of the toolbar (left on RTL interfaces)
- has been moved from code to the CSS (TB_SideBorder class). Update your custom skins.
-
-
A sample "htaccess.txt" file has been added to the editor's package
- to show how to configure some Linux sites that could present problems on Firefox
- with "Illegal characters" errors. Respectively the ""
- chars.
-
With the JavaScript, ASP and PHP integration files, you can set the QueryString
- value "fcksource=true" to load the editor using the source files (located
- in the _source directory) instead of the compressed ones. Thanks to Kae Verens for
- the suggestion.
-
[SF
- Feature-1246623] The new configuration option "ForceStrongEm" has
- been introduced so you can force the editor to convert all <B> and <I>
- tags to <STRONG> and <EM> respectively.
-
A nice contribution has been done by Goss Interactive Ltd:
-
-
[SF
- BUG-1246949] Implemented ENTER key and BACKSPACE key handlers for Gecko so that
- P tags (or an appropriate block element) get inserted instead of BR tags when not
- in the UseBROnCarriageReturn config mode.
-
- The ENTER key handling has been written to function much the same as the ENTER key
- handling on IE : as soon as the ENTER key is pressed, existing content will be wrapped
- with a suitable block element (P tag) as appropriate and a new block element (P
- tag) will be started.
-
- The ENTER key handler also caters for pressing ENTER within empty list items - ENTER
- in an empty item at the top of a list will remove that list item and start a new
- P tag above the list; ENTER in an empty item at the bottom of a list will remove
- that list item and start a new P tag below the list; ENTER in an empty item in the
- middle of a list will remove that list item, split the list into two, and start
- a new P tag between the two lists.
-
Any tables that are found to be incorrectly nested within a block element (P tag)
- will be moved out of the block element when loaded into the editor. This is required
- for the new ENTER/BACKSPACE key handlers and it also avoids non-compliant HTML.
-
-
The InsertOrderedList and InsertUnorderedList commands have been overridden on Gecko
- to ensure that block elements (P tags) are placed around a list item's content when
- it is moved out of the list due to clicking on the editor's list toolbar buttons
- (when not in the UseBROnCarriageReturn config mode).
-
-
-
-
- Fixed Bugs:
-
-
[SF
- BUG-1253255] [SF
- BUG-1265520] Due to changes on version 2.0, the anchor list was not anymore
- visible in the link dialog window. It has been fixed.
[SF
- BUG-1251373 ] The above fix also has corrected some strange behaviors on
- Firefox.
-
[SF
- BUG-1144258] [SF
- BUG-1092081] The File Browsers now run on the same server session used
- in the page where the editor is placed in (IE issue). Thanks to Simone Chiaretta.
-
-
[SF
- BUG-1305619 ] No more repeated login dialogs when running the editor with Windows
- Integrated Security with IIS.
-
[SF
- Patch-1245304] The Test Case 004 is now working correctly. It has been changed
- to set the editor hidden at startup.
-
[SF
- BUG-1290610 ] Over HTTPS, there were some warnings when loading the Images,
- Flash and Link dialogs. Fixed.
-
Due to Gecko bugs, two errors were thrown when loading the editor in a hidden div.
- Workarounds have been introduced. In any case, the testcase 004 hack is needed when
- showing the editor (as in a tabbed interface).
-
An invalid path in the dialogs CSS file has been corrected.
-
On IE, the Undo/Redo can now be controlled using the Ctrl+Z and Ctrl+Y shortcut
- keys.
-
[SF
- BUG-1295538 ] A few Undo/Redo fixes for IE have been done.
-
[SF
- BUG-1247070] On Gecko, it is now possible to use the shortcut keys for Bold
- (CTRL+B), Italic (CTRL+I) and Underline (CTRL+U), like in IE.
-
[SF
- BUG-1274303] The "Insert Column" command is now working correctly
- on TH cells. It also copies any attribute applied to the source cells.
-
[SF
- Patch-1287070 ] In the Universal Keyboard, the Arabic keystrokes translator
- is now working with Firefox. Thanks again to Abdul-Aziz Al-Oraij.
-
The editor now handles AJAX requests with HTTP status 304.
[SF
- BUG-1155774] A spelling error in the Bulleted List Properties dialog has been
- corrected.
-
[SF
- BUG-1272018] The ampersand character can now be added from the Special Chars
- dialog.
-
[SF
- BUG-1263161] A small fix has been applied to the sampleposteddata.php file.
- Thanks to Mike Wallace.
-
[SF
- BUG-1241504] The editor now looks also for the ID of the hidden linked field.
-
-
The caption property on tables is now working on Gecko. Thanks to Helen Somers (Goss
- Interactive Ltd).
-
[SF
- BUG-1297431] With IE, the editor now works locally when its files are placed
- in a directory path that contains spaces.
-
[SF
- BUG-1279551] [SF
- BUG-1242105] On IE, some features are dependant of ActiveX components (secure...
- distributed with IE itself). Some security setting could avoid the usage of
- those components and the editor would stop working. Now a message is shown, indicating
- the use the minimum necessary settings need by the editor to run.
-
[SF
- BUG-1298880] Firefox can't handle the STRONG and EM tags. Those tags are now
- converted to B and I so it works accordingly.
-
[SF
- BUG-1271723] On IE, it is now possible to select the text and work correctly
- in the contents of absolute positioned/dimensioned divs.
-
On IE, there is no need to click twice in the editor to activate the cursor
- in the editing area.
-
[SF
- BUG-1221621] Many "warnings" in the Firefox console are not thrown
- anymore.
-
[SF
- BUG-1295526] While editing on "FullPage" mode the basehref is
- now active for CSS "link" tags.
[SF
- Patch-1281313] A few small changes to avoid problems with Plone. Thanks to Jean-mat.
-
-
[SF
- BUG-1275911] A check for double dots sequences on directory names on creation
- has been introduced to the PHP and ASP connectors.
-
-
- Version 2.0
-
- New Features and Improvements:
-
-
The new "Flash" command is available. Now you can
- easily handle Flash content, over IE and Gecko, including server browser integration
- and context menu support. Due to limitations of the browsers, it is not possible
- to see the preview of the movie while editing, so a nice "placeholder"
- is used instead. *
-
A "Quick Upload " option is now available in the
- link, image and flash dialog windows, so the user don't need to go (or have) the
- File Browser for this operations. The ASP and PHP uploader are included. Take
- a look at the configuration file.***
-
Added support for Active FoxPro Pages . Thanks to our new developer,
- Sönke Freitag.
-
It is now possible to disable the size handles for images and tables
- (IE only feature). Take a look at the DisableImageHandles and DisableTableHandles
- configuration options.
-
The handles on form fields (small squares around them) and the inline editing
- of its contents have been disabled. This makes it easier to users to use
- the controls.
-
A much better support for Word pasting operations has been introduced. Now it uses
- a dialog box, in this way we have better results and more control.**
-
[SF
- Patch-1225372] A small change has been done to the PHP integration file. The
- generic __construct constructor has been added for better PHP 5 sub-classing compatibility
- (backward compatible). Thanks to Marcus Bointon.
-
-
- Fixed Bugs:
-
-
ATTENTION: Some security changes have been made to the connectors. Now you must
- explicitly enable the connector you want to use. Please test your application before
- deploying this update.
The preview now loads "Full Page" editing correctly. It also uses the
- same XHTML code produced by the final output.
-
The "Templates" dialog was not working on some very specific (and strange)
- occasions over IE.
-
[SF
- BUG-1199631] [SF
- BUG-1171944] A new option is available to avoid a bad IE behavior that shows
- the horizontal scrollbar even when not needed. You can now force the vertical scrollbar
- to be always visible. Just set the "IEForceVScroll" configuration option
- to "true". Thanks to Grant Bartlett.
Some pages have been changed to avoid importing errors on Plone. Thanks to Arthur
- Kalmenson.
-
[SF
- BUG-1171606] There is a bug on IE that makes the editor to not work if
- the instance name matches a meta tag name. Fixed.
-
On Firefox, the source code is now opened in a dialog box, to avoid error on pages
- with more than one editor.
-
[SF
- Patch-1225703] [SF
- BUG-1214941] The "ForcePasteAsPlainText" configuration option
- is now working correctly on Gecko browsers. Thanks to Manuel Polo.
-
[SF
- BUG-1228836] The "Show Table Borders" feature is now working on Gecko
- browsers.
-
[SF
- Patch-1212529] [SF
- BUG-1212517] The default File Browser now accepts connectors with querystring
- parameters (with "?"). Thanks to Tomas Jucius.
-
[SF
- BUG-1233318] A JavaScript error thrown when using the Print command has been
- fixed.
-
[SF
- BUG-1229696] A regular expression has been escaped to avoid problems when opening
- the code in some editors. It has been moved to a dialog window.
[SF
- BUG-1232056] The anchor icon is now working correctly on IE.
-
[SF
- BUG-1202468] The anchor icon is now available on Gecko too.
-
[SF
- BUG-1236279] A security warning has been corrected when using the File Browser
- over HTTPS.
-
The ASP implementation now avoid errors when setting the editor value to null values.
-
-
[SF
- BUG-1237359] The trailing <BR> added by Gecko at the end of the source
- is now removed.
-
[SF
- BUG-1170828] No more is added to the source when using the "New
- Page" button.
-
[SF
- BUG-1165264] A new configuration option has been included to force the
- editor to ignore empty paragraph values (<p> </p>), returning
- empty ("").
-
No more is added when creating a table or adding columns, rows or cells.
-
-
The <TD> tags are now included in the FillEmptyBlocks configuration handling.
-
-
[SF
- BUG-1224829] A small bug in the "Find" dialog has been fixed.
-
[SF
- BUG-1221307] A small bug in the "Image" dialog has been fixed.
[SF
- BUG-1205403] The checkbox and radio button values are now handled correctly
- in their dialog windows. Thanks to thc33.
-
[SF
- BUG-1236626] The toolbar now doesn't need to collapse when unloading the page
- (IE only).
-
[SF
- BUG-1212559] [SF
- BUG-1017231] The "Save" button now calls the "onsubmit"
- event before posting the form. The submit can be cancelled if the onsubmit returns
- "false".
-
[SF
- BUG-1215823] The editor now works correctly on Firefox if it values is set to
- "<p></p>".
-
[SF
- BUG-1217546] No error is thrown when "pasting as plain text" and no
- text is available for pasting (as an image for example).
A new tab called "Link" is available in the Image
- Dialog window. In this way you can insert or modify the image link directly
- from that dialog.*
-
The new "Templates" command is now available. Now the
- user can select from a list of pre-build HTML and fill the editor with it. Take
- a look at the "_docs" for more info.**
-
The mcpuk's File Browser for
- PHP has been included in the package. He became the official developer of the File
- Manager for FCKeditor, so we can expect good news in the future.
-
New configuration options are available to hide tabs from the
- Image Dialog and Link Dialog windows: LinkDlgHideTarget,
- LinkDlgHideAdvanced, ImageDlgHideLink and ImageDlgHideAdvanced.
-
[SF
- BUG-1189442] [SF
- BUG-1187164] [SF
- BUG-1185905] It is now possible to configure the editor to not convert Greek
- or special Latin letters to ther specific HTML entities. You
- can also configure it to not convert any character at all. Take a look at the "ProcessHTMLEntities",
- "IncludeLatinEntities" and "IncludeGreekEntities" configuration
- options.
-
New language files are available:
-
-
Basque (by Ibon Igartua)
-
English (Australia / United Kingdom) (by Christopher Dawes)
-
Ukrainian (by Alexander Pervak)
-
-
-
The version and date information have been removed from the files headers to avoid
- unecessary diffs in source control systems when new versions are released (from
- now on).
-
[SF
- Patch-1159854] Ther HTML output rendered by the server side integration files
- are now XHTML compatible.
-
[SF
- BUG-1181823] It is now possible to set the desired DOCTYPE to use when edit
- HTML fragments (not in Full Page mode).
-
There is now an optional way to implement different "mouse over" effects
- to the buttons when they are "on" of "off".
It is now possible to set the "width" style of the BODY tag in the EditorAreaCSS
- to limit the editing area size.
-
[SF
- BUG-1113620] In IE, the editor doesn't generate new entries in the browser history
- anymore.
-
The editor now uses the same method used on version RC2 to load its contents on
- Gecko. It is now possible to have more than one editor in the page. This change
- has a negative impact: the BaseHref property is not working.
-
Changes have been made to make the editor work with PHP versions older than 2.1.0.
-
[SF
- BUG-1101861] The editor now shows a normal textarea correctly (as expected)
- on Safari browsers (and all "like Gecko" browsers). Thanks to Bob Paul.
-
-
[SF
- BUG-1182224] The PHP connector can now handle file extensions in upper case, like
- JPG or Gif, correctly. Thanks to Georg Ivancsic.
-
The "sample06.html" is now working correctly with Gecko browsers.
-
[SF
- BUG-1156660] Some fixes have been applied to the Universal Keyboard. Thanks
- to Abdul-Aziz Al-Oraij.
-
[SF
- BUG-1192881] [SF
- BUG-1185006] [SF
- BUG-1156068] The "Browse Server" button is now working correctly
- for the Background Image in the "Document Properties" dialog window (full
- page editing). The active "BaseHref" is also set to the preview window.
-
-
[SF
- BUG-1191704] Invalid HTML tags (according to the W3C naming standards for XHTML)
- are ignored with no errors.
-
[SF
- BUG-1185911] The Greek language file name has been corrected to "el.js".
-
[SF
- BUG-1165219] No error occours when the user defines just one color to the FontColors
- on "in page" configurations.
-
[SF
- BUG-1162957] The small problem with Zope (ZPT) has been solved.
-
Some small RTL / LTR corrections has been done in the interface and the Farsi language
- has been added to the Universal Keyboard. Thanks to Silver Baghdasarian.
The editor now offers native Perl integration! Thanks and welcome
- to Takashi Yamaguchi, our official Perl developer.
-
[SF
- Feature-1026584] [SF
- Feature-1112692] Formatting has been introduced to the
- Source View. The output HTML can also be formatted. You can choose
- to use spaces or tab for indentation. See the configuration file.
The new toolbar command, "Document Properties" is
- available to edit document header info, title, colors, background, etc... Full page
- editing must be enabled.
-
[SF
- Feature-1151448] Spell Check is now available. You can use
- ieSpell or Speller Pages right from FCKeditor.
- More info about configuration can be found in the _docs folder.
[SF
- Feature-1123816] It is now possible to configure the editor to show "fake"
- table borders when the border size is set to zero. (It is working only
- on IE for now).
-
Numbered and Bulleted lists can now be
- configured . Just right click on then.
It is now possible to set the content language direction .
- See the "FCKConfig.ContentLangDirection" configurations setting.
-
All Field Commands available on version 1.6 have been upgraded
- and included in this version: form, checkbox,
- radio button, text field, text area,
- select field, button, image button
- and hidden field .
-
Context menu options (right-click) has been added for:
- anchors, select field, textarea,
- checkbox, radio button, text field,
- hidden field, textarea, button,
- image button, form, bulleted list
- and numbered list .
-
The "Universal Keyboard" has been converted from version
- 1.6 to this one and it's now available.
-
It is now possible to configure the items to be shown in the
- context menu . Just use the FCKConfig.ContextMenu option at fckconfig.js.
-
-
A new configuration (FillEmptyBlocks) is available to force the editor to
- automatically insert a on empty block elements (p, div, pre,
- h1, etc...) to avoid differences from the editing and the final result. (Actually,
- the editor automatically "grows" empty elements to make the user able
- to enter text on it). Attention: the extra will be added when switching
- from WYSIWYG to Source View, so the user may see an additional space on empty blocks.
- (XHTML support must be enabled).
-
It is now possible to configure the toolbar to "break
- " between two toolbar strips. Just insert a "/" between then. Take
- a look at fckconfig.js for a sample.
-
New Language files are available:
-
-
Brazilian Portuguese (by Carlos Alberto Tomatis Loth)
-
Bulgarian (by Miroslav Ivanov)
-
Esperanto (by Tim Morley)
-
Galician (by Fernando Riveiro Lopez)
-
Japanese ( by Takashi Yamaguchi)
-
Persian (by Hamed Taj-Abadi)
-
Romanian (by Adrian Nicoara)
-
Slovak (by Gabriel Kiss)
-
Thai (by Audy Charin Arsakit)
-
Turkish (by Reha Biçer)
-
The Chinese Traditional has been set as the default (zn) instead of zn-tw.
-
-
-
Warning: All toolbar image images have been changed. The "button." prefix
- has been removed. If you have your custom skin, please rename your files.
-
A new plugin is available in the package: "Placeholders".
- In this way you can insert non editable tags in your document to be processed on
- server side (very specific usage).
-
The ASPX files are no longer available in this package. They have been moved to
- the FCKeditor.Net package. In this way the ASP.Net integration is much better organized.
-
-
The FCKeditor.Packager program is now part of the main package. It is not anymore distributed
- separately.
-
The PHP connector now sets the uploaded file permissions (chmod) to 0777.
-
[SF
- Patch-1090215] It's now possible to give back more info from your custom image
- browser calling the SetUrl( url [, width] [, height] [, alt] ). Thanks to Ben Noblet.
-
-
The package files now maintain their original "Last Modified" date, so
- incremental FTP uploads can be used to update to new versions of the editor
- (from now on).
-
The "Source" view now forces its contents to be written in "Left
- to Right" direction even when the editor interface language is running a RTL
- language (like Arabic, Hebrew or Persian).
[SF
- BUG-1114748] The PHP File Manager Connector now sets the new folders permissions
- (chmod) to 0777 correctly.
-
The PHP File Manager Connector now has a configuration file (editor/filemanager/browser/default/connectors/php/config.php)
- to set some security preferences.
-
The ASP File Manager Connector now has a configuration file (editor/filemanager/browser/default/connectors/asp/config.asp)
- to set some security preferences.
-
A small bug in the toolbar rendering (strips auto position) has been corrected.
-
Some small wrapping problems with some labels in the Image and Table dialog windows
- have been fixed.
-
All .js files are now encoded in UTF-8 format with the BOM (byte order mask) to
- avoid some errors on specific Linux installations.
-
[SF
- BUG-1114449] The editor packager program has been modified so now it is possible
- to use the source files to run the editor as described in the documentation. The
- new packager must be downloaded.
-
A small problem with the editor focus while in source mode has been corrected.
- Thanks to Eric (ric1607).
-
[SF
- BUG-1108167] [SF
- BUG-1085149] [SF
- BUG-1151296] [SF
- BUG-1082433] No more IFRAMEs without src attribute. Now it points
- to a blank page located in the editor's package. In this way we avoid security warnings
- when using the editor over HTTPS. Thanks to Guillermo Bozovich.
-
[SF
- BUG-1117779] The editor now works well if you have more than one element named
- "submit" on its form (even if it is not correct to have this situation).
-
-
The XHTML processor was duplicating the text on some specific situation. It has
- been fixed.
The localization engine is now working correctly over IE 5.5 browsers.
-
Some commands where not working well over IE 5.5 (emoticons, image,...). It has
- been fixed.
-
[SF
- BUG-1146441] [SF
- BUG-1149777] The editor now uses the TEXTAREA id in the ReplaceTextarea
- function. If the id is now found, it uses the "name". The docs have been
- updated.
-
[SF
- BUG-1144297] Some corrections have been made to the Dutch language file. Thanks
- to Erwin Dondorp.
[SF
- Feature-1042034] The new "Split Cell ", to split
- a table cell in two columns, has been introduced (right-click).
-
[SF
- Feature-1042034] The new "Merge Cells", to merge
- table cells (in the same row), has been introduced (right-click).
-
The "fake" TAB key support (available by default over
- Gecko browsers is now available over IE too. You can set the number of spaces to
- add setting the FCKConfig.TabSpaces configuration setting. Set it to 0 (zero) to
- disable this feature (IE).
-
It now possible to tell IE to send a <BR> when the user presses
- the Enter key. Take a look at the FCKConfig.UseBROnCarriageReturn
- configuration setting.
-
[SF
- Feature-1085422] ColdFusion: The File Manager connector
- is now available! (Thanks to Hendrik Kramer).
-
The editor is now available in 29 languages! The new language files
- available are:
-
-
[SF
- Feature-1067775] Chinese Simplified and Traditional (Taiwan
- and Hong Kong) (by NetRube).
-
Czech (by David Horák).
-
Danish (by Jesper Michelsen).
-
Dutch (by Bram Crins).
-
German (by Maik Unruh).
-
Portuguese (Portugal) (by Francisco Pereira).
-
Russian (by Andrey Grebnev).
-
Slovenian (by Boris Volaric).
-
-
-
Updates to the French language files (by Hubert Garrido).
[SF
- BUG-1083744] On Gecko browsers, any element attribute that the name starts with
- "_moz" will be ignored.
-
[SF
- BUG-1060073] The <STYLE> and <SCRIPT> elements contents will be
- handled as is, without CDATA tag surrounding. This may break XHTML validation. In
- any case the use of external files for scripts and styles is recommended (W3C recommendation).
A problem with the "Format" command on IE browsers on languages different
- of English has been solved. The negative side of this correction is that due to
- a IE bad design it is not possible to update the "Format" combo while
- moving throw the text (context sensitive).
-
On Gecko browsers, when selecting an image and executing the "New Page"
- command, the image handles still appear, even if the image is not available anymore
- (this is a Gecko bug). When clicking in a "phanton" randle, the browser
- crashes. It doesn't happen (the crash) anymore.
-
[SF
- BUG-1082197] On ASP, the bug in the browser detection system for Gecko browsers
- has been corrected. Thanks to Alex Varga.
-
Again on ASP, the browser detection for IE had some problems on servers that use
- comma for decimal separators on numbers. It has been corrected. Thanks to Agrotic.
-
-
No error is thrown now when non existing language is configured in the
- editor. The English language file is loaded in that case.
-
[SF
- BUG-1077747] The missing images on the Office2003 and Silver skins are now included
- in the package.
-
On some Gecko browsers, the dialog window was not loading correctly. I couldn't
- reproduce the problem, but a fix has been applied based on users tests.
-
[SF
- BUG-1004078] ColdFusion: The "config" structure/hash table with keys
- and values is in ColdFusion not(!) case sensitive. All keys returned by ColdFusion
- are in upper case format. Because the FCKeditor configuration keys must be case
- sensitive, we had to match all structure/hash keys with a list of the correct configuration
- names in mixed case. This has been added to the fckeditor.cfc and fckeditor.cfm.
-
-
[SF
- BUG-1075166] ColdFusion: The "fallback" variant of the texteditor
- (<textarea>) has a bug in the fckeditor.cfm. This has been fixed.
-
A typo in the Polish language file has been corrected. Thanks to Pawel Tomicki.
-
-
[SF
- BUG-1086370] A small coding type in the Link dialog window has been corrected.
-
-
-
- Version 2.0 RC1 (Release Candidate 1)
-
-
ASP support is now available (including the File Manager connector).
-
-
PHP support is now available (including the File Manager connector).
-
-
[SF
- Feature-1063217] The new advanced Style command is available
- in the toolbar: full preview, context sensitive, style definitions are loaded from
- a XML file (see documentation for more instructions).
-
The Font Format, Font Name and Font Size
- toolbar command now show a preview of the available options.
-
The new Find and Replace features has been introduced.
-
-
A new Plug-in system has been developed. Now it is quite easy to
- customize the editor to your needs. (Take a look at the html/sample06.html file).
-
-
The editor now handles HTML entities in the right way (XHTML support
- must be set to "true"). It handles all entities defined in the W3C XHTML
- DTD file.
-
A new "_docs" folder has been introduced for the documentation.
- It is not yet complete, but I hope the community will help us to fill it better.
-
-
It is now possible (even if it is not recommended by the W3C) to force the use of
- simple ampersands (&) on attributes (like the links href) instead of its entity
- &. Just set FCKConfig.ForceSimpleAmpersand = true in the configuration
- file.
-
[SF
- Feature-1026866] The "EditorAreaCSS" configuration
- option has been introduced. In this way you can set the CSS to use in the editor
- (editable area).
-
The editing area is not anymore clipped if the toolbar is too large and exceeds
- the window width.
-
[SF
- BUG-1064902] [SF
- BUG-1033933] The editor interface is now completely localizable.
- The version ships with 19 languages including: Arabic, Bosnian, Catalan,
- English, Spanish, Estonian, Finnish, French,
- Greek, Hebrew, Croatian, Italian, Korean, Lithuanian,
- Norwegian, Polish, Serbian (Cyrillic),
- Serbian (Latin) and Swedish.
-
[SF
- BUG-1027858] Firefox 1.0 PR introduced a bug that made the editor
- stop working on it. A workaround has been developed to fix the problem.
-
There was a positioning problem over IE with the color panel. It has been corrected.
-
[SF
- BUG-1054621] Color pickers are now working with the "office2003" and
- "silver" skins.
-
[SF
- BUG-1054108] IE doesn’t recognize the "'" entity for
- apostrophes, so a workaround has been developed to replace it with "'"
- (its numeric entity representation).
[SF
- BUG-1018743] The problem with Gecko when collapsing the toolbar while in source
- mode has been fixed.
-
[SF
- BUG-1065268] [SF
- BUG-1034354] The XHTML processor now doesn’t use the minimized tag
- syntax (like <br/>) for empty elements that are not marked as EMPTY in the
- W3C XHTML DTD specifications.
[SF
- BUG-1065973] [SF
- BUG-999792] The editor now handles relative URLs in IE. In effect IE transform
- all relative URLs to absolute links, pointing to the site the editor is running.
- So now the editor removes the protocol and host part of the link if it matches the
- running server.
[SF
- BUG-1029101] The Paste from Word feature is working correctly.
-
[SF
- BUG-1034623] There is an IE bug when setting the editor value to "<p><hr></p>".
- A workaround has been developed.
-
[SF
- BUG-1052695] There are some rendering differences between Netscape and Mozilla.
- (Actually that is a bug on both browsers). A workaround has been developed to solve
- it.
[SF
- BUG-1066321] Scrollbars should not appear on dialog boxes (at least for the
- Image and Link ones).
-
[SF
- BUG-1046490] Dialogs now are forced to show on foreground over Mac.
-
[SF
- BUG-1073955] A small bug in the image dialog window has been corrected.
-
[SF
- BUG-1049534] The Resources Browser window is now working well over Gecko browsers.
-
-
[SF
- BUG-1036675] The Resources Browser window now displays the server error on bad
- installations.
-
-
- Version 2.0 Beta 2
-
-
There is a new configuration - "GeckoUseSPAN" - that
- can be used to tell Gecko browsers to use <SPAN style...> or <B>, <I>
- and <U> for the bold, italic and underline commands.
-
[SF
- Feature-1002622] New Text Color and Background Color
- commands have been added to the editor.
-
On Gecko browsers, a message is shown when, because of security settings, the
- user is not able to cut, copy or paste data from the clipboard using the
- toolbar buttons or the context menu.
-
The new "Paste as Plain Text " command has been introduced.
-
-
The new "Paste from Word " command has been introduced.
-
-
A new configuration named "StartupFocus" can be used to tell the
- editor to get the focus when the page is loaded.
-
All Java integration files has been moved to a new separated package.
-
-
[SF
- BUG-1016781] Table operations are now working when right click
- inside a table. The following commands has been introduced: Insert Row,
- Delete Row, Insert Column, Delete Column,
- Insert Cell and Delete Cells .
[SF
- BUG-1021028] If the editor doesn't have the focus, some commands were been executed
- outside the editor in the place where the focus is. It has been fixed.
-
[SF
- BUG-981191] We are now using <!--- ---> for ColdFusion comments.
-
-
- Version 2.0 Beta 1
-
- This is the first beta of the 2.x series. It brings a lot of new and important things.
- Beta versions will be released until all features available on version 1.x will
- be introduced in the 2.0.
-
- Note: As it is a beta, it is not yet completely developed. Future
- versions can bring new features that can break backward compatibility with this
- version.
-
-
-
Gecko browsers (Mozilla and Netscape) support.
-
-
Quick startup response times.
-
Complete XHTML 1.0 support.
-
Advanced link dialog box:
-
-
Target selection.
-
Popup configurator.
-
E-Mail link.
-
Anchor selector.
-
-
-
New File Manager.
-
New dialog box system, with tabbed dialogs support.
-
New context menus with icons.
-
New toolbar with "expand/collapse" feature.
-
Skins support.
-
Right to left languages support.
-
-
- Version 1.6.1
-
-
[SF
- BUG-862364] [SF
- BUG-812733] There was a problem when the user tried to delete the last row,
- collumn or cell in a table. It has been corrected.*
-
New Estonian language file. Thanks to Kristjan Kivikangur
-
New Croatian language file. Thanks to Alex Varga.
-
Updated language file for Czech. Thanks to Plachow.
-
Updated language file for Chineze (zh-cn). Thanks to Yanglin.
-
Updated language file for Catalan. Thanks to Jordi Cerdan.
-
-
- * This version has been partially sponsored by Genuitec,
- LLC.
-
- Version 1.6
-
-
Context Menu support for form elements.*
-
New "Selection Field" command with advanced dialog box
- for options definitions.*
-
New "Image Button" command is available.*
-
[SF
- Feature-936196] Many form elements bugs has been fixed and
- many improvements has been done.*
-
New Java Integration Module. There is a complete Java API and Tag
- Library implementations. Take a look at the _jsp directory. Thanks to Simone Chiaretta
- and Hao Jiang.
-
The Word Spell Checker can be used. To be able to run it, your
- browser security configuration "Initialize and script ActiveX controls not
- marked as safe" must be set to "Enable" or "Prompt". And
- easier and more secure way to do that is to add your site in the list of trusted
- sites. IeSpell can still be used. Take a look at the fck_config.js file for some
- configuration options. Thanks to EdwardRF.
Special characters are replaced with their decimal HTML entities when the XHMTL
- support is enabled (only over IE5.5+).
-
New Office 2003 Style toolbar icons are available. Just uncomment
- the config.ToolbarImagesPath key in the fck_config.js file. Thanks to Abdul-Aziz
- A. Al-Oraij. Attention: the default toolbar items have been moved
- to the "images/toolbar/default" directory.
-
[SF
- Patch-934566] Double click support for Images, Tables, Links,
- Anchors and all Form elements. Thanks to Top Man.
-
New "New Page" command to start a typing from scratch.
- Thanks to Abdul-Aziz A. Al-Oraij.
-
New "Replace" command. Thanks to Abdul-Aziz A. Al-Oraij.
-
-
New "Advanced Font Style" command. Thanks to Abdul-Aziz
- A. Al-Oraij.
-
[SF
- Feature-738193] New "Save" command. It can be used
- to simulate a save action, but in fact it just submits the form where the editor
- is placed in. Thanks to Abdul-Aziz A. Al-Oraij.
-
New "Universal Keyboard" command. This 22 charsets are
- available: Arabic, Belarusian, Bulgarian, Croatian, Czech, Danish, Finnish, French,
- Greek, Hebrew, Hungarian, Diacritical, Macedonian, Norwegian, Polish, Russian, Serbian
- (Cyrillic), Serbian (Latin), Slovak, Spanish, Ukrainian and Vietnamese. Includes
- a keystroke listener to type Arabic on none Arabic OS or machine. Thanks to Abdul-Aziz
- A. Al-Oraij.
-
[SF
- Patch-935358] New "Preview" command. Context menu
- option is included and can be deactivated throw the config.ShowPreviewContextMenu
- configuration. Thanks to Ben Ramsey.
-
New "Table Auto Format" context menu command. Hack a
- little the fck_config.js and the fck_editorarea.css files. Thanks to Alexandros
- Lezos.
-
New "Bulleted List Properties " context menu to define
- its type and class. Thanks to Alexandros Lezos.
-
The image dialog box has been a redesigned . Thanks
- to Mark Fierling.
-
Images now always have the "alt" attribute set, even
- when it's value is empty. Thanks to Andreas Barnet.
-
[SF
- Patch-942250] You can set on fck_config.js to automatically clean Word
- pasting operations without a user confirmation.
-
Forms element dialogs and other localization pending labels has been updated.
-
A new Lithuanian language file is available. Thanks to Tauras Paliulis.
-
-
A new Hebrew language file is available. Thanks to Ophir Radnitz.
-
-
A new Serbian language file is available. Thanks to Zoran Subic.
-
-
Danish language file updates. Thanks to Flemming Jensen.
-
Catalan language file updates. Thanks to Jordi Cerdan.
Updates on the testsubmit.php file. Thanks to Geat and Gabriel Schillaci
-
[SF
- BUG-924620] There was a problem when setting a name to an editor instance when
- the name is used by another tag. For example when using "description"
- as the name in a page with the <META name="description"> tag.
[SF
- BUG-743546] The XHTML content duplication problem has been
- solved . Thanks to Paul Hutchison.
-
[SF
- BUG-875853] The image dialog box now gives precedence for width
- and height values set as styles. In this way a user can change the size of the image
- directly inside the editor and the changes will be reflected in the dialog box.
-
-
[SF
- Feature-788368] The sample file upload manager for ASPX now
- uses guids for the file name generation. In this way a support
- XML file is not needed anymore.
-
It's possible now to programmatically change the Base Path of the
- editor if it's installed in a directory different of "/FCKeditor/". Something
- like this:
- oFCKeditor.BasePath = '/FCKeditor/' ;
- Take a look at the _test directory for samples.
-
There was a little bug in the TAB feature that moved the insertion point if there
- were any object (images, tables) in the content. It has been fixed.
-
The problem with accented and international characters on the PHP
- test page was solved.
-
A new Chinese (Taiwan) language file is available. Thanks to Nil.
-
-
A new Slovenian language file is available. Thanks to Pavel Rotar.
-
-
A new Catalan language file is available. Thanks to Jordi Cerdan.
-
-
A new Arabic language file is available. Thanks to Abdul-Aziz A.
- Al-Oraij.
-
Small corrections on the Norwegian language file.
-
A Java version for the test results (testsubmit.jsp) is now available. Thanks to
- Pritpal Dhaliwal.
-
When using JavaScript to create a editor instance it's possible now to easily get
- the editor's value calling oFCKeditor.GetValue() (eg.). Better JavaScript API interfaces
- will be available on version 2.0.
-
If XHTML is enabled the editor cleans the HTML before showing it
- on the Source View, so the exact result can be viewed by the user. This option can
- be activated setting config.EnableSourceXHTML = true in the fck_config.js file.
-
-
The JS integration object now escapes all configuration settings,
- in this way a user can use reserved chars on it. For example:
-
- oFCKeditor.Config["ImageBrowserURL"] = '/imgs/browse.asp?filter=abc*.jpg&userid=1';
-
-
A minimal browse server sample is now available in ASP. Thanks to Andreas Barnet.
-
-
-
- Version 1.4
-
-
ATTENTION: For PHP users: The editor was changed and now uses
- htmlspecialchars instead of htmlentities when handling
- the initial value. It should works well, but please make some tests before upgrading
- definitively. If there is any problem just uncomment the line in the fckeditor.php
- file (and send me a message!).
-
The editor is now integrated with ieSpell (http://www.iespell.com)
- for Spell Checking. You can configure the download URL in then
- fck_config.js file. Thanks to Sanjay Sharma. (ieSpell is free for personal use but
- must be paid for commercial use)
-
Table and table cell dialogs has been changed.
- Now you can select the class you want to be applied. Thanks to
- Alexander Lezos.
-
[SF
- Feature-865378]A new upload support is available for ASP. It
- uses the /UserImages/ folder in the root of the web site as the files container
- and a counter controlled by the upload.cnt file. Both must have write permissions
- set to the IUSR_xxx user. Thanks to Trax and Juanjo.
-
[SF
- Patch-798128] The user (programmer) can now define a custom separator
- for the list items of a combo in the toolbar. Thanks to Wulff D. Heiss.
-
[SF
- Feature-741963][SF
- Feature-878941][SF
- Patch-869389] A minimal support for a “fake” TAB is now available,
- even if HTML has no support for TAB. Now when the user presses the TAB key a configurable
- number of spaces ( ) is added. Take a look at config.TabSpaces on the fck_config.js
- file. No action is performed if it is set to zero. The default value is 4. Thanks
- to Phil Hassey.
[SF
- BUG-862975] Now the editor does nothing if no image is selected in the image
- dialog box and the OK button is hit.
-
[SF
- BUG-851609] The problem with ASP and null values has been solved.
-
Norwegean language pack. Thanks to Martin Kronstad.
-
Hungarian language pack. Thanks to Balázs Szabó.
-
-
Bosnian language pack. Thanks to Trax.
-
Japanese language pack. Thanks to Kato Yuichiro.
-
Updates on the Polish language pack. Thanks to Norbert Neubauer.
-
-
The Chinese (Taiwan) (zh-tw) has been removed from the package
- because it's corrupt. I'm sorry. I hope someone could send me a good version soon.
-
-
-
- Version 1.3.1
-
-
It's now possible to configure the editor the insert a <BR> tag instead
- of <P> when the user presses the <Enter> key.
- Take a look at the fck_config.js configuration file for the "UseBROnCarriageReturn"
- key. This option is disabled by default.
-
Icelandic language pack. Thanks to Andri Óskarsson.
-
[SF
- BUG-853374] On IE 5.0 there was a little error introduced with version 1.3 on
- initialization. It was corrected.
-
[SF
- BUG-853372] On IE 5.0 there was a little error introduced with version 1.3 when
- setting the focus in the editor. It was corrected.
-
Minor errors on the language file for english has been corrected.
- Thanks to Anders Madsen.
-
Minor errors on the language file for danish has been corrected.
- Thanks to Martin Johansen.
-
-
- Version 1.3
-
-
Language support for Danish, Polish, Simple Chinese, Slovak, Swedish and
- Turkish.
-
Language updates for Romanian.
-
It's now possible to override any of the editor's configurations
- (for now it's implemented just for JavaScript, ASPX and HTC modules). See _test/test.html
- for a sample. I'm now waiting for the Community for the ASP, CFM and PHP versions.
-
-
A new method is available for PHP users. It's called ReturnFCKeditor.
- It works exactly like CreateFCKeditor, but it returns a string with the HTML
- for the editor instead of output it (echo). This feature is useful for people who
- are working with Smarty Templates or something like that. Thanks to Timothy J. Finucane.
-
-
Many people have had problems with international characters over
- PHP. I had also the same problem. PHP have strange problems with
- character encoding. The code hasn't been changed but just saved again with Western
- European encoding. Now it works well in my system.
- Take a look also at the "default_charset" configuration option at the
- php.ini file. It doesn't seem to be an editor's problem but a PHP issue.
-
The "testsubmit.php" file now strips the "Magic
- Quotes " that are automatically added by PHP on form posts.
-
A new language integration module is available for ASP/Jscript.
- Thanks to Dimiter Naydenov.
-
New configuration options are available to customize the
- Target combo box in the Insert/Modify Link dialog box.
- Now you can hide it, or set which options are available in the combo box. Take a
- look at the fck_config.js file.
-
The Text as Plain Text toolbar icon has been changed
- to avoid confusion with the Normal Paste or. Thanks to Kaupo Kalda.
-
-
The file dhtmled.cab has been removed from the package. It's not
- needed to the editor to work and caused some confusion for a few users.
-
The editor's content now doesn't loose the focus
- when the user clicks with the mouse in a toolbar button.
-
On drag-and-drop operations the data to be inserted in the editor
- is now converted to plain text when the "ForcePasteAsPlainText"
- configuration is set to true.
-
The image browser sample in PHP now sorts the files
- by name. Thanks to Sergey Lupashko.
-
Two new configuration options are available to turn on/off
- by default the "Show Borders" and "Show
- Details" commands.
-
Some characters have been removed from the "Insert
- Special Chars" dialog box because they were causing encoding problems
- in some languages. Thanks to Abomb Hua.
-
JSP versions of the image and file upload and browsing
- features. Thanks to Simone Chiaretta.
-
-
- Version 1.2.4
-
-
Language support for Spanish, Finnish, Romanian and Korean.
[SF
- BUG-782779] Version 1.2 introduced a bug on the image dialog window: when changing
- the image, no update was done. This bug is now fixed.
-
-
- Version 1.2
-
-
Enhancements to the Word cleaning feature (Thanks to Karl von Randow).
-
-
The Table dialog box now handles the Style width and height set
- in the table (Thanks to Roberto Arruda). There where many problems on prior version
- when people changed manually the table's size, dragging the size handles, and then
- it was not possible to set a new size using the table dialog box.
-
For the Image dialog box:
-
-
No image is shown in the preview pane if no image has been set.
-
If no HSpace is set in the image a "-1" value was shown in the dialog
- box. Now, nothing is shown if the value is negative.
-
-
-
[SF
- BUG-739630] Image with link lost the link when changing its properties. The
- problem is solved.
-
Due to some problems in the XHTML cleaning (content duplication when the source
- HTML is dirty and malformed), the XHTML support is turned off by default
- from this version. You can still change this behavior and turn it on in the configuration
- file.
-
Some little updates on the English language file.
-
A few addition of missing entries on all languages files (translations for these
- changes are pending).
-
Language files has been added for the following languages:
-
-
Brazilian Portuguese (pt-br)
-
Czech (cz)
-
Dutch (nl)
-
Russian (ru)
-
Chinese (Taiwan) (zh-tw)
-
Greek (gr)
-
German (de)
-
-
-
-
- Version 1.1
-
-
The "Multi Language" system is now available. This version
- ships with English and Italian versions completed. Other languages will be available
- soon. The editor automatically detects the client language and sets all labels,
- tooltips and dialog boxes to it, if available. The auto detection and the default
- language can be set in the fck_config.file.
-
Two files can now be created to isolate customizations code from the original source
- code of the editor: fckeditor.config.js and fckeditor.custom.js.
- Create these files in the root folder of your web site, if needed. The first one
- can be used to add or override configurations set on fck_config.js. The second one
- is used for custom actions and behaviors.
-
A problem with relative links and images like "/test/test.doc" has been
- solved. In prior versions, only with XHTML support enabled, the URL was changed
- to something like "http://www.mysite.xxx/test/test.doc" (The domain was
- automatically added). Now the XHTML cleaning procedure gets the URLs exactly how
- they are defined in the editor’s HTML.
-
[SF
- BUG-742168] Mouse drag and drop from toolbar buttons has been disabled.
-
[SF
- BUG-768210] HTML entities, like <, were not load correctly.
- The problem is solved.
-
[SF
- BUG-748812] The link dialog window doesn't open when the link button is grayed.
-
-
-
- Version 1.0
-
-
Three new options are available in the configuration file to set what file types
- are allowed / denied to be uploaded from the "Insert Link" and "Insert
- Image" dialog boxes.
-
Upload options, for links and images, are automatically hidden on IE 5.0 browsers
- (it's not compatible).
-
[SF BUG-734894] Fixed a problem on XHTML cleaning: the value on INPUT fields were
- lost.
-
[SF BUG-713797] Fixed some image dialog errors when trying to set image properties
- when no image is available.
-
[SF BUG-736414] Developed a workaround for a DHTML control bug when loading in the
- editor some HTML started with <p><hr></p>.
-
[SF BUG-737143] Paste from Word cleaning changed to solve some IE 5.0 errors. This
- feature is still not available over IE 5.0.
-
[SF BUG-737233] CSS mappings are now OK on the PHP image browser module.
-
[SF BUG-737495] The image preview in the image dialog box is now working correctly.
-
-
[SF BUG-737532] The editor automatically switches to WYSIWYG mode when the form
- is posted.
-
[SF BUG-739571] The editor is now working well over Opera (as for Netscape, a TEXTAREA
- is shown).
-
-
- Version 1.0 Final Candidate
-
-
A new dialog box for the "Link" command is available. Now you can upload
- and browse the server exactly like the image dialog box. It's also possible to define
- the link title and target window (_blank, _self, _parent and _top). As with the
- image dialog box, a sample (and simple) file server browser is available.
-
A new configuration option is available to force every paste action to be handled
- as plain text. See "config.ForcePasteAsPlainText" in fck_config.js.
-
A new Toolbar button is available: "Paste from Word". It automatically
- cleans the clipboard content before pasting (removesWord styles, classes, xml stuff,
- etc...). This command is available for IE 5.5 and more. For IE 5.0 users, a message
- is displayed advising that the text will not be cleaned before pasting.
-
The editor automatically detects Word clipboard data on pasting operations and asks
- the user to clean it before pasting. This option is turned on by default but it
- can be configured. See "config.AutoDetectPasteFromWord" in fck_config.js.
-
-
Table properties are now available in cells' right click context menu.
-
It's now possible to edit cells advanced properties from it's right click context
- menu.
-
-
- Version 1.0 Release Candidate 1 (RC1)
-
-
Some performance improvements.
-
The file dhtmled.cab has been added to the package for clients ho needs to install
- the Microsoft DHTML Editor component.
-
[SF BUG-713952] The format command options are localized, so it depends on the IE
- language to work. Until version 0.9.5 it was working only over English IE browsers.
- Now the options are load dynamically on the client using the client's language.
-
-
[SF BUG-712103] The style command is localized, so it depends on the IE language
- to work. Until version 0.9.5 it was working only over English IE browsers. Now it
- configures itself using the client's language.
-
[SF BUG-726137] On version 0.9.5, some commands (special chars, image, emoticons,
- ...) remove the next available character before inserting the required content even
- if no selection was made in the editor. Now the editor replaces only the selected
- content (if available).
-
-
- Version 0.9.5 beta
-
-
XHTML support is now available! It can be enabled/disabled in the fck_config.js
- file.
-
"Show Table Borders" option: show borders for tables with borders size
- set to zero.
-
"Show Details" option: show hidden elements (comments, scripts, paragraphs,
- line breaks)
-
IE behavior integration module. Thanks to Daniel Shryock.
-
"Find" option: to find text in the document.
-
More performance enhancements.
-
New testsubmit.php file. Thansk to Jim Michaels.
-
Two initial PHP upload manager implementations (not working yet). Thanks to Frederic
- Tyndiuk and Christian Liljedahl.
-
Initial PHP image browser implementation (not working yet). Thanks to Frederic Tyndiuk.
-
-
Initial CFM upload manager implementation. Thanks to John Watson.
-
-
- Version 0.9.4 beta
-
-
ColdFusion module integration is now available! Thanks to John Watson.
-
"Insert Smiley" toolbar option! Thanks to Fredox. Take a look at fck_config.js
- for configuration options.
-
"Paste as plain text" toolbar option!
-
Right click support for links (edit / remove).
-
Buttons now are shown in gray when disabled.
-
Buttons are shown just when the image is downloaded (no more "red x" while
- waiting for it).
-
The toolbar background color can be set with a CSS style (see fck_editor.css).
-
Toolbar images have been reviewed:
-
-
Now they are transparent.
-
No more over...gif for every button (so the editor loads quicker).
-
Buttons states are controlled with CSS styles. (see fck_editor.css).
-
-
-
Internet Explorer 5.0 compatibility, except for the image uploading popup.
-
Optimizations when loading the editor.
-
[SF BUG-709544] - Toolbar buttons wait for the images to be downloaded to start
- watching and responding the user actions (turn buttons on/off when the user changes
- position inside the editor).
-
JavaScript integration is now Object Oriented. CreateFCKeditor function is not available
- anymore. Take a look in test.html.
-
Two new configuration options, ImageBrowser and ImageUpload, are available to turn
- on and off the image upload and image browsing options in the Image dialog box.
- This options can be hidden for a specific editor instance throw specific URL parameter
- in the editor’s IFRAME (upload=true/false&browse=true/false). All specific
- language integration modules handle this option. For sample see the _test directory.
-
-
-
-
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckcontextmenu.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckcontextmenu.js
deleted file mode 100755
index d7daefbf1..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckcontextmenu.js
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKContextMenu Class: renders an control a context menu.
- */
-
-var FCKContextMenu = function( parentWindow, langDir )
-{
- this.CtrlDisable = false ;
-
- var oPanel = this._Panel = new FCKPanel( parentWindow ) ;
- oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
- oPanel.IsContextMenu = true ;
-
- // The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla
- // so we stop the start of the dragging
- if ( FCKBrowserInfo.IsGecko )
- oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ;
-
- var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ;
- oMenuBlock.Panel = oPanel ;
- oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ;
-
- this._Redraw = true ;
-}
-
-
-FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow )
-{
- if ( !FCKBrowserInfo.IsIE )
- {
- this._Document = mouseClickWindow.document ;
- if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) )
- {
- this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ;
- this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ;
- }
- this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
- }
-}
-
-/**
- The customData parameter is just a value that will be send to the command that is executed,
- so it's possible to reuse the same command for several items just by assigning different data for each one.
-*/
-FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
-{
- var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
- this._Redraw = true ;
- return oItem ;
-}
-
-FCKContextMenu.prototype.AddSeparator = function()
-{
- this._MenuBlock.AddSeparator() ;
- this._Redraw = true ;
-}
-
-FCKContextMenu.prototype.RemoveAllItems = function()
-{
- this._MenuBlock.RemoveAllItems() ;
- this._Redraw = true ;
-}
-
-FCKContextMenu.prototype.AttachToElement = function( element )
-{
- if ( FCKBrowserInfo.IsIE )
- FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
- else
- element._FCKContextMenu = this ;
-}
-
-function FCKContextMenu_Document_OnContextMenu( e )
-{
- var el = e.target ;
-
- while ( el )
- {
- if ( el._FCKContextMenu )
- {
- if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
- return true ;
-
- FCKTools.CancelEvent( e ) ;
- FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ;
- return false ;
- }
- el = el.parentNode ;
- }
- return true ;
-}
-
-var FCKContextMenu_OverrideButton ;
-
-function FCKContextMenu_Document_OnMouseDown( e )
-{
- if( !e || e.button != 2 )
- return false ;
-
- var el = e.target ;
-
- while ( el )
- {
- if ( el._FCKContextMenu )
- {
- if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
- return true ;
-
- var overrideButton = FCKContextMenu_OverrideButton ;
- if( !overrideButton )
- {
- var doc = FCKTools.GetElementDocument( e.target ) ;
- overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ;
- overrideButton.type = 'button' ;
- var buttonHolder = doc.createElement('p') ;
- doc.body.appendChild( buttonHolder ) ;
- buttonHolder.appendChild( overrideButton ) ;
- }
-
- overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) +
- 'px;left:' + ( e.clientX - 2 ) +
- 'px;width:5px;height:5px;opacity:0.01' ;
- }
- el = el.parentNode ;
- }
- return false ;
-}
-
-function FCKContextMenu_Document_OnMouseUp( e )
-{
- var overrideButton = FCKContextMenu_OverrideButton ;
-
- if ( overrideButton )
- {
- var parent = overrideButton.parentNode ;
- parent.parentNode.removeChild( parent ) ;
- FCKContextMenu_OverrideButton = undefined ;
-
- if( e && e.button == 2 )
- {
- FCKContextMenu_Document_OnContextMenu( e ) ;
- return false ;
- }
- }
- return true ;
-}
-
-function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
-{
- if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) )
- return true ;
-
- var eTarget = el || this ;
-
- if ( fckContextMenu.OnBeforeOpen )
- fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ;
-
- if ( fckContextMenu._MenuBlock.Count() == 0 )
- return false ;
-
- if ( fckContextMenu._Redraw )
- {
- fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ;
- fckContextMenu._Redraw = false ;
- }
-
- // This will avoid that the content of the context menu can be dragged in IE
- // as the content of the panel is recreated we need to do it every time
- FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ;
-
- var x = 0 ;
- var y = 0 ;
- if ( FCKBrowserInfo.IsIE )
- {
- x = ev.screenX ;
- y = ev.screenY ;
- }
- else if ( FCKBrowserInfo.IsSafari )
- {
- x = ev.clientX ;
- y = ev.clientY ;
- }
- else
- {
- x = ev.pageX ;
- y = ev.pageY ;
- }
- fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ;
-
- return false ;
-}
-
-function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu )
-{
- contextMenu._Panel.Hide() ;
- FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdataprocessor.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdataprocessor.js
deleted file mode 100755
index c8726c570..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdataprocessor.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * The Data Processor is responsible for transforming the input and output data
- * in the editor. For more info:
- * http://dev.fckeditor.net/wiki/Components/DataProcessor
- *
- * The default implementation offers the base XHTML compatibility features of
- * FCKeditor. Further Data Processors may be implemented for other purposes.
- *
- */
-
-var FCKDataProcessor = function()
-{}
-
-FCKDataProcessor.prototype =
-{
- /*
- * Returns a string representing the HTML format of "data". The returned
- * value will be loaded in the editor.
- * The HTML must be from to , including , and
- * eventually the DOCTYPE.
- * Note: HTML comments may already be part of the data because of the
- * pre-processing made with ProtectedSource.
- * @param {String} data The data to be converted in the
- * DataProcessor specific format.
- */
- ConvertToHtml : function( data )
- {
- // The default data processor must handle two different cases depending
- // on the FullPage setting. Custom Data Processors will not be
- // compatible with FullPage, much probably.
- if ( FCKConfig.FullPage )
- {
- // Save the DOCTYPE.
- FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ;
-
- // Check if the tag is available.
- if ( !FCKRegexLib.HasBodyTag.test( data ) )
- data = '' + data + '' ;
-
- // Check if the tag is available.
- if ( !FCKRegexLib.HtmlOpener.test( data ) )
- data = '' + data + '' ;
-
- // Check if the tag is available.
- if ( !FCKRegexLib.HeadOpener.test( data ) )
- data = data.replace( FCKRegexLib.HtmlOpener, '$&' ) ;
-
- return data ;
- }
- else
- {
- var html =
- FCKConfig.DocType +
- ' 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) )
- html += ' style="overflow-y: scroll"' ;
-
- html += '>' +
- '' +
- data +
- '' ;
-
- return html ;
- }
- },
-
- /*
- * Converts a DOM (sub-)tree to a string in the data format.
- * @param {Object} rootNode The node that contains the DOM tree to be
- * converted to the data format.
- * @param {Boolean} excludeRoot Indicates that the root node must not
- * be included in the conversion, only its children.
- * @param {Boolean} format Indicates that the data must be formatted
- * for human reading. Not all Data Processors may provide it.
- */
- ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
- {
- var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ;
-
- if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) )
- return '' ;
-
- return data ;
- },
-
- /*
- * Makes any necessary changes to a piece of HTML for insertion in the
- * editor selection position.
- * @param {String} html The HTML to be fixed.
- */
- FixHtml : function( html )
- {
- return html ;
- }
-} ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js
deleted file mode 100755
index a25eacb08..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This is a generic Document Fragment object. It is not intended to provide
- * the W3C implementation, but is a way to fix the missing of a real Document
- * Fragment in IE (where document.createDocumentFragment() returns a normal
- * document instead), giving a standard interface for it.
- * (IE Implementation)
- */
-
-var FCKDocumentFragment = function( parentDocument, baseDocFrag )
-{
- this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ;
-}
-
-FCKDocumentFragment.prototype =
-{
-
- // Append the contents of this Document Fragment to another element.
- AppendTo : function( targetNode )
- {
- targetNode.appendChild( this.RootNode ) ;
- },
-
- InsertAfterNode : function( existingNode )
- {
- FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ;
- }
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
deleted file mode 100755
index 4a50cf441..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This is a generic Document Fragment object. It is not intended to provide
- * the W3C implementation, but is a way to fix the missing of a real Document
- * Fragment in IE (where document.createDocumentFragment() returns a normal
- * document instead), giving a standard interface for it.
- * (IE Implementation)
- */
-
-var FCKDocumentFragment = function( parentDocument )
-{
- this._Document = parentDocument ;
- this.RootNode = parentDocument.createElement( 'div' ) ;
-}
-
-// Append the contents of this Document Fragment to another node.
-FCKDocumentFragment.prototype =
-{
-
- AppendTo : function( targetNode )
- {
- FCKDomTools.MoveChildren( this.RootNode, targetNode ) ;
- },
-
- AppendHtml : function( html )
- {
- var eTmpDiv = this._Document.createElement( 'div' ) ;
- eTmpDiv.innerHTML = html ;
- FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
- },
-
- InsertAfterNode : function( existingNode )
- {
- var eRoot = this.RootNode ;
- var eLast ;
-
- while( ( eLast = eRoot.lastChild ) )
- FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ;
- }
-} ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange.js
deleted file mode 100755
index 09aab3282..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange.js
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Class for working with a selection range, much like the W3C DOM Range, but
- * it is not intended to be an implementation of the W3C interface.
- */
-
-var FCKDomRange = function( sourceWindow )
-{
- this.Window = sourceWindow ;
- this._Cache = {} ;
-}
-
-FCKDomRange.prototype =
-{
-
- _UpdateElementInfo : function()
- {
- var innerRange = this._Range ;
-
- if ( !innerRange )
- this.Release( true ) ;
- else
- {
- // For text nodes, the node itself is the StartNode.
- var eStart = innerRange.startContainer ;
- var eEnd = innerRange.endContainer ;
-
- var oElementPath = new FCKElementPath( eStart ) ;
- this.StartNode = eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ;
- this.StartContainer = eStart ;
- this.StartBlock = oElementPath.Block ;
- this.StartBlockLimit = oElementPath.BlockLimit ;
-
- if ( eStart != eEnd )
- oElementPath = new FCKElementPath( eEnd ) ;
-
- // The innerRange.endContainer[ innerRange.endOffset ] is not
- // usually part of the range, but the marker for the range end. So,
- // let's get the previous available node as the real end.
- var eEndNode = eEnd ;
- if ( innerRange.endOffset == 0 )
- {
- while ( eEndNode && !eEndNode.previousSibling )
- eEndNode = eEndNode.parentNode ;
-
- if ( eEndNode )
- eEndNode = eEndNode.previousSibling ;
- }
- else if ( eEndNode.nodeType == 1 )
- eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
-
- this.EndNode = eEndNode ;
- this.EndContainer = eEnd ;
- this.EndBlock = oElementPath.Block ;
- this.EndBlockLimit = oElementPath.BlockLimit ;
- }
-
- this._Cache = {} ;
- },
-
- CreateRange : function()
- {
- return new FCKW3CRange( this.Window.document ) ;
- },
-
- DeleteContents : function()
- {
- if ( this._Range )
- {
- this._Range.deleteContents() ;
- this._UpdateElementInfo() ;
- }
- },
-
- ExtractContents : function()
- {
- if ( this._Range )
- {
- var docFrag = this._Range.extractContents() ;
- this._UpdateElementInfo() ;
- return docFrag ;
- }
- return null ;
- },
-
- CheckIsCollapsed : function()
- {
- if ( this._Range )
- return this._Range.collapsed ;
-
- return false ;
- },
-
- Collapse : function( toStart )
- {
- if ( this._Range )
- this._Range.collapse( toStart ) ;
-
- this._UpdateElementInfo() ;
- },
-
- Clone : function()
- {
- var oClone = FCKTools.CloneObject( this ) ;
-
- if ( this._Range )
- oClone._Range = this._Range.cloneRange() ;
-
- return oClone ;
- },
-
- MoveToNodeContents : function( targetNode )
- {
- if ( !this._Range )
- this._Range = this.CreateRange() ;
-
- this._Range.selectNodeContents( targetNode ) ;
-
- this._UpdateElementInfo() ;
- },
-
- MoveToElementStart : function( targetElement )
- {
- this.SetStart(targetElement,1) ;
- this.SetEnd(targetElement,1) ;
- },
-
- // Moves to the first editing point inside a element. For example, in a
- // element tree like "
Text
", the start editing point
- // is "
^ Text
" (inside ).
- MoveToElementEditStart : function( targetElement )
- {
- var editableElement ;
-
- while ( targetElement && targetElement.nodeType == 1 )
- {
- if ( FCKDomTools.CheckIsEditable( targetElement ) )
- editableElement = targetElement ;
- else if ( editableElement )
- break ; // If we already found an editable element, stop the loop.
-
- targetElement = targetElement.firstChild ;
- }
-
- if ( editableElement )
- this.MoveToElementStart( editableElement ) ;
- },
-
- InsertNode : function( node )
- {
- if ( this._Range )
- this._Range.insertNode( node ) ;
- },
-
- CheckIsEmpty : function()
- {
- if ( this.CheckIsCollapsed() )
- return true ;
-
- // Inserts the contents of the range in a div tag.
- var eToolDiv = this.Window.document.createElement( 'div' ) ;
- this._Range.cloneContents().AppendTo( eToolDiv ) ;
-
- FCKDomTools.TrimNode( eToolDiv ) ;
-
- return ( eToolDiv.innerHTML.length == 0 ) ;
- },
-
- /**
- * Checks if the start boundary of the current range is "visually" (like a
- * selection caret) at the beginning of the block. It means that some
- * things could be brefore the range, like spaces or empty inline elements,
- * but it would still be considered at the beginning of the block.
- */
- CheckStartOfBlock : function()
- {
- var cache = this._Cache ;
- var bIsStartOfBlock = cache.IsStartOfBlock ;
-
- if ( bIsStartOfBlock != undefined )
- return bIsStartOfBlock ;
-
- // Take the block reference.
- var block = this.StartBlock || this.StartBlockLimit ;
-
- var container = this._Range.startContainer ;
- var offset = this._Range.startOffset ;
- var currentNode ;
-
- if ( offset > 0 )
- {
- // First, check the start container. If it is a text node, get the
- // substring of the node value before the range offset.
- if ( container.nodeType == 3 )
- {
- var textValue = container.nodeValue.substr( 0, offset ).Trim() ;
-
- // If we have some text left in the container, we are not at
- // the end for the block.
- if ( textValue.length != 0 )
- return cache.IsStartOfBlock = false ;
- }
- else
- currentNode = container.childNodes[ offset - 1 ] ;
- }
-
- // We'll not have a currentNode if the container was a text node, or
- // the offset is zero.
- if ( !currentNode )
- currentNode = FCKDomTools.GetPreviousSourceNode( container, true, null, block ) ;
-
- while ( currentNode )
- {
- switch ( currentNode.nodeType )
- {
- case 1 :
- // It's not an inline element.
- if ( !FCKListsLib.InlineChildReqElements[ currentNode.nodeName.toLowerCase() ] )
- return cache.IsStartOfBlock = false ;
-
- break ;
-
- case 3 :
- // It's a text node with real text.
- if ( currentNode.nodeValue.Trim().length > 0 )
- return cache.IsStartOfBlock = false ;
- }
-
- currentNode = FCKDomTools.GetPreviousSourceNode( currentNode, false, null, block ) ;
- }
-
- return cache.IsStartOfBlock = true ;
- },
-
- /**
- * Checks if the end boundary of the current range is "visually" (like a
- * selection caret) at the end of the block. It means that some things
- * could be after the range, like spaces, empty inline elements, or a
- * single , but it would still be considered at the end of the block.
- */
- CheckEndOfBlock : function( refreshSelection )
- {
- var isEndOfBlock = this._Cache.IsEndOfBlock ;
-
- if ( isEndOfBlock != undefined )
- return isEndOfBlock ;
-
- // Take the block reference.
- var block = this.EndBlock || this.EndBlockLimit ;
-
- var container = this._Range.endContainer ;
- var offset = this._Range.endOffset ;
- var currentNode ;
-
- // First, check the end container. If it is a text node, get the
- // substring of the node value after the range offset.
- if ( container.nodeType == 3 )
- {
- var textValue = container.nodeValue ;
- if ( offset < textValue.length )
- {
- textValue = textValue.substr( offset ) ;
-
- // If we have some text left in the container, we are not at
- // the end for the block.
- if ( textValue.Trim().length != 0 )
- return this._Cache.IsEndOfBlock = false ;
- }
- }
- else
- currentNode = container.childNodes[ offset ] ;
-
- // We'll not have a currentNode if the container was a text node, of
- // the offset is out the container children limits (after it probably).
- if ( !currentNode )
- currentNode = FCKDomTools.GetNextSourceNode( container, true, null, block ) ;
-
- var hadBr = false ;
-
- while ( currentNode )
- {
- switch ( currentNode.nodeType )
- {
- case 1 :
- var nodeName = currentNode.nodeName.toLowerCase() ;
-
- // It's an inline element.
- if ( FCKListsLib.InlineChildReqElements[ nodeName ] )
- break ;
-
- // It is the first found.
- if ( nodeName == 'br' && !hadBr )
- {
- hadBr = true ;
- break ;
- }
-
- return this._Cache.IsEndOfBlock = false ;
-
- case 3 :
- // It's a text node with real text.
- if ( currentNode.nodeValue.Trim().length > 0 )
- return this._Cache.IsEndOfBlock = false ;
- }
-
- currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, null, block ) ;
- }
-
- if ( refreshSelection )
- this.Select() ;
-
- return this._Cache.IsEndOfBlock = true ;
- },
-
- // This is an "intrusive" way to create a bookmark. It includes tags
- // in the range boundaries. The advantage of it is that it is possible to
- // handle DOM mutations when moving back to the bookmark.
- // Attention: the inclusion of nodes in the DOM is a design choice and
- // should not be changed as there are other points in the code that may be
- // using those nodes to perform operations. See GetBookmarkNode.
- // For performance, includeNodes=true if intended to SelectBookmark.
- CreateBookmark : function( includeNodes )
- {
- // Create the bookmark info (random IDs).
- var oBookmark =
- {
- StartId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S',
- EndId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E'
- } ;
-
- var oDoc = this.Window.document ;
- var eStartSpan ;
- var eEndSpan ;
- var oClone ;
-
- // For collapsed ranges, add just the start marker.
- if ( !this.CheckIsCollapsed() )
- {
- eEndSpan = oDoc.createElement( 'span' ) ;
- eEndSpan.style.display = 'none' ;
- eEndSpan.id = oBookmark.EndId ;
- eEndSpan.setAttribute( '_fck_bookmark', true ) ;
-
- // For IE, it must have something inside, otherwise it may be
- // removed during DOM operations.
-// if ( FCKBrowserInfo.IsIE )
- eEndSpan.innerHTML = ' ' ;
-
- oClone = this.Clone() ;
- oClone.Collapse( false ) ;
- oClone.InsertNode( eEndSpan ) ;
- }
-
- eStartSpan = oDoc.createElement( 'span' ) ;
- eStartSpan.style.display = 'none' ;
- eStartSpan.id = oBookmark.StartId ;
- eStartSpan.setAttribute( '_fck_bookmark', true ) ;
-
- // For IE, it must have something inside, otherwise it may be removed
- // during DOM operations.
-// if ( FCKBrowserInfo.IsIE )
- eStartSpan.innerHTML = ' ' ;
-
- oClone = this.Clone() ;
- oClone.Collapse( true ) ;
- oClone.InsertNode( eStartSpan ) ;
-
- if ( includeNodes )
- {
- oBookmark.StartNode = eStartSpan ;
- oBookmark.EndNode = eEndSpan ;
- }
-
- // Update the range position.
- if ( eEndSpan )
- {
- this.SetStart( eStartSpan, 4 ) ;
- this.SetEnd( eEndSpan, 3 ) ;
- }
- else
- this.MoveToPosition( eStartSpan, 4 ) ;
-
- return oBookmark ;
- },
-
- // This one should be a part of a hypothetic "bookmark" object.
- GetBookmarkNode : function( bookmark, start )
- {
- var doc = this.Window.document ;
-
- if ( start )
- return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ;
- else
- return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ;
- },
-
- MoveToBookmark : function( bookmark, preserveBookmark )
- {
- var eStartSpan = this.GetBookmarkNode( bookmark, true ) ;
- var eEndSpan = this.GetBookmarkNode( bookmark, false ) ;
-
- this.SetStart( eStartSpan, 3 ) ;
-
- if ( !preserveBookmark )
- FCKDomTools.RemoveNode( eStartSpan ) ;
-
- // If collapsed, the end span will not be available.
- if ( eEndSpan )
- {
- this.SetEnd( eEndSpan, 3 ) ;
-
- if ( !preserveBookmark )
- FCKDomTools.RemoveNode( eEndSpan ) ;
- }
- else
- this.Collapse( true ) ;
-
- this._UpdateElementInfo() ;
- },
-
- // Non-intrusive bookmark algorithm
- CreateBookmark2 : function()
- {
- // If there is no range then get out of here.
- // It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox
- if ( ! this._Range )
- return { "Start" : 0, "End" : 0 } ;
-
- // First, we record down the offset values
- var bookmark =
- {
- "Start" : [ this._Range.startOffset ],
- "End" : [ this._Range.endOffset ]
- } ;
- // Since we're treating the document tree as normalized, we need to backtrack the text lengths
- // of previous text nodes into the offset value.
- var curStart = this._Range.startContainer.previousSibling ;
- var curEnd = this._Range.endContainer.previousSibling ;
-
- // Also note that the node that we use for "address base" would change during backtracking.
- var addrStart = this._Range.startContainer ;
- var addrEnd = this._Range.endContainer ;
- while ( curStart && curStart.nodeType == 3 )
- {
- bookmark.Start[0] += curStart.length ;
- addrStart = curStart ;
- curStart = curStart.previousSibling ;
- }
- while ( curEnd && curEnd.nodeType == 3 )
- {
- bookmark.End[0] += curEnd.length ;
- addrEnd = curEnd ;
- curEnd = curEnd.previousSibling ;
- }
-
- // If the object pointed to by the startOffset and endOffset are text nodes, we need
- // to backtrack and add in the text offset to the bookmark addresses.
- if ( addrStart.nodeType == 1 && addrStart.childNodes[bookmark.Start[0]] && addrStart.childNodes[bookmark.Start[0]].nodeType == 3 )
- {
- var curNode = addrStart.childNodes[bookmark.Start[0]] ;
- var offset = 0 ;
- while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
- {
- curNode = curNode.previousSibling ;
- offset += curNode.length ;
- }
- addrStart = curNode ;
- bookmark.Start[0] = offset ;
- }
- if ( addrEnd.nodeType == 1 && addrEnd.childNodes[bookmark.End[0]] && addrEnd.childNodes[bookmark.End[0]].nodeType == 3 )
- {
- var curNode = addrEnd.childNodes[bookmark.End[0]] ;
- var offset = 0 ;
- while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
- {
- curNode = curNode.previousSibling ;
- offset += curNode.length ;
- }
- addrEnd = curNode ;
- bookmark.End[0] = offset ;
- }
-
- // Then, we record down the precise position of the container nodes
- // by walking up the DOM tree and counting their childNode index
- bookmark.Start = FCKDomTools.GetNodeAddress( addrStart, true ).concat( bookmark.Start ) ;
- bookmark.End = FCKDomTools.GetNodeAddress( addrEnd, true ).concat( bookmark.End ) ;
- return bookmark;
- },
-
- MoveToBookmark2 : function( bookmark )
- {
- // Reverse the childNode counting algorithm in CreateBookmark2()
- var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ;
- var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ;
-
- // Generate the W3C Range object and update relevant data
- this.Release( true ) ;
- this._Range = new FCKW3CRange( this.Window.document ) ;
- var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ;
- var endOffset = bookmark.End[ bookmark.End.length - 1 ] ;
- while ( curStart.nodeType == 3 && startOffset > curStart.length )
- {
- if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 )
- break ;
- startOffset -= curStart.length ;
- curStart = curStart.nextSibling ;
- }
- while ( curEnd.nodeType == 3 && endOffset > curEnd.length )
- {
- if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 )
- break ;
- endOffset -= curEnd.length ;
- curEnd = curEnd.nextSibling ;
- }
- this._Range.setStart( curStart, startOffset ) ;
- this._Range.setEnd( curEnd, endOffset ) ;
- this._UpdateElementInfo() ;
- },
-
- MoveToPosition : function( targetElement, position )
- {
- this.SetStart( targetElement, position ) ;
- this.Collapse( true ) ;
- },
-
- /*
- * Moves the position of the start boundary of the range to a specific position
- * relatively to a element.
- * @position:
- * 1 = After Start ^contents
- * 2 = Before End contents^
- * 3 = Before Start ^contents
- * 4 = After End contents^
- */
- SetStart : function( targetElement, position, noInfoUpdate )
- {
- var oRange = this._Range ;
- if ( !oRange )
- oRange = this._Range = this.CreateRange() ;
-
- switch( position )
- {
- case 1 : // After Start ^contents
- oRange.setStart( targetElement, 0 ) ;
- break ;
-
- case 2 : // Before End contents^
- oRange.setStart( targetElement, targetElement.childNodes.length ) ;
- break ;
-
- case 3 : // Before Start ^contents
- oRange.setStartBefore( targetElement ) ;
- break ;
-
- case 4 : // After End contents^
- oRange.setStartAfter( targetElement ) ;
- }
-
- if ( !noInfoUpdate )
- this._UpdateElementInfo() ;
- },
-
- /*
- * Moves the position of the start boundary of the range to a specific position
- * relatively to a element.
- * @position:
- * 1 = After Start ^contents
- * 2 = Before End contents^
- * 3 = Before Start ^contents
- * 4 = After End contents^
- */
- SetEnd : function( targetElement, position, noInfoUpdate )
- {
- var oRange = this._Range ;
- if ( !oRange )
- oRange = this._Range = this.CreateRange() ;
-
- switch( position )
- {
- case 1 : // After Start ^contents
- oRange.setEnd( targetElement, 0 ) ;
- break ;
-
- case 2 : // Before End contents^
- oRange.setEnd( targetElement, targetElement.childNodes.length ) ;
- break ;
-
- case 3 : // Before Start ^contents
- oRange.setEndBefore( targetElement ) ;
- break ;
-
- case 4 : // After End contents^
- oRange.setEndAfter( targetElement ) ;
- }
-
- if ( !noInfoUpdate )
- this._UpdateElementInfo() ;
- },
-
- Expand : function( unit )
- {
- var oNode, oSibling ;
-
- switch ( unit )
- {
- // Expand the range to include all inline parent elements if we are
- // are in their boundary limits.
- // For example (where [ ] are the range limits):
- // Before => Some [Some sample text].
- // After => Some [Some sample text].
- case 'inline_elements' :
- // Expand the start boundary.
- if ( this._Range.startOffset == 0 )
- {
- oNode = this._Range.startContainer ;
-
- if ( oNode.nodeType != 1 )
- oNode = oNode.previousSibling ? null : oNode.parentNode ;
-
- if ( oNode )
- {
- while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
- {
- this._Range.setStartBefore( oNode ) ;
-
- if ( oNode != oNode.parentNode.firstChild )
- break ;
-
- oNode = oNode.parentNode ;
- }
- }
- }
-
- // Expand the end boundary.
- oNode = this._Range.endContainer ;
- var offset = this._Range.endOffset ;
-
- if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) )
- {
- if ( oNode.nodeType != 1 )
- oNode = oNode.nextSibling ? null : oNode.parentNode ;
-
- if ( oNode )
- {
- while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
- {
- this._Range.setEndAfter( oNode ) ;
-
- if ( oNode != oNode.parentNode.lastChild )
- break ;
-
- oNode = oNode.parentNode ;
- }
- }
- }
-
- break ;
-
- case 'block_contents' :
- case 'list_contents' :
- var boundarySet = FCKListsLib.BlockBoundaries ;
- if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' )
- boundarySet = FCKListsLib.ListBoundaries ;
-
- if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' )
- this.SetStart( this.StartBlock, 1 ) ;
- else
- {
- // Get the start node for the current range.
- oNode = this._Range.startContainer ;
-
- // If it is an element, get the node right before of it (in source order).
- if ( oNode.nodeType == 1 )
- {
- var lastNode = oNode.childNodes[ this._Range.startOffset ] ;
- if ( lastNode )
- oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ;
- else
- oNode = oNode.lastChild || oNode ;
- }
-
- // We must look for the left boundary, relative to the range
- // start, which is limited by a block element.
- while ( oNode
- && ( oNode.nodeType != 1
- || ( oNode != this.StartBlockLimit
- && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
- {
- this._Range.setStartBefore( oNode ) ;
- oNode = oNode.previousSibling || oNode.parentNode ;
- }
- }
-
- if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' )
- this.SetEnd( this.EndBlock, 2 ) ;
- else
- {
- oNode = this._Range.endContainer ;
- if ( oNode.nodeType == 1 )
- oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ;
-
- // We must look for the right boundary, relative to the range
- // end, which is limited by a block element.
- while ( oNode
- && ( oNode.nodeType != 1
- || ( oNode != this.StartBlockLimit
- && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
- {
- this._Range.setEndAfter( oNode ) ;
- oNode = oNode.nextSibling || oNode.parentNode ;
- }
-
- // In EnterMode='br', the end boundary element must
- // be included in the expanded range.
- if ( oNode && oNode.nodeName.toLowerCase() == 'br' )
- this._Range.setEndAfter( oNode ) ;
- }
-
- this._UpdateElementInfo() ;
- }
- },
-
- /**
- * Split the block element for the current range. It deletes the contents
- * of the range and splits the block in the collapsed position, resulting
- * in two sucessive blocks. The range is then positioned in the middle of
- * them.
- *
- * It returns and object with the following properties:
- * - PreviousBlock : a reference to the block element that preceeds
- * the range after the split.
- * - NextBlock : a reference to the block element that follows the
- * range after the split.
- * - WasStartOfBlock : a boolean indicating that the range was
- * originaly at the start of the block.
- * - WasEndOfBlock : a boolean indicating that the range was originaly
- * at the end of the block.
- *
- * If the range was originaly at the start of the block, no split will happen
- * and the PreviousBlock value will be null. The same is valid for the
- * NextBlock value if the range was at the end of the block.
- */
- SplitBlock : function( forceBlockTag )
- {
- var blockTag = forceBlockTag || FCKConfig.EnterMode ;
-
- if ( !this._Range )
- this.MoveToSelection() ;
-
- // The range boundaries must be in the same "block limit" element.
- if ( this.StartBlockLimit == this.EndBlockLimit )
- {
- // Get the current blocks.
- var eStartBlock = this.StartBlock ;
- var eEndBlock = this.EndBlock ;
- var oElementPath = null ;
-
- if ( blockTag != 'br' )
- {
- if ( !eStartBlock )
- {
- eStartBlock = this.FixBlock( true, blockTag ) ;
- eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too.
- }
-
- if ( !eEndBlock )
- eEndBlock = this.FixBlock( false, blockTag ) ;
- }
-
- // Get the range position.
- var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ;
- var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ;
-
- // Delete the current contents.
- if ( !this.CheckIsEmpty() )
- this.DeleteContents() ;
-
- if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock )
- {
- if ( bIsEndOfBlock )
- {
- oElementPath = new FCKElementPath( this.StartContainer ) ;
- this.MoveToPosition( eEndBlock, 4 ) ;
- eEndBlock = null ;
- }
- else if ( bIsStartOfBlock )
- {
- oElementPath = new FCKElementPath( this.StartContainer ) ;
- this.MoveToPosition( eStartBlock, 3 ) ;
- eStartBlock = null ;
- }
- else
- {
- // Extract the contents of the block from the selection point to the end of its contents.
- this.SetEnd( eStartBlock, 2 ) ;
- var eDocFrag = this.ExtractContents() ;
-
- // Duplicate the block element after it.
- eEndBlock = eStartBlock.cloneNode( false ) ;
- eEndBlock.removeAttribute( 'id', false ) ;
-
- // Place the extracted contents in the duplicated block.
- eDocFrag.AppendTo( eEndBlock ) ;
-
- FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ;
-
- this.MoveToPosition( eStartBlock, 4 ) ;
-
- // In Gecko, the last child node must be a bogus .
- // Note: bogus added under
or would cause lists to be incorrectly rendered.
- if ( FCKBrowserInfo.IsGecko &&
- ! eStartBlock.nodeName.IEquals( ['ul', 'ol'] ) )
- FCKTools.AppendBogusBr( eStartBlock ) ;
- }
- }
-
- return {
- PreviousBlock : eStartBlock,
- NextBlock : eEndBlock,
- WasStartOfBlock : bIsStartOfBlock,
- WasEndOfBlock : bIsEndOfBlock,
- ElementPath : oElementPath
- } ;
- }
-
- return null ;
- },
-
- // Transform a block without a block tag in a valid block (orphan text in the body or td, usually).
- FixBlock : function( isStart, blockTag )
- {
- // Bookmark the range so we can restore it later.
- var oBookmark = this.CreateBookmark() ;
-
- // Collapse the range to the requested ending boundary.
- this.Collapse( isStart ) ;
-
- // Expands it to the block contents.
- this.Expand( 'block_contents' ) ;
-
- // Create the fixed block.
- var oFixedBlock = this.Window.document.createElement( blockTag ) ;
-
- // Move the contents of the temporary range to the fixed block.
- this.ExtractContents().AppendTo( oFixedBlock ) ;
- FCKDomTools.TrimNode( oFixedBlock ) ;
-
- // Insert the fixed block into the DOM.
- this.InsertNode( oFixedBlock ) ;
-
- // Move the range back to the bookmarked place.
- this.MoveToBookmark( oBookmark ) ;
-
- return oFixedBlock ;
- },
-
- Release : function( preserveWindow )
- {
- if ( !preserveWindow )
- this.Window = null ;
-
- this.StartNode = null ;
- this.StartContainer = null ;
- this.StartBlock = null ;
- this.StartBlockLimit = null ;
- this.EndNode = null ;
- this.EndContainer = null ;
- this.EndBlock = null ;
- this.EndBlockLimit = null ;
- this._Range = null ;
- this._Cache = null ;
- },
-
- CheckHasRange : function()
- {
- return !!this._Range ;
- },
-
- GetTouchedStartNode : function()
- {
- var range = this._Range ;
- var container = range.startContainer ;
-
- if ( range.collapsed || container.nodeType != 1 )
- return container ;
-
- return container.childNodes[ range.startOffset ] || container ;
- },
-
- GetTouchedEndNode : function()
- {
- var range = this._Range ;
- var container = range.endContainer ;
-
- if ( range.collapsed || container.nodeType != 1 )
- return container ;
-
- return container.childNodes[ range.endOffset - 1 ] || container ;
- }
-} ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange_gecko.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange_gecko.js
deleted file mode 100755
index ddffb1301..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange_gecko.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Class for working with a selection range, much like the W3C DOM Range, but
- * it is not intended to be an implementation of the W3C interface.
- * (Gecko Implementation)
- */
-
-FCKDomRange.prototype.MoveToSelection = function()
-{
- this.Release( true ) ;
-
- var oSel = this.Window.getSelection() ;
-
- if ( oSel && oSel.rangeCount > 0 )
- {
- this._Range = FCKW3CRange.CreateFromRange( this.Window.document, oSel.getRangeAt(0) ) ;
- this._UpdateElementInfo() ;
- }
- else
- if ( this.Window.document )
- this.MoveToElementStart( this.Window.document.body ) ;
-}
-
-FCKDomRange.prototype.Select = function()
-{
- var oRange = this._Range ;
- if ( oRange )
- {
- var startContainer = oRange.startContainer ;
-
- // If we have a collapsed range, inside an empty element, we must add
- // something to it, otherwise the caret will not be visible.
- if ( oRange.collapsed && startContainer.nodeType == 1 && startContainer.childNodes.length == 0 )
- startContainer.appendChild( oRange._Document.createTextNode('') ) ;
-
- var oDocRange = this.Window.document.createRange() ;
- oDocRange.setStart( startContainer, oRange.startOffset ) ;
-
- try
- {
- oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
- }
- catch ( e )
- {
- // There is a bug in Firefox implementation (it would be too easy
- // otherwise). The new start can't be after the end (W3C says it can).
- // So, let's create a new range and collapse it to the desired point.
- if ( e.toString().Contains( 'NS_ERROR_ILLEGAL_VALUE' ) )
- {
- oRange.collapse( true ) ;
- oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
- }
- else
- throw( e ) ;
- }
-
- var oSel = this.Window.getSelection() ;
- oSel.removeAllRanges() ;
-
- // We must add a clone otherwise Firefox will have rendering issues.
- oSel.addRange( oDocRange ) ;
- }
-}
-
-// Not compatible with bookmark created with CreateBookmark2.
-// The bookmark nodes will be deleted from the document.
-FCKDomRange.prototype.SelectBookmark = function( bookmark )
-{
- var domRange = this.Window.document.createRange() ;
-
- var startNode = this.GetBookmarkNode( bookmark, true ) ;
- var endNode = this.GetBookmarkNode( bookmark, false ) ;
-
- domRange.setStart( startNode.parentNode, FCKDomTools.GetIndexOf( startNode ) ) ;
- FCKDomTools.RemoveNode( startNode ) ;
-
- if ( endNode )
- {
- domRange.setEnd( endNode.parentNode, FCKDomTools.GetIndexOf( endNode ) ) ;
- FCKDomTools.RemoveNode( endNode ) ;
- }
-
- var selection = this.Window.getSelection() ;
- selection.removeAllRanges() ;
- selection.addRange( domRange ) ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange_ie.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange_ie.js
deleted file mode 100755
index 3ebe2b9a3..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrange_ie.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Class for working with a selection range, much like the W3C DOM Range, but
- * it is not intended to be an implementation of the W3C interface.
- * (IE Implementation)
- */
-
-FCKDomRange.prototype.MoveToSelection = function()
-{
- this.Release( true ) ;
-
- this._Range = new FCKW3CRange( this.Window.document ) ;
-
- var oSel = this.Window.document.selection ;
-
- if ( oSel.type != 'Control' )
- {
- var eMarkerStart = this._GetSelectionMarkerTag( true ) ;
- var eMarkerEnd = this._GetSelectionMarkerTag( false ) ;
-
- if ( !eMarkerStart && !eMarkerEnd )
- {
- this._Range.setStart( this.Window.document.body, 0 ) ;
- this._UpdateElementInfo() ;
- return ;
- }
-
- // Set the start boundary.
- this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ;
- eMarkerStart.parentNode.removeChild( eMarkerStart ) ;
-
- // Set the end boundary.
- this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ;
- eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ;
-
- this._UpdateElementInfo() ;
- }
- else
- {
- var oControl = oSel.createRange().item(0) ;
-
- if ( oControl )
- {
- this._Range.setStartBefore( oControl ) ;
- this._Range.setEndAfter( oControl ) ;
- this._UpdateElementInfo() ;
- }
- }
-}
-
-FCKDomRange.prototype.Select = function( forceExpand )
-{
- if ( this._Range )
- this.SelectBookmark( this.CreateBookmark( true ), forceExpand ) ;
-}
-
-// Not compatible with bookmark created with CreateBookmark2.
-// The bookmark nodes will be deleted from the document.
-FCKDomRange.prototype.SelectBookmark = function( bookmark, forceExpand )
-{
- var bIsCollapsed = this.CheckIsCollapsed() ;
- var bIsStartMakerAlone ;
- var dummySpan ;
-
- // Create marker tags for the start and end boundaries.
- var eStartMarker = this.GetBookmarkNode( bookmark, true ) ;
-
- if ( !eStartMarker )
- return ;
-
- var eEndMarker ;
- if ( !bIsCollapsed )
- eEndMarker = this.GetBookmarkNode( bookmark, false ) ;
-
- // Create the main range which will be used for the selection.
- var oIERange = this.Window.document.body.createTextRange() ;
-
- // Position the range at the start boundary.
- oIERange.moveToElementText( eStartMarker ) ;
- oIERange.moveStart( 'character', 1 ) ;
-
- if ( eEndMarker )
- {
- // Create a tool range for the end.
- var oIERangeEnd = this.Window.document.body.createTextRange() ;
-
- // Position the tool range at the end.
- oIERangeEnd.moveToElementText( eEndMarker ) ;
-
- // Move the end boundary of the main range to match the tool range.
- oIERange.setEndPoint( 'EndToEnd', oIERangeEnd ) ;
- oIERange.moveEnd( 'character', -1 ) ;
- }
- else
- {
- bIsStartMakerAlone = ( forceExpand || !eStartMarker.previousSibling || eStartMarker.previousSibling.nodeName.toLowerCase() == 'br' ) && !eStartMarker.nextSibing ;
-
- // Append a temporary before the selection.
- // This is needed to avoid IE destroying selections inside empty
- // inline elements, like (#253).
- // It is also needed when placing the selection right after an inline
- // element to avoid the selection moving inside of it.
- dummySpan = this.Window.document.createElement( 'span' ) ;
- dummySpan.innerHTML = '' ; // Zero Width No-Break Space (U+FEFF). See #1359.
- eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ;
-
- if ( bIsStartMakerAlone )
- {
- // To expand empty blocks or line spaces after , we need
- // instead to have any char, which will be later deleted using the
- // selection.
- // \ufeff = Zero Width No-Break Space (U+FEFF). See #1359.
- eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ;
- }
- }
-
- if ( !this._Range )
- this._Range = this.CreateRange() ;
-
- // Remove the markers (reset the position, because of the changes in the DOM tree).
- this._Range.setStartBefore( eStartMarker ) ;
- eStartMarker.parentNode.removeChild( eStartMarker ) ;
-
- if ( bIsCollapsed )
- {
- if ( bIsStartMakerAlone )
- {
- // Move the selection start to include the temporary .
- oIERange.moveStart( 'character', -1 ) ;
-
- oIERange.select() ;
-
- // Remove our temporary stuff.
- this.Window.document.selection.clear() ;
- }
- else
- oIERange.select() ;
-
- FCKDomTools.RemoveNode( dummySpan ) ;
- }
- else
- {
- this._Range.setEndBefore( eEndMarker ) ;
- eEndMarker.parentNode.removeChild( eEndMarker ) ;
- oIERange.select() ;
- }
-}
-
-FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart )
-{
- var doc = this.Window.document ;
- var selection = doc.selection ;
-
- // Get a range for the start boundary.
- var oRange ;
-
- // IE may throw an "unspecified error" on some cases (it happened when
- // loading _samples/default.html), so try/catch.
- try
- {
- oRange = selection.createRange() ;
- }
- catch (e)
- {
- return null ;
- }
-
- // IE might take the range object to the main window instead of inside the editor iframe window.
- // This is known to happen when the editor window has not been selected before (See #933).
- // We need to avoid that.
- if ( oRange.parentElement().document != doc )
- return null ;
-
- oRange.collapse( toStart === true ) ;
-
- // Paste a marker element at the collapsed range and get it from the DOM.
- var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ;
- oRange.pasteHTML( '' ) ;
-
- return doc.getElementById( sMarkerId ) ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrangeiterator.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrangeiterator.js
deleted file mode 100755
index 697c0c1b9..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckdomrangeiterator.js
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This class can be used to interate through nodes inside a range.
- *
- * During interation, the provided range can become invalid, due to document
- * mutations, so CreateBookmark() used to restore it after processing, if
- * needed.
- */
-
-var FCKDomRangeIterator = function( range )
-{
- /**
- * The FCKDomRange object that marks the interation boundaries.
- */
- this.Range = range ;
-
- /**
- * Indicates that elements must be used as paragraph boundaries.
- */
- this.ForceBrBreak = false ;
-
- /**
- * Guarantees that the iterator will always return "real" block elements.
- * If "false", elements like
,
and
are returned. If "true", a
- * dedicated block element block element will be created inside those
- * elements to hold the selected content.
- */
- this.EnforceRealBlocks = false ;
-}
-
-FCKDomRangeIterator.CreateFromSelection = function( targetWindow )
-{
- var range = new FCKDomRange( targetWindow ) ;
- range.MoveToSelection() ;
- return new FCKDomRangeIterator( range ) ;
-}
-
-FCKDomRangeIterator.prototype =
-{
- /**
- * Get the next paragraph element. It automatically breaks the document
- * when necessary to generate block elements for the paragraphs.
- */
- GetNextParagraph : function()
- {
- // The block element to be returned.
- var block ;
-
- // The range object used to identify the paragraph contents.
- var range ;
-
- // Indicated that the current element in the loop is the last one.
- var isLast ;
-
- // Instructs to cleanup remaining BRs.
- var removePreviousBr ;
- var removeLastBr ;
-
- var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ;
-
- // This is the first iteration. Let's initialize it.
- if ( !this._LastNode )
- {
- var range = this.Range.Clone() ;
- range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ;
-
- this._NextNode = range.GetTouchedStartNode() ;
- this._LastNode = range.GetTouchedEndNode() ;
-
- // Let's reuse this variable.
- range = null ;
- }
-
- var currentNode = this._NextNode ;
- var lastNode = this._LastNode ;
-
- this._NextNode = null ;
-
- while ( currentNode )
- {
- // closeRange indicates that a paragraph boundary has been found,
- // so the range can be closed.
- var closeRange = false ;
-
- // includeNode indicates that the current node is good to be part
- // of the range. By default, any non-element node is ok for it.
- var includeNode = ( currentNode.nodeType != 1 ) ;
-
- var continueFromSibling = false ;
-
- // If it is an element node, let's check if it can be part of the
- // range.
- if ( !includeNode )
- {
- var nodeName = currentNode.nodeName.toLowerCase() ;
-
- if ( boundarySet[ nodeName ] && ( !FCKBrowserInfo.IsIE || currentNode.scopeName == 'HTML' ) )
- {
- // boundaries must be part of the range. It will
- // happen only if ForceBrBreak.
- if ( nodeName == 'br' )
- includeNode = true ;
- else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' )
- {
- // If we have found an empty block, and haven't started
- // the range yet, it means we must return this block.
- block = currentNode ;
- isLast = currentNode == lastNode ;
- break ;
- }
-
- // The range must finish right before the boundary,
- // including possibly skipped empty spaces. (#1603)
- if ( range )
- {
- range.SetEnd( currentNode, 3, true ) ;
-
- // The found boundary must be set as the next one at this
- // point. (#1717)
- if ( nodeName != 'br' )
- this._NextNode = currentNode ;
- }
-
- closeRange = true ;
- }
- else
- {
- // If we have child nodes, let's check them.
- if ( currentNode.firstChild )
- {
- // If we don't have a range yet, let's start it.
- if ( !range )
- {
- range = new FCKDomRange( this.Range.Window ) ;
- range.SetStart( currentNode, 3, true ) ;
- }
-
- currentNode = currentNode.firstChild ;
- continue ;
- }
- includeNode = true ;
- }
- }
- else if ( currentNode.nodeType == 3 )
- {
- // Ignore normal whitespaces (i.e. not including or
- // other unicode whitespaces) before/after a block node.
- if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) )
- includeNode = false ;
- }
-
- // The current node is good to be part of the range and we are
- // starting a new range, initialize it first.
- if ( includeNode && !range )
- {
- range = new FCKDomRange( this.Range.Window ) ;
- range.SetStart( currentNode, 3, true ) ;
- }
-
- // The last node has been found.
- isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ;
-// isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ;
-
- // If we are in an element boundary, let's check if it is time
- // to close the range, otherwise we include the parent within it.
- if ( range && !closeRange )
- {
- while ( !currentNode.nextSibling && !isLast )
- {
- var parentNode = currentNode.parentNode ;
-
- if ( boundarySet[ parentNode.nodeName.toLowerCase() ] )
- {
- closeRange = true ;
- isLast = isLast || ( parentNode == lastNode ) ;
- break ;
- }
-
- currentNode = parentNode ;
- includeNode = true ;
- isLast = ( currentNode == lastNode ) ;
- continueFromSibling = true ;
- }
- }
-
- // Now finally include the node.
- if ( includeNode )
- range.SetEnd( currentNode, 4, true ) ;
-
- // We have found a block boundary. Let's close the range and move out of the
- // loop.
- if ( ( closeRange || isLast ) && range )
- {
- range._UpdateElementInfo() ;
-
- if ( range.StartNode == range.EndNode
- && range.StartNode.parentNode == range.StartBlockLimit
- && range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) )
- range = null ;
- else
- break ;
- }
-
- if ( isLast )
- break ;
-
- currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ;
- }
-
- // Now, based on the processed range, look for (or create) the block to be returned.
- if ( !block )
- {
- // If no range has been found, this is the end.
- if ( !range )
- {
- this._NextNode = null ;
- return null ;
- }
-
- block = range.StartBlock ;
-
- if ( !block
- && !this.EnforceRealBlocks
- && range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' )
- && range.CheckStartOfBlock()
- && range.CheckEndOfBlock() )
- {
- block = range.StartBlockLimit ;
- }
- else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) )
- {
- // Create the fixed block.
- block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
-
- // Move the contents of the temporary range to the fixed block.
- range.ExtractContents().AppendTo( block ) ;
- FCKDomTools.TrimNode( block ) ;
-
- // Insert the fixed block into the DOM.
- range.InsertNode( block ) ;
-
- removePreviousBr = true ;
- removeLastBr = true ;
- }
- else if ( block.nodeName.toLowerCase() != 'li' )
- {
- // If the range doesn't includes the entire contents of the
- // block, we must split it, isolating the range in a dedicated
- // block.
- if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
- {
- // The resulting block will be a clone of the current one.
- block = block.cloneNode( false ) ;
-
- // Extract the range contents, moving it to the new block.
- range.ExtractContents().AppendTo( block ) ;
- FCKDomTools.TrimNode( block ) ;
-
- // Split the block. At this point, the range will be in the
- // right position for our intents.
- var splitInfo = range.SplitBlock() ;
-
- removePreviousBr = !splitInfo.WasStartOfBlock ;
- removeLastBr = !splitInfo.WasEndOfBlock ;
-
- // Insert the new block into the DOM.
- range.InsertNode( block ) ;
- }
- }
- else if ( !isLast )
- {
- // LIs are returned as is, with all their children (due to the
- // nested lists). But, the next node is the node right after
- // the current range, which could be an
child (nested
- // lists) or the next sibling
.
-
- this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ;
- return block ;
- }
- }
-
- if ( removePreviousBr )
- {
- var previousSibling = block.previousSibling ;
- if ( previousSibling && previousSibling.nodeType == 1 )
- {
- if ( previousSibling.nodeName.toLowerCase() == 'br' )
- previousSibling.parentNode.removeChild( previousSibling ) ;
- else if ( previousSibling.lastChild && previousSibling.lastChild.nodeName.IEquals( 'br' ) )
- previousSibling.removeChild( previousSibling.lastChild ) ;
- }
- }
-
- if ( removeLastBr )
- {
- var lastChild = block.lastChild ;
- if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' )
- block.removeChild( lastChild ) ;
- }
-
- // Get a reference for the next element. This is important because the
- // above block can be removed or changed, so we can rely on it for the
- // next interation.
- if ( !this._NextNode )
- this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ;
-
- return block ;
- }
-} ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckeditingarea.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckeditingarea.js
deleted file mode 100755
index 6998bbe22..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckeditingarea.js
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKEditingArea Class: renders an editable area.
- */
-
-/**
- * @constructor
- * @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted.
- */
-var FCKEditingArea = function( targetElement )
-{
- this.TargetElement = targetElement ;
- this.Mode = FCK_EDITMODE_WYSIWYG ;
-
- if ( FCK.IECleanup )
- FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ;
-}
-
-
-/**
- * @param {String} html The complete HTML for the page, including DOCTYPE and the tag.
- */
-FCKEditingArea.prototype.Start = function( html, secondCall )
-{
- var eTargetElement = this.TargetElement ;
- var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ;
-
- // Remove all child nodes from the target.
- while( eTargetElement.firstChild )
- eTargetElement.removeChild( eTargetElement.firstChild ) ;
-
- if ( this.Mode == FCK_EDITMODE_WYSIWYG )
- {
- // For FF, document.domain must be set only when different, otherwhise
- // we'll strangely have "Permission denied" issues.
- if ( FCK_IS_CUSTOM_DOMAIN )
- html = '' + html ;
-
- // IE has a bug with the tag... it must have a closer,
- // otherwise the all successive tags will be set as children nodes of the .
- if ( FCKBrowserInfo.IsIE )
- html = html.replace( /(]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1>' ) ;
- else if ( !secondCall )
- {
- // Gecko moves some tags out of the body to the head, so we must use
- // innerHTML to set the body contents (SF BUG 1526154).
-
- // Extract the BODY contents from the html.
- var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ;
- var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ;
-
- if ( oMatchBefore && oMatchAfter )
- {
- var sBody = html.substr( oMatchBefore[1].length,
- html.length - oMatchBefore[1].length - oMatchAfter[1].length ) ; // This is the BODY tag contents.
-
- html =
- oMatchBefore[1] + // This is the HTML until the tag, inclusive.
- ' ' +
- oMatchAfter[1] ; // This is the HTML from the tag, inclusive.
-
- // If nothing in the body, place a BOGUS tag so the cursor will appear.
- if ( FCKBrowserInfo.IsGecko && ( sBody.length == 0 || FCKRegexLib.EmptyParagraph.test( sBody ) ) )
- sBody = ' ' ;
-
- this._BodyHTML = sBody ;
-
- }
- else
- this._BodyHTML = html ; // Invalid HTML input.
- }
-
- // Create the editing area IFRAME.
- var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ;
-
- // IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
- // See #1055.
- var sOverrideError = '' ;
-
- oIFrame.frameBorder = 0 ;
- oIFrame.width = oIFrame.height = '100%' ;
-
- if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE )
- {
- window._FCKHtmlToLoad = sOverrideError + html ;
- oIFrame.src = 'javascript:void( (function(){' +
- 'document.open() ;' +
- 'document.domain="' + document.domain + '" ;' +
- 'document.write( window.parent._FCKHtmlToLoad );' +
- 'document.close() ;' +
- 'window.parent._FCKHtmlToLoad = null ;' +
- '})() )' ;
- }
- else if ( !FCKBrowserInfo.IsGecko )
- {
- // Firefox will render the tables inside the body in Quirks mode if the
- // source of the iframe is set to javascript. see #515
- oIFrame.src = 'javascript:void(0)' ;
- }
-
- // Append the new IFRAME to the target. For IE, it must be done after
- // setting the "src", to avoid the "secure/unsecure" message under HTTPS.
- eTargetElement.appendChild( oIFrame ) ;
-
- // Get the window and document objects used to interact with the newly created IFRAME.
- this.Window = oIFrame.contentWindow ;
-
- // IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
- // TODO: This error handler is not being fired.
- // this.Window.onerror = function() { alert( 'Error!' ) ; return true ; }
-
- if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
- {
- var oDoc = this.Window.document ;
-
- oDoc.open() ;
- oDoc.write( sOverrideError + html ) ;
- oDoc.close() ;
- }
-
- if ( FCKBrowserInfo.IsAIR )
- FCKAdobeAIR.EditingArea_Start( oDoc, html ) ;
-
- // Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it
- // will magically work.
- if ( FCKBrowserInfo.IsGecko10 && !secondCall )
- {
- this.Start( html, true ) ;
- return ;
- }
-
- if ( oIFrame.readyState && oIFrame.readyState != 'completed' )
- {
- var editArea = this ;
- ( oIFrame.onreadystatechange = function()
- {
- if ( oIFrame.readyState == 'complete' )
- {
- oIFrame.onreadystatechange = null ;
- editArea.Window._FCKEditingArea = editArea ;
- FCKEditingArea_CompleteStart.call( editArea.Window ) ;
- }
- // It happened that IE changed the state to "complete" after the
- // "if" and before the "onreadystatechange" assignement, making we
- // lost the event call, so we do a manual call just to be sure.
- } )() ;
- }
- else
- {
- this.Window._FCKEditingArea = this ;
-
- // FF 1.0.x is buggy... we must wait a lot to enable editing because
- // sometimes the content simply disappears, for example when pasting
- // "bla1!!bla2" in the source and then switching
- // back to design.
- if ( FCKBrowserInfo.IsGecko10 )
- this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ;
- else
- FCKEditingArea_CompleteStart.call( this.Window ) ;
- }
- }
- else
- {
- var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ;
- eTextarea.className = 'SourceField' ;
- eTextarea.dir = 'ltr' ;
- FCKDomTools.SetElementStyles( eTextarea,
- {
- width : '100%',
- height : '100%',
- border : 'none',
- resize : 'none',
- outline : 'none'
- } ) ;
- eTargetElement.appendChild( eTextarea ) ;
-
- eTextarea.value = html ;
-
- // Fire the "OnLoad" event.
- FCKTools.RunFunction( this.OnLoad ) ;
- }
-}
-
-// "this" here is FCKEditingArea.Window
-function FCKEditingArea_CompleteStart()
-{
- // On Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
- if ( !this.document.body )
- {
- this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ;
- return ;
- }
-
- var oEditorArea = this._FCKEditingArea ;
-
- // Save this reference to be re-used later.
- oEditorArea.Document = oEditorArea.Window.document ;
-
- oEditorArea.MakeEditable() ;
-
- // Fire the "OnLoad" event.
- FCKTools.RunFunction( oEditorArea.OnLoad ) ;
-}
-
-FCKEditingArea.prototype.MakeEditable = function()
-{
- var oDoc = this.Document ;
-
- if ( FCKBrowserInfo.IsIE )
- {
- // Kludge for #141 and #523
- oDoc.body.disabled = true ;
- oDoc.body.contentEditable = true ;
- oDoc.body.removeAttribute( "disabled" ) ;
-
- /* The following commands don't throw errors, but have no effect.
- oDoc.execCommand( 'AutoDetect', false, false ) ;
- oDoc.execCommand( 'KeepSelection', false, true ) ;
- */
- }
- else
- {
- try
- {
- // Disable Firefox 2 Spell Checker.
- oDoc.body.spellcheck = ( this.FFSpellChecker !== false ) ;
-
- if ( this._BodyHTML )
- {
- oDoc.body.innerHTML = this._BodyHTML ;
- this._BodyHTML = null ;
- }
-
- oDoc.designMode = 'on' ;
-
- // Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez)
- oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ;
-
- // Disable the standard table editing features of Firefox.
- oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
- }
- catch (e)
- {
- // In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception
- // So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is visible again
- FCKTools.AddEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
- }
-
- }
-}
-
-// This function processes the notifications of the DOM Mutation event on the document
-// We use it to know that the document will be ready to be editable again (or we hope so)
-function FCKEditingArea_Document_AttributeNodeModified( evt )
-{
- var editingArea = evt.currentTarget.contentWindow._FCKEditingArea ;
-
- // We want to run our function after the events no longer fire, so we can know that it's a stable situation
- if ( editingArea._timer )
- window.clearTimeout( editingArea._timer ) ;
-
- editingArea._timer = FCKTools.SetTimeout( FCKEditingArea_MakeEditableByMutation, 1000, editingArea ) ;
-}
-
-// This function ideally should be called after the document is visible, it does clean up of the
-// mutation tracking and tries again to make the area editable.
-function FCKEditingArea_MakeEditableByMutation()
-{
- // Clean up
- delete this._timer ;
- // Now we don't want to keep on getting this event
- FCKTools.RemoveEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
- // Let's try now to set the editing area editable
- // If it fails it will set up the Mutation Listener again automatically
- this.MakeEditable() ;
-}
-
-FCKEditingArea.prototype.Focus = function()
-{
- try
- {
- if ( this.Mode == FCK_EDITMODE_WYSIWYG )
- {
- if ( FCKBrowserInfo.IsIE )
- this._FocusIE() ;
- else
- this.Window.focus() ;
- }
- else
- {
- var oDoc = FCKTools.GetElementDocument( this.Textarea ) ;
- if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea )
- return ;
-
- this.Textarea.focus() ;
- }
- }
- catch(e) {}
-}
-
-FCKEditingArea.prototype._FocusIE = function()
-{
- // In IE it can happen that the document is in theory focused but the
- // active element is outside of it.
- this.Document.body.setActive() ;
-
- this.Window.focus() ;
-
- // Kludge for #141... yet more code to workaround IE bugs
- var range = this.Document.selection.createRange() ;
-
- var parentNode = range.parentElement() ;
- var parentTag = parentNode.nodeName.toLowerCase() ;
-
- // Only apply the fix when in a block, and the block is empty.
- if ( parentNode.childNodes.length > 0 ||
- !( FCKListsLib.BlockElements[parentTag] ||
- FCKListsLib.NonEmptyBlockElements[parentTag] ) )
- {
- return ;
- }
-
- // Force the selection to happen, in this way we guarantee the focus will
- // be there.
- range = new FCKDomRange( this.Window ) ;
- range.MoveToElementEditStart( parentNode ) ;
- range.Select() ;
-}
-
-function FCKEditingArea_Cleanup()
-{
- if ( this.Document )
- this.Document.body.innerHTML = "" ;
- this.TargetElement = null ;
- this.IFrame = null ;
- this.Document = null ;
- this.Textarea = null ;
-
- if ( this.Window )
- {
- this.Window._FCKEditingArea = null ;
- this.Window = null ;
- }
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckelementpath.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckelementpath.js
deleted file mode 100755
index 2bf4eb3e9..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckelementpath.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Manages the DOM ascensors element list of a specific DOM node
- * (limited to body, inclusive).
- */
-
-var FCKElementPath = function( lastNode )
-{
- var eBlock = null ;
- var eBlockLimit = null ;
-
- var aElements = new Array() ;
-
- var e = lastNode ;
- while ( e )
- {
- if ( e.nodeType == 1 )
- {
- if ( !this.LastElement )
- this.LastElement = e ;
-
- var sElementName = e.nodeName.toLowerCase() ;
- if ( FCKBrowserInfo.IsIE && e.scopeName != 'HTML' )
- sElementName = e.scopeName.toLowerCase() + ':' + sElementName ;
-
- if ( !eBlockLimit )
- {
- if ( !eBlock && FCKListsLib.PathBlockElements[ sElementName ] != null )
- eBlock = e ;
-
- if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null )
- {
- // DIV is considered the Block, if no block is available (#525)
- // and if it doesn't contain other blocks.
- if ( !eBlock && sElementName == 'div' && !FCKElementPath._CheckHasBlock( e ) )
- eBlock = e ;
- else
- eBlockLimit = e ;
- }
- }
-
- aElements.push( e ) ;
-
- if ( sElementName == 'body' )
- break ;
- }
- e = e.parentNode ;
- }
-
- this.Block = eBlock ;
- this.BlockLimit = eBlockLimit ;
- this.Elements = aElements ;
-}
-
-/**
- * Check if an element contains any block element.
- */
-FCKElementPath._CheckHasBlock = function( element )
-{
- var childNodes = element.childNodes ;
-
- for ( var i = 0, count = childNodes.length ; i < count ; i++ )
- {
- var child = childNodes[i] ;
-
- if ( child.nodeType == 1 && FCKListsLib.BlockElements[ child.nodeName.toLowerCase() ] )
- return true ;
- }
-
- return false ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckenterkey.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckenterkey.js
deleted file mode 100755
index 0c8badc88..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckenterkey.js
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Controls the [Enter] keystroke behavior in a document.
- */
-
-/*
- * Constructor.
- * @targetDocument : the target document.
- * @enterMode : the behavior for the keystroke.
- * May be "p", "div", "br". Default is "p".
- * @shiftEnterMode : the behavior for the + keystroke.
- * May be "p", "div", "br". Defaults to "br".
- */
-var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces )
-{
- this.Window = targetWindow ;
- this.EnterMode = enterMode || 'p' ;
- this.ShiftEnterMode = shiftEnterMode || 'br' ;
-
- // Setup the Keystroke Handler.
- var oKeystrokeHandler = new FCKKeystrokeHandler( false ) ;
- oKeystrokeHandler._EnterKey = this ;
- oKeystrokeHandler.OnKeystroke = FCKEnterKey_OnKeystroke ;
-
- oKeystrokeHandler.SetKeystrokes( [
- [ 13 , 'Enter' ],
- [ SHIFT + 13, 'ShiftEnter' ],
- [ 9 , 'Tab' ],
- [ 8 , 'Backspace' ],
- [ CTRL + 8 , 'CtrlBackspace' ],
- [ 46 , 'Delete' ]
- ] ) ;
-
- if ( tabSpaces > 0 )
- {
- this.TabText = '' ;
- while ( tabSpaces-- > 0 )
- this.TabText += '\xa0' ;
- }
-
- oKeystrokeHandler.AttachToElement( targetWindow.document ) ;
-}
-
-
-function FCKEnterKey_OnKeystroke( keyCombination, keystrokeValue )
-{
- var oEnterKey = this._EnterKey ;
-
- try
- {
- switch ( keystrokeValue )
- {
- case 'Enter' :
- return oEnterKey.DoEnter() ;
- break ;
- case 'ShiftEnter' :
- return oEnterKey.DoShiftEnter() ;
- break ;
- case 'Backspace' :
- return oEnterKey.DoBackspace() ;
- break ;
- case 'Delete' :
- return oEnterKey.DoDelete() ;
- break ;
- case 'Tab' :
- return oEnterKey.DoTab() ;
- break ;
- case 'CtrlBackspace' :
- return oEnterKey.DoCtrlBackspace() ;
- break ;
- }
- }
- catch (e)
- {
- // If for any reason we are not able to handle it, go
- // ahead with the browser default behavior.
- }
-
- return false ;
-}
-
-/*
- * Executes the key behavior.
- */
-FCKEnterKey.prototype.DoEnter = function( mode, hasShift )
-{
- // Save an undo snapshot before doing anything
- FCKUndo.SaveUndoStep() ;
-
- this._HasShift = ( hasShift === true ) ;
-
- var parentElement = FCKSelection.GetParentElement() ;
- var parentPath = new FCKElementPath( parentElement ) ;
- var sMode = mode || this.EnterMode ;
-
- if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' )
- return this._ExecuteEnterBr() ;
- else
- return this._ExecuteEnterBlock( sMode ) ;
-}
-
-/*
- * Executes the + key behavior.
- */
-FCKEnterKey.prototype.DoShiftEnter = function()
-{
- return this.DoEnter( this.ShiftEnterMode, true ) ;
-}
-
-/*
- * Executes the key behavior.
- */
-FCKEnterKey.prototype.DoBackspace = function()
-{
- var bCustom = false ;
-
- // Get the current selection.
- var oRange = new FCKDomRange( this.Window ) ;
- oRange.MoveToSelection() ;
-
- // Kludge for #247
- if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
- {
- this._FixIESelectAllBug( oRange ) ;
- return true ;
- }
-
- var isCollapsed = oRange.CheckIsCollapsed() ;
-
- if ( !isCollapsed )
- {
- // Bug #327, Backspace with an img selection would activate the default action in IE.
- // Let's override that with our logic here.
- if ( FCKBrowserInfo.IsIE && this.Window.document.selection.type.toLowerCase() == "control" )
- {
- var controls = this.Window.document.selection.createRange() ;
- for ( var i = controls.length - 1 ; i >= 0 ; i-- )
- {
- var el = controls.item( i ) ;
- el.parentNode.removeChild( el ) ;
- }
- return true ;
- }
-
- return false ;
- }
-
- var oStartBlock = oRange.StartBlock ;
- var oEndBlock = oRange.EndBlock ;
-
- // The selection boundaries must be in the same "block limit" element
- if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock )
- {
- if ( !isCollapsed )
- {
- var bEndOfBlock = oRange.CheckEndOfBlock() ;
-
- oRange.DeleteContents() ;
-
- if ( oStartBlock != oEndBlock )
- {
- oRange.SetStart(oEndBlock,1) ;
- oRange.SetEnd(oEndBlock,1) ;
-
-// if ( bEndOfBlock )
-// oEndBlock.parentNode.removeChild( oEndBlock ) ;
- }
-
- oRange.Select() ;
-
- bCustom = ( oStartBlock == oEndBlock ) ;
- }
-
- if ( oRange.CheckStartOfBlock() )
- {
- var oCurrentBlock = oRange.StartBlock ;
-
- var ePrevious = FCKDomTools.GetPreviousSourceElement( oCurrentBlock, true, [ 'BODY', oRange.StartBlockLimit.nodeName ], ['UL','OL'] ) ;
-
- bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ;
- }
- else if ( FCKBrowserInfo.IsGeckoLike )
- {
- // Firefox and Opera (#1095) loose the selection when executing
- // CheckStartOfBlock, so we must reselect.
- oRange.Select() ;
- }
- }
-
- oRange.Release() ;
- return bCustom ;
-}
-
-FCKEnterKey.prototype.DoCtrlBackspace = function()
-{
- FCKUndo.SaveUndoStep() ;
- var oRange = new FCKDomRange( this.Window ) ;
- oRange.MoveToSelection() ;
- if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
- {
- this._FixIESelectAllBug( oRange ) ;
- return true ;
- }
- return false ;
-}
-
-FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBlock )
-{
- var bCustom = false ;
-
- // We could be in a nested LI.
- if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) )
- {
- this._OutdentWithSelection( currentBlock, range ) ;
- return true ;
- }
-
- if ( previous && previous.nodeName.IEquals( 'LI' ) )
- {
- var oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
-
- while ( oNestedList )
- {
- previous = FCKDomTools.GetLastChild( oNestedList, 'LI' ) ;
- oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
- }
- }
-
- if ( previous && currentBlock )
- {
- // If we are in a LI, and the previous block is not an LI, we must outdent it.
- if ( currentBlock.nodeName.IEquals( 'LI' ) && !previous.nodeName.IEquals( 'LI' ) )
- {
- this._OutdentWithSelection( currentBlock, range ) ;
- return true ;
- }
-
- // Take a reference to the parent for post processing cleanup.
- var oCurrentParent = currentBlock.parentNode ;
-
- var sPreviousName = previous.nodeName.toLowerCase() ;
- if ( FCKListsLib.EmptyElements[ sPreviousName ] != null || sPreviousName == 'table' )
- {
- FCKDomTools.RemoveNode( previous ) ;
- bCustom = true ;
- }
- else
- {
- // Remove the current block.
- FCKDomTools.RemoveNode( currentBlock ) ;
-
- // Remove any empty tag left by the block removal.
- while ( oCurrentParent.innerHTML.Trim().length == 0 )
- {
- var oParent = oCurrentParent.parentNode ;
- oParent.removeChild( oCurrentParent ) ;
- oCurrentParent = oParent ;
- }
-
- // Cleanup the previous and the current elements.
- FCKDomTools.LTrimNode( currentBlock ) ;
- FCKDomTools.RTrimNode( previous ) ;
-
- // Append a space to the previous.
- // Maybe it is not always desirable...
- // previous.appendChild( this.Window.document.createTextNode( ' ' ) ) ;
-
- // Set the range to the end of the previous element and bookmark it.
- range.SetStart( previous, 2, true ) ;
- range.Collapse( true ) ;
- var oBookmark = range.CreateBookmark( true ) ;
-
- // Move the contents of the block to the previous element and delete it.
- // But for some block types (e.g. table), moving the children to the previous block makes no sense.
- // So a check is needed. (See #1081)
- if ( ! currentBlock.tagName.IEquals( [ 'TABLE' ] ) )
- FCKDomTools.MoveChildren( currentBlock, previous ) ;
-
- // Place the selection at the bookmark.
- range.SelectBookmark( oBookmark ) ;
-
- bCustom = true ;
- }
- }
-
- return bCustom ;
-}
-
-/*
- * Executes the key behavior.
- */
-FCKEnterKey.prototype.DoDelete = function()
-{
- // Save an undo snapshot before doing anything
- // This is to conform with the behavior seen in MS Word
- FCKUndo.SaveUndoStep() ;
-
- // The has the same effect as the , so we have the same
- // results if we just move to the next block and apply the same logic.
-
- var bCustom = false ;
-
- // Get the current selection.
- var oRange = new FCKDomRange( this.Window ) ;
- oRange.MoveToSelection() ;
-
- // Kludge for #247
- if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
- {
- this._FixIESelectAllBug( oRange ) ;
- return true ;
- }
-
- // There is just one special case for collapsed selections at the end of a block.
- if ( oRange.CheckIsCollapsed() && oRange.CheckEndOfBlock( FCKBrowserInfo.IsGeckoLike ) )
- {
- var oCurrentBlock = oRange.StartBlock ;
- var eCurrentCell = FCKTools.GetElementAscensor( oCurrentBlock, 'td' );
-
- var eNext = FCKDomTools.GetNextSourceElement( oCurrentBlock, true, [ oRange.StartBlockLimit.nodeName ],
- ['UL','OL','TR'], true ) ;
-
- // Bug #1323 : if we're in a table cell, and the next node belongs to a different cell, then don't
- // delete anything.
- if ( eCurrentCell )
- {
- var eNextCell = FCKTools.GetElementAscensor( eNext, 'td' );
- if ( eNextCell != eCurrentCell )
- return true ;
- }
-
- bCustom = this._ExecuteBackspace( oRange, oCurrentBlock, eNext ) ;
- }
-
- oRange.Release() ;
- return bCustom ;
-}
-
-/*
- * Executes the key behavior.
- */
-FCKEnterKey.prototype.DoTab = function()
-{
- var oRange = new FCKDomRange( this.Window );
- oRange.MoveToSelection() ;
-
- // If the user pressed inside a table, we should give him the default behavior ( moving between cells )
- // instead of giving him more non-breaking spaces. (Bug #973)
- var node = oRange._Range.startContainer ;
- while ( node )
- {
- if ( node.nodeType == 1 )
- {
- var tagName = node.tagName.toLowerCase() ;
- if ( tagName == "tr" || tagName == "td" || tagName == "th" || tagName == "tbody" || tagName == "table" )
- return false ;
- else
- break ;
- }
- node = node.parentNode ;
- }
-
- if ( this.TabText )
- {
- oRange.DeleteContents() ;
- oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ;
- oRange.Collapse( false ) ;
- oRange.Select() ;
- }
- return true ;
-}
-
-FCKEnterKey.prototype._ExecuteEnterBlock = function( blockTag, range )
-{
- // Get the current selection.
- var oRange = range || new FCKDomRange( this.Window ) ;
-
- var oSplitInfo = oRange.SplitBlock( blockTag ) ;
-
- if ( oSplitInfo )
- {
- // Get the current blocks.
- var ePreviousBlock = oSplitInfo.PreviousBlock ;
- var eNextBlock = oSplitInfo.NextBlock ;
-
- var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ;
- var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ;
-
- // If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647)
- if ( eNextBlock )
- {
- if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) )
- {
- FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ;
- FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ;
- }
- }
- else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) )
- {
- FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ;
- oRange.MoveToElementEditStart( ePreviousBlock.nextSibling );
- FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ;
- }
-
- // If we have both the previous and next blocks, it means that the
- // boundaries were on separated blocks, or none of them where on the
- // block limits (start/end).
- if ( !bIsStartOfBlock && !bIsEndOfBlock )
- {
- // If the next block is an
with another list tree as the first child
- // We'll need to append a placeholder or the list item wouldn't be editable. (Bug #1420)
- if ( eNextBlock.nodeName.IEquals( 'li' ) && eNextBlock.firstChild
- && eNextBlock.firstChild.nodeName.IEquals( ['ul', 'ol'] ) )
- eNextBlock.insertBefore( FCKTools.GetElementDocument( eNextBlock ).createTextNode( '\xa0' ), eNextBlock.firstChild ) ;
- // Move the selection to the end block.
- if ( eNextBlock )
- oRange.MoveToElementEditStart( eNextBlock ) ;
- }
- else
- {
- if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' )
- {
- oRange.MoveToElementStart( ePreviousBlock ) ;
- this._OutdentWithSelection( ePreviousBlock, oRange ) ;
- oRange.Release() ;
- return true ;
- }
-
- var eNewBlock ;
-
- if ( ePreviousBlock )
- {
- var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ;
-
- // If is a header tag, or we are in a Shift+Enter (#77),
- // create a new block element (later in the code).
- if ( !this._HasShift && !(/^H[1-6]$/).test( sPreviousBlockTag ) )
- {
- // Otherwise, duplicate the previous block.
- eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ;
- }
- }
- else if ( eNextBlock )
- eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ;
-
- if ( !eNewBlock )
- eNewBlock = this.Window.document.createElement( blockTag ) ;
-
- // Recreate the inline elements tree, which was available
- // before the hitting enter, so the same styles will be
- // available in the new block.
- var elementPath = oSplitInfo.ElementPath ;
- if ( elementPath )
- {
- for ( var i = 0, len = elementPath.Elements.length ; i < len ; i++ )
- {
- var element = elementPath.Elements[i] ;
-
- if ( element == elementPath.Block || element == elementPath.BlockLimit )
- break ;
-
- if ( FCKListsLib.InlineChildReqElements[ element.nodeName.toLowerCase() ] )
- {
- element = FCKDomTools.CloneElement( element ) ;
- FCKDomTools.MoveChildren( eNewBlock, element ) ;
- eNewBlock.appendChild( element ) ;
- }
- }
- }
-
- if ( FCKBrowserInfo.IsGeckoLike )
- FCKTools.AppendBogusBr( eNewBlock ) ;
-
- oRange.InsertNode( eNewBlock ) ;
-
- // This is tricky, but to make the new block visible correctly
- // we must select it.
- if ( FCKBrowserInfo.IsIE )
- {
- // Move the selection to the new block.
- oRange.MoveToElementEditStart( eNewBlock ) ;
- oRange.Select() ;
- }
-
- // Move the selection to the new block.
- oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ;
- }
-
- if ( FCKBrowserInfo.IsSafari )
- FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ;
- else if ( FCKBrowserInfo.IsGeckoLike )
- ( eNextBlock || eNewBlock ).scrollIntoView( false ) ;
-
- oRange.Select() ;
- }
-
- // Release the resources used by the range.
- oRange.Release() ;
-
- return true ;
-}
-
-FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag )
-{
- // Get the current selection.
- var oRange = new FCKDomRange( this.Window ) ;
- oRange.MoveToSelection() ;
-
- // The selection boundaries must be in the same "block limit" element.
- if ( oRange.StartBlockLimit == oRange.EndBlockLimit )
- {
- oRange.DeleteContents() ;
-
- // Get the new selection (it is collapsed at this point).
- oRange.MoveToSelection() ;
-
- var bIsStartOfBlock = oRange.CheckStartOfBlock() ;
- var bIsEndOfBlock = oRange.CheckEndOfBlock() ;
-
- var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ;
-
- var bHasShift = this._HasShift ;
- var bIsPre = false ;
-
- if ( !bHasShift && sStartBlockTag == 'LI' )
- return this._ExecuteEnterBlock( null, oRange ) ;
-
- // If we are at the end of a header block.
- if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) )
- {
- // Insert a BR after the current paragraph.
- FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ;
-
- // The space is required by Gecko only to make the cursor blink.
- if ( FCKBrowserInfo.IsGecko )
- FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createTextNode( '' ) ) ;
-
- // IE and Gecko have different behaviors regarding the position.
- oRange.SetStart( oRange.StartBlock.nextSibling, FCKBrowserInfo.IsIE ? 3 : 1 ) ;
- }
- else
- {
- var eLineBreak ;
- bIsPre = sStartBlockTag.IEquals( 'pre' ) ;
- if ( bIsPre )
- eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ;
- else
- eLineBreak = this.Window.document.createElement( 'br' ) ;
-
- oRange.InsertNode( eLineBreak ) ;
-
- // The space is required by Gecko only to make the cursor blink.
- if ( FCKBrowserInfo.IsGecko )
- FCKDomTools.InsertAfterNode( eLineBreak, this.Window.document.createTextNode( '' ) ) ;
-
- // If we are at the end of a block, we must be sure the bogus node is available in that block.
- if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike )
- FCKTools.AppendBogusBr( eLineBreak.parentNode ) ;
-
- if ( FCKBrowserInfo.IsIE )
- oRange.SetStart( eLineBreak, 4 ) ;
- else
- oRange.SetStart( eLineBreak.nextSibling, 1 ) ;
-
- if ( ! FCKBrowserInfo.IsIE )
- {
- var dummy = null ;
- if ( FCKBrowserInfo.IsOpera )
- dummy = this.Window.document.createElement( 'span' ) ;
- else
- dummy = this.Window.document.createElement( 'br' ) ;
-
- eLineBreak.parentNode.insertBefore( dummy, eLineBreak.nextSibling ) ;
-
- if ( FCKBrowserInfo.IsSafari )
- FCKDomTools.ScrollIntoView( dummy, false ) ;
- else
- dummy.scrollIntoView( false ) ;
-
- dummy.parentNode.removeChild( dummy ) ;
- }
- }
-
- // This collapse guarantees the cursor will be blinking.
- oRange.Collapse( true ) ;
-
- oRange.Select( bIsPre ) ;
- }
-
- // Release the resources used by the range.
- oRange.Release() ;
-
- return true ;
-}
-
-// Outdents a LI, maintaining the selection defined on a range.
-FCKEnterKey.prototype._OutdentWithSelection = function( li, range )
-{
- var oBookmark = range.CreateBookmark() ;
-
- FCKListHandler.OutdentListItem( li ) ;
-
- range.MoveToBookmark( oBookmark ) ;
- range.Select() ;
-}
-
-// Is all the contents under a node included by a range?
-FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node )
-{
- var startOk = false ;
- var endOk = false ;
-
- /*
- FCKDebug.Output( 'sc='+range.StartContainer.nodeName+
- ',so='+range._Range.startOffset+
- ',ec='+range.EndContainer.nodeName+
- ',eo='+range._Range.endOffset ) ;
- */
- if ( range.StartContainer == node || range.StartContainer == node.firstChild )
- startOk = ( range._Range.startOffset == 0 ) ;
-
- if ( range.EndContainer == node || range.EndContainer == node.lastChild )
- {
- var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ;
- endOk = ( range._Range.endOffset == nodeLength ) ;
- }
-
- return startOk && endOk ;
-}
-
-// Kludge for #247
-FCKEnterKey.prototype._FixIESelectAllBug = function( range )
-{
- var doc = this.Window.document ;
- doc.body.innerHTML = '' ;
- var editBlock ;
- if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) )
- {
- editBlock = doc.createElement( FCKConfig.EnterMode ) ;
- doc.body.appendChild( editBlock ) ;
- }
- else
- editBlock = doc.body ;
-
- range.MoveToNodeContents( editBlock ) ;
- range.Collapse( true ) ;
- range.Select() ;
- range.Release() ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckevents.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckevents.js
deleted file mode 100755
index ef2e10f6e..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckevents.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKEvents Class: used to handle events is a advanced way.
- */
-
-var FCKEvents = function( eventsOwner )
-{
- this.Owner = eventsOwner ;
- this._RegisteredEvents = new Object() ;
-}
-
-FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
-{
- var aTargets ;
-
- if ( !( aTargets = this._RegisteredEvents[ eventName ] ) )
- this._RegisteredEvents[ eventName ] = [ functionPointer ] ;
- else
- {
- // Check that the event handler isn't already registered with the same listener
- // It doesn't detect function pointers belonging to an object (at least in Gecko)
- if ( aTargets.IndexOf( functionPointer ) == -1 )
- aTargets.push( functionPointer ) ;
- }
-}
-
-FCKEvents.prototype.FireEvent = function( eventName, params )
-{
- var bReturnValue = true ;
-
- var oCalls = this._RegisteredEvents[ eventName ] ;
-
- if ( oCalls )
- {
- for ( var i = 0 ; i < oCalls.length ; i++ )
- {
- try
- {
- bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
- }
- catch(e)
- {
- // Ignore the following error. It may happen if pointing to a
- // script not anymore available (#934):
- // -2146823277 = Can't execute code from a freed script
- if ( e.number != -2146823277 )
- throw e ;
- }
- }
- }
-
- return bReturnValue ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckhtmliterator.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckhtmliterator.js
deleted file mode 100755
index 9f184b7c1..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckhtmliterator.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This class can be used to interate through nodes inside a range.
- *
- * During interation, the provided range can become invalid, due to document
- * mutations, so CreateBookmark() used to restore it after processing, if
- * needed.
- */
-
-var FCKHtmlIterator = function( source )
-{
- this._sourceHtml = source ;
-}
-FCKHtmlIterator.prototype =
-{
- Next : function()
- {
- var sourceHtml = this._sourceHtml ;
- if ( sourceHtml == null )
- return null ;
-
- var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
- var isTag = false ;
- var value = "" ;
- if ( match )
- {
- if ( match.index > 0 )
- {
- value = sourceHtml.substr( 0, match.index ) ;
- this._sourceHtml = sourceHtml.substr( match.index ) ;
- }
- else
- {
- isTag = true ;
- value = match[0] ;
- this._sourceHtml = sourceHtml.substr( match[0].length ) ;
- }
- }
- else
- {
- value = sourceHtml ;
- this._sourceHtml = null ;
- }
- return { 'isTag' : isTag, 'value' : value } ;
- },
-
- Each : function( func )
- {
- var chunk ;
- while ( ( chunk = this.Next() ) )
- func( chunk.isTag, chunk.value ) ;
- }
-} ;
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This class can be used to interate through nodes inside a range.
- *
- * During interation, the provided range can become invalid, due to document
- * mutations, so CreateBookmark() used to restore it after processing, if
- * needed.
- */
-
-var FCKHtmlIterator = function( source )
-{
- this._sourceHtml = source ;
-}
-FCKHtmlIterator.prototype =
-{
- Next : function()
- {
- var sourceHtml = this._sourceHtml ;
- if ( sourceHtml == null )
- return null ;
-
- var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ;
- var isTag = false ;
- var value = "" ;
- if ( match )
- {
- if ( match.index > 0 )
- {
- value = sourceHtml.substr( 0, match.index ) ;
- this._sourceHtml = sourceHtml.substr( match.index ) ;
- }
- else
- {
- isTag = true ;
- value = match[0] ;
- this._sourceHtml = sourceHtml.substr( match[0].length ) ;
- }
- }
- else
- {
- value = sourceHtml ;
- this._sourceHtml = null ;
- }
- return { 'isTag' : isTag, 'value' : value } ;
- },
-
- Each : function( func )
- {
- var chunk ;
- while ( ( chunk = this.Next() ) )
- func( chunk.isTag, chunk.value ) ;
- }
-} ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckicon.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckicon.js
deleted file mode 100755
index 89719f6e1..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckicon.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKIcon Class: renders an icon from a single image, a strip or even a
- * spacer.
- */
-
-var FCKIcon = function( iconPathOrStripInfoArray )
-{
- var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ;
- switch ( sTypeOf )
- {
- case 'number' :
- this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ;
- this.Size = 16 ;
- this.Position = iconPathOrStripInfoArray ;
- break ;
-
- case 'undefined' :
- this.Path = FCK_SPACER_PATH ;
- break ;
-
- case 'string' :
- this.Path = iconPathOrStripInfoArray ;
- break ;
-
- default :
- // It is an array in the format [ StripFilePath, IconSize, IconPosition ]
- this.Path = iconPathOrStripInfoArray[0] ;
- this.Size = iconPathOrStripInfoArray[1] ;
- this.Position = iconPathOrStripInfoArray[2] ;
- }
-}
-
-FCKIcon.prototype.CreateIconElement = function( document )
-{
- var eIcon, eIconImage ;
-
- if ( this.Position ) // It is using an icons strip image.
- {
- var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ;
-
- if ( FCKBrowserInfo.IsIE )
- {
- //
-
- eIcon = document.createElement( 'DIV' ) ;
-
- eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
- eIconImage.src = this.Path ;
- eIconImage.style.top = sPos ;
- }
- else
- {
- //
-
- eIcon = document.createElement( 'IMG' ) ;
- eIcon.src = FCK_SPACER_PATH ;
- eIcon.style.backgroundPosition = '0px ' + sPos ;
- eIcon.style.backgroundImage = 'url("' + this.Path + '")' ;
- }
- }
- else // It is using a single icon image.
- {
- if ( FCKBrowserInfo.IsIE )
- {
- // IE makes the button 1px higher if using the directly, so we
- // are changing to the
system to clip the image correctly.
- eIcon = document.createElement( 'DIV' ) ;
-
- eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
- eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ;
- }
- else
- {
- // This is not working well with IE. See notes above.
- //
- eIcon = document.createElement( 'IMG' ) ;
- eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ;
- }
- }
-
- eIcon.className = 'TB_Button_Image' ;
-
- return eIcon ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckiecleanup.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckiecleanup.js
deleted file mode 100755
index 414da9d89..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckiecleanup.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKIECleanup Class: a generic class used as a tool to remove IE leaks.
- */
-
-var FCKIECleanup = function( attachWindow )
-{
- // If the attachWindow already have a cleanup object, just use that one.
- if ( attachWindow._FCKCleanupObj )
- this.Items = attachWindow._FCKCleanupObj.Items ;
- else
- {
- this.Items = new Array() ;
-
- attachWindow._FCKCleanupObj = this ;
- FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ;
-// attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ;
- }
-}
-
-FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction )
-{
- this.Items.push( [ dirtyItem, cleanupFunction ] ) ;
-}
-
-function FCKIECleanup_Cleanup()
-{
- if ( !this._FCKCleanupObj || !window.FCKUnloadFlag )
- return ;
-
- var aItems = this._FCKCleanupObj.Items ;
-
- while ( aItems.length > 0 )
- {
-
- // It is important to remove from the end to the beginning (pop()),
- // because of the order things get created in the editor. In the code,
- // elements in deeper position in the DOM are placed at the end of the
- // cleanup function, so we must cleanup then first, otherwise IE could
- // throw some crazy memory errors (IE bug).
- var oItem = aItems.pop() ;
- if ( oItem )
- oItem[1].call( oItem[0] ) ;
- }
-
- this._FCKCleanupObj = null ;
-
- if ( CollectGarbage )
- CollectGarbage() ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckimagepreloader.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckimagepreloader.js
deleted file mode 100755
index 92fd305e3..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckimagepreloader.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Preload a list of images, firing an event when complete.
- */
-
-var FCKImagePreloader = function()
-{
- this._Images = new Array() ;
-}
-
-FCKImagePreloader.prototype =
-{
- AddImages : function( images )
- {
- if ( typeof( images ) == 'string' )
- images = images.split( ';' ) ;
-
- this._Images = this._Images.concat( images ) ;
- },
-
- Start : function()
- {
- var aImages = this._Images ;
- this._PreloadCount = aImages.length ;
-
- for ( var i = 0 ; i < aImages.length ; i++ )
- {
- var eImg = document.createElement( 'img' ) ;
- FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ;
- FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ;
- eImg.src = aImages[i] ;
-
- _FCKImagePreloader_ImageCache.push( eImg ) ;
- }
- }
-};
-
-// All preloaded images must be placed in a global array, otherwise the preload
-// magic will not happen.
-var _FCKImagePreloader_ImageCache = new Array() ;
-
-function _FCKImagePreloader_OnImage( ev, imagePreloader )
-{
- if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete )
- imagePreloader.OnComplete() ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckkeystrokehandler.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckkeystrokehandler.js
deleted file mode 100755
index 31c341ba7..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckkeystrokehandler.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Control keyboard keystroke combinations.
- */
-
-var FCKKeystrokeHandler = function( cancelCtrlDefaults )
-{
- this.Keystrokes = new Object() ;
- this.CancelCtrlDefaults = ( cancelCtrlDefaults !== false ) ;
-}
-
-/*
- * Listen to keystroke events in an element or DOM document object.
- * @target: The element or document to listen to keystroke events.
- */
-FCKKeystrokeHandler.prototype.AttachToElement = function( target )
-{
- // For newer browsers, it is enough to listen to the keydown event only.
- // Some browsers instead, don't cancel key events in the keydown, but in the
- // keypress. So we must do a longer trip in those cases.
- FCKTools.AddEventListenerEx( target, 'keydown', _FCKKeystrokeHandler_OnKeyDown, this ) ;
- if ( FCKBrowserInfo.IsGecko10 || FCKBrowserInfo.IsOpera || ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) )
- FCKTools.AddEventListenerEx( target, 'keypress', _FCKKeystrokeHandler_OnKeyPress, this ) ;
-}
-
-/*
- * Sets a list of keystrokes. It can receive either a single array or "n"
- * arguments, each one being an array of 1 or 2 elemenst. The first element
- * is the keystroke combination, and the second is the value to assign to it.
- * If the second element is missing, the keystroke definition is removed.
- */
-FCKKeystrokeHandler.prototype.SetKeystrokes = function()
-{
- // Look through the arguments.
- for ( var i = 0 ; i < arguments.length ; i++ )
- {
- var keyDef = arguments[i] ;
-
- // If the configuration for the keystrokes is missing some element or has any extra comma
- // this item won't be valid, so skip it and keep on processing.
- if ( !keyDef )
- continue ;
-
- if ( typeof( keyDef[0] ) == 'object' ) // It is an array with arrays defining the keystrokes.
- this.SetKeystrokes.apply( this, keyDef ) ;
- else
- {
- if ( keyDef.length == 1 ) // If it has only one element, remove the keystroke.
- delete this.Keystrokes[ keyDef[0] ] ;
- else // Otherwise add it.
- this.Keystrokes[ keyDef[0] ] = keyDef[1] === true ? true : keyDef ;
- }
- }
-}
-
-function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler )
-{
- // Get the key code.
- var keystroke = ev.keyCode || ev.which ;
-
- // Combine it with the CTRL, SHIFT and ALT states.
- var keyModifiers = 0 ;
-
- if ( ev.ctrlKey || ev.metaKey )
- keyModifiers += CTRL ;
-
- if ( ev.shiftKey )
- keyModifiers += SHIFT ;
-
- if ( ev.altKey )
- keyModifiers += ALT ;
-
- var keyCombination = keystroke + keyModifiers ;
-
- var cancelIt = keystrokeHandler._CancelIt = false ;
-
- // Look for its definition availability.
- var keystrokeValue = keystrokeHandler.Keystrokes[ keyCombination ] ;
-
-// FCKDebug.Output( 'KeyDown: ' + keyCombination + ' - Value: ' + keystrokeValue ) ;
-
- // If the keystroke is defined
- if ( keystrokeValue )
- {
- // If the keystroke has been explicitly set to "true" OR calling the
- // "OnKeystroke" event, it doesn't return "true", the default behavior
- // must be preserved.
- if ( keystrokeValue === true || !( keystrokeHandler.OnKeystroke && keystrokeHandler.OnKeystroke.apply( keystrokeHandler, keystrokeValue ) ) )
- return true ;
-
- cancelIt = true ;
- }
-
- // By default, it will cancel all combinations with the CTRL key only (except positioning keys).
- if ( cancelIt || ( keystrokeHandler.CancelCtrlDefaults && keyModifiers == CTRL && ( keystroke < 33 || keystroke > 40 ) ) )
- {
- keystrokeHandler._CancelIt = true ;
-
- if ( ev.preventDefault )
- return ev.preventDefault() ;
-
- ev.returnValue = false ;
- ev.cancelBubble = true ;
- return false ;
- }
-
- return true ;
-}
-
-function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler )
-{
- if ( keystrokeHandler._CancelIt )
- {
-// FCKDebug.Output( 'KeyPress Cancel', 'Red') ;
-
- if ( ev.preventDefault )
- return ev.preventDefault() ;
-
- return false ;
- }
-
- return true ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenublock.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenublock.js
deleted file mode 100755
index 1cd710dcc..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenublock.js
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Renders a list of menu items.
- */
-
-var FCKMenuBlock = function()
-{
- this._Items = new Array() ;
-}
-
-
-FCKMenuBlock.prototype.Count = function()
-{
- return this._Items.length ;
-}
-
-FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
-{
- var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
-
- oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ;
- oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ;
-
- this._Items.push( oItem ) ;
-
- return oItem ;
-}
-
-FCKMenuBlock.prototype.AddSeparator = function()
-{
- this._Items.push( new FCKMenuSeparator() ) ;
-}
-
-FCKMenuBlock.prototype.RemoveAllItems = function()
-{
- this._Items = new Array() ;
-
- var eItemsTable = this._ItemsTable ;
- if ( eItemsTable )
- {
- while ( eItemsTable.rows.length > 0 )
- eItemsTable.deleteRow( 0 ) ;
- }
-}
-
-FCKMenuBlock.prototype.Create = function( parentElement )
-{
- if ( !this._ItemsTable )
- {
- if ( FCK.IECleanup )
- FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ;
-
- this._Window = FCKTools.GetElementWindow( parentElement ) ;
-
- var oDoc = FCKTools.GetElementDocument( parentElement ) ;
-
- var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ;
- eTable.cellPadding = 0 ;
- eTable.cellSpacing = 0 ;
-
- FCKTools.DisableSelection( eTable ) ;
-
- var oMainElement = eTable.insertRow(-1).insertCell(-1) ;
- oMainElement.className = 'MN_Menu' ;
-
- var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ;
- eItemsTable.cellPadding = 0 ;
- eItemsTable.cellSpacing = 0 ;
- }
-
- for ( var i = 0 ; i < this._Items.length ; i++ )
- this._Items[i].Create( this._ItemsTable ) ;
-}
-
-/* Events */
-
-function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock )
-{
- if ( menuBlock.Hide )
- menuBlock.Hide() ;
-
- FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ;
-}
-
-function FCKMenuBlock_Item_OnActivate( menuBlock )
-{
- var oActiveItem = menuBlock._ActiveItem ;
-
- if ( oActiveItem && oActiveItem != this )
- {
- // Set the focus to this menu block window (to fire OnBlur on opened panels).
- if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu )
- {
- menuBlock._Window.focus() ;
-
- // Due to the event model provided by Opera, we need to set
- // HasFocus here as the above focus() call will not fire the focus
- // event in the panel immediately (#1200).
- menuBlock.Panel.HasFocus = true ;
- }
-
- oActiveItem.Deactivate() ;
- }
-
- menuBlock._ActiveItem = this ;
-}
-
-function FCKMenuBlock_Cleanup()
-{
- this._Window = null ;
- this._ItemsTable = null ;
-}
-
-// ################# //
-
-var FCKMenuSeparator = function()
-{}
-
-FCKMenuSeparator.prototype.Create = function( parentTable )
-{
- var oDoc = FCKTools.GetElementDocument( parentTable ) ;
-
- var r = parentTable.insertRow(-1) ;
-
- var eCell = r.insertCell(-1) ;
- eCell.className = 'MN_Separator MN_Icon' ;
-
- eCell = r.insertCell(-1) ;
- eCell.className = 'MN_Separator' ;
- eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
-
- eCell = r.insertCell(-1) ;
- eCell.className = 'MN_Separator' ;
- eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenublockpanel.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenublockpanel.js
deleted file mode 100755
index 9dbc4803b..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenublockpanel.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * This class is a menu block that behaves like a panel. It's a mix of the
- * FCKMenuBlock and FCKPanel classes.
- */
-
-var FCKMenuBlockPanel = function()
-{
- // Call the "base" constructor.
- FCKMenuBlock.call( this ) ;
-}
-
-FCKMenuBlockPanel.prototype = new FCKMenuBlock() ;
-
-
-// Override the create method.
-FCKMenuBlockPanel.prototype.Create = function()
-{
- var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ;
- oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
-
- // Call the "base" implementation.
- FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ;
-}
-
-FCKMenuBlockPanel.prototype.Show = function( x, y, relElement )
-{
- if ( !this.Panel.CheckIsOpened() )
- this.Panel.Show( x, y, relElement ) ;
-}
-
-FCKMenuBlockPanel.prototype.Hide = function()
-{
- if ( this.Panel.CheckIsOpened() )
- this.Panel.Hide() ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenuitem.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenuitem.js
deleted file mode 100755
index 038146d24..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckmenuitem.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Defines and renders a menu items in a menu block.
- */
-
-var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled, customData )
-{
- this.Name = name ;
- this.Label = label || name ;
- this.IsDisabled = isDisabled ;
-
- this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
-
- this.SubMenu = new FCKMenuBlockPanel() ;
- this.SubMenu.Parent = parentMenuBlock ;
- this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ;
- this.CustomData = customData ;
-
- if ( FCK.IECleanup )
- FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ;
-}
-
-
-FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
-{
- this.HasSubMenu = true ;
- return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
-}
-
-FCKMenuItem.prototype.AddSeparator = function()
-{
- this.SubMenu.AddSeparator() ;
-}
-
-FCKMenuItem.prototype.Create = function( parentTable )
-{
- var bHasSubMenu = this.HasSubMenu ;
-
- var oDoc = FCKTools.GetElementDocument( parentTable ) ;
-
- // Add a row in the table to hold the menu item.
- var r = this.MainElement = parentTable.insertRow(-1) ;
- r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ;
-
- // Set the row behavior.
- if ( !this.IsDisabled )
- {
- FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ;
- FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ;
-
- if ( !bHasSubMenu )
- FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ;
- }
-
- // Create the icon cell.
- var eCell = r.insertCell(-1) ;
- eCell.className = 'MN_Icon' ;
- eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
-
- // Create the label cell.
- eCell = r.insertCell(-1) ;
- eCell.className = 'MN_Label' ;
- eCell.noWrap = true ;
- eCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
-
- // Create the arrow cell and setup the sub menu panel (if needed).
- eCell = r.insertCell(-1) ;
- if ( bHasSubMenu )
- {
- eCell.className = 'MN_Arrow' ;
-
- // The arrow is a fixed size image.
- var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
- eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ;
- eArrowImg.width = 4 ;
- eArrowImg.height = 7 ;
-
- this.SubMenu.Create() ;
- this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ;
- }
-}
-
-FCKMenuItem.prototype.Activate = function()
-{
- this.MainElement.className = 'MN_Item_Over' ;
-
- if ( this.HasSubMenu )
- {
- // Show the child menu block. The ( +2, -2 ) correction is done because
- // of the padding in the skin. It is not a good solution because one
- // could change the skin and so the final result would not be accurate.
- // For now it is ok because we are controlling the skin.
- this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ;
- }
-
- FCKTools.RunFunction( this.OnActivate, this ) ;
-}
-
-FCKMenuItem.prototype.Deactivate = function()
-{
- this.MainElement.className = 'MN_Item' ;
-
- if ( this.HasSubMenu )
- this.SubMenu.Hide() ;
-}
-
-/* Events */
-
-function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem )
-{
- FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ;
-}
-
-function FCKMenuItem_SubMenu_OnHide( menuItem )
-{
- menuItem.Deactivate() ;
-}
-
-function FCKMenuItem_OnClick( ev, menuItem )
-{
- if ( menuItem.HasSubMenu )
- menuItem.Activate() ;
- else
- {
- menuItem.Deactivate() ;
- FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ;
- }
-}
-
-function FCKMenuItem_OnMouseOver( ev, menuItem )
-{
- menuItem.Activate() ;
-}
-
-function FCKMenuItem_OnMouseOut( ev, menuItem )
-{
- menuItem.Deactivate() ;
-}
-
-function FCKMenuItem_Cleanup()
-{
- this.MainElement = null ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckpanel.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckpanel.js
deleted file mode 100755
index 263dcf052..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckpanel.js
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Component that creates floating panels. It is used by many
- * other components, like the toolbar items, context menu, etc...
- */
-
-var FCKPanel = function( parentWindow )
-{
- this.IsRTL = ( FCKLang.Dir == 'rtl' ) ;
- this.IsContextMenu = false ;
- this._LockCounter = 0 ;
-
- this._Window = parentWindow || window ;
-
- var oDocument ;
-
- if ( FCKBrowserInfo.IsIE )
- {
- // Create the Popup that will hold the panel.
- // The popup has to be created before playing with domain hacks, see #1666.
- this._Popup = this._Window.createPopup() ;
-
- // this._Window cannot be accessed while playing with domain hacks, but local variable is ok.
- // See #1666.
- var pDoc = this._Window.document ;
-
- // This is a trick to IE6 (not IE7). The original domain must be set
- // before creating the popup, so we are able to take a refence to the
- // document inside of it, and the set the proper domain for it. (#123)
- if ( FCK_IS_CUSTOM_DOMAIN && !FCKBrowserInfo.IsIE7 )
- {
- pDoc.domain = FCK_ORIGINAL_DOMAIN ;
- document.domain = FCK_ORIGINAL_DOMAIN ;
- }
-
- oDocument = this.Document = this._Popup.document ;
-
- // Set the proper domain inside the popup.
- if ( FCK_IS_CUSTOM_DOMAIN )
- {
- oDocument.domain = FCK_RUNTIME_DOMAIN ;
- pDoc.domain = FCK_RUNTIME_DOMAIN ;
- document.domain = FCK_RUNTIME_DOMAIN ;
- }
-
- FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ;
- }
- else
- {
- var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ;
- oIFrame.src = 'javascript:void(0)' ;
- oIFrame.allowTransparency = true ;
- oIFrame.frameBorder = '0' ;
- oIFrame.scrolling = 'no' ;
- oIFrame.width = oIFrame.height = 0 ;
- FCKDomTools.SetElementStyles( oIFrame,
- {
- position : 'absolute',
- zIndex : FCKConfig.FloatingPanelsZIndex
- } ) ;
-
- this._Window.document.body.appendChild( oIFrame ) ;
-
- var oIFrameWindow = oIFrame.contentWindow ;
-
- oDocument = this.Document = oIFrameWindow.document ;
-
- // Workaround for Safari 12256. Ticket #63
- var sBase = '' ;
- if ( FCKBrowserInfo.IsSafari )
- sBase = '' ;
-
- // Initialize the IFRAME document body.
- oDocument.open() ;
- oDocument.write( '' + sBase + '<\/head><\/body><\/html>' ) ;
- oDocument.close() ;
-
- if( FCKBrowserInfo.IsAIR )
- FCKAdobeAIR.Panel_Contructor( oDocument, window.document.location ) ;
-
- FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ;
- FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ;
- }
-
- oDocument.dir = FCKLang.Dir ;
-
- FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ;
-
-
- // Create the main DIV that is used as the panel base.
- this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ;
-
- // The "float" property must be set so Firefox calculates the size correctly.
- this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ;
-}
-
-
-FCKPanel.prototype.AppendStyleSheet = function( styleSheet )
-{
- FCKTools.AppendStyleSheet( this.Document, styleSheet ) ;
-}
-
-FCKPanel.prototype.Preload = function( x, y, relElement )
-{
- // The offsetWidth and offsetHeight properties are not available if the
- // element is not visible. So we must "show" the popup with no size to
- // be able to use that values in the second call (IE only).
- if ( this._Popup )
- this._Popup.show( x, y, 0, 0, relElement ) ;
-}
-
-FCKPanel.prototype.Show = function( x, y, relElement, width, height )
-{
- var iMainWidth ;
- var eMainNode = this.MainNode ;
-
- if ( this._Popup )
- {
- // The offsetWidth and offsetHeight properties are not available if the
- // element is not visible. So we must "show" the popup with no size to
- // be able to use that values in the second call.
- this._Popup.show( x, y, 0, 0, relElement ) ;
-
- // The following lines must be place after the above "show", otherwise it
- // doesn't has the desired effect.
- FCKDomTools.SetElementStyles( eMainNode,
- {
- width : width ? width + 'px' : '',
- height : height ? height + 'px' : ''
- } ) ;
-
- iMainWidth = eMainNode.offsetWidth ;
-
- if ( this.IsRTL )
- {
- if ( this.IsContextMenu )
- x = x - iMainWidth + 1 ;
- else if ( relElement )
- x = ( x * -1 ) + relElement.offsetWidth - iMainWidth ;
- }
-
- // Second call: Show the Popup at the specified location, with the correct size.
- this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ;
-
- if ( this.OnHide )
- {
- if ( this._Timer )
- CheckPopupOnHide.call( this, true ) ;
-
- this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ;
- }
- }
- else
- {
- // Do not fire OnBlur while the panel is opened.
- if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' )
- FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ;
-
- if ( this.ParentPanel )
- {
- this.ParentPanel.Lock() ;
-
- // Due to a bug on FF3, we must ensure that the parent panel will
- // blur (#1584).
- FCKPanel_Window_OnBlur( null, this.ParentPanel ) ;
- }
-
- // Toggle the iframe scrolling attribute to prevent the panel
- // scrollbars from disappearing in FF Mac. (#191)
- if ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac )
- {
- this._IFrame.scrolling = '' ;
- FCKTools.RunFunction( function(){ this._IFrame.scrolling = 'no'; }, this ) ;
- }
-
- // Be sure we'll not have more than one Panel opened at the same time.
- // Do not unlock focus manager here because we're displaying another floating panel
- // instead of returning the editor to a "no panel" state (Bug #1514).
- if ( FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel &&
- FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel != this )
- FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel.Hide( false, true ) ;
-
- FCKDomTools.SetElementStyles( eMainNode,
- {
- width : width ? width + 'px' : '',
- height : height ? height + 'px' : ''
- } ) ;
-
- iMainWidth = eMainNode.offsetWidth ;
-
- if ( !width ) this._IFrame.width = 1 ;
- if ( !height ) this._IFrame.height = 1 ;
-
- // This is weird... but with Firefox, we must get the offsetWidth before
- // setting the _IFrame size (which returns "0"), and then after that,
- // to return the correct width. Remove the first step and it will not
- // work when the editor is in RTL.
- //
- // The "|| eMainNode.firstChild.offsetWidth" part has been added
- // for Opera compatibility (see #570).
- iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
-
- // Base the popup coordinates upon the coordinates of relElement.
- var oPos = FCKTools.GetDocumentPosition( this._Window,
- relElement.nodeType == 9 ?
- ( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) :
- relElement ) ;
-
- // Minus the offsets provided by any positioned parent element of the panel iframe.
- var positionedAncestor = FCKDomTools.GetPositionedAncestor( this._IFrame.parentNode ) ;
- if ( positionedAncestor )
- {
- var nPos = FCKTools.GetDocumentPosition( FCKTools.GetElementWindow( positionedAncestor ), positionedAncestor ) ;
- oPos.x -= nPos.x ;
- oPos.y -= nPos.y ;
- }
-
- if ( this.IsRTL && !this.IsContextMenu )
- x = ( x * -1 ) ;
-
- x += oPos.x ;
- y += oPos.y ;
-
- if ( this.IsRTL )
- {
- if ( this.IsContextMenu )
- x = x - iMainWidth + 1 ;
- else if ( relElement )
- x = x + relElement.offsetWidth - iMainWidth ;
- }
- else
- {
- var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ;
- var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ;
-
- var iViewPaneHeight = oViewPaneSize.Height + oScrollPosition.Y ;
- var iViewPaneWidth = oViewPaneSize.Width + oScrollPosition.X ;
-
- if ( ( x + iMainWidth ) > iViewPaneWidth )
- x -= x + iMainWidth - iViewPaneWidth ;
-
- if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight )
- y -= y + eMainNode.offsetHeight - iViewPaneHeight ;
- }
-
- // Set the context menu DIV in the specified location.
- FCKDomTools.SetElementStyles( this._IFrame,
- {
- left : x + 'px',
- top : y + 'px'
- } ) ;
-
- // Move the focus to the IFRAME so we catch the "onblur".
- this._IFrame.contentWindow.focus() ;
- this._IsOpened = true ;
-
- var me = this ;
- this._resizeTimer = setTimeout( function()
- {
- var iWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
- var iHeight = eMainNode.offsetHeight ;
- me._IFrame.width = iWidth ;
- me._IFrame.height = iHeight ;
-
- }, 0 ) ;
-
- FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel = this ;
- }
-
- FCKTools.RunFunction( this.OnShow, this ) ;
-}
-
-FCKPanel.prototype.Hide = function( ignoreOnHide, ignoreFocusManagerUnlock )
-{
- if ( this._Popup )
- this._Popup.hide() ;
- else
- {
- if ( !this._IsOpened || this._LockCounter > 0 )
- return ;
-
- // Enable the editor to fire the "OnBlur".
- if ( typeof( FCKFocusManager ) != 'undefined' && !ignoreFocusManagerUnlock )
- FCKFocusManager.Unlock() ;
-
- // It is better to set the sizes to 0, otherwise Firefox would have
- // rendering problems.
- this._IFrame.width = this._IFrame.height = 0 ;
-
- this._IsOpened = false ;
-
- if ( this._resizeTimer )
- {
- clearTimeout( this._resizeTimer ) ;
- this._resizeTimer = null ;
- }
-
- if ( this.ParentPanel )
- this.ParentPanel.Unlock() ;
-
- if ( !ignoreOnHide )
- FCKTools.RunFunction( this.OnHide, this ) ;
- }
-}
-
-FCKPanel.prototype.CheckIsOpened = function()
-{
- if ( this._Popup )
- return this._Popup.isOpen ;
- else
- return this._IsOpened ;
-}
-
-FCKPanel.prototype.CreateChildPanel = function()
-{
- var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ;
-
- var oChildPanel = new FCKPanel( oWindow ) ;
- oChildPanel.ParentPanel = this ;
-
- return oChildPanel ;
-}
-
-FCKPanel.prototype.Lock = function()
-{
- this._LockCounter++ ;
-}
-
-FCKPanel.prototype.Unlock = function()
-{
- if ( --this._LockCounter == 0 && !this.HasFocus )
- this.Hide() ;
-}
-
-/* Events */
-
-function FCKPanel_Window_OnFocus( e, panel )
-{
- panel.HasFocus = true ;
-}
-
-function FCKPanel_Window_OnBlur( e, panel )
-{
- panel.HasFocus = false ;
-
- if ( panel._LockCounter == 0 )
- FCKTools.RunFunction( panel.Hide, panel ) ;
-}
-
-function CheckPopupOnHide( forceHide )
-{
- if ( forceHide || !this._Popup.isOpen )
- {
- window.clearInterval( this._Timer ) ;
- this._Timer = null ;
-
- FCKTools.RunFunction( this.OnHide, this ) ;
- }
-}
-
-function FCKPanel_Cleanup()
-{
- this._Popup = null ;
- this._Window = null ;
- this.Document = null ;
- this.MainNode = null ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckplugin.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckplugin.js
deleted file mode 100755
index 16300d133..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckplugin.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKPlugin Class: Represents a single plugin.
- */
-
-var FCKPlugin = function( name, availableLangs, basePath )
-{
- this.Name = name ;
- this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ;
- this.Path = this.BasePath + name + '/' ;
-
- if ( !availableLangs || availableLangs.length == 0 )
- this.AvailableLangs = new Array() ;
- else
- this.AvailableLangs = availableLangs.split(',') ;
-}
-
-FCKPlugin.prototype.Load = function()
-{
- // Load the language file, if defined.
- if ( this.AvailableLangs.length > 0 )
- {
- var sLang ;
-
- // Check if the plugin has the language file for the active language.
- if ( this.AvailableLangs.IndexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 )
- sLang = FCKLanguageManager.ActiveLanguage.Code ;
- else
- // Load the default language file (first one) if the current one is not available.
- sLang = this.AvailableLangs[0] ;
-
- // Add the main plugin script.
- LoadScript( this.Path + 'lang/' + sLang + '.js' ) ;
- }
-
- // Add the main plugin script.
- LoadScript( this.Path + 'fckplugin.js' ) ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckspecialcombo.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckspecialcombo.js
deleted file mode 100755
index 72263895f..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckspecialcombo.js
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKSpecialCombo Class: represents a special combo.
- */
-
-var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow )
-{
- // Default properties values.
- this.FieldWidth = fieldWidth || 100 ;
- this.PanelWidth = panelWidth || 150 ;
- this.PanelMaxHeight = panelMaxHeight || 150 ;
- this.Label = ' ' ;
- this.Caption = caption ;
- this.Tooltip = caption ;
- this.Style = FCK_TOOLBARITEM_ICONTEXT ;
-
- this.Enabled = true ;
-
- this.Items = new Object() ;
-
- this._Panel = new FCKPanel( parentWindow || window ) ;
- this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
- this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
- this._PanelBox.className = 'SC_Panel' ;
- this._PanelBox.style.width = this.PanelWidth + 'px' ;
-
- this._PanelBox.innerHTML = '
' ;
-
- // Gets the correct CSS class to use for the specified style (param).
- oField.innerHTML = '
' +
- '
' +
- //'
' +
- '
' +
- '
' + this.Caption + '
' +
- '
' +
- '
' +
- '
' +
- '
' +
- '
' ;
- }
-
-
- // Events Handlers
-
- FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ;
- FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ;
- FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ;
-
- FCKTools.DisableSelection( this._Panel.Document.body ) ;
-}
-
-function FCKSpecialCombo_Cleanup()
-{
- this._LabelEl = null ;
- this._OuterTable = null ;
- this._ItemsHolderEl = null ;
- this._PanelBox = null ;
-
- if ( this.Items )
- {
- for ( var key in this.Items )
- this.Items[key] = null ;
- }
-}
-
-function FCKSpecialCombo_OnMouseOver( ev, specialCombo )
-{
- if ( specialCombo.Enabled )
- {
- switch ( specialCombo.Style )
- {
- case FCK_TOOLBARITEM_ONLYICON :
- this.className = 'TB_Button_On_Over';
- break ;
- case FCK_TOOLBARITEM_ONLYTEXT :
- this.className = 'TB_Button_On_Over';
- break ;
- case FCK_TOOLBARITEM_ICONTEXT :
- this.className = 'SC_Field SC_FieldOver' ;
- break ;
- }
- }
-}
-
-function FCKSpecialCombo_OnMouseOut( ev, specialCombo )
-{
- switch ( specialCombo.Style )
- {
- case FCK_TOOLBARITEM_ONLYICON :
- this.className = 'TB_Button_Off';
- break ;
- case FCK_TOOLBARITEM_ONLYTEXT :
- this.className = 'TB_Button_Off';
- break ;
- case FCK_TOOLBARITEM_ICONTEXT :
- this.className='SC_Field' ;
- break ;
- }
-}
-
-function FCKSpecialCombo_OnClick( e, specialCombo )
-{
- // For Mozilla we must stop the event propagation to avoid it hiding
- // the panel because of a click outside of it.
-// if ( e )
-// {
-// e.stopPropagation() ;
-// FCKPanelEventHandlers.OnDocumentClick( e ) ;
-// }
-
- if ( specialCombo.Enabled )
- {
- var oPanel = specialCombo._Panel ;
- var oPanelBox = specialCombo._PanelBox ;
- var oItemsHolder = specialCombo._ItemsHolderEl ;
- var iMaxHeight = specialCombo.PanelMaxHeight ;
-
- if ( specialCombo.OnBeforeClick )
- specialCombo.OnBeforeClick( specialCombo ) ;
-
- // This is a tricky thing. We must call the "Load" function, otherwise
- // it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).
- if ( FCKBrowserInfo.IsIE )
- oPanel.Preload( 0, this.offsetHeight, this ) ;
-
- if ( oItemsHolder.offsetHeight > iMaxHeight )
-// {
- oPanelBox.style.height = iMaxHeight + 'px' ;
-
-// if ( FCKBrowserInfo.IsGecko )
-// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;
-// }
- else
- oPanelBox.style.height = '' ;
-
-// oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ;
-
- oPanel.Show( 0, this.offsetHeight, this ) ;
- }
-
-// return false ;
-}
-
-/*
-Sample Combo Field HTML output:
-
-
-
-
-
-
-
-
-
-
-
-*/
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckstyle.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckstyle.js
deleted file mode 100755
index 4308df070..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/classes/fckstyle.js
+++ /dev/null
@@ -1,1443 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * FCKStyle Class: contains a style definition, and all methods to work with
- * the style in a document.
- */
-
-/**
- * @param {Object} styleDesc A "style descriptor" object, containing the raw
- * style definition in the following format:
- * '' ;
- FCK._BehaviorsStyle = sStyle ;
- }
-
- return FCK._BehaviorsStyle ;
-}
-
-function Doc_OnMouseUp()
-{
- if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
- {
- FCK.Focus() ;
- FCK.EditorWindow.event.cancelBubble = true ;
- FCK.EditorWindow.event.returnValue = false ;
- }
-}
-
-function Doc_OnPaste()
-{
- var body = FCK.EditorDocument.body ;
-
- body.detachEvent( 'onpaste', Doc_OnPaste ) ;
-
- var ret = FCK.Paste( !FCKConfig.ForcePasteAsPlainText && !FCKConfig.AutoDetectPasteFromWord ) ;
-
- body.attachEvent( 'onpaste', Doc_OnPaste ) ;
-
- return ret ;
-}
-
-function Doc_OnDblClick()
-{
- FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
- FCK.EditorWindow.event.cancelBubble = true ;
-}
-
-function Doc_OnSelectionChange()
-{
- // Don't fire the event if no document is loaded.
- if ( !FCK.IsSelectionChangeLocked && FCK.EditorDocument )
- FCK.Events.FireEvent( "OnSelectionChange" ) ;
-}
-
-function Doc_OnDrop()
-{
- if ( FCK.MouseDownFlag )
- {
- FCK.MouseDownFlag = false ;
- return ;
- }
-
- if ( FCKConfig.ForcePasteAsPlainText )
- {
- var evt = FCK.EditorWindow.event ;
-
- if ( FCK._CheckIsPastingEnabled() || FCKConfig.ShowDropDialog )
- FCK.PasteAsPlainText( evt.dataTransfer.getData( 'Text' ) ) ;
-
- evt.returnValue = false ;
- evt.cancelBubble = true ;
- }
-}
-
-FCK.InitializeBehaviors = function( dontReturn )
-{
- // Set the focus to the editable area when clicking in the document area.
- // TODO: The cursor must be positioned at the end.
- this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
-
- // Intercept pasting operations
- this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
-
- // Intercept drop operations
- this.EditorDocument.body.attachEvent( 'ondrop', Doc_OnDrop ) ;
-
- // Reset the context menu.
- FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ;
-
- this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ;
-
- this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
-
- // Catch cursor selection changes.
- this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
-
- FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', Doc_OnMouseDown ) ;
-}
-
-FCK.InsertHtml = function( html )
-{
- html = FCKConfig.ProtectedSource.Protect( html ) ;
- html = FCK.ProtectEvents( html ) ;
- html = FCK.ProtectUrls( html ) ;
- html = FCK.ProtectTags( html ) ;
-
-// FCK.Focus() ;
- FCK.EditorWindow.focus() ;
-
- FCKUndo.SaveUndoStep() ;
-
- // Gets the actual selection.
- var oSel = FCKSelection.GetSelection() ;
-
- // Deletes the actual selection contents.
- if ( oSel.type.toLowerCase() == 'control' )
- oSel.clear() ;
-
- // Using the following trick, any comment in the beginning of the HTML will
- // be preserved.
- html = 'fakeFCKRemove' + html ;
-
- // Insert the HTML.
- oSel.createRange().pasteHTML( html ) ;
-
- // Remove the fake node
- FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ;
-
- FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
-
- // For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
- this.Events.FireEvent( "OnSelectionChange" ) ;
-}
-
-FCK.SetInnerHtml = function( html ) // IE Only
-{
- var oDoc = FCK.EditorDocument ;
- // Using the following trick, any comment in the beginning of the HTML will
- // be preserved.
- oDoc.body.innerHTML = '
' + html ;
- oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
-}
-
-function FCK_PreloadImages()
-{
- var oPreloader = new FCKImagePreloader() ;
-
- // Add the configured images.
- oPreloader.AddImages( FCKConfig.PreloadImages ) ;
-
- // Add the skin icons strip.
- oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
-
- oPreloader.OnComplete = LoadToolbarSetup ;
- oPreloader.Start() ;
-}
-
-// Disable the context menu in the editor (outside the editing area).
-function Document_OnContextMenu()
-{
- return ( event.srcElement._FCKShowContextMenu == true ) ;
-}
-document.oncontextmenu = Document_OnContextMenu ;
-
-function FCK_Cleanup()
-{
- this.LinkedField = null ;
- this.EditorWindow = null ;
- this.EditorDocument = null ;
-}
-
-FCK._ExecPaste = function()
-{
- // As we call ExecuteNamedCommand('Paste'), it would enter in a loop. So, let's use a semaphore.
- if ( FCK._PasteIsRunning )
- return true ;
-
- if ( FCKConfig.ForcePasteAsPlainText )
- {
- FCK.PasteAsPlainText() ;
- return false ;
- }
-
- var sHTML = FCK._CheckIsPastingEnabled( true ) ;
-
- if ( sHTML === false )
- FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ;
- else
- {
- if ( FCKConfig.AutoDetectPasteFromWord && sHTML.length > 0 )
- {
- var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ;
- if ( re.test( sHTML ) )
- {
- if ( confirm( FCKLang.PasteWordConfirm ) )
- {
- FCK.PasteFromWord() ;
- return false ;
- }
- }
- }
-
- // Instead of inserting the retrieved HTML, let's leave the OS work for us,
- // by calling FCK.ExecuteNamedCommand( 'Paste' ). It could give better results.
-
- // Enable the semaphore to avoid a loop.
- FCK._PasteIsRunning = true ;
-
- FCK.ExecuteNamedCommand( 'Paste' ) ;
-
- // Removes the semaphore.
- delete FCK._PasteIsRunning ;
- }
-
- // Let's always make a custom implementation (return false), otherwise
- // the new Keyboard Handler may conflict with this code, and the CTRL+V code
- // could result in a simple "V" being pasted.
- return false ;
-}
-
-FCK.PasteAsPlainText = function( forceText )
-{
- if ( !FCK._CheckIsPastingEnabled() )
- {
- FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
- return ;
- }
-
- // Get the data available in the clipboard in text format.
- var sText = null ;
- if ( ! forceText )
- sText = clipboardData.getData("Text") ;
- else
- sText = forceText ;
-
- if ( sText && sText.length > 0 )
- {
- // Replace the carriage returns with
- sText = FCKTools.HTMLEncode( sText ) ;
- sText = FCKTools.ProcessLineBreaks( window, FCKConfig, sText ) ;
-
- var closeTagIndex = sText.search( '' ) ;
- var startTagIndex = sText.search( '
' ) ;
-
- if ( ( closeTagIndex != -1 && startTagIndex != -1 && closeTagIndex < startTagIndex )
- || ( closeTagIndex != -1 && startTagIndex == -1 ) )
- {
- var prefix = sText.substr( 0, closeTagIndex ) ;
- sText = sText.substr( closeTagIndex + 4 ) ;
- this.InsertHtml( prefix ) ;
- }
-
- // Insert the resulting data in the editor.
- FCKUndo.SaveLocked = true ;
- this.InsertHtml( sText ) ;
- FCKUndo.SaveLocked = false ;
- }
-}
-
-FCK._CheckIsPastingEnabled = function( returnContents )
-{
- // The following seams to be the only reliable way to check is script
- // pasting operations are enabled in the security settings of IE6 and IE7.
- // It adds a little bit of overhead to the check, but so far that's the
- // only way, mainly because of IE7.
-
- FCK._PasteIsEnabled = false ;
-
- document.body.attachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
-
- // The execCommand in GetClipboardHTML will fire the "onpaste", only if the
- // security settings are enabled.
- var oReturn = FCK.GetClipboardHTML() ;
-
- document.body.detachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
-
- if ( FCK._PasteIsEnabled )
- {
- if ( !returnContents )
- oReturn = true ;
- }
- else
- oReturn = false ;
-
- delete FCK._PasteIsEnabled ;
-
- return oReturn ;
-}
-
-function FCK_CheckPasting_Listener()
-{
- FCK._PasteIsEnabled = true ;
-}
-
-FCK.GetClipboardHTML = function()
-{
- var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
-
- if ( !oDiv )
- {
- oDiv = document.createElement( 'DIV' ) ;
- oDiv.id = '___FCKHiddenDiv' ;
-
- var oDivStyle = oDiv.style ;
- oDivStyle.position = 'absolute' ;
- oDivStyle.visibility = oDivStyle.overflow = 'hidden' ;
- oDivStyle.width = oDivStyle.height = 1 ;
-
- document.body.appendChild( oDiv ) ;
- }
-
- oDiv.innerHTML = '' ;
-
- var oTextRange = document.body.createTextRange() ;
- oTextRange.moveToElementText( oDiv ) ;
- oTextRange.execCommand( 'Paste' ) ;
-
- var sData = oDiv.innerHTML ;
- oDiv.innerHTML = '' ;
-
- return sData ;
-}
-
-FCK.CreateLink = function( url, noUndo )
-{
- // Creates the array that will be returned. It contains one or more created links (see #220).
- var aCreatedLinks = new Array() ;
-
- // Remove any existing link in the selection.
- FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
-
- if ( url.length > 0 )
- {
- // If there are several images, and you try to link each one, all the images get inside the link:
- // -> -> due to the call to 'CreateLink' (bug in IE)
- if (FCKSelection.GetType() == 'Control')
- {
- // Create a link
- var oLink = this.EditorDocument.createElement( 'A' ) ;
- oLink.href = url ;
-
- // Get the selected object
- var oControl = FCKSelection.GetSelectedElement() ;
- // Put the link just before the object
- oControl.parentNode.insertBefore(oLink, oControl) ;
- // Move the object inside the link
- oControl.parentNode.removeChild( oControl ) ;
- oLink.appendChild( oControl ) ;
-
- return [ oLink ] ;
- }
-
- // Generate a temporary name for the link.
- var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
-
- // Use the internal "CreateLink" command to create the link.
- FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
-
- // Look for the just create link.
- var oLinks = this.EditorDocument.links ;
-
- for ( i = 0 ; i < oLinks.length ; i++ )
- {
- var oLink = oLinks[i] ;
-
- // Check it this a newly created link.
- // getAttribute must be used. oLink.url may cause problems with IE7 (#555).
- if ( oLink.getAttribute( 'href', 2 ) == sTempUrl )
- {
- var sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL).
- oLink.href = url ;
- oLink.innerHTML = sInnerHtml ; // Restore the innerHTML.
-
- // If the last child is a move it outside the link or it
- // will be too easy to select this link again #388.
- var oLastChild = oLink.lastChild ;
- if ( oLastChild && oLastChild.nodeName == 'BR' )
- {
- // Move the BR after the link.
- FCKDomTools.InsertAfterNode( oLink, oLink.removeChild( oLastChild ) ) ;
- }
-
- aCreatedLinks.push( oLink ) ;
- }
- }
- }
-
- return aCreatedLinks ;
-}
-
-function _FCK_RemoveDisabledAtt()
-{
- this.removeAttribute( 'disabled' ) ;
-}
-
-function Doc_OnMouseDown( evt )
-{
- var e = evt.srcElement ;
-
- // Radio buttons and checkboxes should not be allowed to be triggered in IE
- // in editable mode. Otherwise the whole browser window may be locked by
- // the buttons. (#1782)
- if ( e.nodeName.IEquals( 'input' ) && e.type.IEquals( ['radio', 'checkbox'] ) && !e.disabled )
- {
- e.disabled = true ;
- FCKTools.SetTimeout( _FCK_RemoveDisabledAtt, 1, e ) ;
- }
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckbrowserinfo.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckbrowserinfo.js
deleted file mode 100755
index fd6fe40b9..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckbrowserinfo.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Contains browser detection information.
- */
-
-var s = navigator.userAgent.toLowerCase() ;
-
-var FCKBrowserInfo =
-{
- IsIE : /*@cc_on!@*/false,
- IsIE7 : /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 7 ),
- IsIE6 : /*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/ )[1], 10 ) >= 6 ),
- IsGecko : s.Contains('gecko/'),
- IsSafari : s.Contains(' applewebkit/'), // Read "IsWebKit"
- IsOpera : !!window.opera,
- IsAIR : s.Contains(' adobeair/'),
- IsMac : s.Contains('macintosh')
-} ;
-
-// Completes the browser info with further Gecko information.
-(function( browserInfo )
-{
- browserInfo.IsGeckoLike = ( browserInfo.IsGecko || browserInfo.IsSafari || browserInfo.IsOpera ) ;
-
- if ( browserInfo.IsGecko )
- {
- var geckoVersion = s.match( /gecko\/(\d+)/ )[1] ;
-
- // Actually "10" refers to Gecko versions before Firefox 1.5, when
- // Gecko 1.8 (build 20051111) has been released.
-
- // Some browser (like Mozilla 1.7.13) may have a Gecko build greater
- // than 20051111, so we must also check for the revision number not to
- // be 1.7 (we are assuming that rv < 1.7 will not have build > 20051111).
-
- // TODO: Future versions may consider the rv number only, but it is
- // still to check that all Gecko based browser present the rv number.
- browserInfo.IsGecko10 = ( ( geckoVersion < 20051111 ) || ( /rv:1\.7/.test(s) ) ) ;
- browserInfo.IsGecko19 = /rv:1\.9/.test(s) ;
- }
- else
- browserInfo.IsGecko10 = false ;
-})(FCKBrowserInfo) ;
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckcodeformatter.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckcodeformatter.js
deleted file mode 100755
index 8a7f1526d..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckcodeformatter.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Format the HTML.
- */
-
-var FCKCodeFormatter = new Object() ;
-
-FCKCodeFormatter.Init = function()
-{
- var oRegex = this.Regex = new Object() ;
-
- // Regex for line breaks.
- oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
- oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
-
- oRegex.NewLineTags = /\<(BR|HR)[^\>]*\>/gi ;
-
- oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
-
- oRegex.LineSplitter = /\s*\n+\s*/g ;
-
- // Regex for indentation.
- oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ;
- oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ;
- oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ;
-
- oRegex.ProtectedTags = /(
]*>)([\s\S]*?)(<\/PRE>)/gi ;
-}
-
-FCKCodeFormatter._ProtectData = function( outer, opener, data, closer )
-{
- return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ;
-}
-
-FCKCodeFormatter.Format = function( html )
-{
- if ( !this.Regex )
- this.Init() ;
-
- // Protected content that remain untouched during the
- // process go in the following array.
- FCKCodeFormatter.ProtectedData = new Array() ;
-
- var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ;
-
- // Line breaks.
- sFormatted = sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ;
- sFormatted = sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ;
- sFormatted = sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ;
- sFormatted = sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ;
-
- // Indentation.
- var sIndentation = '' ;
-
- var asLines = sFormatted.split( this.Regex.LineSplitter ) ;
- sFormatted = '' ;
-
- for ( var i = 0 ; i < asLines.length ; i++ )
- {
- var sLine = asLines[i] ;
-
- if ( sLine.length == 0 )
- continue ;
-
- if ( this.Regex.DecreaseIndent.test( sLine ) )
- sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ;
-
- sFormatted += sIndentation + sLine + '\n' ;
-
- if ( this.Regex.IncreaseIndent.test( sLine ) )
- sIndentation += FCKConfig.FormatIndentator ;
- }
-
- // Now we put back the protected data.
- for ( var j = 0 ; j < FCKCodeFormatter.ProtectedData.length ; j++ )
- {
- var oRegex = new RegExp( '___FCKpd___' + j ) ;
- sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[j].replace( /\$/g, '$$$$' ) ) ;
- }
-
- return sFormatted.Trim() ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckcommands.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckcommands.js
deleted file mode 100755
index e228f41de..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckcommands.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Define all commands available in the editor.
- */
-
-var FCKCommands = FCK.Commands = new Object() ;
-FCKCommands.LoadedCommands = new Object() ;
-
-FCKCommands.RegisterCommand = function( commandName, command )
-{
- this.LoadedCommands[ commandName ] = command ;
-}
-
-FCKCommands.GetCommand = function( commandName )
-{
- var oCommand = FCKCommands.LoadedCommands[ commandName ] ;
-
- if ( oCommand )
- return oCommand ;
-
- switch ( commandName )
- {
- case 'Bold' :
- case 'Italic' :
- case 'Underline' :
- case 'StrikeThrough':
- case 'Subscript' :
- case 'Superscript' : oCommand = new FCKCoreStyleCommand( commandName ) ; break ;
-
- case 'RemoveFormat' : oCommand = new FCKRemoveFormatCommand() ; break ;
-
- case 'DocProps' : oCommand = new FCKDialogCommand( 'DocProps' , FCKLang.DocProps , 'dialog/fck_docprops.html' , 400, 380, FCKCommands.GetFullPageState ) ; break ;
- case 'Templates' : oCommand = new FCKDialogCommand( 'Templates' , FCKLang.DlgTemplatesTitle , 'dialog/fck_template.html' , 380, 450 ) ; break ;
- case 'Link' : oCommand = new FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle , 'dialog/fck_link.html' , 400, 300 ) ; break ;
- case 'Unlink' : oCommand = new FCKUnlinkCommand() ; break ;
- case 'Anchor' : oCommand = new FCKDialogCommand( 'Anchor' , FCKLang.DlgAnchorTitle , 'dialog/fck_anchor.html' , 370, 160 ) ; break ;
- case 'AnchorDelete' : oCommand = new FCKAnchorDeleteCommand() ; break ;
- case 'BulletedList' : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp , 'dialog/fck_listprop.html?UL' , 370, 160 ) ; break ;
- case 'NumberedList' : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp , 'dialog/fck_listprop.html?OL' , 370, 160 ) ; break ;
- case 'About' : oCommand = new FCKDialogCommand( 'About' , FCKLang.About , 'dialog/fck_about.html' , 420, 330, function(){ return FCK_TRISTATE_OFF ; } ) ; break ;
- case 'Find' : oCommand = new FCKDialogCommand( 'Find' , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html' , 340, 230, null, null, 'Find' ) ; break ;
- case 'Replace' : oCommand = new FCKDialogCommand( 'Replace' , FCKLang.DlgFindAndReplaceTitle, 'dialog/fck_replace.html' , 340, 230, null, null, 'Replace' ) ; break ;
-
- case 'Image' : oCommand = new FCKDialogCommand( 'Image' , FCKLang.DlgImgTitle , 'dialog/fck_image.html' , 450, 390 ) ; break ;
- case 'Flash' : oCommand = new FCKDialogCommand( 'Flash' , FCKLang.DlgFlashTitle , 'dialog/fck_flash.html' , 450, 390 ) ; break ;
- case 'SpecialChar' : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' , 400, 290 ) ; break ;
- case 'Smiley' : oCommand = new FCKDialogCommand( 'Smiley' , FCKLang.DlgSmileyTitle , 'dialog/fck_smiley.html' , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
- case 'Table' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html' , 480, 250 ) ; break ;
- case 'TableProp' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html?Parent', 480, 250 ) ; break ;
- case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell' , FCKLang.DlgCellTitle , 'dialog/fck_tablecell.html' , 550, 240 ) ; break ;
-
- case 'Style' : oCommand = new FCKStyleCommand() ; break ;
-
- case 'FontName' : oCommand = new FCKFontNameCommand() ; break ;
- case 'FontSize' : oCommand = new FCKFontSizeCommand() ; break ;
- case 'FontFormat' : oCommand = new FCKFormatBlockCommand() ; break ;
-
- case 'Source' : oCommand = new FCKSourceCommand() ; break ;
- case 'Preview' : oCommand = new FCKPreviewCommand() ; break ;
- case 'Save' : oCommand = new FCKSaveCommand() ; break ;
- case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ;
- case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ;
- case 'Rule' : oCommand = new FCKRuleCommand() ; break ;
-
- case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ;
- case 'BGColor' : oCommand = new FCKTextColorCommand('BackColor') ; break ;
-
- case 'Paste' : oCommand = new FCKPasteCommand() ; break ;
- case 'PasteText' : oCommand = new FCKPastePlainTextCommand() ; break ;
- case 'PasteWord' : oCommand = new FCKPasteWordCommand() ; break ;
-
- case 'JustifyLeft' : oCommand = new FCKJustifyCommand( 'left' ) ; break ;
- case 'JustifyCenter' : oCommand = new FCKJustifyCommand( 'center' ) ; break ;
- case 'JustifyRight' : oCommand = new FCKJustifyCommand( 'right' ) ; break ;
- case 'JustifyFull' : oCommand = new FCKJustifyCommand( 'justify' ) ; break ;
- case 'Indent' : oCommand = new FCKIndentCommand( 'indent', FCKConfig.IndentLength ) ; break ;
- case 'Outdent' : oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ;
- case 'Blockquote' : oCommand = new FCKBlockQuoteCommand() ; break ;
-
- case 'TableInsertRowAfter' : oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ;
- case 'TableInsertRowBefore' : oCommand = new FCKTableCommand('TableInsertRowBefore') ; break ;
- case 'TableDeleteRows' : oCommand = new FCKTableCommand('TableDeleteRows') ; break ;
- case 'TableInsertColumnAfter' : oCommand = new FCKTableCommand('TableInsertColumnAfter') ; break ;
- case 'TableInsertColumnBefore' : oCommand = new FCKTableCommand('TableInsertColumnBefore') ; break ;
- case 'TableDeleteColumns' : oCommand = new FCKTableCommand('TableDeleteColumns') ; break ;
- case 'TableInsertCellAfter' : oCommand = new FCKTableCommand('TableInsertCellAfter') ; break ;
- case 'TableInsertCellBefore' : oCommand = new FCKTableCommand('TableInsertCellBefore') ; break ;
- case 'TableDeleteCells' : oCommand = new FCKTableCommand('TableDeleteCells') ; break ;
- case 'TableMergeCells' : oCommand = new FCKTableCommand('TableMergeCells') ; break ;
- case 'TableMergeRight' : oCommand = new FCKTableCommand('TableMergeRight') ; break ;
- case 'TableMergeDown' : oCommand = new FCKTableCommand('TableMergeDown') ; break ;
- case 'TableHorizontalSplitCell' : oCommand = new FCKTableCommand('TableHorizontalSplitCell') ; break ;
- case 'TableVerticalSplitCell' : oCommand = new FCKTableCommand('TableVerticalSplitCell') ; break ;
- case 'TableDelete' : oCommand = new FCKTableCommand('TableDelete') ; break ;
-
- case 'Form' : oCommand = new FCKDialogCommand( 'Form' , FCKLang.Form , 'dialog/fck_form.html' , 380, 210 ) ; break ;
- case 'Checkbox' : oCommand = new FCKDialogCommand( 'Checkbox' , FCKLang.Checkbox , 'dialog/fck_checkbox.html' , 380, 200 ) ; break ;
- case 'Radio' : oCommand = new FCKDialogCommand( 'Radio' , FCKLang.RadioButton , 'dialog/fck_radiobutton.html' , 380, 200 ) ; break ;
- case 'TextField' : oCommand = new FCKDialogCommand( 'TextField' , FCKLang.TextField , 'dialog/fck_textfield.html' , 380, 210 ) ; break ;
- case 'Textarea' : oCommand = new FCKDialogCommand( 'Textarea' , FCKLang.Textarea , 'dialog/fck_textarea.html' , 380, 210 ) ; break ;
- case 'HiddenField' : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField , 'dialog/fck_hiddenfield.html' , 380, 190 ) ; break ;
- case 'Button' : oCommand = new FCKDialogCommand( 'Button' , FCKLang.Button , 'dialog/fck_button.html' , 380, 210 ) ; break ;
- case 'Select' : oCommand = new FCKDialogCommand( 'Select' , FCKLang.SelectionField, 'dialog/fck_select.html' , 400, 340 ) ; break ;
- case 'ImageButton' : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton , 'dialog/fck_image.html?ImageButton', 450, 390 ) ; break ;
-
- case 'SpellCheck' : oCommand = new FCKSpellCheckCommand() ; break ;
- case 'FitWindow' : oCommand = new FCKFitWindow() ; break ;
-
- case 'Undo' : oCommand = new FCKUndoCommand() ; break ;
- case 'Redo' : oCommand = new FCKRedoCommand() ; break ;
- case 'Copy' : oCommand = new FCKCutCopyCommand( false ) ; break ;
- case 'Cut' : oCommand = new FCKCutCopyCommand( true ) ; break ;
-
- case 'SelectAll' : oCommand = new FCKSelectAllCommand() ; break ;
- case 'InsertOrderedList' : oCommand = new FCKListCommand( 'insertorderedlist', 'ol' ) ; break ;
- case 'InsertUnorderedList' : oCommand = new FCKListCommand( 'insertunorderedlist', 'ul' ) ; break ;
- case 'ShowBlocks' : oCommand = new FCKShowBlockCommand( 'ShowBlocks', FCKConfig.StartupShowBlocks ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ) ; break ;
-
- // Generic Undefined command (usually used when a command is under development).
- case 'Undefined' : oCommand = new FCKUndefinedCommand() ; break ;
-
- // By default we assume that it is a named command.
- default:
- if ( FCKRegexLib.NamedCommands.test( commandName ) )
- oCommand = new FCKNamedCommand( commandName ) ;
- else
- {
- alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ;
- return null ;
- }
- }
-
- FCKCommands.LoadedCommands[ commandName ] = oCommand ;
-
- return oCommand ;
-}
-
-// Gets the state of the "Document Properties" button. It must be enabled only
-// when "Full Page" editing is available.
-FCKCommands.GetFullPageState = function()
-{
- return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
-}
-
-
-FCKCommands.GetBooleanState = function( isDisabled )
-{
- return isDisabled ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckconfig.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckconfig.js
deleted file mode 100755
index 58fdff1f7..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fckconfig.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Creates and initializes the FCKConfig object.
- */
-
-var FCKConfig = FCK.Config = new Object() ;
-
-/*
- For the next major version (probably 3.0) we should move all this stuff to
- another dedicated object and leave FCKConfig as a holder object for settings only).
-*/
-
-// Editor Base Path
-if ( document.location.protocol == 'file:' )
-{
- FCKConfig.BasePath = decodeURIComponent( document.location.pathname.substr(1) ) ;
- FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
-
- // The way to address local files is different according to the OS.
- // In Windows it is file:// but in MacOs it is file:/// so let's get it automatically
- var sFullProtocol = document.location.href.match( /^(file\:\/{2,3})/ )[1] ;
- // #945 Opera does strange things with files loaded from the disk, and it fails in Mac to load xml files
- if ( FCKBrowserInfo.IsOpera )
- sFullProtocol += 'localhost/' ;
-
- FCKConfig.BasePath = sFullProtocol + FCKConfig.BasePath.substring( 0, FCKConfig.BasePath.lastIndexOf( '/' ) + 1) ;
- FCKConfig.FullBasePath = FCKConfig.BasePath ;
-}
-else
-{
- FCKConfig.BasePath = document.location.pathname.substring( 0, document.location.pathname.lastIndexOf( '/' ) + 1) ;
- FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ;
-}
-
-FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ;
-
-// There is a bug in Gecko. If the editor is hidden on startup, an error is
-// thrown when trying to get the screen dimensions.
-try
-{
- FCKConfig.ScreenWidth = screen.width ;
- FCKConfig.ScreenHeight = screen.height ;
-}
-catch (e)
-{
- FCKConfig.ScreenWidth = 800 ;
- FCKConfig.ScreenHeight = 600 ;
-}
-
-// Override the actual configuration values with the values passed throw the
-// hidden field "___Config".
-FCKConfig.ProcessHiddenField = function()
-{
- this.PageConfig = new Object() ;
-
- // Get the hidden field.
- var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
-
- // Do nothing if the config field was not defined.
- if ( ! oConfigField ) return ;
-
- var aCouples = oConfigField.value.split('&') ;
-
- for ( var i = 0 ; i < aCouples.length ; i++ )
- {
- if ( aCouples[i].length == 0 )
- continue ;
-
- var aConfig = aCouples[i].split( '=' ) ;
- var sKey = decodeURIComponent( aConfig[0] ) ;
- var sVal = decodeURIComponent( aConfig[1] ) ;
-
- if ( sKey == 'CustomConfigurationsPath' ) // The Custom Config File path must be loaded immediately.
- FCKConfig[ sKey ] = sVal ;
-
- else if ( sVal.toLowerCase() == "true" ) // If it is a boolean TRUE.
- this.PageConfig[ sKey ] = true ;
-
- else if ( sVal.toLowerCase() == "false" ) // If it is a boolean FALSE.
- this.PageConfig[ sKey ] = false ;
-
- else if ( sVal.length > 0 && !isNaN( sVal ) ) // If it is a number.
- this.PageConfig[ sKey ] = parseInt( sVal, 10 ) ;
-
- else // In any other case it is a string.
- this.PageConfig[ sKey ] = sVal ;
- }
-}
-
-function FCKConfig_LoadPageConfig()
-{
- var oPageConfig = FCKConfig.PageConfig ;
- for ( var sKey in oPageConfig )
- FCKConfig[ sKey ] = oPageConfig[ sKey ] ;
-}
-
-function FCKConfig_PreProcess()
-{
- var oConfig = FCKConfig ;
-
- // Force debug mode if fckdebug=true in the QueryString (main page).
- if ( oConfig.AllowQueryStringDebug )
- {
- try
- {
- if ( (/fckdebug=true/i).test( window.top.location.search ) )
- oConfig.Debug = true ;
- }
- catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
- }
-
- // Certifies that the "PluginsPath" configuration ends with a slash.
- if ( !oConfig.PluginsPath.EndsWith('/') )
- oConfig.PluginsPath += '/' ;
-
- // If no ToolbarComboPreviewCSS, point it to EditorAreaCSS.
- var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ;
- if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 )
- oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ;
-
- // Turn the attributes that will be removed in the RemoveFormat from a string to an array
- oConfig.RemoveAttributesArray = (oConfig.RemoveAttributes || '').split( ',' );
-
- if ( !FCKConfig.SkinEditorCSS || FCKConfig.SkinEditorCSS.length == 0 )
- FCKConfig.SkinEditorCSS = FCKConfig.SkinPath + 'fck_editor.css' ;
-
- if ( !FCKConfig.SkinDialogCSS || FCKConfig.SkinDialogCSS.length == 0 )
- FCKConfig.SkinDialogCSS = FCKConfig.SkinPath + 'fck_dialog.css' ;
-}
-
-// Define toolbar sets collection.
-FCKConfig.ToolbarSets = new Object() ;
-
-// Defines the plugins collection.
-FCKConfig.Plugins = new Object() ;
-FCKConfig.Plugins.Items = new Array() ;
-
-FCKConfig.Plugins.Add = function( name, langs, path )
-{
- FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ;
-}
-
-// FCKConfig.ProtectedSource: object that holds a collection of Regular
-// Expressions that defined parts of the raw HTML that must remain untouched
-// like custom tags, scripts, server side code, etc...
-FCKConfig.ProtectedSource = new Object() ;
-
-// Generates a string used to identify and locate the Protected Tags comments.
-FCKConfig.ProtectedSource._CodeTag = (new Date()).valueOf() ;
-
-// Initialize the regex array with the default ones.
-FCKConfig.ProtectedSource.RegexEntries = [
- // First of any other protection, we must protect all comments to avoid
- // loosing them (of course, IE related).
- //g ,
-
- // Script tags will also be forced to be protected, otherwise IE will execute them.
- /' + document.getElementById( 'xToolbarSpace' ).innerHTML + '' ) ;
- eTargetDocument.close() ;
-
- if( FCKBrowserInfo.IsAIR )
- FCKAdobeAIR.ToolbarSet_InitOutFrame( eTargetDocument ) ;
-
- FCKTools.AddEventListener( eTargetDocument, 'contextmenu', FCKTools.CancelEvent ) ;
-
- // Load external resources (must be done here, otherwise Firefox will not
- // have the document DOM ready to be used right away.
- FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinEditorCSS ) ;
-
- oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;
- oToolbarSet._IFrame = eToolbarIFrame ;
-
- if ( FCK.IECleanup )
- FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;
- }
-
- oToolbarSet.CurrentInstance = FCK ;
- if ( !oToolbarSet.ToolbarItems )
- oToolbarSet.ToolbarItems = FCKToolbarItems ;
-
- FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;
-
- return oToolbarSet ;
-}
-
-function FCK_OnBlur( editorInstance )
-{
- var eToolbarSet = editorInstance.ToolbarSet ;
-
- if ( eToolbarSet.CurrentInstance == editorInstance )
- eToolbarSet.Disable() ;
-}
-
-function FCK_OnFocus( editorInstance )
-{
- var oToolbarset = editorInstance.ToolbarSet ;
- var oInstance = editorInstance || FCK ;
-
- // Unregister the toolbar window from the current instance.
- oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;
-
- // Set the new current instance.
- oToolbarset.CurrentInstance = oInstance ;
-
- // Register the toolbar window in the current instance.
- oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;
-
- oToolbarset.Enable() ;
-}
-
-function FCKToolbarSet_Cleanup()
-{
- this._TargetElement = null ;
- this._IFrame = null ;
-}
-
-function FCKToolbarSet_Target_Cleanup()
-{
- this.__FCKToolbarSet = null ;
-}
-
-var FCKToolbarSet = function( targetDocument )
-{
- this._Document = targetDocument ;
-
- // Get the element that will hold the elements structure.
- this._TargetElement = targetDocument.getElementById( 'xToolbar' ) ;
-
- // Setup the expand and collapse handlers.
- var eExpandHandle = targetDocument.getElementById( 'xExpandHandle' ) ;
- var eCollapseHandle = targetDocument.getElementById( 'xCollapseHandle' ) ;
-
- eExpandHandle.title = FCKLang.ToolbarExpand ;
- FCKTools.AddEventListener( eExpandHandle, 'click', FCKToolbarSet_Expand_OnClick ) ;
-
- eCollapseHandle.title = FCKLang.ToolbarCollapse ;
- FCKTools.AddEventListener( eCollapseHandle, 'click', FCKToolbarSet_Collapse_OnClick ) ;
-
- // Set the toolbar state at startup.
- if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
- this.Expand() ;
- else
- this.Collapse() ;
-
- // Enable/disable the collapse handler
- eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
-
- if ( FCKConfig.ToolbarCanCollapse )
- eCollapseHandle.style.display = '' ;
- else
- targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;
-
- // Set the default properties.
- this.Toolbars = new Array() ;
- this.IsLoaded = false ;
-
- if ( FCK.IECleanup )
- FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;
-}
-
-function FCKToolbarSet_Expand_OnClick()
-{
- FCK.ToolbarSet.Expand() ;
-}
-
-function FCKToolbarSet_Collapse_OnClick()
-{
- FCK.ToolbarSet.Collapse() ;
-}
-
-FCKToolbarSet.prototype.Expand = function()
-{
- this._ChangeVisibility( false ) ;
-}
-
-FCKToolbarSet.prototype.Collapse = function()
-{
- this._ChangeVisibility( true ) ;
-}
-
-FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
-{
- this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;
- this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;
-
- if ( FCKBrowserInfo.IsGecko )
- {
- // I had to use "setTimeout" because Gecko was not responding in a right
- // way when calling window.onresize() directly.
- FCKTools.RunFunction( window.onresize ) ;
- }
-}
-
-FCKToolbarSet.prototype.Load = function( toolbarSetName )
-{
- this.Name = toolbarSetName ;
-
- this.Items = new Array() ;
-
- // Reset the array of toolbar items that are active only on WYSIWYG mode.
- this.ItemsWysiwygOnly = new Array() ;
-
- // Reset the array of toolbar items that are sensitive to the cursor position.
- this.ItemsContextSensitive = new Array() ;
-
- // Cleanup the target element.
- this._TargetElement.innerHTML = '' ;
-
- var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
-
- if ( !ToolbarSet )
- {
- alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
- return ;
- }
-
- this.Toolbars = new Array() ;
-
- for ( var x = 0 ; x < ToolbarSet.length ; x++ )
- {
- var oToolbarItems = ToolbarSet[x] ;
-
- // If the configuration for the toolbar is missing some element or has any extra comma
- // this item won't be valid, so skip it and keep on processing.
- if ( !oToolbarItems )
- continue ;
-
- var oToolbar ;
-
- if ( typeof( oToolbarItems ) == 'string' )
- {
- if ( oToolbarItems == '/' )
- oToolbar = new FCKToolbarBreak() ;
- }
- else
- {
- oToolbar = new FCKToolbar() ;
-
- for ( var j = 0 ; j < oToolbarItems.length ; j++ )
- {
- var sItem = oToolbarItems[j] ;
-
- if ( sItem == '-')
- oToolbar.AddSeparator() ;
- else
- {
- var oItem = FCKToolbarItems.GetItem( sItem ) ;
- if ( oItem )
- {
- oToolbar.AddItem( oItem ) ;
-
- this.Items.push( oItem ) ;
-
- if ( !oItem.SourceView )
- this.ItemsWysiwygOnly.push( oItem ) ;
-
- if ( oItem.ContextSensitive )
- this.ItemsContextSensitive.push( oItem ) ;
- }
- }
- }
-
- // oToolbar.AddTerminator() ;
- }
-
- oToolbar.Create( this._TargetElement ) ;
-
- this.Toolbars[ this.Toolbars.length ] = oToolbar ;
- }
-
- FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;
-
- if ( FCK.Status != FCK_STATUS_COMPLETE )
- FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;
- else
- this.RefreshModeState() ;
-
- this.IsLoaded = true ;
- this.IsEnabled = true ;
-
- FCKTools.RunFunction( this.OnLoad ) ;
-}
-
-FCKToolbarSet.prototype.Enable = function()
-{
- if ( this.IsEnabled )
- return ;
-
- this.IsEnabled = true ;
-
- var aItems = this.Items ;
- for ( var i = 0 ; i < aItems.length ; i++ )
- aItems[i].RefreshState() ;
-}
-
-FCKToolbarSet.prototype.Disable = function()
-{
- if ( !this.IsEnabled )
- return ;
-
- this.IsEnabled = false ;
-
- var aItems = this.Items ;
- for ( var i = 0 ; i < aItems.length ; i++ )
- aItems[i].Disable() ;
-}
-
-FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
-{
- if ( FCK.Status != FCK_STATUS_COMPLETE )
- return ;
-
- var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;
- var aItems = oToolbarSet.ItemsWysiwygOnly ;
-
- if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
- {
- // Enable all buttons that are available on WYSIWYG mode only.
- for ( var i = 0 ; i < aItems.length ; i++ )
- aItems[i].Enable() ;
-
- // Refresh the buttons state.
- oToolbarSet.RefreshItemsState( editorInstance ) ;
- }
- else
- {
- // Refresh the buttons state.
- oToolbarSet.RefreshItemsState( editorInstance ) ;
-
- // Disable all buttons that are available on WYSIWYG mode only.
- for ( var j = 0 ; j < aItems.length ; j++ )
- aItems[j].Disable() ;
- }
-}
-
-FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
-{
-
- var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;
-
- for ( var i = 0 ; i < aItems.length ; i++ )
- aItems[i].RefreshState() ;
-}
diff --git a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fcktools.js b/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fcktools.js
deleted file mode 100755
index bd8033f30..000000000
--- a/vendor/plugins/fckeditor/public/javascripts/fckeditor/editor/_source/internals/fcktools.js
+++ /dev/null
@@ -1,740 +0,0 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- * - GNU General Public License Version 2 or later (the "GPL")
- * http://www.gnu.org/licenses/gpl.html
- *
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- * http://www.gnu.org/licenses/lgpl.html
- *
- * - Mozilla Public License Version 1.1 or later (the "MPL")
- * http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Utility functions.
- */
-
-var FCKTools = new Object() ;
-
-FCKTools.CreateBogusBR = function( targetDocument )
-{
- var eBR = targetDocument.createElement( 'br' ) ;
-// eBR.setAttribute( '_moz_editor_bogus_node', 'TRUE' ) ;
- eBR.setAttribute( 'type', '_moz' ) ;
- return eBR ;
-}
-
-/**
- * Fixes relative URL entries defined inside CSS styles by appending a prefix
- * to them.
- * @param (String) cssStyles The CSS styles definition possibly containing url()
- * paths.
- * @param (String) urlFixPrefix The prefix to append to relative URLs.
- */
-FCKTools.FixCssUrls = function( urlFixPrefix, cssStyles )
-{
- if ( !urlFixPrefix || urlFixPrefix.length == 0 )
- return cssStyles ;
-
- return cssStyles.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g, function( match, opener, path, closer )
- {
- if ( /^\/|^\w?:/.test( path ) )
- return match ;
- else
- return 'url(' + opener + urlFixPrefix + path + closer + ')' ;
- } ) ;
-}
-
-FCKTools._GetUrlFixedCss = function( cssStyles, urlFixPrefix )
-{
- var match = cssStyles.match( /^([^|]+)\|([\s\S]*)/ ) ;
-
- if ( match )
- return FCKTools.FixCssUrls( match[1], match[2] ) ;
- else
- return cssStyles ;
-}
-
-/**
- * Appends a or
-
-
-
-
-