Changeset 1846
- Timestamp:
- May 13, 2011, 6:42:42 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 7 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/controllers/generic/installation/SetupController.groovy
r1653 r1846 4 4 import dbnp.authentication.SecUser 5 5 import org.codehaus.groovy.grails.commons.ConfigurationHolder 6 import groovy.sql.Sql 6 7 7 8 /** … … 56 57 // get configuration 57 58 def config = ConfigurationHolder.config 58 println config.dump()59 println config.dataSource.dump()60 59 61 60 // define variables in the flow scope which is availabe … … 66 65 // wizard tabs. Also see common/_tabs.gsp for more information 67 66 flow.page = 0 68 //flow.config = ConfigurationHolder.config69 67 flow.pages = [ 70 68 [title: 'Configuration Location'], 71 69 [title: 'Database'], 72 [title: 'Page Three'], 73 [title: 'Page Four'], 70 [title: 'Email / URL'], 71 [title: 'Summary'], 72 [title: 'Apache Configuration'], 74 73 [title: 'Done'] 75 74 ] … … 108 107 onRender { 109 108 // Grom a development message 110 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_ database.gsp".grom()109 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_configuration.gsp".grom() 111 110 112 111 flow.page = 1 113 112 114 // config 115 def configPath = new File("/etc/${meta(name: 'app.name')}/") 116 def configFile = new File("/etc/${meta(name: 'app.name')}/${grails.util.GrailsUtil.environment}.properties") 117 118 // add configuration information to the flow scope 119 flow.configInfo = [ 120 path: configPath, 121 pathExists: configPath.exists(), 122 pathCanRead: configPath.canRead(), 123 pathCanWrite: configPath.canWrite(), 124 pathSummary: (configPath.exists() && configPath.canRead() && configPath.canWrite()), 125 file: configFile, 126 fileExists: configFile.exists(), 127 fileCanRead: configFile.canRead(), 128 fileCanWrite: configFile.canWrite(), 129 fileSummary: (configFile.exists() && configFile.canRead() && configFile.canWrite()) 130 ] 113 // try to load config 114 loadPropertiesFile(flow) 131 115 132 116 success() 133 117 } 134 118 on("next") { 135 // put your bussiness logic (if applicable) in here136 }.to " pageTwo"119 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 120 }.to "database" 137 121 on("toPageTwo") { 138 // put your bussiness logic (if applicable) in here139 }.to " pageTwo"122 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 123 }.to "database" 140 124 on("toPageThree") { 141 // put your bussiness logic (if applicable) in here142 }.to " pageThree"125 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 126 }.to "email" 143 127 on("toPageFour") { 144 // put your bussiness logic (if applicable) in here145 }.to " pageFour"128 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 129 }.to "summary" 146 130 on("toPageFive") { 147 // put your bussiness logic (if applicable) in here 148 flow.page = 5 131 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 132 }.to "apache" 133 on("toPageSix") { 134 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { 135 flow.page = 6 136 success() 137 } else { 138 error() 139 } 149 140 }.to "save" 150 141 on("toConfigurationPath").to "configurationPath" … … 152 143 } 153 144 154 // second wizard page 145 // create the configuration path 146 configurationPath { 147 action { 148 // does the path exist? 149 if (!flow.configInfo.pathExists) { 150 // no, attempt to create it 151 if (flow.configInfo.path.mkdirs()) { 152 // Grom a development message 153 if (pluginManager.getGrailsPlugin('grom')) ".created ${flow.configInfo.path}".grom() 154 155 // success! 156 success() 157 } else { 158 error() 159 } 160 } else { 161 error() 162 } 163 } 164 on("success").to "configuration" 165 on("error").to "configurationPathError" 166 } 167 168 // show manual procedure for creating configuration path 169 configurationPathError { 170 render(view: "_configuration_path_error") 171 onRender { 172 // Grom a development message 173 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_configuration_path_error.gsp".grom() 174 175 flow.page = 1 176 } 177 on("next").to "configuration" 178 } 179 180 // create the configuration file 181 configurationFile { 182 action { 183 // does the file exist? 184 if (!flow.configInfo.fileExists) { 185 // no, attempt to create it 186 try { 187 flow.configInfo.file << "# ${meta(name: 'app.name')} ${grails.util.GrailsUtil.environment} configuration\n" 188 flow.configInfo.file << "#\n" 189 flow.configInfo.file << "# \$Author\$\n" 190 flow.configInfo.file << "# \$Date\$\n" 191 flow.configInfo.file << "# \$Rev\$\n" 192 193 // grom debug message 194 if (pluginManager.getGrailsPlugin('grom')) ".created ${flow.configInfo.file}".grom() 195 196 // success! 197 success() 198 } catch (Exception e) { 199 error() 200 } 201 } else { 202 error() 203 } 204 } 205 on("success").to "configuration" 206 on("error").to "configurationFileError" 207 } 208 209 // show manual procedure for creating configuration path 210 configurationFileError { 211 render(view: "_configuration_file_error") 212 onRender { 213 // Grom a development message 214 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_configuration_file_error.gsp".grom() 215 216 flow.page = 1 217 } 218 on("next").to "configuration" 219 } 220 221 // database page 155 222 database { 156 223 render(view: "_database") 157 224 onRender { 158 225 // Grom a development message 159 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_ page_two.gsp".grom()226 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_database.gsp".grom() 160 227 161 228 flow.page = 2 162 success() 163 } 164 on("next").to "pageThree" 165 on("previous").to "pageOne" 166 on("toPageOne").to "pageOne" 167 on("toPageThree").to "pageThree" 168 on("toPageFour").to "pageFour" 229 230 success() 231 } 232 on("next") { 233 // store form values 234 databasePage(flow, flash, params) ? success() : error() 235 }.to "email" 236 on("previous") { 237 // store form values 238 databasePage(flow, flash, params) ? success() : error() 239 }.to "configuration" 240 on("toPageOne") { 241 // store form values 242 databasePage(flow, flash, params) ? success() : error() 243 }.to "configuration" 244 on("toPageThree") { 245 // store form values 246 databasePage(flow, flash, params) ? success() : error() 247 }.to "email" 248 on("toPageFour") { 249 // store form values 250 databasePage(flow, flash, params) ? success() : error() 251 }.to "summary" 169 252 on("toPageFive") { 170 flow.page = 5 171 }.to "save" 172 } 173 174 // second wizard page 175 pageThree { 176 render(view: "_page_three") 177 onRender { 178 // Grom a development message 179 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_page_three.gsp".grom() 253 // store form values 254 databasePage(flow, flash, params) ? success() : error() 255 }.to "apache" 256 on("toPageSix") { 257 // store form values 258 if (databasePage(flow, flash, params)) { 259 flow.page = 6 260 success() 261 } else { 262 error() 263 } 264 }.to "save" 265 } 266 267 // email configuration page 268 email { 269 render(view: "_email") 270 onRender { 271 // Grom a development message 272 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_email.gsp".grom() 180 273 181 274 flow.page = 3 182 275 success() 183 276 } 184 on("next").to "pageFour" 185 on("previous").to "pageTwo" 186 on("toPageOne").to "pageOne" 187 on("toPageTwo").to "pageTwo" 188 on("toPageFour").to "pageFour" 277 on("next") { 278 emailPage(flow, flash, params) ? success() : error() 279 }.to "summary" 280 on("previous") { 281 emailPage(flow, flash, params) ? success() : error() 282 }.to "database" 283 on("toPageOne") { 284 emailPage(flow, flash, params) ? success() : error() 285 }.to "configuration" 286 on("toPageTwo") { 287 emailPage(flow, flash, params) ? success() : error() 288 }.to "database" 289 on("toPageFour") { 290 emailPage(flow, flash, params) ? success() : error() 291 }.to "summary" 189 292 on("toPageFive") { 190 flow.page = 5 191 }.to "save" 192 } 193 194 // second wizard page 195 pageFour { 196 render(view: "_page_four") 197 onRender { 198 // Grom a development message 199 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_page_four.gsp".grom() 293 emailPage(flow, flash, params) ? success() : error() 294 }.to "apache" 295 on("toPageSix") { 296 if (emailPage(flow, flash, params)) { 297 flow.page = 6 298 success() 299 } else { 300 error() 301 } 302 }.to "save" 303 } 304 305 // summary page 306 summary { 307 render(view: "_summary") 308 onRender { 309 // Grom a development message 310 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_summary.gsp".grom() 311 312 // write properties file 313 writePropertiesFile(flow) 200 314 201 315 flow.page = 4 … … 204 318 on("next") { 205 319 // put some logic in here 320 flow.page = 6 321 }.to "save" 322 on("previous").to "pageThree" 323 on("toPageOne").to "configuration" 324 on("toPageTwo").to "database" 325 on("toPageThree").to "email" 326 on("toPageFive").to "apache" 327 on("toPageSix") { 328 flow.page = 6 329 }.to "save" 330 } 331 332 // apache page 333 apache { 334 render(view: "_apache") 335 onRender { 336 // Grom a development message 337 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_apache.gsp".grom() 338 206 339 flow.page = 5 340 341 flash.context= org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().contextPath 342 flash.domain = flow.configInfo.properties.getProperty('grails.serverURL').replaceFirst(/http:\/\//,"").split(":|/").first() 343 344 success() 345 } 346 on("next") { 347 // put some logic in here 348 flow.page = 6 207 349 }.to "save" 208 350 on("previous").to "pageThree" 209 on("toPageOne").to "pageOne" 210 on("toPageTwo").to "pageTwo" 211 on("toPageThree").to "pageThree" 212 on("toPageFive") { 213 flow.page = 5 351 on("toPageOne").to "configuration" 352 on("toPageTwo").to "database" 353 on("toPageThree").to "email" 354 on("toPageFour").to "summary" 355 on("toPageSix") { 356 flow.page = 6 214 357 }.to "save" 215 358 } … … 252 395 on("next").to "save" 253 396 on("previous").to "pageFour" 254 on("toPageOne").to "pageOne" 255 on("toPageTwo").to "pageTwo" 256 on("toPageThree").to "pageThree" 257 on("toPageFour").to "pageFour" 258 on("toPageFive").to "save" 397 on("toPageOne").to "configuration" 398 on("toPageTwo").to "database" 399 on("toPageThree").to "email" 400 on("toPageFour").to "summary" 401 on("toPageFive").to "apache" 402 on("toPageSix").to "save" 259 403 260 404 } … … 271 415 } 272 416 } 417 418 /** 419 * handle database configuration 420 * 421 * @param Map LocalAttributeMap (the flow scope) 422 * @param Map localAttributeMap (the flash scope) 423 * @param Map GrailsParameterMap (the flow parameters = form data) 424 * @returns boolean 425 */ 426 def databasePage(flow, flash, params) { 427 // update database properties 428 params.dataSource.each { name, value -> 429 flow.configInfo.properties.setProperty("dataSource.${name}", value) 430 } 431 432 // try to connect to the database 433 try { 434 def sql = Sql.newInstance( 435 flow.configInfo.properties.getProperty('dataSource.url'), 436 flow.configInfo.properties.getProperty('dataSource.username'), 437 flow.configInfo.properties.getProperty('dataSource.password'), 438 flow.configInfo.properties.getProperty('dataSource.driverClassName') 439 ) 440 441 writePropertiesFile(flow) 442 443 flash.connection=true 444 } catch (Exception e) { 445 flash.connection=false 446 } 447 448 return flash.connection 449 } 450 451 /** 452 * handle email and url configuration 453 * 454 * @param Map LocalAttributeMap (the flow scope) 455 * @param Map localAttributeMap (the flash scope) 456 * @param Map GrailsParameterMap (the flow parameters = form data) 457 * @returns boolean 458 */ 459 def emailPage(flow, flash, params) { 460 // update properties 461 flow.configInfo.properties.setProperty('grails.plugins.springsecurity.ui.forgotPassword.emailFrom', params['grails.plugins.springsecurity.ui.forgotPassword.emailFrom']) 462 flow.configInfo.properties.setProperty('grails.serverURL', params['grails.serverURL']) 463 464 writePropertiesFile(flow) 465 466 return true 467 } 468 469 /** 470 * load the configuration properties 471 * 472 * @param flow 473 * @return 474 */ 475 def loadPropertiesFile(flow) { 476 // config 477 def configPath = new File("${System.getProperty("user.home")}/etc/${meta(name: 'app.name')}/") 478 def configFile = new File("${System.getProperty("user.home")}/etc/${meta(name: 'app.name')}/${grails.util.GrailsUtil.environment}.properties") 479 480 // add configuration information to the flow scope 481 flow.configInfo = [ 482 path: configPath, 483 pathExists: configPath.exists(), 484 pathCanRead: configPath.canRead(), 485 pathCanWrite: configPath.canWrite(), 486 pathSummary: (configPath.exists() && configPath.canRead() && configPath.canWrite()), 487 file: configFile, 488 fileExists: configFile.exists(), 489 fileCanRead: configFile.canRead(), 490 fileCanWrite: configFile.canWrite(), 491 fileSummary: (configFile.exists() && configFile.canRead() && configFile.canWrite()), 492 properties: null 493 ] 494 495 // parse properties 496 if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { 497 def file = new FileInputStream(flow.configInfo.file.toString()) 498 def properties = new Properties() 499 properties.load(file) 500 501 // and store in flowscope 502 flow.configInfo.properties = properties 503 } 504 } 505 506 /** 507 * save the configuration properties 508 * 509 * @param flow 510 * @return 511 */ 512 def writePropertiesFile(flow) { 513 // write properties 514 def file = new FileOutputStream(flow.configInfo.file.toString()) 515 flow.configInfo.properties.store(file, " ${meta(name: 'app.name')} ${grails.util.GrailsUtil.environment} configuration\n#\n# \$Author\$\n# \$Date\$\n# \$Rev\$\n") 516 517 // and load them back into the flow 518 loadPropertiesFile(flow) 519 } 273 520 } -
trunk/grails-app/views/setup/common/_on_page.gsp
r1648 r1846 24 24 %> 25 25 <script type="text/javascript"> 26 function onPage() { 27 if (console) { 28 console.log('calling onPage() which can be used to attach generic javascript handlers to DOM elements of a rendered page / partial'); 29 } 30 } 26 function onPage() { 27 if (console) { 28 attachHelpTooltips(); 29 30 // syntax highlighting 31 function path() { 32 var args = arguments,result = []; 33 for(var i = 0; i < args.length; i++) result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/')); 34 return result 35 } 36 37 SyntaxHighlighter.autoloader.apply(null, path( 38 'applescript @shBrushAppleScript.js', 39 'bash shell @shBrushBash.js', 40 'css @shBrushCss.js', 41 'diff patch pas @shBrushDiff.js', 42 'groovy @shBrushGroovy.js', 43 'java @shBrushJava.js', 44 'jfx javafx @shBrushJavaFX.js', 45 'js jscript javascript @shBrushJScript.js', 46 'php @shBrushPhp.js', 47 'text plain @shBrushPlain.js', 48 'py python @shBrushPython.js', 49 'sql @shBrushSql.js', 50 'xml xhtml xslt html @shBrushXml.js' 51 )); 52 SyntaxHighlighter.all(); 53 } 54 } 31 55 </script> 32 56 -
trunk/grails-app/views/setup/index.gsp
r1651 r1846 15 15 <head> 16 16 <meta name="layout" content="main"/> 17 <g:javascript library="jquery" plugin="jquery"/>18 17 <link rel="stylesheet" href="${resource(dir: 'css', file: 'ajaxflow.css')}"/> 19 18 <link rel="stylesheet" href="${resource(dir: 'css', file: 'setupwizard.css')}"/> 19 <link rel="stylesheet" href="${resource(dir: 'css', file: 'templates.css')}"/> 20 <link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" /> 21 <link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" /> 22 <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js"></script> 23 <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js"></script> 24 <script type="text/javascript" src="${resource(dir: 'js', file: 'tooltips.js', plugin: 'gdt')}"></script> 25 <script type="text/javascript" src="${resource(dir: 'js', file: 'jquery.qtip-1.0.0-rc3.js', plugin: 'gdt')}"></script> 20 26 </head> 21 27 <body> -
trunk/grails-app/views/setup/pages/_configuration_location.gsp
r1651 r1846 4 4 * 5 5 * @author Jeroen Wesbeek 6 * @since 20110 3186 * @since 20110513 7 7 * 8 8 * Revision information: … … 15 15 <h1>Configuration file</h1> 16 16 17 <font color="red"><b><i>NOTE: this wizard is in development!</i></b></font> 17 <g:if test="${configInfo.pathSummary && configInfo.fileSummary}"> 18 <span class="info"> 19 <span class="okay">The configuration file and path are okay!</span> 20 Click next to continue... 21 </span> 22 </g:if><g:else> 23 <span class="info"> 24 <span class="warning"> 25 You need to fix the configuration 26 <g:if test="${!configInfo.pathSummary && !configInfo.fileSummary}">path and file</g:if> 27 <g:elseif test="${!configInfo.pathSummary}">path</g:elseif> 28 <g:elseif test="${!configInfo.fileSummary}">file</g:elseif> 29 in order to continue 30 </span> 31 The application is currently using the default ${grails.util.GrailsUtil.environment} configuration. In the following 32 steps you will configure the application to use a specific database and (if required) insert default templates and 33 data. 34 </span> 35 </g:else> 18 36 19 <g:if test="${configInfo.pathSummary && configInfo.fileSummary}">20 OK!21 </g:if>22 <g:else>23 37 <div class="checklist"> 24 38 <ul class="header"> … … 43 57 </ul> 44 58 </div> 45 </g:else>46 59 47 60 </af:page> -
trunk/grails-app/views/setup/pages/_database.gsp
r1651 r1846 13 13 %> 14 14 <af:page> 15 <h1>Database configuration</h1>15 <h1>Database configuration</h1> 16 16 17 <af:selectElement name="dataSource.driverClassName" description="database type" error="driver" optionKey="name" optionValue="description" from="[[name:'org.postgresql.Driver', description:'PostgreSQL (prefered)'],[name:'org.hsqldb.jdbcDriver', description: 'In memory']]" value="${configInfo?.properties.getProperty('dataSource.driverClassName')}"> 18 Choose the database of choice. Note that while this application in principle supports different database types, it is specifically developer for PostgreSQL. Choosing 19 a different database may result in unexpected issues therefore choosing PostgreSQL here is advisable. 20 Also note that the In Memory database exists only at runtime, which means the database is lost when the application is restarted! 21 </af:selectElement> 22 <af:textFieldElement name="dataSource.url" description="url" error="url" value="${configInfo?.properties.getProperty('dataSource.url')}" style="width: 300px;"> 23 The URL of your database, example » jdbc:postgresql://localhost:5432/gscf-ci 24 </af:textFieldElement> 25 <af:textFieldElement name="dataSource.username" description="username" error="username" value="${configInfo?.properties.getProperty('dataSource.username')}" style="width: 100px;"> 26 The username for this database 27 </af:textFieldElement> 28 <af:textFieldElement name="dataSource.password" description="password" error="password" value="${configInfo?.properties.getProperty('dataSource.password')}" style="width: 100px;"> 29 The password for this database 30 </af:textFieldElement> 31 <af:selectElement name="dataSource.dbCreate" description="database creation type" error="dbcreate" optionKey="name" optionValue="description" from="[[name:'update', description:'Create/Update the existing database if changes are required (prefered choice)'],[name:'create', description:'Create the database if required, but do not perform updates'],[name:'create-drop', description: 'Drop the exisiting database and create a fresh database']]" value="${configInfo?.properties.getProperty('dataSource.dbCreate')}"> 32 The application is able to automatically create and update your database. Choose what option suites you best. 33 </af:selectElement> 34 35 <g:if test="${connection==false}"> 36 <span class="info"> 37 <span class="error">Could not connect to database</span> 38 Please make sure the database settings are correct 39 <g:if test="${configInfo?.properties.getProperty('dataSource.driverClassName') == 'org.postgresql.Driver'}"> 40 or create the database and database user if you did not yet do so.<br/> 41 42 First, as root, change to user postgres and start the Postgres console: 43 <pre class="brush:plain"> 44 su - postgres 45 psql 46 </pre> 47 48 Then run the following commands: 49 <pre class="brush:plain"> 50 create database "${configInfo?.properties.getProperty('dataSource.url').split("/").last()}"; 51 create user ${configInfo?.properties.getProperty('dataSource.username')} with password '${configInfo?.properties.getProperty('dataSource.password')}'; 52 grant all privileges on database "${configInfo?.properties.getProperty('dataSource.url').split("/").last()}" to ${configInfo?.properties.getProperty('dataSource.username')}; 53 ALTER DATABASE "${configInfo?.properties.getProperty('dataSource.url').split("/").last()}" OWNER TO ${configInfo?.properties.getProperty('dataSource.username')}; 54 </pre> 55 56 When finished, click <i>next</i> to try again. 57 </g:if> 58 </span> 59 </g:if> 17 60 18 61 </af:page> -
trunk/grails-app/views/setup/pages/_email.gsp
r1841 r1846 13 13 %> 14 14 <af:page> 15 <h1>Page Three</h1> 16 <p> 17 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce est erat, lacinia in porttitor sed, egestas sed nunc. Maecenas mi diam, ornare ac pulvinar a, lacinia sit amet diam. In non nulla vel ligula rhoncus venenatis. Cras mauris nunc, bibendum eu vehicula a, varius non dui. Vestibulum sit amet lacus ac sapien condimentum aliquam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ornare ipsum in odio posuere quis fermentum felis convallis. Nullam eleifend posuere sollicitudin. Integer ac augue eget tellus pulvinar molestie. Suspendisse potenti. Mauris at lectus mauris, ornare rutrum quam. Nullam lobortis, sapien eget porttitor euismod, felis est viverra odio, in molestie turpis magna in nibh. Mauris sollicitudin dignissim tincidunt. Ut ornare risus at ante semper rutrum. 18 </p> 19 <p> 20 Suspendisse blandit imperdiet felis at aliquam. Vestibulum non convallis nisl. Sed nec risus urna, nec ultricies elit. Phasellus consectetur quam eget mauris vehicula blandit. Maecenas suscipit magna a felis porta vitae tristique nisi bibendum. Fusce sed sapien justo, at mollis orci. Nullam nisi nunc, fringilla ut pellentesque ultrices, viverra ac lectus. Pellentesque orci quam, tempus aliquet ornare id, pulvinar sed ligula. Etiam fermentum congue sagittis. Praesent dictum faucibus suscipit. Ut cursus convallis mi quis consectetur. Sed vel arcu sit amet neque laoreet blandit et cursus lacus. 21 </p> 15 <h1>Email and URL configuration</h1> 16 17 <span class="info"> 18 <span class="title">Email configuration</span> 19 The application uses the default system mailer, which is probably postfix or sendmail, so you only need to 20 configure what email adress will be used to send out emails to the users. 21 </span> 22 23 <af:textFieldElement name="grails.plugins.springsecurity.ui.forgotPassword.emailFrom" description="from address" error="grails.plugins.springsecurity.ui.forgotPassword.emailFrom" value="${configInfo?.properties.getProperty('grails.plugins.springsecurity.ui.forgotPassword.emailFrom')}" style="width: 300px;"> 24 The from address used for communication to the users. 25 </af:textFieldElement> 26 27 <span class="info"> 28 <span class="title">URL configuration</span> 29 Define the URL the application will be running on. If you would like to run from Apache (preferable) and not directly from Tomcat 30 see the Summary tab for an Apache virtual host configuration example. 31 <li>running directly from tomcat: http://my.url:8080${org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().contextPath}</li> 32 <li>running from Apache or Tomcat at port 80: http://my.url</li> 33 </span> 34 35 <af:textFieldElement name="grails.serverURL" description="serverl url" error="grails.serverURL" value="${configInfo?.properties.getProperty('grails.serverURL')}" style="width: 300px;"> 36 The server URL this application will be served on. 37 </af:textFieldElement> 38 22 39 </af:page> -
trunk/grails-app/views/setup/pages/_final_page.gsp
r1648 r1846 13 13 %> 14 14 <af:page> 15 <h1>Final Page</h1> 16 <p> 17 This concludes the example wizard. You can click <g:link action="index">here</g:link> to restart the wizard. 18 </p> 15 <h1>Final Page</h1> 16 17 This concludes the configuration wizard. Make sure to restart your tomcat container to load the new configuration. 18 After restart you can <g:link controller="assayModule" action="list" class="icon icon_user_add">Manage Your Modules</g:link> 19 (if you have any). 19 20 </af:page> -
trunk/grails-app/views/setup/pages/_summary.gsp
r1841 r1846 4 4 * 5 5 * @author Jeroen Wesbeek 6 * @since 20110 3186 * @since 20110513 7 7 * 8 8 * Revision information: … … 13 13 %> 14 14 <af:page> 15 <h1>Page Four</h1> 16 <p> 17 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae porta justo. Vestibulum vulputate porta orci sed feugiat. In convallis euismod neque in consectetur. Sed nibh eros, venenatis vitae porta sed, fringilla id ante. Vivamus aliquam congue semper. Duis feugiat sapien id erat dignissim congue a eget velit. Suspendisse imperdiet odio ut urna ullamcorper elementum. Morbi et elit lectus. Nulla imperdiet, libero quis faucibus volutpat, mi tellus porta sem, sed facilisis erat augue sit amet massa. Pellentesque rutrum leo arcu. Fusce sit amet venenatis lacus. Cras venenatis nibh eget est malesuada pretium. Suspendisse eget lectus dui. Etiam mauris tortor, tempus a pulvinar sit amet, condimentum at justo. Nulla suscipit augue eu augue ultricies accumsan tincidunt elit mollis. 18 </p> 19 <p> 20 Mauris euismod felis in arcu mattis accumsan. Cras luctus feugiat lectus, ut blandit nisi ullamcorper sit amet. In dapibus tristique justo, nec egestas arcu ullamcorper vitae. Phasellus sagittis pharetra lorem non convallis. Curabitur pulvinar tellus non arcu vestibulum in elementum ante varius. Proin est magna, sollicitudin at dictum ut, gravida at sem. Sed in urna massa. Aliquam et urna ac erat malesuada rutrum tincidunt vitae purus. Ut mollis nisl vel enim condimentum dapibus. Etiam tristique augue ullamcorper sem placerat vitae congue nibh semper. Maecenas in adipiscing purus. Sed sem eros, convallis vel mollis pretium, consectetur sed ligula. Aliquam erat volutpat. Donec aliquet purus eget nunc dapibus in semper magna malesuada. Nunc ornare egestas elementum. Pellentesque vulputate commodo est, vel sagittis libero molestie non. In hac habitasse platea dictumst. Ut pharetra quam quis nunc eleifend quis sodales justo molestie. Nunc eu bibendum lectus. 21 </p> 15 <h1>Summary</h1> 16 17 <span class="info"> 18 <span class="title">New application configuration</span> 19 Congratulations, you just finished setting up and configuring the application. Below you see the configuration 20 file (${configInfo.file}) you have just created. 21 </span> 22 23 Configuration file: ${configInfo.file}<br/> 24 25 26 27 <pre class="brush:plain">${configInfo.file.text}</pre> 28 22 29 </af:page> -
trunk/web-app/css/templates.css
r1565 r1846 7 7 font-size: 10px; 8 8 margin: 10px 0px 10px 0px; 9 } 10 11 .info li { 12 padding-left: 10px; 13 list-style-position: inside; 9 14 } 10 15 … … 57 62 padding-left: 20px; 58 63 background: url(../plugins/famfamfam-1.0.1/images/icons/eye.png) no-repeat center left; 64 } 65 66 .info .okay { 67 color:#006DBA; 68 font-size:14px; 69 font-weight:normal; 70 display: block; 71 margin-bottom: 5px; 72 padding-left: 20px; 73 background: url(../plugins/famfamfam-1.0.1/images/icons/accept.png) no-repeat center left; 59 74 } 60 75
Note: See TracChangeset
for help on using the changeset viewer.