Merge branch 'master' of https://phablab.krautspace.de/diffusion/C/calcifer
Conflicts: src/Hackspace/Bundle/CalciferBundle/Controller/LocationController.php
This commit is contained in:
commit
e6c6e0ee35
43 changed files with 1534 additions and 3246 deletions
19
INSTALL.md
19
INSTALL.md
|
@ -10,9 +10,16 @@
|
|||
|
||||
Diese Anleitung geht davon aus das du SSH-Zugriff auf deinen Server hast. Wenn du Calcifer auf einem Shared-Hosting-Anbieter installieren willst, so ist dies auch möglich, aber etwas komplizierter und wird irgendwann später beschrieben.
|
||||
|
||||
1. Das [Repo](https://phablab.krautspace.de/diffusion/C/calcifer.git) irgendwo hin clonen
|
||||
2. In das calcifer Verzeichnis wechseln.
|
||||
3. composer install
|
||||
4. Im Verzeichnis app/config die Datei parameters.yml.dist nach parameters.yml kopieren und anpassen.
|
||||
5. Dann die Tabellen erstellen: php app/console doctrine:schema:create
|
||||
6. Zum Schluss must du noch deinen Webserver [konfigurieren](http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html) und dann ist calcifer auch schon erreichbar.
|
||||
1. Das [Repo](https://phablab.krautspace.de/diffusion/C/calcifer.git) irgendwo hin clonen
|
||||
2. In das calcifer Verzeichnis wechseln.
|
||||
3. Abhängigkeiten installieren
|
||||
1. composer herunterladen ```curl -sS https://getcomposer.org/installer | php```
|
||||
2. Installation ausführen: ```php composer.phar install```
|
||||
- für PostgreSQL wähl pdo_pgsql als Datenbanktreiber
|
||||
- für MySQL wähle pdo_mysql als Datenbanktreiber
|
||||
- für SQLite ist pdo_sqlite zu nutzen, dabei ist der Pfad anzugeben. Der Standardpfad legt die Datei calcifer.sqlite3 im Verzeichnis app an.
|
||||
5. Dann die Tabellen erstellen: ```php app/console doctrine:schema:update --force```
|
||||
6. Cache löschen ```php app/console cache:clear --env=prod --no-debug```
|
||||
7. Assets dumpen ```php app/console assetic:dump --env=prod --no-debug```
|
||||
8. Einen täglichen Cronjob anlegen, der die wiederholenden Termine anlegt: ```php app/console calcifer:events:generate```
|
||||
6. Zum Schluss must du noch deinen Webserver [konfigurieren](http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html) und dann ist calcifer auch schon erreichbar.
|
||||
|
|
|
@ -602,6 +602,12 @@ class SymfonyRequirements extends RequirementCollection
|
|||
'Install and enable the <strong>XML</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRecommendation(
|
||||
function_exists('filter_var'),
|
||||
'filter_var() should be available',
|
||||
'Install and enable the <strong>filter</strong> extension.'
|
||||
);
|
||||
|
||||
if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
|
||||
$this->addRecommendation(
|
||||
function_exists('posix_isatty'),
|
||||
|
@ -662,7 +668,7 @@ class SymfonyRequirements extends RequirementCollection
|
|||
$this->addRecommendation(
|
||||
$accelerator,
|
||||
'a PHP accelerator should be installed',
|
||||
'Install and enable a <strong>PHP accelerator</strong> like APC (highly recommended).'
|
||||
'Install and/or enable a <strong>PHP accelerator</strong> (highly recommended).'
|
||||
);
|
||||
|
||||
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
|
||||
|
|
148
app/check.php
148
app/check.php
|
@ -2,61 +2,141 @@
|
|||
|
||||
require_once dirname(__FILE__).'/SymfonyRequirements.php';
|
||||
|
||||
$lineSize = 70;
|
||||
$symfonyRequirements = new SymfonyRequirements();
|
||||
|
||||
$iniPath = $symfonyRequirements->getPhpIniConfigPath();
|
||||
|
||||
echo "********************************\n";
|
||||
echo "* *\n";
|
||||
echo "* Symfony requirements check *\n";
|
||||
echo "* *\n";
|
||||
echo "********************************\n\n";
|
||||
echo_title('Symfony2 Requirements Checker');
|
||||
|
||||
echo $iniPath ? sprintf("* Configuration file used by PHP: %s\n\n", $iniPath) : "* WARNING: No configuration file (php.ini) used by PHP!\n\n";
|
||||
|
||||
echo "** ATTENTION **\n";
|
||||
echo "* The PHP CLI can use a different php.ini file\n";
|
||||
echo "* than the one used with your web server.\n";
|
||||
if ('\\' == DIRECTORY_SEPARATOR) {
|
||||
echo "* (especially on the Windows platform)\n";
|
||||
echo '> PHP is using the following php.ini file:'.PHP_EOL;
|
||||
if ($iniPath) {
|
||||
echo_style('green', ' '.$iniPath);
|
||||
} else {
|
||||
echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!');
|
||||
}
|
||||
echo "* To be on the safe side, please also launch the requirements check\n";
|
||||
echo "* from your web server using the web/config.php script.\n";
|
||||
|
||||
echo_title('Mandatory requirements');
|
||||
echo PHP_EOL.PHP_EOL;
|
||||
|
||||
$checkPassed = true;
|
||||
echo '> Checking Symfony requirements:'.PHP_EOL.' ';
|
||||
|
||||
$messages = array();
|
||||
foreach ($symfonyRequirements->getRequirements() as $req) {
|
||||
/** @var $req Requirement */
|
||||
echo_requirement($req);
|
||||
if (!$req->isFulfilled()) {
|
||||
$checkPassed = false;
|
||||
if ($helpText = get_error_message($req, $lineSize)) {
|
||||
echo_style('red', 'E');
|
||||
$messages['error'][] = $helpText;
|
||||
} else {
|
||||
echo_style('green', '.');
|
||||
}
|
||||
}
|
||||
|
||||
echo_title('Optional recommendations');
|
||||
$checkPassed = empty($messages['error']);
|
||||
|
||||
foreach ($symfonyRequirements->getRecommendations() as $req) {
|
||||
echo_requirement($req);
|
||||
if ($helpText = get_error_message($req, $lineSize)) {
|
||||
echo_style('yellow', 'W');
|
||||
$messages['warning'][] = $helpText;
|
||||
} else {
|
||||
echo_style('green', '.');
|
||||
}
|
||||
}
|
||||
|
||||
if ($checkPassed) {
|
||||
echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects', true);
|
||||
} else {
|
||||
echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects', true);
|
||||
|
||||
echo_title('Fix the following mandatory requirements', 'red');
|
||||
|
||||
foreach ($messages['error'] as $helpText) {
|
||||
echo ' * '.$helpText.PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($messages['warning'])) {
|
||||
echo_title('Optional recommendations to improve your setup', 'yellow');
|
||||
|
||||
foreach ($messages['warning'] as $helpText) {
|
||||
echo ' * '.$helpText.PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
echo PHP_EOL;
|
||||
echo_style('title', 'Note');
|
||||
echo ' The command console could use a different php.ini file'.PHP_EOL;
|
||||
echo_style('title', '~~~~');
|
||||
echo ' than the one used with your web server. To be on the'.PHP_EOL;
|
||||
echo ' safe side, please check the requirements from your web'.PHP_EOL;
|
||||
echo ' server using the ';
|
||||
echo_style('yellow', 'web/config.php');
|
||||
echo ' script.'.PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
|
||||
exit($checkPassed ? 0 : 1);
|
||||
|
||||
/**
|
||||
* Prints a Requirement instance
|
||||
*/
|
||||
function echo_requirement(Requirement $requirement)
|
||||
function get_error_message(Requirement $requirement, $lineSize)
|
||||
{
|
||||
$result = $requirement->isFulfilled() ? 'OK' : ($requirement->isOptional() ? 'WARNING' : 'ERROR');
|
||||
echo ' ' . str_pad($result, 9);
|
||||
echo $requirement->getTestMessage() . "\n";
|
||||
|
||||
if (!$requirement->isFulfilled()) {
|
||||
echo sprintf(" %s\n\n", $requirement->getHelpText());
|
||||
if ($requirement->isFulfilled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL;
|
||||
$errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL;
|
||||
|
||||
return $errorMessage;
|
||||
}
|
||||
|
||||
function echo_title($title)
|
||||
function echo_title($title, $style = null)
|
||||
{
|
||||
echo "\n** $title **\n\n";
|
||||
$style = $style ?: 'title';
|
||||
|
||||
echo PHP_EOL;
|
||||
echo_style($style, $title.PHP_EOL);
|
||||
echo_style($style, str_repeat('~', strlen($title)).PHP_EOL);
|
||||
echo PHP_EOL;
|
||||
}
|
||||
|
||||
function echo_style($style, $message)
|
||||
{
|
||||
// ANSI color codes
|
||||
$styles = array(
|
||||
'reset' => "\033[0m",
|
||||
'red' => "\033[31m",
|
||||
'green' => "\033[32m",
|
||||
'yellow' => "\033[33m",
|
||||
'error' => "\033[37;41m",
|
||||
'success' => "\033[37;42m",
|
||||
'title' => "\033[34m",
|
||||
);
|
||||
$supports = has_color_support();
|
||||
|
||||
echo ($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : '');
|
||||
}
|
||||
|
||||
function echo_block($style, $title, $message)
|
||||
{
|
||||
$message = ' '.trim($message).' ';
|
||||
$width = strlen($message);
|
||||
|
||||
echo PHP_EOL.PHP_EOL;
|
||||
|
||||
echo_style($style, str_repeat(' ', $width).PHP_EOL);
|
||||
echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL);
|
||||
echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL);
|
||||
echo_style($style, str_repeat(' ', $width).PHP_EOL);
|
||||
}
|
||||
|
||||
function has_color_support()
|
||||
{
|
||||
static $support;
|
||||
|
||||
if (null === $support) {
|
||||
if (DIRECTORY_SEPARATOR == '\\') {
|
||||
$support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
|
||||
} else {
|
||||
$support = function_exists('posix_isatty') && @posix_isatty(STDOUT);
|
||||
}
|
||||
}
|
||||
|
||||
return $support;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ doctrine:
|
|||
charset: UTF8
|
||||
# if using pdo_sqlite as your database driver, add the path in parameters.yml
|
||||
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
|
||||
# path: "%database_path%"
|
||||
path: "%database_path%"
|
||||
|
||||
orm:
|
||||
auto_generate_proxy_classes: "%kernel.debug%"
|
||||
|
|
1
app/config/parameters.yml.dist
Normal file → Executable file
1
app/config/parameters.yml.dist
Normal file → Executable file
|
@ -5,6 +5,7 @@ parameters:
|
|||
database_name: symfony
|
||||
database_user: root
|
||||
database_password: ~
|
||||
database_path: "%kernel.root_dir%/calcifer.sqlite3"
|
||||
|
||||
mailer_transport: smtp
|
||||
mailer_host: 127.0.0.1
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
"incenteev/composer-parameter-handler": "~2.0",
|
||||
"jquery/jquery": "1.10.*",
|
||||
"knplabs/knp-markdown-bundle": "~1.3",
|
||||
"jsvrcek/ics": "dev-master",
|
||||
"enko/ics": "~0.1",
|
||||
"doctrine/migrations": "dev-master",
|
||||
"doctrine/doctrine-migrations-bundle": "dev-master",
|
||||
"jbroadway/urlify" : "~1.0"
|
||||
|
|
283
composer.lock
generated
283
composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"hash": "a72c02cc5e14c865991a846b5bac02fb",
|
||||
"hash": "77745a3287830b815f677d20df33b385",
|
||||
"packages": [
|
||||
{
|
||||
"name": "doctrine/annotations",
|
||||
|
@ -444,12 +444,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
|
||||
"reference": "f7138381aa884c0f679da4de41e369b94ead9cd3"
|
||||
"reference": "81575a4316951125ce408c70f30547c77d98f78a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/f7138381aa884c0f679da4de41e369b94ead9cd3",
|
||||
"reference": "f7138381aa884c0f679da4de41e369b94ead9cd3",
|
||||
"url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/81575a4316951125ce408c70f30547c77d98f78a",
|
||||
"reference": "81575a4316951125ce408c70f30547c77d98f78a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -474,12 +474,6 @@
|
|||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com",
|
||||
"homepage": "http://fabien.potencier.org",
|
||||
"role": "Lead Developer"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "http://symfony.com/contributors"
|
||||
|
@ -487,6 +481,10 @@
|
|||
{
|
||||
"name": "Doctrine Project",
|
||||
"homepage": "http://www.doctrine-project.org"
|
||||
},
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"description": "Symfony DoctrineMigrationsBundle",
|
||||
|
@ -496,7 +494,7 @@
|
|||
"migrations",
|
||||
"schema"
|
||||
],
|
||||
"time": "2014-03-20 14:48:55"
|
||||
"time": "2014-08-17 07:53:47"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/inflector",
|
||||
|
@ -620,12 +618,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/migrations.git",
|
||||
"reference": "4256449c5e2603a6b6ee5a78c7c4521d4d4430b8"
|
||||
"reference": "1a9dffa64e33fdc10f4b4c3f5d7230b74d4a1021"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/migrations/zipball/4256449c5e2603a6b6ee5a78c7c4521d4d4430b8",
|
||||
"reference": "4256449c5e2603a6b6ee5a78c7c4521d4d4430b8",
|
||||
"url": "https://api.github.com/repos/doctrine/migrations/zipball/1a9dffa64e33fdc10f4b4c3f5d7230b74d4a1021",
|
||||
"reference": "1a9dffa64e33fdc10f4b4c3f5d7230b74d4a1021",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -655,15 +653,13 @@
|
|||
"LGPL"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jonathan Wage",
|
||||
"email": "jonwage@gmail.com",
|
||||
"homepage": "http://www.jwage.com/",
|
||||
"role": "Creator"
|
||||
},
|
||||
{
|
||||
"name": "Benjamin Eberlei",
|
||||
"email": "kontakt@beberlei.de"
|
||||
},
|
||||
{
|
||||
"name": "Jonathan Wage",
|
||||
"email": "jonwage@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Database Schema migrations using Doctrine DBAL",
|
||||
|
@ -672,20 +668,20 @@
|
|||
"database",
|
||||
"migrations"
|
||||
],
|
||||
"time": "2014-07-09 07:58:02"
|
||||
"time": "2014-08-18 18:03:07"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/orm",
|
||||
"version": "v2.4.3",
|
||||
"version": "v2.4.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/doctrine2.git",
|
||||
"reference": "8a13376d42b5ea467727ffe730aa0e14ca3c5e29"
|
||||
"reference": "fc19c3b53dcd00e6584db40669fdd699c4671f97"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/doctrine2/zipball/8a13376d42b5ea467727ffe730aa0e14ca3c5e29",
|
||||
"reference": "8a13376d42b5ea467727ffe730aa0e14ca3c5e29",
|
||||
"url": "https://api.github.com/repos/doctrine/doctrine2/zipball/fc19c3b53dcd00e6584db40669fdd699c4671f97",
|
||||
"reference": "fc19c3b53dcd00e6584db40669fdd699c4671f97",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -748,7 +744,59 @@
|
|||
"database",
|
||||
"orm"
|
||||
],
|
||||
"time": "2014-06-10 11:49:08"
|
||||
"time": "2014-07-11 03:05:53"
|
||||
},
|
||||
{
|
||||
"name": "enko/ics",
|
||||
"version": "0.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/enko/ICS.git",
|
||||
"reference": "60416fc3842a7b4ee4f0938b8c35c96b402fee32"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/enko/ICS/zipball/60416fc3842a7b4ee4f0938b8c35c96b402fee32",
|
||||
"reference": "60416fc3842a7b4ee4f0938b8c35c96b402fee32",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "3.6.*"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Jsvrcek\\ICS\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Justin Svrcek",
|
||||
"homepage": "https://github.com/jasvrcek"
|
||||
},
|
||||
{
|
||||
"name": "Tim Schumacher",
|
||||
"homepage": "https://github.com/enko"
|
||||
}
|
||||
],
|
||||
"description": "abstraction layer for creating multi-byte safe RFC 5545 compliant .ics files",
|
||||
"homepage": "https://github.com/enko/ICS",
|
||||
"keywords": [
|
||||
".ics",
|
||||
"RFC 5545",
|
||||
"calendar",
|
||||
"export",
|
||||
"ical",
|
||||
"multi-byte safe"
|
||||
],
|
||||
"time": "2014-07-30 23:43:46"
|
||||
},
|
||||
{
|
||||
"name": "incenteev/composer-parameter-handler",
|
||||
|
@ -918,54 +966,6 @@
|
|||
},
|
||||
"type": "library"
|
||||
},
|
||||
{
|
||||
"name": "jsvrcek/ics",
|
||||
"version": "dev-master",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jasvrcek/ICS.git",
|
||||
"reference": "85e3e34214547a9981bd3be38633f9dce4f85094"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jasvrcek/ICS/zipball/85e3e34214547a9981bd3be38633f9dce4f85094",
|
||||
"reference": "85e3e34214547a9981bd3be38633f9dce4f85094",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "3.6.*"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Jsvrcek\\ICS\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Justin Svrcek",
|
||||
"homepage": "https://github.com/jasvrcek"
|
||||
}
|
||||
],
|
||||
"description": "abstraction layer for creating multi-byte safe RFC 5545 compliant .ics files",
|
||||
"homepage": "https://github.com/jasvrcek/ICS",
|
||||
"keywords": [
|
||||
".ics",
|
||||
"RFC 5545",
|
||||
"calendar",
|
||||
"export",
|
||||
"ical",
|
||||
"multi-byte safe"
|
||||
],
|
||||
"time": "2013-10-28 17:21:17"
|
||||
},
|
||||
{
|
||||
"name": "knplabs/knp-markdown-bundle",
|
||||
"version": "1.3.2",
|
||||
|
@ -1255,29 +1255,25 @@
|
|||
},
|
||||
{
|
||||
"name": "sensio/distribution-bundle",
|
||||
"version": "v3.0.1",
|
||||
"version": "v3.0.5",
|
||||
"target-dir": "Sensio/Bundle/DistributionBundle",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sensiolabs/SensioDistributionBundle.git",
|
||||
"reference": "e9caa300faf95076c8e27693f3fdb0bb6e3148c0"
|
||||
"reference": "ad10123f2532f6e311e583cce203ef368eedc469"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/e9caa300faf95076c8e27693f3fdb0bb6e3148c0",
|
||||
"reference": "e9caa300faf95076c8e27693f3fdb0bb6e3148c0",
|
||||
"url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/ad10123f2532f6e311e583cce203ef368eedc469",
|
||||
"reference": "ad10123f2532f6e311e583cce203ef368eedc469",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3",
|
||||
"sensiolabs/security-checker": "~2.0",
|
||||
"symfony/class-loader": "~2.2",
|
||||
"symfony/config": "~2.2",
|
||||
"symfony/dependency-injection": "~2.2",
|
||||
"symfony/filesystem": "~2.2",
|
||||
"symfony/form": "~2.2",
|
||||
"symfony/framework-bundle": "~2.2",
|
||||
"symfony/http-foundation": "~2.2",
|
||||
"symfony/http-kernel": "~2.2",
|
||||
"symfony/framework-bundle": "~2.4",
|
||||
"symfony/process": "~2.2",
|
||||
"symfony/validator": "~2.2",
|
||||
"symfony/yaml": "~2.2"
|
||||
|
@ -1300,17 +1296,15 @@
|
|||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com",
|
||||
"homepage": "http://fabien.potencier.org",
|
||||
"role": "Lead Developer"
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"description": "The base bundle for the Symfony Distributions",
|
||||
"description": "Base bundle for Symfony Distributions",
|
||||
"keywords": [
|
||||
"configuration",
|
||||
"distribution"
|
||||
],
|
||||
"time": "2014-06-06 02:53:20"
|
||||
"time": "2014-08-26 13:14:47"
|
||||
},
|
||||
{
|
||||
"name": "sensio/framework-extra-bundle",
|
||||
|
@ -1369,6 +1363,51 @@
|
|||
],
|
||||
"time": "2014-05-22 23:27:44"
|
||||
},
|
||||
{
|
||||
"name": "sensiolabs/security-checker",
|
||||
"version": "v2.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sensiolabs/security-checker.git",
|
||||
"reference": "5b4eb4743ebe68276c911c84101ecdf4a9ae76ee"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/5b4eb4743ebe68276c911c84101ecdf4a9ae76ee",
|
||||
"reference": "5b4eb4743ebe68276c911c84101ecdf4a9ae76ee",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"symfony/console": "~2.0"
|
||||
},
|
||||
"bin": [
|
||||
"security-checker"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"SensioLabs\\Security": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien.potencier@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A security checker for your composer.lock",
|
||||
"time": "2014-07-19 10:52:35"
|
||||
},
|
||||
{
|
||||
"name": "swiftmailer/swiftmailer",
|
||||
"version": "v5.2.1",
|
||||
|
@ -1488,20 +1527,21 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/icu",
|
||||
"version": "v1.2.1",
|
||||
"version": "v1.2.2",
|
||||
"target-dir": "Symfony/Component/Icu",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/Icu.git",
|
||||
"reference": "98e197da54df1f966dd5e8a4992135703569c987"
|
||||
"reference": "d4d85d6055b87f394d941b45ddd3a9173e1e3d2a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/Icu/zipball/98e197da54df1f966dd5e8a4992135703569c987",
|
||||
"reference": "98e197da54df1f966dd5e8a4992135703569c987",
|
||||
"url": "https://api.github.com/repos/symfony/Icu/zipball/d4d85d6055b87f394d941b45ddd3a9173e1e3d2a",
|
||||
"reference": "d4d85d6055b87f394d941b45ddd3a9173e1e3d2a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-intl": "*",
|
||||
"lib-icu": ">=4.4",
|
||||
"php": ">=5.3.3",
|
||||
"symfony/intl": "~2.3"
|
||||
|
@ -1532,21 +1572,20 @@
|
|||
"icu",
|
||||
"intl"
|
||||
],
|
||||
"time": "2013-10-04 10:06:38"
|
||||
"time": "2014-07-25 09:58:17"
|
||||
},
|
||||
{
|
||||
"name": "symfony/monolog-bundle",
|
||||
"version": "v2.6.0",
|
||||
"target-dir": "Symfony/Bundle/MonologBundle",
|
||||
"version": "v2.6.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/MonologBundle.git",
|
||||
"reference": "e1d4aa99c7440b11e9dfbfef7ed63084401dbc6a"
|
||||
"reference": "227bbeefe30f2d95e3fe5fbd1ccda414287a957a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/MonologBundle/zipball/e1d4aa99c7440b11e9dfbfef7ed63084401dbc6a",
|
||||
"reference": "e1d4aa99c7440b11e9dfbfef7ed63084401dbc6a",
|
||||
"url": "https://api.github.com/repos/symfony/MonologBundle/zipball/227bbeefe30f2d95e3fe5fbd1ccda414287a957a",
|
||||
"reference": "227bbeefe30f2d95e3fe5fbd1ccda414287a957a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1568,8 +1607,8 @@
|
|||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Symfony\\Bundle\\MonologBundle": ""
|
||||
"psr-4": {
|
||||
"Symfony\\Bundle\\MonologBundle\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
|
@ -1577,15 +1616,13 @@
|
|||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com",
|
||||
"homepage": "http://fabien.potencier.org",
|
||||
"role": "Lead Developer"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "http://symfony.com/contributors"
|
||||
},
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"description": "Symfony MonologBundle",
|
||||
|
@ -1594,7 +1631,7 @@
|
|||
"log",
|
||||
"logging"
|
||||
],
|
||||
"time": "2014-06-04 16:49:13"
|
||||
"time": "2014-07-21 00:36:06"
|
||||
},
|
||||
{
|
||||
"name": "symfony/swiftmailer-bundle",
|
||||
|
@ -1655,16 +1692,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/symfony",
|
||||
"version": "v2.5.1",
|
||||
"version": "v2.5.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/symfony.git",
|
||||
"reference": "e3d2844abc988bc467bb1593cd340700096b0ac0"
|
||||
"reference": "f077a238c781f845487a7c81fea8033ccd0e6a02"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/symfony/zipball/e3d2844abc988bc467bb1593cd340700096b0ac0",
|
||||
"reference": "e3d2844abc988bc467bb1593cd340700096b0ac0",
|
||||
"url": "https://api.github.com/repos/symfony/symfony/zipball/f077a238c781f845487a7c81fea8033ccd0e6a02",
|
||||
"reference": "f077a238c781f845487a7c81fea8033ccd0e6a02",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1751,15 +1788,13 @@
|
|||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com",
|
||||
"homepage": "http://fabien.potencier.org",
|
||||
"role": "Lead Developer"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "http://symfony.com/contributors"
|
||||
},
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"description": "The Symfony PHP framework",
|
||||
|
@ -1767,7 +1802,7 @@
|
|||
"keywords": [
|
||||
"framework"
|
||||
],
|
||||
"time": "2014-07-08 14:42:08"
|
||||
"time": "2014-08-06 07:03:01"
|
||||
},
|
||||
{
|
||||
"name": "twig/extensions",
|
||||
|
@ -1927,19 +1962,15 @@
|
|||
"time": "2014-04-28 14:01:06"
|
||||
}
|
||||
],
|
||||
"aliases": [
|
||||
|
||||
],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {
|
||||
"jsvrcek/ics": 20,
|
||||
"doctrine/migrations": 20,
|
||||
"doctrine/doctrine-migrations-bundle": 20
|
||||
},
|
||||
"prefer-stable": false,
|
||||
"platform": {
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"platform-dev": [
|
||||
|
||||
]
|
||||
"platform-dev": []
|
||||
}
|
||||
|
|
88
src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php
Executable file
88
src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php
Executable file
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tim
|
||||
* Date: 28.07.14
|
||||
* Time: 22:19
|
||||
*/
|
||||
|
||||
namespace Hackspace\Bundle\CalciferBundle\Command;
|
||||
|
||||
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\Event;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\RepeatingEvent;
|
||||
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class GenerateEventsCommand extends ContainerAwareCommand
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('calcifer:events:generate')
|
||||
->setDescription('Generate events from repeating events')
|
||||
->addOption('duration', 'd', InputOption::VALUE_OPTIONAL, 'The duration you want to generate events into the future. Default is 2 monts','2 months')
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$duration = \DateInterval::createFromDateString($input->getOption('duration'));
|
||||
if ($duration instanceof \DateInterval) {
|
||||
$now = new \DateTime();
|
||||
$end = new \DateTime();
|
||||
$end->add($duration);
|
||||
$output->writeln(sprintf("Generating Dates from %s to %s",$now->format('Y-m-d'),$end->format('Y-m-d')));
|
||||
$output->writeln("Fetching repeating events");
|
||||
/** @var EntityManager $entityManager */
|
||||
$entityManager = $this->getContainer()->get('doctrine')->getManager();
|
||||
$repo = $entityManager->getRepository('CalciferBundle:RepeatingEvent');
|
||||
$entities = $repo->findAll();
|
||||
foreach($entities as $entity) {
|
||||
/** @var RepeatingEvent $entity */
|
||||
$period = new \DatePeriod($entity->nextdate,new \DateInterval($entity->repeating_pattern),$end);
|
||||
$event = null;
|
||||
foreach($period as $date) {
|
||||
/** @var \DateTime $date */
|
||||
$output->writeln(sprintf("Creating Event %s for %s",$entity->summary,$date->format('Y-m-d H:i')));
|
||||
$event = new Event();
|
||||
$event->location = $entity->location;
|
||||
$event->startdate = $date;
|
||||
if ($entity->duration > 0) {
|
||||
$duration = new \DateInterval("PT".$entity->duration.'H');
|
||||
/** @var \DateTime $enddate */
|
||||
$enddate = clone $date;
|
||||
$enddate->add($duration);
|
||||
$entity->enddate = $enddate;
|
||||
}
|
||||
$event->summary = $entity->summary;
|
||||
$event->description = $entity->description;
|
||||
$event->url = $entity->url;
|
||||
$entityManager->persist($event);
|
||||
$entityManager->flush();
|
||||
$event->slug = \URLify::filter($event->id . '-' . $event->summary,255,'de');
|
||||
$entityManager->persist($event);
|
||||
$entityManager->flush();
|
||||
foreach($entity->getTags() as $tag) {
|
||||
$event->addTag($tag);
|
||||
}
|
||||
$entityManager->persist($event);
|
||||
$entityManager->flush();
|
||||
}
|
||||
if (!is_null($event)) {
|
||||
$entity->nextdate = $event->startdate;
|
||||
$entity->nextdate->add(new \DateInterval($entity->repeating_pattern));
|
||||
$entityManager->persist($entity);
|
||||
$entityManager->flush();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$output->writeln('Invalid duration');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -59,76 +59,8 @@ class EventController extends Controller
|
|||
public function createAction(Request $request)
|
||||
{
|
||||
$entity = new Event();
|
||||
$entity->setDescription($request->get('description'));
|
||||
$entity->setSummary($request->get('summary'));
|
||||
$entity->setUrl($request->get('url'));
|
||||
$startdate = $request->get('startdate');
|
||||
$startdate = new \DateTime($startdate);
|
||||
$entity->setStartdate($startdate);
|
||||
$entity->setSlug(\URLify::filter($entity->getSummary(),255,'de'));
|
||||
|
||||
$enddate = $request->get('enddate');
|
||||
if (strlen($enddate) > 0) {
|
||||
$enddate = new \DateTime($enddate);
|
||||
$entity->setenddate($enddate);
|
||||
}
|
||||
|
||||
$location = $request->get('location');
|
||||
$location_lat = $request->get('location_lat');
|
||||
$location_lon = $request->get('location_lon');
|
||||
if (strlen($location) > 0) {
|
||||
// check if the location already exists
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$repo = $em->getRepository('CalciferBundle:Location');
|
||||
$results = $repo->findBy(['name' => $location]);
|
||||
if (count($results) > 0) {
|
||||
$location_obj = $results[0];
|
||||
if (strlen($location_lat) > 0) {
|
||||
$location_obj->setLat($location_lat);
|
||||
}
|
||||
if (strlen($location_lon) > 0) {
|
||||
$location_obj->setLon($location_lon);
|
||||
}
|
||||
$em->persist($location_obj);
|
||||
$em->flush();
|
||||
$entity->setLocation($results[0]);
|
||||
} else {
|
||||
$location_obj = new Location();
|
||||
$location_obj->setName($location);
|
||||
if (strlen($location_lat) > 0) {
|
||||
$location_obj->setLat($location_lat);
|
||||
}
|
||||
if (strlen($location_lon) > 0) {
|
||||
$location_obj->setLon($location_lon);
|
||||
}
|
||||
$location_obj->setSlug(\URLify::filter($location_obj->getName(),255,'de'));
|
||||
$em->persist($location_obj);
|
||||
$em->flush();
|
||||
$entity->setLocation($location_obj);
|
||||
}
|
||||
}
|
||||
|
||||
$tags = $request->get('tags');
|
||||
if (strlen($tags) > 0) {
|
||||
$tags = explode(',',$tags);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$repo = $em->getRepository('CalciferBundle:Tag');
|
||||
foreach ($tags as $tag) {
|
||||
$tag = trim($tag);
|
||||
$results = $repo->findBy(['name' => $tag]);
|
||||
if (count($results) > 0) {
|
||||
$entity->addTag($results[0]);
|
||||
} else {
|
||||
$tag_obj = new Tag();
|
||||
$tag_obj->setName($tag);
|
||||
$tag_obj->setSlug(\URLify::filter($tag_obj->getName(),255,'de'));
|
||||
$em->persist($tag_obj);
|
||||
$em->flush();
|
||||
$entity->addTag($tag_obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
$em = $this->saveEvent($request, $entity);
|
||||
|
||||
|
||||
if ($entity->isValid()) {
|
||||
|
@ -136,7 +68,7 @@ class EventController extends Controller
|
|||
$em->persist($entity);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->getSlug())));
|
||||
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->slug)));
|
||||
}
|
||||
|
||||
return array(
|
||||
|
@ -236,18 +168,44 @@ class EventController extends Controller
|
|||
throw $this->createNotFoundException('Unable to find Event entity.');
|
||||
}
|
||||
|
||||
$entity->setDescription($request->get('description'));
|
||||
$entity->setSummary($request->get('summary'));
|
||||
$entity->setUrl($request->get('url'));
|
||||
$em = $this->saveEvent($request, $entity);
|
||||
|
||||
|
||||
if ($entity->isValid()) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entity);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->slug)));
|
||||
}
|
||||
|
||||
return array(
|
||||
'entity' => $entity,
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param $entity
|
||||
* @return EntityManager
|
||||
*/
|
||||
public function saveEvent(Request $request, Event $entity)
|
||||
{
|
||||
$entity->description = $request->get('description');
|
||||
$entity->summary = $request->get('summary');
|
||||
$entity->url = $request->get('url');
|
||||
$startdate = $request->get('startdate');
|
||||
$startdate = new \DateTime($startdate);
|
||||
$entity->setStartdate($startdate);
|
||||
$entity->setSlug(\URLify::filter($entity->getSummary(),255,'de'));
|
||||
$entity->startdate = $startdate;
|
||||
$entity->slug = \URLify::filter($entity->summary, 255, 'de');
|
||||
|
||||
$enddate = $request->get('enddate');
|
||||
if (strlen($enddate) > 0) {
|
||||
$enddate = new \DateTime($enddate);
|
||||
$entity->setenddate($enddate);
|
||||
$entity->enddate = $enddate;
|
||||
} else {
|
||||
$entity->enddate = null;
|
||||
}
|
||||
|
||||
$location = $request->get('location');
|
||||
|
@ -262,24 +220,24 @@ class EventController extends Controller
|
|||
if (count($results) > 0) {
|
||||
$location_obj = $results[0];
|
||||
if (strlen($location_lat) > 0) {
|
||||
$location_obj->setLat($location_lat);
|
||||
$location_obj->lat = $location_lat;
|
||||
}
|
||||
if (strlen($location_lon) > 0) {
|
||||
$location_obj->setLon($location_lon);
|
||||
$location_obj->lon = $location_lon;
|
||||
}
|
||||
$em->persist($location_obj);
|
||||
$em->flush();
|
||||
$entity->setLocation($results[0]);
|
||||
} else {
|
||||
$location_obj = new Location();
|
||||
$location_obj->setName($location);
|
||||
$location_obj->name = $location;
|
||||
if (strlen($location_lat) > 0) {
|
||||
$location_obj->setLat($location_lat);
|
||||
$location_obj->lat = $location_lat;
|
||||
}
|
||||
if (strlen($location_lon) > 0) {
|
||||
$location_obj->setLon($location_lon);
|
||||
$location_obj->lon = $location_lon;
|
||||
}
|
||||
$location_obj->setSlug(\URLify::filter($location_obj->getName(),255,'de'));
|
||||
$location_obj->slug = \URLify::filter($location_obj->name, 255, 'de');
|
||||
$em->persist($location_obj);
|
||||
$em->flush();
|
||||
$entity->setLocation($location_obj);
|
||||
|
@ -288,9 +246,10 @@ class EventController extends Controller
|
|||
|
||||
$tags = $request->get('tags');
|
||||
if (strlen($tags) > 0) {
|
||||
$tags = explode(',',$tags);
|
||||
$tags = explode(',', $tags);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$repo = $em->getRepository('CalciferBundle:Tag');
|
||||
$entity->clearTags();
|
||||
foreach ($tags as $tag) {
|
||||
$tag = trim($tag);
|
||||
$results = $repo->findBy(['name' => $tag]);
|
||||
|
@ -298,22 +257,47 @@ class EventController extends Controller
|
|||
$entity->addTag($results[0]);
|
||||
} else {
|
||||
$tag_obj = new Tag();
|
||||
$tag_obj->setName($tag);
|
||||
$tag_obj->setSlug(\URLify::filter($tag_obj->getName(),255,'de'));
|
||||
$tag_obj->name = $tag;
|
||||
$tag_obj->slug = \URLify::filter($tag_obj->name, 255, 'de');
|
||||
$em->persist($tag_obj);
|
||||
$em->flush();
|
||||
$entity->addTag($tag_obj);
|
||||
}
|
||||
}
|
||||
return $em;
|
||||
}
|
||||
return $em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a Event entity.
|
||||
*
|
||||
* @Route("/termine/{slug}/löschen", name="_delete")
|
||||
* @Method({"GET", "POST"})
|
||||
* @Template("CalciferBundle:Event:delete.html.twig")
|
||||
*/
|
||||
public function deleteAction(Request $request, $slug) {
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
/** @var EntityRepository $repo */
|
||||
$repo = $em->getRepository('CalciferBundle:Event');
|
||||
|
||||
/** @var Event $entity */
|
||||
$entity = $repo->findOneBy(['slug' => $slug]);
|
||||
|
||||
if (!$entity) {
|
||||
throw $this->createNotFoundException('Unable to find Event entity.');
|
||||
}
|
||||
|
||||
|
||||
if ($entity->isValid()) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entity);
|
||||
$confirmation = $request->get('confirmation',false);
|
||||
|
||||
if (($request->getMethod() == 'POST') && ($confirmation)) {
|
||||
$em->remove($entity);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->getSlug())));
|
||||
return $this->redirect('/');
|
||||
}
|
||||
|
||||
return array(
|
||||
|
@ -321,4 +305,33 @@ class EventController extends Controller
|
|||
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies a Event entity.
|
||||
*
|
||||
* @Route("/termine/{slug}/kopieren", name="_copy")
|
||||
* @Method("GET")
|
||||
* @Template("CalciferBundle:Event:new.html.twig")
|
||||
*/
|
||||
public function copyAction(Request $request, $slug) {
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
/** @var EntityRepository $repo */
|
||||
$repo = $em->getRepository('CalciferBundle:Event');
|
||||
|
||||
/** @var Event $entity */
|
||||
$entity = $repo->findOneBy(['slug' => $slug]);
|
||||
|
||||
if (!$entity) {
|
||||
throw $this->createNotFoundException('Unable to find Event entity.');
|
||||
}
|
||||
|
||||
$entity->id = null;
|
||||
|
||||
return array(
|
||||
'entity' => $entity,
|
||||
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Hackspace\Bundle\CalciferBundle\Controller;
|
||||
|
||||
use Doctrine\Common\Annotations\Annotation\Required;
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
|
@ -23,7 +24,7 @@ use Jsvrcek\ICS\Model\Relationship\Organizer;
|
|||
use Jsvrcek\ICS\Utility\Formatter;
|
||||
use Jsvrcek\ICS\CalendarStream;
|
||||
use Jsvrcek\ICS\CalendarExport;
|
||||
use Symfony\Component\Validator\Constraints\DateTime;
|
||||
use Jsvrcek\ICS\Model\Description\Geo;
|
||||
|
||||
/**
|
||||
* Location controller.
|
||||
|
@ -35,11 +36,11 @@ class LocationController extends Controller
|
|||
/**
|
||||
* Finds and displays a Event entity.
|
||||
*
|
||||
* @Route("/{slug}(?!\.ics)", name="location_show")
|
||||
* @Route("/{slug}.{format}", name="location_show", defaults={"format" = "html"})
|
||||
* @Method("GET")
|
||||
* @Template("CalciferBundle:Event:index.html.twig")
|
||||
*/
|
||||
public function showAction($slug)
|
||||
public function showAction($slug,$format)
|
||||
{
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
@ -67,52 +68,54 @@ class LocationController extends Controller
|
|||
->andWhere('e.locations_id = :location')
|
||||
->orderBy('e.startdate')
|
||||
->setParameter('startdate',$now)
|
||||
->setParameter('location',$location->getId());
|
||||
->setParameter('location',$location->id);
|
||||
$entities = $qb->getQuery()->execute();
|
||||
|
||||
return array(
|
||||
'entities' => $entities,
|
||||
'location' => $location,
|
||||
);
|
||||
}
|
||||
if ($format == 'ics') {
|
||||
$calendar = new Calendar();
|
||||
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
||||
|
||||
/**
|
||||
* Finds and displays a Event entity.
|
||||
*
|
||||
* @Route("/{slug}.ics", name="location_show_ics")
|
||||
* @Method("GET")
|
||||
*/
|
||||
public function showActionICS($slug)
|
||||
{
|
||||
$results = $this->showAction(str_replace('.ics','',$slug));
|
||||
$entities = $results['entities'];
|
||||
foreach ($entities as $entity) {
|
||||
/** @var Event $entity */
|
||||
$event = new CalendarEvent();
|
||||
$event->setStart($entity->startdate);
|
||||
if ($entity->enddate instanceof \DateTime)
|
||||
$event->setEnd($entity->enddate);
|
||||
$event->setSummary($entity->summary);
|
||||
$event->setUrl($entity->url);
|
||||
if ($entity->location instanceof Location) {
|
||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||
$location->setName($entity->location->name);
|
||||
$event->setLocations([$location]);
|
||||
if (\is_float($entity->location->lon) && \is_float($entity->location->lat)) {
|
||||
$geo = new Geo();
|
||||
$geo->setLatitude($entity->location->lat);
|
||||
$geo->setLongitude($entity->location->lon);
|
||||
$event->setGeo($geo);
|
||||
}
|
||||
}
|
||||
$event->setDescription($entity->description);
|
||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||
$location->setName($entity->getLocation()->name);
|
||||
$event->setLocations([$location]);
|
||||
$calendar->addEvent($event);
|
||||
}
|
||||
|
||||
$calendar = new Calendar();
|
||||
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
||||
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
||||
$calendarExport->addCalendar($calendar);
|
||||
|
||||
foreach($entities as $entity) {
|
||||
/** @var Event $entity */
|
||||
$event = new CalendarEvent();
|
||||
$event->setStart($entity->getStartdate());
|
||||
if ($entity->getEnddate() instanceof DateTime)
|
||||
$event->setEnd($entity->getEnddate());
|
||||
$event->setSummary($entity->getSummary());
|
||||
$event->setDescription($entity->getDescription());
|
||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||
$location->setName($entity->getLocation()->getName());
|
||||
$event->setLocations([$location]);
|
||||
$calendar->addEvent($event);
|
||||
//output .ics formatted text
|
||||
$result = $calendarExport->getStream();
|
||||
|
||||
$response = new Response($result);
|
||||
$response->headers->set('Content-Type', 'text/calendar');
|
||||
|
||||
return $response;
|
||||
} else {
|
||||
return array(
|
||||
'entities' => $entities,
|
||||
'location' => $location,
|
||||
);
|
||||
}
|
||||
|
||||
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
||||
$calendarExport->addCalendar($calendar);
|
||||
|
||||
//output .ics formatted text
|
||||
$result = $calendarExport->getStream();
|
||||
|
||||
$response = new Response($result);
|
||||
$response->headers->set('Content-Type', 'text/calendar');
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
|
262
src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php
Executable file
262
src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php
Executable file
|
@ -0,0 +1,262 @@
|
|||
<?php
|
||||
|
||||
namespace Hackspace\Bundle\CalciferBundle\Controller;
|
||||
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\RepeatingEvent;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Doctrine\Common\Annotations\Annotation\Required;
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\Location;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\Tag;
|
||||
use Symfony\Component\Config\Definition\Exception\Exception;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\Event;
|
||||
use Hackspace\Bundle\CalciferBundle\Form\EventType;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* Location controller.
|
||||
*
|
||||
* @Route("/termine/wiederholend")
|
||||
*/
|
||||
class RepeatingEventController extends Controller
|
||||
{
|
||||
/**
|
||||
* Displays all repeating events
|
||||
*
|
||||
* @Route("/", name="repeating_event_show")
|
||||
* @Method("GET")
|
||||
* @Template()
|
||||
*/
|
||||
public function indexAction()
|
||||
{
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
/** @var EntityRepository $repo */
|
||||
$repo = $em->getRepository('CalciferBundle:RepeatingEvent');
|
||||
|
||||
$entities = $repo->findAll();
|
||||
|
||||
return [
|
||||
'entities' => $entities,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a form to create a repeating event
|
||||
*
|
||||
* @Route("/neu", name="repeating_event_new")
|
||||
* @Method("GET")
|
||||
* @Template()
|
||||
*/
|
||||
public function newAction()
|
||||
{
|
||||
$entity = new RepeatingEvent();
|
||||
|
||||
return [
|
||||
'entity' => $entity,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a repeating event
|
||||
*
|
||||
* @Route("/neu", name="repeating_event_create")
|
||||
* @Method("POST")
|
||||
* @Template("CalciferBundle:RepeatingEvent:new.html.twig")
|
||||
*/
|
||||
public function createAction(Request $request)
|
||||
{
|
||||
$entity = new RepeatingEvent();
|
||||
$this->fillEntity($request, $entity);
|
||||
if ($this->validateRepeatingEvent($entity)) {
|
||||
$ret = $this->saveRepeatingEvent($request, $entity);
|
||||
if ($entity->id > 0) {
|
||||
return $this->redirect($this->generateUrl('repeating_event_show'));
|
||||
} else {
|
||||
throw new \Exception('Could not save repeating event?!?');
|
||||
}
|
||||
}
|
||||
return [
|
||||
'entity' => $entity,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a form to edit a repeating event
|
||||
*
|
||||
* @Route("/{slug}/bearbeiten",name="repeating_event_edit")
|
||||
* @Method("GET")
|
||||
* @Template()
|
||||
*/
|
||||
public function editAction($slug)
|
||||
{
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
/** @var EntityRepository $repo */
|
||||
$repo = $em->getRepository('CalciferBundle:RepeatingEvent');
|
||||
|
||||
/** @var Event $entity */
|
||||
$entity = $repo->findOneBy(['slug' => $slug]);
|
||||
|
||||
if (!$entity) {
|
||||
throw $this->createNotFoundException('Unable to find RepeatingEvent entity.');
|
||||
}
|
||||
|
||||
return array(
|
||||
'entity' => $entity,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a repeating event
|
||||
*
|
||||
* @Route("/{slug}/bearbeiten",name="repeating_event_update")
|
||||
* @Method("POST")
|
||||
* @Template("CalciferBundle:RepeatingEvent:edit.html.twig")
|
||||
*/
|
||||
public function updateAction(Request $request, $slug)
|
||||
{
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
/** @var EntityRepository $repo */
|
||||
$repo = $em->getRepository('CalciferBundle:RepeatingEvent');
|
||||
|
||||
/** @var Event $entity */
|
||||
$entity = $repo->findOneBy(['slug' => $slug]);
|
||||
|
||||
if (!$entity) {
|
||||
throw $this->createNotFoundException('Unable to find RepeatingEvent entity.');
|
||||
}
|
||||
|
||||
$this->fillEntity($request, $entity);
|
||||
if ($this->validateRepeatingEvent($entity)) {
|
||||
$ret = $this->saveRepeatingEvent($request, $entity);
|
||||
if ($entity->id > 0) {
|
||||
return $this->redirect($this->generateUrl('repeating_event_show'));
|
||||
} else {
|
||||
throw new \Exception('Could not save repeating event?!?');
|
||||
}
|
||||
}
|
||||
return [
|
||||
'entity' => $entity,
|
||||
];
|
||||
}
|
||||
|
||||
private function fillEntity(Request $request, RepeatingEvent $entity)
|
||||
{
|
||||
$fields = [
|
||||
'duration',
|
||||
'repeating_pattern',
|
||||
'summary',
|
||||
'description',
|
||||
'url',
|
||||
];
|
||||
foreach ($fields as $field) {
|
||||
$entity->$field = $request->get($field);
|
||||
}
|
||||
if (strlen($entity->duration) == 0)
|
||||
$entity->duration = null;
|
||||
$nextdate = $request->get('nextdate');
|
||||
$nextdate = new \DateTime($nextdate);
|
||||
$entity->nextdate = $nextdate;
|
||||
|
||||
}
|
||||
|
||||
private function validateRepeatingEvent(RepeatingEvent $entity)
|
||||
{
|
||||
$fields = [
|
||||
'nextdate',
|
||||
'repeating_pattern',
|
||||
'summary',
|
||||
];
|
||||
foreach ($fields as $field) {
|
||||
if ((is_null($entity->$field)) && (strlen($entity->$field) > 0))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private function saveRepeatingEvent(Request $request, RepeatingEvent $entity)
|
||||
{
|
||||
$location = $request->get('location');
|
||||
$location_lat = $request->get('location_lat');
|
||||
$location_lon = $request->get('location_lon');
|
||||
if (strlen($location) > 0) {
|
||||
// check if the location already exists
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$repo = $em->getRepository('CalciferBundle:Location');
|
||||
$results = $repo->findBy(['name' => $location]);
|
||||
if (count($results) > 0) {
|
||||
$location_obj = $results[0];
|
||||
if (strlen($location_lat) > 0) {
|
||||
$location_obj->lat = $location_lat;
|
||||
}
|
||||
if (strlen($location_lon) > 0) {
|
||||
$location_obj->lon = $location_lon;
|
||||
}
|
||||
$em->persist($location_obj);
|
||||
$em->flush();
|
||||
$entity->location = $results[0];
|
||||
} else {
|
||||
$location_obj = new Location();
|
||||
$location_obj->name = $location;
|
||||
if (strlen($location_lat) > 0) {
|
||||
$location_obj->lat = $location_lat;
|
||||
}
|
||||
if (strlen($location_lon) > 0) {
|
||||
$location_obj->lon = $location_lon;
|
||||
}
|
||||
$location_obj->slug = \URLify::filter($location_obj->name, 255, 'de');
|
||||
$em->persist($location_obj);
|
||||
$em->flush();
|
||||
$entity->location = $location_obj;
|
||||
}
|
||||
} else {
|
||||
$entity->location = null;
|
||||
}
|
||||
|
||||
$tags = $request->get('tags');
|
||||
if (strlen($tags) > 0) {
|
||||
$tags = explode(',', $tags);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$repo = $em->getRepository('CalciferBundle:Tag');
|
||||
$entity->clearTags();
|
||||
foreach ($tags as $tag) {
|
||||
$tag = trim($tag);
|
||||
$results = $repo->findBy(['name' => $tag]);
|
||||
if (count($results) > 0) {
|
||||
$entity->addTag($results[0]);
|
||||
} else {
|
||||
$tag_obj = new Tag();
|
||||
$tag_obj->name = $tag;
|
||||
$tag_obj->slug = \URLify::filter($tag_obj->name, 255, 'de');
|
||||
$em->persist($tag_obj);
|
||||
$em->flush();
|
||||
$entity->addTag($tag_obj);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$entity->clearTags();
|
||||
}
|
||||
|
||||
$entity->slug = \URLify::filter($entity->summary,255,'de');
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($entity);
|
||||
$em->flush();
|
||||
|
||||
return $entity;
|
||||
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ use Doctrine\ORM\EntityRepository;
|
|||
use Doctrine\ORM\QueryBuilder;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\Location;
|
||||
use Hackspace\Bundle\CalciferBundle\Entity\Tag;
|
||||
use Jsvrcek\ICS\Model\Description\Geo;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||
|
@ -35,11 +36,11 @@ class TagController extends Controller
|
|||
/**
|
||||
* Finds and displays a Event entity.
|
||||
*
|
||||
* @Route("/{slug}(?!\.ics)", name="tag_show")
|
||||
* @Route("/{slug}.{format}", defaults={"format" = "html"}, name="tag_show")
|
||||
* @Method("GET")
|
||||
* @Template("CalciferBundle:Event:index.html.twig")
|
||||
*/
|
||||
public function showAction($slug)
|
||||
public function showAction($slug, $format)
|
||||
{
|
||||
/** @var EntityManager $em */
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
@ -55,60 +56,60 @@ class TagController extends Controller
|
|||
}
|
||||
|
||||
$now = new \DateTime();
|
||||
$now->setTime(0,0,0);
|
||||
$now->setTime(0, 0, 0);
|
||||
|
||||
/** @var QueryBuilder $qb */
|
||||
$qb = $em->createQueryBuilder();
|
||||
$qb ->select(array('e'))
|
||||
$qb->select(array('e'))
|
||||
->from('CalciferBundle:Event', 'e')
|
||||
->join('e.tags', 't', 'WITH', $qb->expr()->in('t.id', $tag->getId()))
|
||||
->join('e.tags', 't', 'WITH', $qb->expr()->in('t.id', $tag->id))
|
||||
->where('e.startdate >= :startdate')
|
||||
->orderBy('e.startdate')
|
||||
->setParameter('startdate',$now);
|
||||
->setParameter('startdate', $now);
|
||||
$entities = $qb->getQuery()->execute();
|
||||
|
||||
return array(
|
||||
'entities' => $entities,
|
||||
'tag' => $tag,
|
||||
);
|
||||
}
|
||||
if ($format == 'ics') {
|
||||
$calendar = new Calendar();
|
||||
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
||||
|
||||
/**
|
||||
* Finds and displays a Event entity.
|
||||
*
|
||||
* @Route("/{slug}.ics", name="tag_show_ics")
|
||||
* @Method("GET")
|
||||
*/
|
||||
public function showActionICS($slug)
|
||||
{
|
||||
$results = $this->showAction(str_replace('.ics','',$slug));
|
||||
$entities = $results['entities'];
|
||||
foreach ($entities as $entity) {
|
||||
/** @var Event $entity */
|
||||
$event = new CalendarEvent();
|
||||
$event->setStart($entity->startdate);
|
||||
if ($entity->enddate instanceof \DateTime)
|
||||
$event->setEnd($entity->enddate);
|
||||
$event->setSummary($entity->summary);
|
||||
$event->setDescription($entity->description);
|
||||
$event->setUrl($entity->url);
|
||||
if ($entity->location instanceof Location) {
|
||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||
$location->setName($entity->location->name);
|
||||
$event->setLocations([$location]);
|
||||
if (\is_float($entity->location->lon) && \is_float($entity->location->lat)) {
|
||||
$geo = new Geo();
|
||||
$geo->setLatitude($entity->location->lat);
|
||||
$geo->setLongitude($entity->location->lon);
|
||||
$event->setGeo($geo);
|
||||
}
|
||||
}
|
||||
$calendar->addEvent($event);
|
||||
}
|
||||
|
||||
$calendar = new Calendar();
|
||||
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
||||
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
||||
$calendarExport->addCalendar($calendar);
|
||||
|
||||
foreach($entities as $entity) {
|
||||
/** @var Event $entity */
|
||||
$event = new CalendarEvent();
|
||||
$event->setStart($entity->getStartdate());
|
||||
$event->setEnd($entity->getEnddate());
|
||||
$event->setSummary($entity->getSummary());
|
||||
$event->setDescription($entity->getDescription());
|
||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||
$location->setName($entity->getLocation()->getName());
|
||||
$event->setLocations([$location]);
|
||||
$calendar->addEvent($event);
|
||||
//output .ics formatted text
|
||||
$result = $calendarExport->getStream();
|
||||
|
||||
$response = new Response($result);
|
||||
$response->headers->set('Content-Type', 'text/calendar');
|
||||
|
||||
return $response;
|
||||
} else {
|
||||
return array(
|
||||
'entities' => $entities,
|
||||
'tag' => $tag,
|
||||
);
|
||||
}
|
||||
|
||||
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
||||
$calendarExport->addCalendar($calendar);
|
||||
|
||||
//output .ics formatted text
|
||||
$result = $calendarExport->getStream();
|
||||
|
||||
$response = new Response($result);
|
||||
$response->headers->set('Content-Type', 'text/calendar');
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
|
63
src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php
Executable file
63
src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php
Executable file
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tim
|
||||
* Date: 13.07.14
|
||||
* Time: 13:55
|
||||
*/
|
||||
|
||||
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\ORM\PersistentCollection;
|
||||
|
||||
/**
|
||||
* A baseclass for all other entities
|
||||
*
|
||||
* @property integer $id
|
||||
* @property string $slug
|
||||
*
|
||||
* @ORM\MappedSuperclass
|
||||
*/
|
||||
abstract class BaseEntity {
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
||||
*/
|
||||
protected $slug = '';
|
||||
|
||||
public function __isset($name) {
|
||||
if (property_exists($this,$name)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function __get($name) {
|
||||
if (property_exists($this,$name)) {
|
||||
return $this->$name;
|
||||
} else {
|
||||
throw new \Exception("Property {$name} does not Exists");
|
||||
}
|
||||
}
|
||||
|
||||
public function __set($name,$value) {
|
||||
if (property_exists($this,$name)) {
|
||||
$this->$name = $value;
|
||||
return $this;
|
||||
} else {
|
||||
throw new \Exception("Property {$name} does not Exists");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,59 +3,59 @@
|
|||
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\ORM\PersistentCollection;
|
||||
|
||||
/**
|
||||
* Event
|
||||
*
|
||||
* @property \DateTime $startdate
|
||||
* @property \DateTime $enddate
|
||||
* @property string $summary
|
||||
* @property string $description
|
||||
* @property Location $location
|
||||
* @property string $url
|
||||
* @property array $tags
|
||||
*
|
||||
* @ORM\Table(name="events")
|
||||
* @ORM\Entity
|
||||
*/
|
||||
class Event
|
||||
class Event extends BaseEntity
|
||||
{
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
private $id;
|
||||
use TagTrait;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="startdate", type="datetimetz")
|
||||
*/
|
||||
private $startdate;
|
||||
protected $startdate;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="enddate", type="datetimetz", nullable=true)
|
||||
*/
|
||||
private $enddate;
|
||||
protected $enddate;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="summary", type="string", length=255)
|
||||
*/
|
||||
private $summary;
|
||||
protected $summary;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="description", type="text", nullable=true)
|
||||
*/
|
||||
private $description;
|
||||
protected $description;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="locations_id", type="integer", nullable=true)
|
||||
*/
|
||||
private $locations_id;
|
||||
protected $locations_id;
|
||||
|
||||
/**
|
||||
* @var Location
|
||||
|
@ -63,14 +63,14 @@ class Event
|
|||
* @ORM\ManyToOne(targetEntity="Location")
|
||||
* @ORM\JoinColumn(name="locations_id", referencedColumnName="id")
|
||||
*/
|
||||
private $location;
|
||||
protected $location;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="url", type="string", length=255, nullable=true)
|
||||
*/
|
||||
private $url;
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
|
@ -81,179 +81,7 @@ class Event
|
|||
* inverseJoinColumns={@ORM\JoinColumn(name="tags_id", referencedColumnName="id")}
|
||||
* )
|
||||
*/
|
||||
private $tags = [];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
||||
*/
|
||||
private $slug = '';
|
||||
|
||||
/**
|
||||
* @param string $slug
|
||||
*/
|
||||
public function setSlug($slug)
|
||||
{
|
||||
$this->slug = $slug;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSlug()
|
||||
{
|
||||
return $this->slug;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get id
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set startdate
|
||||
*
|
||||
* @param \DateTime $startdate
|
||||
* @return Event
|
||||
*/
|
||||
public function setStartdate($startdate)
|
||||
{
|
||||
$this->startdate = $startdate;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get startdate
|
||||
*
|
||||
* @return \DateTime
|
||||
*/
|
||||
public function getStartdate()
|
||||
{
|
||||
return $this->startdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set enddate
|
||||
*
|
||||
* @param \DateTime $enddate
|
||||
* @return Event
|
||||
*/
|
||||
public function setEnddate($enddate)
|
||||
{
|
||||
$this->enddate = $enddate;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get enddate
|
||||
*
|
||||
* @return \DateTime
|
||||
*/
|
||||
public function getEnddate()
|
||||
{
|
||||
return $this->enddate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set summary
|
||||
*
|
||||
* @param string $summary
|
||||
* @return Event
|
||||
*/
|
||||
public function setSummary($summary)
|
||||
{
|
||||
$this->summary = $summary;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get summary
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSummary()
|
||||
{
|
||||
return $this->summary;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set description
|
||||
*
|
||||
* @param string $description
|
||||
* @return Event
|
||||
*/
|
||||
public function setDescription($description)
|
||||
{
|
||||
$this->description = $description;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get description
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set location
|
||||
*
|
||||
* @param string $locations_id
|
||||
* @return Event
|
||||
*/
|
||||
public function setLocationsID($locations_id)
|
||||
{
|
||||
$this->locations_id = $locations_id;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get location
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLocationsID()
|
||||
{
|
||||
return $this->locations_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set url
|
||||
*
|
||||
* @param string $url
|
||||
* @return Event
|
||||
*/
|
||||
public function setUrl($url)
|
||||
{
|
||||
$this->url = $url;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get url
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUrl()
|
||||
{
|
||||
return $this->url;
|
||||
}
|
||||
protected $tags = [];
|
||||
|
||||
/**
|
||||
* @param \Hackspace\Bundle\CalciferBundle\Entity\Location $location
|
||||
|
@ -273,41 +101,20 @@ class Event
|
|||
return $this->location;
|
||||
}
|
||||
|
||||
public function getTags() {
|
||||
return $this->tags;
|
||||
}
|
||||
|
||||
public function hasTag(Tag $tag) {
|
||||
if ($this->tags instanceof PersistentCollection) {
|
||||
return $this->tags->contains($tag);
|
||||
} elseif (is_array($this->tags)) {
|
||||
return in_array($tag,$this->tags);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function addTag(Tag $tag) {
|
||||
/** @var PersistentCollection $this->tags */
|
||||
if (!$this->hasTag($tag)) {
|
||||
$this->tags[] = $tag;
|
||||
}
|
||||
}
|
||||
|
||||
public function isValid() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getTagsAsText() {
|
||||
if (count($this->tags) > 0) {
|
||||
$tags = [];
|
||||
foreach ($this->tags as $tag) {
|
||||
$tags[] = $tag->getName();
|
||||
public function getFormatedDate() {
|
||||
$retval = $this->startdate->format('Y-m-d H:i');
|
||||
if (!is_null($this->enddate)) {
|
||||
$retval .= " — ";
|
||||
if ($this->startdate->format('Y-m-d') == $this->enddate->format('Y-m-d')) {
|
||||
$retval .= $this->enddate->format('H:i');
|
||||
} else {
|
||||
$retval .= $this->enddate->format('Y-m-d H:i');
|
||||
}
|
||||
return implode(',',$tags);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
return $retval;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,141 +7,35 @@ use Doctrine\ORM\Mapping as ORM;
|
|||
/**
|
||||
* Location
|
||||
*
|
||||
* @property string $name
|
||||
* @property float $lon
|
||||
* @property float $lat
|
||||
*
|
||||
* @ORM\Table(name="locations")
|
||||
* @ORM\Entity
|
||||
*/
|
||||
class Location
|
||||
class Location extends BaseEntity
|
||||
{
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="name", type="string", length=255)
|
||||
*/
|
||||
private $name;
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* @var float
|
||||
*
|
||||
* @ORM\Column(name="lon", type="float", nullable=true)
|
||||
*/
|
||||
private $lon;
|
||||
protected $lon;
|
||||
|
||||
/**
|
||||
* @var float
|
||||
*
|
||||
* @ORM\Column(name="lat", type="float", nullable=true)
|
||||
*/
|
||||
private $lat;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
||||
*/
|
||||
private $slug = '';
|
||||
|
||||
/**
|
||||
* @param string $slug
|
||||
*/
|
||||
public function setSlug($slug)
|
||||
{
|
||||
$this->slug = $slug;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSlug()
|
||||
{
|
||||
return $this->slug;
|
||||
}
|
||||
protected $lat;
|
||||
|
||||
|
||||
/**
|
||||
* Get id
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set name
|
||||
*
|
||||
* @param string $name
|
||||
* @return Location
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set lon
|
||||
*
|
||||
* @param float $lon
|
||||
* @return Location
|
||||
*/
|
||||
public function setLon($lon)
|
||||
{
|
||||
$this->lon = $lon;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get lon
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getLon()
|
||||
{
|
||||
return $this->lon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set lat
|
||||
*
|
||||
* @param float $lat
|
||||
* @return Location
|
||||
*/
|
||||
public function setLat($lat)
|
||||
{
|
||||
$this->lat = $lat;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get lat
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getLat()
|
||||
{
|
||||
return $this->lat;
|
||||
}
|
||||
}
|
||||
|
|
100
src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEvent.php
Executable file
100
src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEvent.php
Executable file
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\ORM\PersistentCollection;
|
||||
|
||||
/**
|
||||
* RepeatEvent
|
||||
*
|
||||
* @property \DateTime $nextdate
|
||||
* @property integer $duration
|
||||
* @property string $repeating_pattern
|
||||
* @property string $summary
|
||||
* @property string $description
|
||||
* @property Location $location
|
||||
* @property string $url
|
||||
* @property array $tags
|
||||
*
|
||||
* @ORM\Table(name="repeating_events")
|
||||
* @ORM\Entity
|
||||
*/
|
||||
class RepeatingEvent extends BaseEntity
|
||||
{
|
||||
use TagTrait;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="nextdate", type="datetimetz")
|
||||
*/
|
||||
protected $nextdate;
|
||||
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* @ORM\Column(name="duration", type="integer", nullable=true)
|
||||
*/
|
||||
protected $duration;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="repeating_pattern", type="string", length=255)
|
||||
*/
|
||||
protected $repeating_pattern = '';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="summary", type="string", length=255)
|
||||
*/
|
||||
protected $summary;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="description", type="text", nullable=true)
|
||||
*/
|
||||
protected $description;
|
||||
|
||||
/**
|
||||
* @var Location
|
||||
*
|
||||
* @ORM\ManyToOne(targetEntity="Location")
|
||||
* @ORM\JoinColumn(name="locations_id", referencedColumnName="id")
|
||||
*/
|
||||
protected $location;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="url", type="string", length=255, nullable=true)
|
||||
*/
|
||||
protected $url;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @ORM\ManyToMany(targetEntity="Tag")
|
||||
* @ORM\JoinTable(name="repeating_events2tags",
|
||||
* joinColumns={@ORM\JoinColumn(name="repeating_events_id", referencedColumnName="id")},
|
||||
* inverseJoinColumns={@ORM\JoinColumn(name="tags_id", referencedColumnName="id")}
|
||||
* )
|
||||
*/
|
||||
protected $tags = [];
|
||||
|
||||
public function getFormatedRepeatPattern() {
|
||||
switch($this->repeating_pattern) {
|
||||
case 'P7D':
|
||||
return 'Wöchentlich';
|
||||
case 'P14D':
|
||||
return 'Alle 2 Wochen';
|
||||
case 'P1M':
|
||||
return 'Monatlich';
|
||||
default:
|
||||
return $this->repeating_pattern;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,77 +10,12 @@ use Doctrine\ORM\Mapping as ORM;
|
|||
* @ORM\Table(name="tags")
|
||||
* @ORM\Entity
|
||||
*/
|
||||
class Tag
|
||||
class Tag extends BaseEntity
|
||||
{
|
||||
/**
|
||||
* @var integer
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="name", type="string", length=255)
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
||||
*/
|
||||
private $slug = '';
|
||||
|
||||
/**
|
||||
* @param string $slug
|
||||
*/
|
||||
public function setSlug($slug)
|
||||
{
|
||||
$this->slug = $slug;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSlug()
|
||||
{
|
||||
return $this->slug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get id
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set name
|
||||
*
|
||||
* @param string $name
|
||||
* @return Tag
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
protected $name;
|
||||
}
|
||||
|
|
61
src/Hackspace/Bundle/CalciferBundle/Entity/TagTrait.php
Executable file
61
src/Hackspace/Bundle/CalciferBundle/Entity/TagTrait.php
Executable file
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tim
|
||||
* Date: 28.07.14
|
||||
* Time: 21:00
|
||||
*/
|
||||
|
||||
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\PersistentCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
trait TagTrait
|
||||
{
|
||||
public function getTags()
|
||||
{
|
||||
return $this->tags;
|
||||
}
|
||||
|
||||
public function clearTags()
|
||||
{
|
||||
if ($this->tags instanceof PersistentCollection) {
|
||||
$this->tags->clear();
|
||||
} elseif (is_array($this->tags)) {
|
||||
$this->tags = [];
|
||||
}
|
||||
}
|
||||
|
||||
public function hasTag(Tag $tag)
|
||||
{
|
||||
if ($this->tags instanceof PersistentCollection) {
|
||||
return $this->tags->contains($tag);
|
||||
} elseif (is_array($this->tags)) {
|
||||
return in_array($tag, $this->tags);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function addTag(Tag $tag)
|
||||
{
|
||||
if (!$this->hasTag($tag)) {
|
||||
$this->tags[] = $tag;
|
||||
}
|
||||
}
|
||||
|
||||
public function getTagsAsText()
|
||||
{
|
||||
if (count($this->tags) > 0) {
|
||||
$tags = [];
|
||||
foreach ($this->tags as $tag) {
|
||||
$tags[] = $tag->name;
|
||||
}
|
||||
return implode(',', $tags);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,13 +6,17 @@
|
|||
}
|
||||
}
|
||||
|
||||
.startdate,.location,.url,.edit {
|
||||
.startdate,.location,.url,.action {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
a i.icon {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ul.tags {
|
||||
padding-left: 0;
|
||||
margin: 0;
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
body {
|
||||
margin: 0;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
}
|
||||
|
||||
header {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
header .ui.grid > .column, .title.ui.grid > .column {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.box h2 {
|
||||
font-size: 1rem !important;
|
||||
}
|
||||
|
||||
a .icon {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a, a:hover, a:visited {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#mission-statement {
|
||||
overflow: hidden;
|
||||
|
||||
img {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 153 KiB |
|
@ -0,0 +1,6 @@
|
|||
$(document).ready(function(){
|
||||
$('.ui.dropdown.selection')
|
||||
.dropdown()
|
||||
.dropdown('set value',$('.ui.dropdown.selection input[type=hidden]').val())
|
||||
;
|
||||
});
|
29
src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/delete.html.twig
Executable file
29
src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/delete.html.twig
Executable file
|
@ -0,0 +1,29 @@
|
|||
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||
|
||||
{% block css %}
|
||||
{% stylesheets filter="compass"
|
||||
"@CalciferBundle/Resources/assets/css/events.scss" %}
|
||||
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||
{% endstylesheets %}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{% javascripts
|
||||
"@CalciferBundle/Resources/assets/js/events.js" %}
|
||||
<script src="{{ asset_url }}"></script>
|
||||
{% endjavascripts %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body -%}
|
||||
<div class="ui one column page grid">
|
||||
<div class="ui column">
|
||||
<div class="ui segment event box">
|
||||
<form class="ui form" method="post">
|
||||
<p>Möchtest du die Veranstaltung <strong>„{{ entity.summary }}“</strong> zum Datum <strong>„{{ entity.startdate.format('Y-m-d H:i') }}“</strong> wirklich löschen?</p>
|
||||
<button name="confirmation" value="true" class="ui button red">Ja</button>
|
||||
<a href="{{ path('_show', {'slug' : entity.slug }) }}" class="ui button green">Nein</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -4,8 +4,7 @@
|
|||
{% stylesheets filter="compass"
|
||||
"@CalciferBundle/Resources/assets/css/jquery.datetimepicker.scss"
|
||||
"@CalciferBundle/Resources/assets/css/events.scss"
|
||||
"@CalciferBundle/Resources/assets/css/leaflet.scss"
|
||||
%}
|
||||
"@CalciferBundle/Resources/assets/css/leaflet.scss" %}
|
||||
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||
{% endstylesheets %}
|
||||
{% endblock %}
|
||||
|
@ -14,8 +13,7 @@
|
|||
{% javascripts
|
||||
"@CalciferBundle/Resources/assets/js/jquery.datetimepicker.js"
|
||||
"@CalciferBundle/Resources/assets/js/events.js"
|
||||
"@CalciferBundle/Resources/assets/js/leaflet.js"
|
||||
%}
|
||||
"@CalciferBundle/Resources/assets/js/leaflet.js" %}
|
||||
<script src="{{ asset_url }}"></script>
|
||||
{% endjavascripts %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,25 +1,41 @@
|
|||
<div class="ui column">
|
||||
<div class="ui segment event box">
|
||||
<h2 class="ui dividing header segment green inverted"><a href="{{ path('_show', { 'slug': entity.slug }) }}">{{ entity.summary }}</a>
|
||||
<h2 class="ui dividing header segment green inverted"><a
|
||||
href="{{ path('_show', { 'slug': entity.slug }) }}">{{ entity.summary }}</a>
|
||||
</h2>
|
||||
|
||||
<p class="edit">
|
||||
<a href="{{ path('_edit', {'slug' : entity.slug }) }}"><i class="circular icon edit green inverted link"></i>Bearbeiten</a>
|
||||
{% if (detail|default(false)) %}
|
||||
<p class="action">
|
||||
<a href="{{ path('_edit', {'slug' : entity.slug }) }}"><i
|
||||
class="circular icon edit green inverted link"></i>Bearbeiten</a>
|
||||
</p>
|
||||
|
||||
<p class="action">
|
||||
<a href="{{ path('_delete', {'slug' : entity.slug }) }}"><i class="circular icon delete green inverted link"></i>Löschen</a>
|
||||
</p>
|
||||
|
||||
<p class="action">
|
||||
<a href="{{ path('_copy', {'slug' : entity.slug }) }}"><i class="circular icon copy green inverted link"></i>Kopieren</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<p class="startdate ">
|
||||
<i class="circular icon calendar green inverted link" title="Wann?" data-content="Wann?"></i>{{ entity.startdate.format('Y-m-d H:i') }}
|
||||
<i class="circular icon calendar green inverted link" title="Wann?"
|
||||
data-content="Wann?"></i>{{ entity.getFormatedDate() }}
|
||||
</p>
|
||||
|
||||
{% if entity.location is not null %}
|
||||
<p class="location">
|
||||
<a href="{{ path('location_show', {'slug' : entity.location.slug }) }}"><i class="circular icon map marker green inverted link" title="Wo?" data-content="Wo?"></i>{{ entity.location.name }}</a>
|
||||
<a href="{{ path('location_show', {'slug' : entity.location.slug }) }}"><i
|
||||
class="circular icon map marker green inverted link" title="Wo?"
|
||||
data-content="Wo?"></i>{{ entity.location.name }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if entity.tags|length > 0 %}
|
||||
<ul class="tags">
|
||||
{% for tag in entity.tags %}
|
||||
<li class="tag"><a href="{{ path('tag_show',{'slug' : tag.slug }) }}"><i class="circular icon tag green inverted link"></i>{{ tag.name }}</a></li>
|
||||
<li class="tag"><a href="{{ path('tag_show',{'slug' : tag.slug }) }}"><i
|
||||
class="circular icon tag green inverted link"></i>{{ tag.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
@ -37,6 +53,5 @@
|
|||
{% else %}
|
||||
<p>{{ entity.description|markdown }}</p>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -1,4 +1,4 @@
|
|||
<form method="post" action="{% if entity.id > 0 %}{{ path('_update',{'slug':entity.slug}) }}{% else %}{{ path('_create') }}{% endif %}">
|
||||
<form method="post" action="{% if entity.id|default(0) > 0 %}{{ path('_update',{'slug':entity.slug}) }}{% else %}{{ path('_create') }}{% endif %}">
|
||||
<div class="ui form segment">
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_startdate">Startdatum</label>
|
||||
|
@ -9,7 +9,7 @@
|
|||
name="startdate"
|
||||
required="required"
|
||||
value="{{ entity.startdate.format('Y-m-d H:i')|default('') }}"
|
||||
placeholder="{{ "now"|date('d.m.Y H:i') }}"
|
||||
placeholder="{{ "now"|date('Y-m-d H:i') }}"
|
||||
class="form-control">
|
||||
|
||||
<i class="icon calendar"></i>
|
||||
|
@ -27,7 +27,7 @@
|
|||
id="event_enddate"
|
||||
name="enddate"
|
||||
value="{{ entity.enddate.format('Y-m-d H:i')|default('') }}"
|
||||
placeholder="{{ "now"|date('d.m.Y H:i') }}"
|
||||
placeholder="{{ "now"|date('Y-m-d H:i') }}"
|
||||
class="form-control">
|
||||
|
||||
<i class="icon calendar"></i>
|
||||
|
|
|
@ -18,6 +18,6 @@
|
|||
|
||||
{% block body -%}
|
||||
<div class="ui one column page grid">
|
||||
{{ include('CalciferBundle:Event:event_box.html.twig') }}
|
||||
{{ include('CalciferBundle:Event:event_box.html.twig',{'entity' : entity,'detail' : true}) }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||
|
||||
{% block css %}
|
||||
{% stylesheets filter="compass"
|
||||
"@CalciferBundle/Resources/assets/css/jquery.datetimepicker.scss"
|
||||
"@CalciferBundle/Resources/assets/css/events.scss"
|
||||
"@CalciferBundle/Resources/assets/css/leaflet.scss"
|
||||
%}
|
||||
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||
{% endstylesheets %}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{% javascripts
|
||||
"@CalciferBundle/Resources/assets/js/jquery.datetimepicker.js"
|
||||
"@CalciferBundle/Resources/assets/js/repeating_events.js"
|
||||
"@CalciferBundle/Resources/assets/js/events.js"
|
||||
"@CalciferBundle/Resources/assets/js/leaflet.js"
|
||||
%}
|
||||
<script src="{{ asset_url }}"></script>
|
||||
{% endjavascripts %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body -%}
|
||||
<div class="ui one column page grid">
|
||||
<div class="ui column">
|
||||
<h1>Wiederholenden Termin bearbeiten</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui one column page grid">
|
||||
<div class="ui column">
|
||||
{{ include('CalciferBundle:RepeatingEvent:repeating_event_form.html.twig',{'entity':entity}) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,65 @@
|
|||
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||
|
||||
{% block css %}
|
||||
{% stylesheets filter="compass"
|
||||
"@CalciferBundle/Resources/assets/css/events.scss" %}
|
||||
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||
{% endstylesheets %}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{% javascripts
|
||||
"@CalciferBundle/Resources/assets/js/events.js" %}
|
||||
<script src="{{ asset_url }}"></script>
|
||||
{% endjavascripts %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body -%}
|
||||
<div class="ui one column page grid title">
|
||||
<div class="ui column">
|
||||
<h1 class="ui header">
|
||||
Wiederholende Termine
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui one column page grid stackable">
|
||||
<div class="column">
|
||||
<table class="ui table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Zusammenfassung</th>
|
||||
<th>Nächstes Datum</th>
|
||||
<th>Wiederholungsmuster</th>
|
||||
<th>Aktionen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for entity in entities %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ entity.summary }}
|
||||
</td>
|
||||
<td>
|
||||
{{ entity.nextdate.format('Y-m-d H:i') }}
|
||||
</td>
|
||||
<td>
|
||||
{{ entity.getFormatedRepeatPattern() }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ path('repeating_event_edit', {'slug':entity.slug}) }}">Bearbeiten</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="4"><a href="{{ path('repeating_event_new') }}">Neuen wiederholenden Termin anlegen</a></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,35 @@
|
|||
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||
|
||||
{% block css %}
|
||||
{% stylesheets filter="compass"
|
||||
"@CalciferBundle/Resources/assets/css/jquery.datetimepicker.scss"
|
||||
"@CalciferBundle/Resources/assets/css/events.scss"
|
||||
"@CalciferBundle/Resources/assets/css/leaflet.scss" %}
|
||||
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||
{% endstylesheets %}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{% javascripts
|
||||
"@CalciferBundle/Resources/assets/js/jquery.datetimepicker.js"
|
||||
"@CalciferBundle/Resources/assets/js/repeating_events.js"
|
||||
"@CalciferBundle/Resources/assets/js/events.js"
|
||||
"@CalciferBundle/Resources/assets/js/leaflet.js" %}
|
||||
<script src="{{ asset_url }}"></script>
|
||||
{% endjavascripts %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body -%}
|
||||
<div class="ui one column page grid">
|
||||
<div class="ui column">
|
||||
<h1>Wiederholenden Termin erstellen</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui one column page grid">
|
||||
<div class="ui column">
|
||||
{{ include('CalciferBundle:RepeatingEvent:repeating_event_form.html.twig') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,166 @@
|
|||
<form method="post"
|
||||
action="{% if entity.id|default(0) > 0 %}{{ path('repeating_event_update',{'slug':entity.slug}) }}{% else %}{{ path('repeating_event_create') }}{% endif %}">
|
||||
<div class="ui form segment">
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_startdate">Nächster Termin</label>
|
||||
|
||||
<div class="ui left labeled icon input">
|
||||
<input type="datetime"
|
||||
id="event_nextdate"
|
||||
name="nextdate"
|
||||
required="required"
|
||||
value="{{ entity.nextdate.format('Y-m-d H:i')|default('') }}"
|
||||
placeholder="{{ "now"|date('d.m.Y H:00') }}"
|
||||
class="form-control">
|
||||
|
||||
<i class="icon calendar"></i>
|
||||
|
||||
<div class="ui corner label">
|
||||
<i class="icon asterisk"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_duration">Dauer</label>
|
||||
|
||||
<div class="ui left labeled input attached-label">
|
||||
<input type="text"
|
||||
id="event_duration"
|
||||
name="duration"
|
||||
pattern="\d*"
|
||||
value="{{ entity.duration }}"
|
||||
class="form-control">
|
||||
|
||||
<div class="ui bottom attached label">
|
||||
Hier gibst du bitte die Dauer der Veranstaltung in Minuten an.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_duration">Wiederholungsmuster</label>
|
||||
|
||||
<div class="ui left labeled input">
|
||||
<div class="ui dropdown selection fluid">
|
||||
<input name="repeating_pattern" type="hidden" value="{{ entity.repeating_pattern|default('') }}">
|
||||
|
||||
<div class="default text">Bitte wähle einen Wert aus</div>
|
||||
<i class="dropdown icon"></i>
|
||||
|
||||
<div class="menu">
|
||||
<div class="item" data-value="P7D">Wöchentlich</div>
|
||||
<div class="item" data-value="P14D">Jede 2. Woche</div>
|
||||
<div class="item" data-value="P1M">Monatlich</div>
|
||||
</div>
|
||||
<div class="ui corner label">
|
||||
<i class="icon asterisk"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="" for="event_summary">Zusammenfassung</label>
|
||||
|
||||
<div class="ui left labeled input">
|
||||
<input type="text"
|
||||
id="event_summary"
|
||||
name="summary"
|
||||
value="{{ entity.summary|default('') }}"
|
||||
required="required"
|
||||
maxlength="255"
|
||||
class="form-control">
|
||||
|
||||
<div class="ui corner label">
|
||||
<i class="icon asterisk"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_summary">Beschreibung</label>
|
||||
|
||||
<div class="ui left labeled icon input attached-label">
|
||||
<textarea name="description">{{ entity.description|default('') }}</textarea>
|
||||
|
||||
<div class="ui bottom attached label">Du kannst hier <a href="https://en.wikipedia.org/wiki/Markdown">Markdown</a>
|
||||
benutzen.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_url">URL</label>
|
||||
|
||||
<div class="ui left labeled icon input">
|
||||
<input type="text"
|
||||
id="event_url"
|
||||
name="url"
|
||||
maxlength="255"
|
||||
value="{{ entity.url|default('') }}"
|
||||
class="form-control">
|
||||
<i class="icon globe"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_location">Ort</label>
|
||||
|
||||
<div class="ui left labeled icon input attached-{% if entity.location.lat|default(0) > 0 %}geo-{% endif %}label">
|
||||
<input type="text"
|
||||
id="event_location"
|
||||
name="location"
|
||||
maxlength="255"
|
||||
value="{{ entity.location.name|default('') }}"
|
||||
class="form-control">
|
||||
<input type="hidden" name="location_lat" value="{{ entity.location.lat|default('') }}">
|
||||
<input type="hidden" name="location_lon" value="{{ entity.location.lon|default('') }}">
|
||||
<i class="icon map marker"></i>
|
||||
|
||||
<div class="ui bottom attached label">
|
||||
Du kannst zu diesem Ort auch Geokoordinaten <a href="#" class="add_geo">hinterlegen</a>.<br/>
|
||||
<span class="coords">{% if entity.location.lat|default(0) > 0 %}Folgende Koordinaten sind angegeben: lat:{{ entity.location.lat }}, lon:{{ entity.location.lon }}{% endif %}</span>
|
||||
</div>
|
||||
<div class="ui modal geo chooser">
|
||||
<i class="close icon"></i>
|
||||
|
||||
<div class="header">
|
||||
Wähle einen Punkt auf der Karte
|
||||
</div>
|
||||
<div class="content">
|
||||
<div id="map"></div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui button cancel">
|
||||
Cancel
|
||||
</div>
|
||||
<div class="ui button ok">
|
||||
Okay
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="" for="event_tags">Tags</label>
|
||||
|
||||
<div class="ui left icon input attached-label">
|
||||
<input type="text"
|
||||
id="event_tags"
|
||||
name="tags"
|
||||
value="{{ entity.getTagsAsText() }}"
|
||||
class="form-control">
|
||||
<i class="icon tag"></i>
|
||||
|
||||
<div class="ui bottom attached label">Du kannst hier kommasepariert <a
|
||||
href="https://en.wikipedia.org/wiki/Tag_%28metadata%29">Tags</a> angeben.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="ui button blue" value="Speichern"/>
|
||||
</div>
|
||||
|
||||
</form>
|
|
@ -5,9 +5,15 @@
|
|||
<title>{% block title %}Terminverwaltung Calcifer{% endblock %}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<!-- Bootstrap -->
|
||||
<link href="{{ asset('css/semantic.css') }}" rel="stylesheet" media="screen">
|
||||
<link rel="shortcut icon" href="/favicon.png" />
|
||||
<link href='//fonts.googleapis.com/css?family=Roboto:400,700' rel='stylesheet' type='text/css'>
|
||||
<link href="{{ asset('css/custom.css') }}" rel="stylesheet" media="screen">
|
||||
{% stylesheets filter="compass"
|
||||
"@CalciferBundle/Resources/assets/css/main.scss"
|
||||
"css/semantic.scss"
|
||||
"css/custom.scss"
|
||||
%}
|
||||
<link rel="stylesheet" href="{{ asset_url }}" media="screen" />
|
||||
{% endstylesheets %}
|
||||
{% block css %}
|
||||
|
||||
{% endblock %}
|
||||
|
@ -17,6 +23,21 @@
|
|||
<body>
|
||||
{% include "CalciferBundle::navigation.html.twig" %}
|
||||
|
||||
<div class="ui one column page grid">
|
||||
<div class="column">
|
||||
<div id="mission-statement" class="ui message green">
|
||||
{% image '@CalciferBundle/Resources/assets/images/logo.png' %}
|
||||
<img
|
||||
title="Eine Zeichnung von Calcifer. Gezeichnet von simply-Sylvan (http://simply-sylvan.deviantart.com/art/Calcifer-Purple-176746086)"
|
||||
alt="Eine Zeichnung von Calcifer. Gezeichnet von simply-Sylvan (http://simply-sylvan.deviantart.com/art/Calcifer-Purple-176746086)"
|
||||
src="{{ asset_url }}"
|
||||
class="ui image small floated left" />
|
||||
{% endimage %}
|
||||
<p>Calcifer ist ein Daemon aus dem Anime <a href="http://anidb.net/perl-bin/animedb.pl?show=anime&aid=1218">„Das wandelnde Schloss“</a>, der sich darum kümmert das sich Howls Schloss weiter bewegt. Diese Terminverwaltung soll dafür sorgen das sich der <a href="https://www.krautspace.de/">Hackspace Jena</a> auch weiter bewegt und viele tolle Termine statfinden.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="main" class="segment">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<div class="ui column">
|
||||
<div class="title item"><a href="{{ path('') }}">Calcifer</a></div>
|
||||
<div class="item"><a href="{{ path('_new') }}">Neuer Termin</a> </div>
|
||||
<div class="item"><a href="{{ path('repeating_event_show') }}">Wiederholende Termine</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
|
@ -1,460 +0,0 @@
|
|||
/* line 1, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker {
|
||||
box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #BBBBBB;
|
||||
border-left: 1px solid #CCCCCC;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-top: 1px solid #CCCCCC;
|
||||
color: #333333;
|
||||
font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
||||
padding: 8px;
|
||||
padding-left: 0px;
|
||||
padding-top: 2px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* line 20, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker iframe {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 75px;
|
||||
height: 210px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/*For IE8 or lower*/
|
||||
/* line 31, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker button {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
/* line 35, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_noselect {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-o-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* line 45, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_noselect::selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* line 49, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_noselect::-moz-selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* line 53, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker.xdsoft_inline {
|
||||
display: inline-block;
|
||||
position: static;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* line 59, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker * {
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/* line 66, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* line 70, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* line 74, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker {
|
||||
width: 224px;
|
||||
float: left;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
/* line 80, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker {
|
||||
width: 58px;
|
||||
float: left;
|
||||
text-align: center;
|
||||
margin-left: 8px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/* line 88, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker.active + .xdsoft_timepicker {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
/* line 93, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_mounthpicker {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* line 98, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_today_button {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg==");
|
||||
}
|
||||
|
||||
/* line 102, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_prev {
|
||||
float: left;
|
||||
background-position: -20px 0px;
|
||||
}
|
||||
|
||||
/* line 107, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_today_button {
|
||||
float: left;
|
||||
background-position: -70px 0px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* line 113, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_next {
|
||||
float: right;
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
|
||||
/* line 121, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_today_button {
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
border: 0px none currentColor;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
height: 30px;
|
||||
opacity: 0.5;
|
||||
outline: medium none currentColor;
|
||||
overflow: hidden;
|
||||
padding: 0px;
|
||||
position: relative;
|
||||
text-indent: 100%;
|
||||
white-space: nowrap;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
/* line 139, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
|
||||
float: none;
|
||||
background-position: -40px -15px;
|
||||
height: 15px;
|
||||
width: 30px;
|
||||
display: block;
|
||||
margin-left: 14px;
|
||||
margin-top: 7px;
|
||||
}
|
||||
|
||||
/* line 149, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
|
||||
background-position: -40px 0px;
|
||||
margin-bottom: 7px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/* line 155, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
|
||||
height: 151px;
|
||||
overflow: hidden;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
}
|
||||
|
||||
/* line 161, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div {
|
||||
background: #F5F5F5;
|
||||
border-top: 1px solid #DDDDDD;
|
||||
color: #666666;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-collapse: collapse;
|
||||
cursor: pointer;
|
||||
border-bottom-width: 0px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
/* line 174, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:first-child {
|
||||
border-top-width: 0px;
|
||||
}
|
||||
|
||||
/* line 180, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_today_button:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_next:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_prev:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* line 184, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label {
|
||||
display: inline;
|
||||
position: relative;
|
||||
z-index: 9999;
|
||||
margin: 0;
|
||||
padding: 5px 3px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
font-weight: bold;
|
||||
background-color: #fff;
|
||||
float: left;
|
||||
width: 182px;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* line 200, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* line 204, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
|
||||
border: 1px solid #ccc;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 30px;
|
||||
z-index: 101;
|
||||
display: none;
|
||||
background: #fff;
|
||||
max-height: 160px;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
/* line 216, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect {
|
||||
right: -7px;
|
||||
}
|
||||
|
||||
/* line 220, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
/* line 224, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
|
||||
color: #fff;
|
||||
background: #ff8000;
|
||||
}
|
||||
|
||||
/* line 229, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
|
||||
padding: 2px 10px 2px 5px;
|
||||
}
|
||||
|
||||
/* line 233, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
|
||||
background: #33AAFF;
|
||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* line 240, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_month {
|
||||
width: 90px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* line 245, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 249, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_year {
|
||||
width: 56px;
|
||||
}
|
||||
|
||||
/* line 253, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* line 259, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td > div {
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
/* line 263, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
/* line 267, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td, .xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
width: 14.2857142%;
|
||||
background: #F5F5F5;
|
||||
border: 1px solid #DDDDDD;
|
||||
color: #666666;
|
||||
font-size: 12px;
|
||||
text-align: right;
|
||||
padding: 0px;
|
||||
border-collapse: collapse;
|
||||
cursor: pointer;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
/* line 280, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
background: #F1F1F1;
|
||||
}
|
||||
|
||||
/* line 284, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
|
||||
color: #33AAFF;
|
||||
}
|
||||
|
||||
/* line 290, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_current {
|
||||
background: #33AAFF;
|
||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* line 299, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
|
||||
.xdsoft_datetimepicker .xdsoft_time_box > div > div.xdsoft_disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* line 303, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/* line 308, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:hover {
|
||||
color: #fff !important;
|
||||
background: #ff8000 !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
/* line 315, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_disabled:hover {
|
||||
color: inherit !important;
|
||||
background: inherit !important;
|
||||
/*box-shadow: inherit !important;*/
|
||||
}
|
||||
|
||||
/* line 321, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* line 328, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_copyright {
|
||||
color: #ccc !important;
|
||||
font-size: 10px;
|
||||
clear: both;
|
||||
float: none;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
/* line 336, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_copyright a {
|
||||
color: #eee !important;
|
||||
}
|
||||
|
||||
/* line 340, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_copyright a:hover {
|
||||
color: #aaa !important;
|
||||
}
|
||||
|
||||
/* line 344, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_time_box {
|
||||
position: relative;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
/* line 349, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_scrollbar > .xdsoft_scroller {
|
||||
background: #ccc !important;
|
||||
height: 20px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* line 355, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_scrollbar {
|
||||
position: absolute;
|
||||
width: 7px;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* line 364, assetic_compassiP1C2P.scss */
|
||||
.xdsoft_scroller_box {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* line 2, assetic_compass09ABip.scss */
|
||||
.event.box h2 {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
/* line 4, assetic_compass09ABip.scss */
|
||||
.event.box h2 a, .event.box h2 a:hover, .event.box h2 a:visited {
|
||||
color: #ffffff;
|
||||
}
|
||||
/* line 9, assetic_compass09ABip.scss */
|
||||
.event.box .startdate, .event.box .location, .event.box .url, .event.box .edit {
|
||||
/*float: left;*/
|
||||
display: inline;
|
||||
margin: 0;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
/* line 17, assetic_compass09ABip.scss */
|
||||
.event.box ul.tags {
|
||||
padding-left: 0;
|
||||
/*float: left;*/
|
||||
margin: 0;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
display: inline;
|
||||
}
|
||||
/* line 24, assetic_compass09ABip.scss */
|
||||
.event.box ul.tags li {
|
||||
list-style-type: none;
|
||||
/*float: left;*/
|
||||
display: inline;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
/* line 35, assetic_compass09ABip.scss */
|
||||
form .ui.form .field .attached-label > input, form .ui.form .field .attached-label > textarea {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
/* line 41, assetic_compass09ABip.scss */
|
||||
#map {
|
||||
height: 20rem;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
/* line 2, assetic_compasscXEbLP.scss */
|
||||
.event.box h2 {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
/* line 4, assetic_compasscXEbLP.scss */
|
||||
.event.box h2 a, .event.box h2 a:hover, .event.box h2 a:visited {
|
||||
color: #ffffff;
|
||||
}
|
||||
/* line 9, assetic_compasscXEbLP.scss */
|
||||
.event.box .startdate, .event.box .location, .event.box .url, .event.box .edit {
|
||||
/*float: left;*/
|
||||
display: inline;
|
||||
margin: 0;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
/* line 17, assetic_compasscXEbLP.scss */
|
||||
.event.box ul.tags {
|
||||
padding-left: 0;
|
||||
/*float: left;*/
|
||||
margin: 0;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
display: inline;
|
||||
}
|
||||
/* line 24, assetic_compasscXEbLP.scss */
|
||||
.event.box ul.tags li {
|
||||
list-style-type: none;
|
||||
/*float: left;*/
|
||||
display: inline;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
/* line 35, assetic_compasscXEbLP.scss */
|
||||
form .ui.form .field .attached-label > input, form .ui.form .field .attached-label > textarea {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
/* line 41, assetic_compasscXEbLP.scss */
|
||||
#map {
|
||||
height: 20rem;
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
body {
|
||||
margin: 0;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
}
|
||||
|
||||
header {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
header .ui.grid > .column, .title.ui.grid > .column {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.box h2 {
|
||||
font-size: 1rem !important;
|
||||
}
|
||||
|
||||
#main {
|
||||
margin-top: 4rem;
|
||||
}
|
||||
|
||||
a .icon {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a, a:hover, a:visited {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
0
web/css/custom.scss
Normal file
0
web/css/custom.scss
Normal file
|
@ -1,417 +0,0 @@
|
|||
/* line 1, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker {
|
||||
box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
|
||||
background: #FFFFFF;
|
||||
border-bottom: 1px solid #BBBBBB;
|
||||
border-left: 1px solid #CCCCCC;
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-top: 1px solid #CCCCCC;
|
||||
color: #333333;
|
||||
font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
||||
padding: 8px;
|
||||
padding-left: 0px;
|
||||
padding-top: 2px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* line 20, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker iframe {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 75px;
|
||||
height: 210px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/*For IE8 or lower*/
|
||||
/* line 31, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker button {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
/* line 35, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_noselect {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-o-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* line 45, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_noselect::selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* line 49, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_noselect::-moz-selection {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* line 53, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker.xdsoft_inline {
|
||||
display: inline-block;
|
||||
position: static;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* line 59, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker * {
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/* line 66, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* line 70, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* line 74, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker {
|
||||
width: 224px;
|
||||
float: left;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
/* line 80, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker {
|
||||
width: 58px;
|
||||
float: left;
|
||||
text-align: center;
|
||||
margin-left: 8px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/* line 88, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_datepicker.active + .xdsoft_timepicker {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
/* line 93, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_mounthpicker {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* line 98, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_today_button {
|
||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg==");
|
||||
}
|
||||
|
||||
/* line 102, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_prev {
|
||||
float: left;
|
||||
background-position: -20px 0px;
|
||||
}
|
||||
|
||||
/* line 107, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_today_button {
|
||||
float: left;
|
||||
background-position: -70px 0px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/* line 113, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_next {
|
||||
float: right;
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
|
||||
/* line 121, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_today_button {
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
border: 0px none currentColor;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
height: 30px;
|
||||
opacity: 0.5;
|
||||
outline: medium none currentColor;
|
||||
overflow: hidden;
|
||||
padding: 0px;
|
||||
position: relative;
|
||||
text-indent: 100%;
|
||||
white-space: nowrap;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
/* line 139, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
|
||||
float: none;
|
||||
background-position: -40px -15px;
|
||||
height: 15px;
|
||||
width: 30px;
|
||||
display: block;
|
||||
margin-left: 14px;
|
||||
margin-top: 7px;
|
||||
}
|
||||
|
||||
/* line 149, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
|
||||
background-position: -40px 0px;
|
||||
margin-bottom: 7px;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/* line 155, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
|
||||
height: 151px;
|
||||
overflow: hidden;
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
}
|
||||
|
||||
/* line 161, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div {
|
||||
background: #F5F5F5;
|
||||
border-top: 1px solid #DDDDDD;
|
||||
color: #666666;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-collapse: collapse;
|
||||
cursor: pointer;
|
||||
border-bottom-width: 0px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
/* line 174, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:first-child {
|
||||
border-top-width: 0px;
|
||||
}
|
||||
|
||||
/* line 180, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_today_button:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_next:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_prev:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* line 184, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label {
|
||||
display: inline;
|
||||
position: relative;
|
||||
z-index: 9999;
|
||||
margin: 0;
|
||||
padding: 5px 3px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
font-weight: bold;
|
||||
background-color: #fff;
|
||||
float: left;
|
||||
width: 182px;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* line 200, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* line 204, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
|
||||
border: 1px solid #ccc;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 30px;
|
||||
z-index: 101;
|
||||
display: none;
|
||||
background: #fff;
|
||||
max-height: 160px;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
/* line 216, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect {
|
||||
right: -7px;
|
||||
}
|
||||
|
||||
/* line 220, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
/* line 224, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
|
||||
color: #fff;
|
||||
background: #ff8000;
|
||||
}
|
||||
|
||||
/* line 229, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
|
||||
padding: 2px 10px 2px 5px;
|
||||
}
|
||||
|
||||
/* line 233, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
|
||||
background: #33AAFF;
|
||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* line 240, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_month {
|
||||
width: 90px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* line 245, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* line 249, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_year {
|
||||
width: 56px;
|
||||
}
|
||||
|
||||
/* line 253, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* line 259, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td > div {
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
/* line 263, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
/* line 267, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td, .xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
width: 14.2857142%;
|
||||
background: #F5F5F5;
|
||||
border: 1px solid #DDDDDD;
|
||||
color: #666666;
|
||||
font-size: 12px;
|
||||
text-align: right;
|
||||
padding: 0px;
|
||||
border-collapse: collapse;
|
||||
cursor: pointer;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
/* line 280, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
background: #F1F1F1;
|
||||
}
|
||||
|
||||
/* line 284, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
|
||||
color: #33AAFF;
|
||||
}
|
||||
|
||||
/* line 290, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_current {
|
||||
background: #33AAFF;
|
||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* line 299, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
|
||||
.xdsoft_datetimepicker .xdsoft_time_box > div > div.xdsoft_disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/* line 303, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/* line 308, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:hover {
|
||||
color: #fff !important;
|
||||
background: #ff8000 !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
/* line 315, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
|
||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_disabled:hover {
|
||||
color: inherit !important;
|
||||
background: inherit !important;
|
||||
/*box-shadow: inherit !important;*/
|
||||
}
|
||||
|
||||
/* line 321, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* line 328, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_copyright {
|
||||
color: #ccc !important;
|
||||
font-size: 10px;
|
||||
clear: both;
|
||||
float: none;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
/* line 336, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_copyright a {
|
||||
color: #eee !important;
|
||||
}
|
||||
|
||||
/* line 340, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_datetimepicker .xdsoft_copyright a:hover {
|
||||
color: #aaa !important;
|
||||
}
|
||||
|
||||
/* line 344, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_time_box {
|
||||
position: relative;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
/* line 349, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_scrollbar > .xdsoft_scroller {
|
||||
background: #ccc !important;
|
||||
height: 20px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* line 355, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_scrollbar {
|
||||
position: absolute;
|
||||
width: 7px;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* line 364, assetic_compassQzxHpj.scss */
|
||||
.xdsoft_scroller_box {
|
||||
position: relative;
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/*
|
||||
* # Semantic - Breadcrumb
|
||||
* http://github.com/jlukic/semantic-ui/
|
BIN
web/favicon.ico
BIN
web/favicon.ico
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
BIN
web/favicon.png
Normal file
BIN
web/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 865 B |
1472
web/js/73cfd50.js
1472
web/js/73cfd50.js
File diff suppressed because one or more lines are too long
|
@ -1,56 +0,0 @@
|
|||
/**
|
||||
* Created by tim on 06.07.14.
|
||||
*/
|
||||
|
||||
// initializing with settings
|
||||
|
||||
function addGeoCoordinates(ev) {
|
||||
return false;
|
||||
}
|
||||
var map = null;
|
||||
$(document).ready(function () {
|
||||
$('.icon.link').popup();
|
||||
jQuery('input[type=datetime]').datetimepicker({lang: 'de', format: 'Y-m-d H:i'});
|
||||
|
||||
$('.add_geo').click(addGeoCoordinates);
|
||||
map = L.map('map');
|
||||
|
||||
// add an OpenStreetMap tile layer
|
||||
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
|
||||
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
|
||||
}).addTo(map);
|
||||
|
||||
map.setView([51.505, -0.09], 0);
|
||||
|
||||
L.Icon.Default.imagePath = '/css/images';
|
||||
var popup = L.popup();
|
||||
|
||||
var marker = L.marker();
|
||||
|
||||
function onMapClick(e) {
|
||||
marker
|
||||
.setLatLng(e.latlng)
|
||||
//.setContent("You clicked the map at " + e.latlng.toString())
|
||||
.addTo(map);
|
||||
}
|
||||
|
||||
map.on('click', onMapClick);
|
||||
|
||||
$('.geo.chooser').modal('setting', {
|
||||
closable: false,
|
||||
onApprove: function () {
|
||||
var coords = marker.getLatLng();
|
||||
$('input[name=location_lat]').val(coords.lat);
|
||||
$('input[name=location_lon]').val(coords.lng);
|
||||
$('input[name=location]').css('margin-bottom','3.2rem');
|
||||
$('span.coords').text('Folgende Koordinaten sind angegeben: lat:' +coords.lat + ', lon:' + coords.lng);
|
||||
},
|
||||
onDeny: function () {
|
||||
|
||||
},
|
||||
onVisible: function () {
|
||||
map.invalidateSize(true);
|
||||
map.locate({setView: true});
|
||||
}
|
||||
}).modal('attach events', '.add_geo', 'show');
|
||||
});
|
Reference in a new issue