47755 (588501), страница 13
Текст из файла (страница 13)
# Основной контроллер портала
class MainController < ApplicationController
# Редирект на главную страницу
def index
render :action => 'logo'
end
# Главная страница
def logo
end
# Старая страница
def main
render :action => 'logo'
end
# Показ партий в онлайн режиме (трансляции)
def online
@online_games = CurrentGame.find :all
end
# Показ партий в оффлайн режиме (уже закончившиеся)
def offline
end
# Напоминание при потере пароля или логина
def remind
end
# Вход в личный кабинет пользователя
def enter
unless session[:user_id].nil?
redirect_to "/users/room/#{session[:user_id]}"
end
end
# Показ трансляции
def game
unless params[:id].nil?
@game = Game.find params[:id]
else
render :action => 'logo'
end
end
# Возвращает текст партии в условленном формате
def game_moves
@game = Game.find(params[:id])
render_text @game.moves
end
# Авторизация
def login
session[:user_id] = nil
user = User.authenticate(params[:login], params[:password])
if user.nil?
redirect_to :action => 'enter'
else
session[:user_id] = user.id
redirect_to "/users/room/#{user.id}"
end
end
# Выход пользователя
def unlogin
session[:user_id] = nil
redirect_to :action => 'logo'
end
# Переход к регистрации
def register
redirect_to '/users/new'
end
end
cities_controller.rb
---
class CitiesController < ApplicationController
layout 'main'
scaffold :cities
end
clock_reglaments_controller.rb
---
class ClockReglamentsController < ApplicationController
layout 'main'
scaffold :clock_reglament
end
countries_controller.rb
---
class CountriesController < ApplicationController
layout 'main'
scaffold :countries
end
game_infos_controller.rb
---
class GameInfosController < ApplicationController
layout 'main'
scaffold :game_info
end
games_controller.rb
---
class GamesController < ApplicationController
layout 'main'
scaffold :game
end
moves_controller.rb
---
class MovesController < ApplicationController
layout 'main'
scaffold :move
end
players_controller.rb
---
class PlayersController < ApplicationController
layout 'main'
scaffold :player
end
tournament_views_controller.rb
---
class TournamentViewsController < ApplicationController
layout 'main'
scaffold :tournament_view
end
tournaments_controller.rb
---
class TournamentsController < ApplicationController
layout 'main'
scaffold :tournament
def index
render :action => 'list'
end
end
users_controller.rb
---
class UsersController < ApplicationController
layout 'main'
scaffold :users
def index
render :action => 'room'
end
def room
end
end
Помощники (helper)
main_helper.rb
---
module MainHelper
def print_current_tournament
html = ""
Tournament.find_all_by_status('open').each do |tournament|
city = tournament.city_id.nil? ? nil : City.find(tournament.city_id)
html << "
html << "
html << "
html << "
html << ""
end
html
end
def render_game_info
"Тестовая партия из тестового турнира"
end
def render_moves
moves = ""
moves = "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += "
moves += image_tag('go_begin.jpg', :id => 'go_begin', :onclick => 'goBegin();'), :onmouseover => 'new Effect.Scale("go_begin", 110)'), :onmouseout => 'new Effect.Scale("go_begin", 90)') + ' '
moves += image_tag('go_prev.jpg', :id => 'go_prev', :onclick => 'goPrev();') :onmouseover => 'new Effect.Scale("go_prev", 110)', :onmouseout => 'new Effect.Scale("go_prev", 90)') + ' '
moves += image_tag('go_refresh.jpg', :id => 'go_refresh', :onclick => 'goRefresh();') :onmouseover => 'new Effect.Scale("go_refresh", 110)', :onmouseout => 'new Effect.Scale("go_refresh", 90)') + ' '
moves += image_tag('go_next.jpg', :id => 'go_next', :onclick => 'goNext();'):onmouseover => 'new Effect.Scale("go_next", 110)', :onmouseout => 'new Effect.Scale("go_next", 90)') + ' '
moves += image_tag('go_end.jpg', :id => 'go_end', :onclick => 'goEnd();')#:onmouseover => 'new Effect.Scale("go_end", 110)', :onmouseout => 'new Effect.Scale("go_end", 90)') + ' '
moves += ""
moves += "";
moves
end
def render_board
return "
"
end
def render_result
"1/2 - 1/2"
end
def render_black_time
"-:--:--"
end
def render_white_time
"-:--:--"
end
end
Представление (view)
layout/main.rhtml
---
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Стартовая страница:
'42x25', :border => 0, :alt => 'http://dgtprojects.com'), 'http://dgtprojects.com') %>
Сервер трансляции шахматных партий
'12x12', :border => 0), '/main/index') %>
'12x12', :border => 0), '') %>
'12x12', :border => 0), '')%>
main/enter.rhtml
---
main/game.rhtml
---
'moves', :url => { :action => 'game_moves', :id => @game.id } %>
main/logo.rhtml
---
'Шахматный портал rDGT', :width => '400px', :height => '280px' %>
'online' }%>
'offline' }%>
'enter' } %>
main/online.rhtml
---
Модель (model)
---
class Cities < ActiveRecord::Base
end
class City < ActiveRecord::Base
end
class ClockReglament < ActiveRecord::Base
end
class Country < ActiveRecord::Base
end
class CurrentGame < ActiveRecord::Base
def init
@game = Game.find(self.game_id) if @game.nil?
end
def tournament
init
@game.tournament
end
def white
init
@game.white_player
end
def black
init
@game.black_player
end
end
class Game < ActiveRecord::Base
def moves
result = ""
@moves = Move.find_all_by_game_id self.id
@moves.sort { |movea, moveb| movea.number moveb.number }.each do |move|
result += move.to_s + "|"
end
result
end
def tournament
info = GameInfo.find self.game_info_id unless self.game_info_id.nil?
t = Tournament.find info.tournament_id
end
def white_player
player = Player.new
player.id= 1
player.first_name = "Иван"
player.second_name = "Рыков"
player
end
def black_player
player = Player.new
player.id= 1
player.first_name = "Сергей"
player.second_name = "Бедарев"
player
end
end
class GameInfo < ActiveRecord::Base
end
class LastMove < ActiveRecord::Base
end
class Move < ActiveRecord::Base
def to_s
((self.white_move.nil? or self.white_move == "") ? "******" : self.white_move) +
((self.black_move.nil? or self.black_move == "") ? "******" : self.black_move) + ":" +
(self.white_clock.nil? ? "" : self.white_clock) + "-" + (self.black_clock.nil? ? "" : self.black_clock)
end
end
class Player < ActiveRecord::Base
def full_name
return self.second_name + " " + self.first_name
end
def to_s
full_name
end
end
class Tournament < ActiveRecord::Base
def to_s
self.name
end
end
class TournamentView < ActiveRecord::Base
end
require 'digest/md5'
class User < ActiveRecord::Base
validates_presence_of :login
validates_uniqueness_of :login
def self.authenticate(login, password)
user = User.find_by_name(login)
if user
expected_password = encrypted_password(password)
if user.password != expected_password
user = nil
end
end
user
end
def self.encrypted_password(password)
Digest::MD5.hexdigest("sdjkvkjeho2ijij2o3d2kn3dl2kn3dn23dkn2ld3n" + password)
end
end
Миграция (db migration)
---
ActiveRecord::Schema.define(:version => 12) do
create_table "cities", :force => true do |t|
t.column "name", :string, :limit => 30
t.column "country_id", :integer
t.column "description", :text
t.column "image", :binary
end
create_table "clock_reglaments", :force => true do |t|
t.column "title", :string, :limit => 30
t.column "total_time", :integer
t.column "add", :boolean, :limit => nil, :default => false
t.column "add_time", :integer, :default => 0
t.column "desciprion", :text
end
create_table "countries", :force => true do |t|
t.column "name", :string, :limit => 30
t.column "code", :string, :limit => 30
t.column "image", :binary
t.column "description", :text
end
create_table "current_games", :force => true do |t|
t.column "game_id", :integer
t.column "begin", :datetime
t.column "end", :datetime
t.column "description", :text
end
create_table "game_infos", :force => true do |t|
t.column "game_id", :integer
t.column "white_id", :integer
t.column "black_id", :integer
t.column "tournament_id", :integer
t.column "result", :integer
t.column "clock_reglament_id", :integer
t.column "round", :integer
t.column "debut_code", :string, :limit => 30
t.column "description", :text
t.column "status", :string, :limit => 30
end
create_table "games", :force => true do |t|
t.column "game_info_id", :integer
t.column "begin", :datetime
t.column "end", :datetime
t.column "desciption", :text
end
create_table "last_moves", :force => true do |t|
t.column "move_id", :integer
t.column "move_time", :datetime
end
create_table "moves", :force => true do |t|















