Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: KyleRogers/wedding-app
base: 649fe70a94
...
head fork: KyleRogers/wedding-app
compare: 0d8c469a27
  • 6 commits
  • 19 files changed
  • 0 commit comments
  • 1 contributor
View
18 app/assets/stylesheets/main.less
@@ -32,6 +32,15 @@ body, label, h1, h2, h3, input {
}
}
+#navigation ul {
+ margin-top: 130px;
+}
+
+#navigation ul li {
+ list-style: none;
+ margin: 20px 0;
+}
+
#heading {
margin-bottom: 80px;
}
@@ -39,7 +48,7 @@ body, label, h1, h2, h3, input {
#content {
padding: @default-padding;
margin-left: @left-bar-width;
- width: @total-width - @left-bar-width - 350;
+ width: @total-width - @left-bar-width - 350px;
@media print {
margin-left: 0;
}
@@ -64,6 +73,10 @@ body, label, h1, h2, h3, input {
list-style: circle;
}
+input[type="file"][id="bildDatei"] {
+ width:auto;
+}
+
#footer {
clear: both;
@@ -82,3 +95,6 @@ form .error .help-block, form .error .help-inline {
color: #B94A48;
}
+hr.separator {
+ border-color: -moz-use-text-color -moz-use-text-color @default-color;
+}
View
33 app/controllers/FotoVorfuehrer.scala
@@ -0,0 +1,33 @@
+package controllers
+
+import play.api.mvc.Controller
+import jp.t2v.lab.play2.auth.AuthenticationElement
+
+/**
+ *
+ * @author Stefan Penndorf <stefan@cyphoria.net>
+ */
+object FotoVorfuehrer extends Controller with AuthenticationElement with WeddingAuthConfig {
+
+ def fotoalben = StackAction{ implicit request =>
+ Ok(views.html.fotoalben())
+ }
+
+ def hochladen = StackAction(parse.multipartFormData){ implicit request =>
+ request.body.file("bilddatei").map { picture =>
+// import java.io.File
+// val filename = picture.filename
+// val contentType = picture.contentType
+// picture.ref.moveTo(new File("/tmp/picture"))
+ Redirect(routes.FotoVorfuehrer.fotoalben).flashing(
+ "erfolgsMeldung" -> "Bild erfolgreich zu deinem Album hinzugefügt."
+ )
+ }.getOrElse {
+ Redirect(routes.FotoVorfuehrer.fotoalben).flashing(
+ "fehlerMeldung" -> "Keine Datei ausgewählt."
+ )
+ }
+ }
+
+
+}
View
11 app/model/Fotoalbum.scala
@@ -0,0 +1,11 @@
+package model
+
+import anorm.{NotAssigned, Pk}
+
+/**
+ *
+ * @author Stefan Penndorf <stefan@cyphoria.net>
+ */
+case class Fotoalbum(id: Pk[Long] = NotAssigned) {
+
+}
View
53 app/views/fotoalben.scala.html
@@ -0,0 +1,53 @@
+@()(implicit flash: Flash)
+
+@import helper._
+@import helper.twitterBootstrap._
+
+@main(heading="Fotoalben") {
+<div>
+ <h3>Hochladen</h3>
+
+ Hier kannst du deinem Fotoalbum ein (weiteres) Bild hinzufügen. Das Bild wird dann für alle registrierten Gäste
+ sichtbar.
+
+ @form(action = routes.FotoVorfuehrer.hochladen, 'id -> "fotohochladeformular", 'enctype -> "multipart/form-data") {
+ @if(flash.get("erfolgsMeldung").isDefined) {
+ <div id="erfolgsMeldungen">
+ <ul>
+ <li class="alert-message success">@flash.get("erfolgsMeldung").get</li>
+ </ul>
+ </div>
+ }
+ @if(flash.get("fehlerMeldung").isDefined) {
+ <div id="fehlerMeldungen">
+ <ul>
+ <li class="alert-message error">@flash.get("fehlerMeldung").get</li>
+ </ul>
+ </div>
+ }
+
+ <fieldset>
+ <div class="clearfix">
+ <label for="bilddatei">Bild ausw&auml;hlen:</label>
+ <div class="input">
+ <input type="file" size="50" name="bilddatei" id="bildDatei">
+ </div>
+ </div>
+ </fieldset>
+ <div class="input"><input type="submit" id="starteHochladen" value="Hochladen"/></div>
+ }
+ <hr class="separator" />
+ <h3>Fotoalben</h3>
+ <div>
+ Folgende Benutzer haben bereits ein Fotoalbum angelegt:
+
+ <ul id="fotoalben">
+ <!--<li><a href="mara">Mara (5 Bilder)</a></li>-->
+ </ul>
+
+
+ </div>
+
+</div>
+
+}
View
2  app/views/impressum.scala.html
@@ -1,4 +1,4 @@
-@main(heading="Impressum") {
+@main(heading="Impressum", displayNavigation=false) {
<div id="impressum">
View
2  app/views/index.scala.html
@@ -3,7 +3,7 @@
@import helper._
@import helper.twitterBootstrap._
-@main(heading="Steffi und Stefan heiraten!") {
+@main(heading="Steffi und Stefan heiraten!", displayNavigation=false) {
<div>
<h3>Login</h3>
View
4 app/views/main.scala.html
@@ -1,4 +1,4 @@
-@(heading: String, title: String = "Steffi und Stefan heiraten!")(content: Html)
+@(heading: String, title: String = "Steffi und Stefan heiraten!", displayNavigation: Boolean = true)(content: Html)
@import _root_.modules._
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
@@ -17,7 +17,7 @@
<body>
<div id="page-content">
<div id="top-header"></div>
- <div id="left-bar"></div>
+ <div id="left-bar">@if(displayNavigation){@navigation()}</div>
<div id="content">
<h1 id="heading">@heading</h1>
@content
View
8 app/views/navigation.scala.html
@@ -0,0 +1,8 @@
+<div id="navigation">
+ <ul>
+ <li><a id="nav-startseite" href="@routes.VipArea.viparea">Startseite</a></li>
+ <li><a id="nav-fotoalben" href="@routes.FotoVorfuehrer.fotoalben">Fotoalben</a></li>
+ </ul>
+
+
+</div>
View
2  app/views/registrieren.scala.html
@@ -3,7 +3,7 @@
@import helper._
@import helper.twitterBootstrap._
-@main(heading="Als Hochzeitsgast registrieren") {
+@main(heading="Als Hochzeitsgast registrieren", displayNavigation=false) {
@form(action = routes.Registrierung.registrieren, 'id -> "registrierungsformular") {
@if(!registrierungsFormular.globalErrors.isEmpty) {
View
2  app/views/registrierungsBestaetigung.scala.html
@@ -4,7 +4,7 @@
Hallo @name, du hast dich erfolgreich registriert.
}
-@main(heading=begruessung.toString) {
+@main(heading=begruessung.toString, displayNavigation=false) {
<div>
Jetzt musst du nur noch deine Freischaltung abwarten. Das Hochzeitspaar wird deine Registrierung entgegen
nehmen und dich m&ouml;glichst bald freischalten. Mit deiner Freischaltung erh&auml;lst du auch ein
View
1  conf/messages
@@ -3,6 +3,7 @@ nachname=Nachname
email=E-Mail
passwort=Passwort
loginname=E-Mail
+bilddate=Foto
login.error=Die Zugangsdaten sind falsch oder der Zugang ist nicht freigeschaltet.
email.error.used=Die E-Mail-Adresse wird bereits verwendet.
View
3  conf/routes
@@ -20,7 +20,8 @@ GET /impressum controllers.Application.impressum
# VIP Area
GET /viparea controllers.VipArea.viparea
-
+GET /fotoalben controllers.FotoVorfuehrer.fotoalben
+POST /fotoalben controllers.FotoVorfuehrer.hochladen
# ADMIN Area
GET /gaesteliste @controllers.AdminArea.gaesteliste
View
2  project/Build.scala
@@ -28,7 +28,7 @@ object ApplicationBuild extends Build {
// TEST DEPENDENCIES
- "play" %% "play-test" % "2.1.3" % "test",
+ "play" %% "play-test" % "2.1.2" % "test",
"org.scalatest" %% "scalatest" % "1.9.1" % "test",
"org.scalamock" %% "scalamock-scalatest-support" % "3.0.1" % "test",
"org.scalamock" %% "scalamock-specs2-support" % "3.0.1" % "test",
View
2  project/plugins.sbt
@@ -5,4 +5,4 @@ logLevel := Level.Warn
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
-addSbtPlugin("play" % "sbt-plugin" % "2.1.1")
+addSbtPlugin("play" % "sbt-plugin" % "2.1.2")
View
32 test/net/cyphoria/weddingapp/specification/FotoalbumSchritte.scala
@@ -0,0 +1,32 @@
+package net.cyphoria.weddingapp.specification
+
+import net.cyphoria.weddingapp.specification.infrastructure.{Browser, Schritte}
+import cucumber.api.scala.{DE, ScalaDsl}
+import net.cyphoria.weddingapp.specification.seiten.{VipAreaStartSeite, FotoalbenSeite}
+import org.springframework.core.io.ClassPathResource
+
+/**
+ *
+ * @author Stefan Penndorf <stefan@cyphoria.net>
+ */
+class FotoalbumSchritte extends Schritte with ScalaDsl with DE with Browser {
+
+ val bild = new ClassPathResource("images/mara_und_lukas.jpg")
+
+ def fotoalben = browser.createPage(classOf[FotoalbenSeite])
+ def startseite = browser.createPage(classOf[VipAreaStartSeite])
+
+ Angenommen("""^Kerstin ruft die Fotoalben auf$"""){ () =>
+ startseite isAt()
+ startseite geheZuFotoalbum()
+ }
+
+ Wenn("""^sie ein Bild hochlädt$"""){ () =>
+ fotoalben upload bild
+ }
+
+ Dann("""^wird ein Fotoalbum für sie erstellt$"""){ () =>
+ fotoalben oeffneAlbumVon "Kerstin"
+ }
+
+}
View
45 test/net/cyphoria/weddingapp/specification/seiten/FotoalbenSeite.scala
@@ -0,0 +1,45 @@
+package net.cyphoria.weddingapp.specification.seiten
+
+import org.fluentlenium.core.FluentPage
+import org.scalatest.matchers.ShouldMatchers
+import org.fluentlenium.core.domain.FluentWebElement
+import java.util.concurrent.TimeUnit
+import com.google.common.base.Predicate
+import org.openqa.selenium.WebDriver
+import org.springframework.core.io.Resource
+
+/**
+ *
+ * @author Stefan Penndorf <stefan@cyphoria.net>
+ */
+class FotoalbenSeite extends FluentPage with ShouldMatchers {
+ var bildDatei: FluentWebElement = null
+ var starteHochladen: FluentWebElement = null
+
+ def oeffneAlbumVon(s: String) {
+ $(s"""#fotoalben a[href*="$s"]""").first.click
+
+ $("img").first() should be ('displayed)
+ }
+
+ def upload(s: Resource) {
+ bildDatei.getElement.sendKeys(s.getURI.toString)
+ submit(starteHochladen)
+
+ await().atMost(3, TimeUnit.SECONDS).until(new Predicate[WebDriver] {
+ def apply(p1: WebDriver): Boolean = {
+ val messages: String = $(".alert-message.success").getText
+ messages != null && messages.contains("Bild erfolgreich zu deinem Album hinzugefügt.")
+ }
+ })
+
+ }
+
+ override def getUrl: String = "/fotoalben"
+
+ override def isAt() {
+ title() should be ("Steffi und Stefan heiraten!")
+ $("h1").getText should equal ("Fotoalben")
+ }
+
+}
View
13 test/net/cyphoria/weddingapp/specification/seiten/VipAreaStartSeite.scala
@@ -2,6 +2,7 @@ package net.cyphoria.weddingapp.specification.seiten
import org.fluentlenium.core.FluentPage
import org.scalatest.matchers.ShouldMatchers
+import org.fluentlenium.core.annotation.Page
/**
*
@@ -9,9 +10,19 @@ import org.scalatest.matchers.ShouldMatchers
*/
class VipAreaStartSeite extends FluentPage with ShouldMatchers {
+ @Page
+ var fotoalbum: FotoalbenSeite = null
+
+
+ def geheZuFotoalbum() {
+ $("""#navigation a[id="fotoalbum"]""").click
+ fotoalbum isAt()
+ fotoalbum
+ }
+
override def getUrl: String = "/vip"
- override def isAt {
+ override def isAt() {
title() should be("Steffi und Stefan heiraten!")
$("h1").getText should startWith("Willkommen")
$("body").getText should include("Trauzeugin")
View
BIN  test/resources/images/mara_und_lukas.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
7 test/resources/net/cyphoria/weddingapp/specification/fotoalbum.feature
@@ -2,10 +2,13 @@
Funktionalität: Fotoalbum
Die Gäste können Fotoalben anschauen und selbst Bilder in ein Fotoalbum hochladen.
+ Grundlage:
+ Angenommen Kerstin wurde freigeschaltet
+ Und Kerstin hat sich angemeldet
+
@current
Szenario: Fotos können hochgeladen werden.
- Angenommen Kerstin hat sich angemeldet
- Und die Fotoalben aufgerufen
+ Angenommen Kerstin ruft die Fotoalben auf
Wenn sie ein Bild hochlädt
Dann wird ein Fotoalbum für sie erstellt
Und kann sie das Foto anschauen

No commit comments for this range

Something went wrong with that request. Please try again.