######################################################################### # ######################################################################### def ok_to_start # DcPermission.all.delete # DcPolicyRole.all.delete # DcUser.all.delete
if DcPermission.all.to_a.size > 0 p 'DcPermission (Permissions) collection is not empty! Aborting.' return false end if DcPolicyRole.all.to_a.size > 0 p 'DcUserRole (User roles) collection is not empty! Aborting.' return false end if DcUser.all.to_a.size > 0 p 'DcUser (Users) collection is not empty! Aborting.' return false end true
end
######################################################################### # ######################################################################### def read_input(message, default=”)
p "#{message} " response = STDIN.gets.chomp response.blank? ? default : response end
######################################################################## # ######################################################################## def create_superadmin
begin username = read_input('Enter username for superadmin role:') p 'Username should be at least 6 character long' if username.size < 6 end while username.size < 6 begin password = read_input("Enter password for #{username} user :") p 'Password should be at least 8 character long' if password.size < 8 end while password.size < 8
# Guest role first
role = DcPolicyRole.new role.name = 'guest' role.system_name = 'guest' role.save
# Superadmin role
sa = DcPolicyRole.new sa.name = 'superadmin' sa.system_name = 'superadmin' sa.save
# Superadmin user
usr = DcUser.new usr.username = username usr.password = password usr.password_confirmation = password usr.first_name = 'superadmin' usr.save
# user role
user_role = DcUserRole.new user_role.dc_policy_role_id = sa._id usr.dc_user_roles << user_role
# cmsedit permission
permission = DcPermission.new permission.table_name = 'Default permission' permission.is_default = true permission.save
#
r = DcPolicyRule.new r.dc_policy_role_id = sa._id r.permission = DcPermission::SUPERADMIN permission.dc_policy_rules << r
# create login poll
poll = DcPoll.new poll.name = 'login' poll.display = 'td' poll.operation = 'link' poll.parameters = '/dc_common/process_login' poll.title = 'Autocreated login form' poll.save
#
i = poll.dc_poll_items.new i.name = 'username' i.size = 15 i.text = 'Username' i.type = 'text_field' i.save
#
i = poll.dc_poll_items.new i.name = 'password' i.size = 15 i.text = 'Password' i.type = 'password_field' i.save
#
i = poll.dc_poll_items.new i.name = 'send' i.text = 'Login' i.type = 'submit_tag' i.save
#
p "Superadmin user created. Remember login data #{username}/#{password}"
end
######################################################################## # Initial database seed ######################################################################## def seed # DcSite.all.delete # DcSimpleMenu.all.delete # DcPage.all.delete # DcPiece.all.delete
if DcSite.all.size > 0 p 'DcSite (Sites) collection is not empty! Aborting.' return end
#
if (sa = DcPolicyRole.find_by(system_name: 'superadmin')).nil? p 'superadmin role not defined! Aborting.' return end
#
if (guest = DcPolicyRole.find_by(system_name: 'guest')).nil? p 'guest role not defined! Aborting.' return end
# Test site document points to real site document
site = DcSite.new( name: 'test', alias_for: 'www.mysite.com') site.save
# Site document
site = DcSite.new( name: 'www.mysite.com', homepage_link: "home", menu_class: "DcSimpleMenu", menu_name: "site-menu", page_class: "DcPage", page_table: "dc_page", files_directory: "files", settings: "ckeditor:\n config_file: /files/ck_config.js\n css_file: /files/ck_css.css\n", site_layout: "content")
# this should end in application css file
site.css =<<EOT
site-top, site-main, site-bottom, site-menu { width: 960px; margin: 0px auto; padding-top: 5px;}
EOT
site.save
# Default site policy
policy = DcPolicy.new( description: "Default policy", is_default: true, message: "Access denied.", name: "Default policy") site.dc_policies << policy
# Policy rules. Administrator can edit guest can view
rule = DcPolicyRule.new( dc_policy_role_id: sa._id, permission: DcPermission::CAN_EDIT) policy.dc_policy_rules << rule rule = DcPolicyRule.new( dc_policy_role_id: guest._id, permission: DcPermission::CAN_VIEW) policy.dc_policy_rules << rule
# Design document
design = DcDesign.new(description: 'Simple page') design.body =<<EOT
<div id=“site”>
<div id="site-top"> <a href="/">SITE LOGO</a> </div> <div id="site-menu"> <%= dc_render(:dc_simple_menu, method: 'as_table') %>\ </div> <div id="site-main"> <%= dc_render(:dc_page) %> </div> <div id="site-bottom"> <%= dc_render(:dc_piece, name: 'site-bottom') %> </div>
</div> EOT
design.save
# Page document
page = DcPage.new( subject: 'Home page', subject_link: 'home', dc_design_id: design._id, dc_site_id: site._id, publish_date: Time.now, body: '<p>First page data</p>' ) page.save
# Site bottom document
bottom = DcPiece.new( name: 'site-bottom', description: 'Site bottom document', site_id: site._id, body: '<p>(C)opyright by ME</p>' ) bottom.save
# Menu
menu = DcSimpleMenu.new( name: "site-menu", description: "Menu for my Site", ) menu.css =<<EOT
.site-menu {
width:500px; margin: 0 auto; border-spacing: 0px; font-weight: bold; border: none;
}
.td-site-menu-item {
font-size: 18px; background-color: #fff; border-left: 20px solid #fff; border-right: 20px solid #fff; padding: 10px; text-align: center; border-radius: 1px; white-space: nowrap
}
.td-site-menu-item:hover {
background-color: #000;
}
.td-site-menu-selected {
font-size: 18px; background-color: #000; border-left: 20px solid white; border-right: 20px solid white; padding: 10px; text-align: center; white-space: nowrap;
}
.site-menu a {
color: #000;
}
.td-site-menu-item:hover a, .td-site-menu-selected a {
color: #fff;
}
EOT
menu.save
# Items
item = DcSimpleMenuItem.new(caption: 'Home', link: 'home', order: 10) menu.dc_simple_menu_items << item
# This menu item will be selected when page is displayed
page.menu_id= item._id page.save item = DcSimpleMenuItem.new(caption: 'Menu item 2', link: 'menu-item-2', order: 20) menu.dc_simple_menu_items << item item = DcSimpleMenuItem.new(caption: 'My site', link: 'http://www.drgcms.org', target: '_blank', order: 30) menu.dc_simple_menu_items << item p 'Seed data created succesfully.'
end
######################################################################### # ######################################################################### namespace :drg_cms do
desc "At the beginning god created superadmin" task :at_the_beginning => :environment do if ok_to_start create_superadmin end end desc "Seed initial data" task :seed => :environment do seed end
end