summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/controller/user_angeltypes_controller.php2
-rw-r--r--includes/controller/users_controller.php15
-rw-r--r--includes/model/AngelType_model.php3
-rw-r--r--includes/model/ShiftEntry_model.php20
-rw-r--r--includes/model/Shifts_model.php137
-rw-r--r--includes/model/UserAngelTypes_model.php9
-rw-r--r--includes/model/UserGroups_model.php17
-rw-r--r--includes/model/User_model.php28
-rw-r--r--includes/pages/admin_questions.php2
-rw-r--r--includes/pages/user_messages.php2
-rw-r--r--includes/pages/user_myshifts.php82
-rw-r--r--includes/pages/user_news.php2
-rw-r--r--includes/pages/user_shifts.php4
-rw-r--r--includes/sys_menu.php2
-rw-r--r--includes/sys_template.php7
-rw-r--r--includes/view/User_view.php148
-rw-r--r--public/index.php52
-rw-r--r--public/vendor/bootstrap-3.2.0/css/theme0.css7
-rw-r--r--public/vendor/bootstrap-3.2.0/css/theme1.css513
-rw-r--r--templates/layout.html20
-rw-r--r--themes/base.scss4
-rw-r--r--themes/theme1.scss49
22 files changed, 670 insertions, 455 deletions
diff --git a/includes/controller/user_angeltypes_controller.php b/includes/controller/user_angeltypes_controller.php
index cb8c72ae..deb9b7f3 100644
--- a/includes/controller/user_angeltypes_controller.php
+++ b/includes/controller/user_angeltypes_controller.php
@@ -12,7 +12,7 @@ function user_angeltypes_unconfirmed_hint() {
return '';
if ($_REQUEST['p'] == 'angeltypes' && $_REQUEST['action'] == 'view' && $_REQUEST['angeltype_id'] == $unconfirmed_user_angeltypes[0]['angeltype_id'])
return '';
- return error(sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", count($unconfirmed_user_angeltypes)), count($unconfirmed_user_angeltypes)) . " " . sprintf(_("The first wants to join %s."), '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $unconfirmed_user_angeltypes[0]['angeltype_id'] . '">' . $unconfirmed_user_angeltypes[0]['name'] . '</a>'), true);
+ return error(sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", count($unconfirmed_user_angeltypes)), count($unconfirmed_user_angeltypes)) . " " . sprintf(_("The first wants to join %s."), '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $unconfirmed_user_angeltypes[0]['angeltype_id'] . '">' . $unconfirmed_user_angeltypes[0]['name'] . '</a>'));
}
/**
diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php
index f65f54e3..77997278 100644
--- a/includes/controller/users_controller.php
+++ b/includes/controller/users_controller.php
@@ -35,9 +35,22 @@ function user_controller() {
$admin_user_privilege = in_array('admin_user', $privileges);
+ $shifts = Shifts_by_user($user_source);
+ foreach ($shifts as &$shift) {
+ $shift['needed_angeltypes'] = sql_select("SELECT DISTINCT `AngelTypes`.* FROM `ShiftEntry` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " ORDER BY `AngelTypes`.`name`");
+ foreach ($shift['needed_angeltypes'] as &$needed_angeltype) {
+ $needed_angeltype['users'] = sql_select("
+ SELECT `ShiftEntry`.`freeloaded`, `User`.*
+ FROM `ShiftEntry`
+ JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID`
+ WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . "
+ AND `ShiftEntry`.`TID`=" . sql_escape($needed_angeltype['id']));
+ }
+ }
+
return array(
$user_source['Nick'],
- User_view($user_source)
+ User_view($user_source, $admin_user_privilege, User_is_freeloader($user_source), User_shift_state($user_source), User_angeltypes($user_source), User_groups($user_source), $shifts, $user['UID'] == $user_source['UID'])
);
}
diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php
index df5e6ae1..d0119e6f 100644
--- a/includes/model/AngelType_model.php
+++ b/includes/model/AngelType_model.php
@@ -2,7 +2,8 @@
/**
* Delete an Angeltype.
- * @param Angeltype $angeltype
+ *
+ * @param Angeltype $angeltype
*/
function AngelType_delete($angeltype) {
return sql_query("
diff --git a/includes/model/ShiftEntry_model.php b/includes/model/ShiftEntry_model.php
index 97fdf784..332620f6 100644
--- a/includes/model/ShiftEntry_model.php
+++ b/includes/model/ShiftEntry_model.php
@@ -1,9 +1,25 @@
<?php
/**
+ * Returns next (or current) shifts of given user.
+ * @param User $user
+ */
+function ShiftEntries_upcoming_for_user($user) {
+ return sql_select("
+ SELECT *
+ FROM `ShiftEntry`
+ JOIN `Shifts` ON `Shifts`.`SID`=`ShiftEntry`.`SID`
+ WHERE `ShiftEntry`.`UID`=" . sql_escape($user['UID']) . "
+ AND `Shifts`.`end` > " . sql_escape(time()) . "
+ ORDER BY `Shifts`.`end`
+ ");
+}
+
+/**
* Returns all shift entries in given shift for given angeltype.
- * @param int $shift_id
- * @param int $angeltype_id
+ *
+ * @param int $shift_id
+ * @param int $angeltype_id
*/
function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id) {
return sql_select("
diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php
index 8cd4b3c2..5d0ec4a2 100644
--- a/includes/model/Shifts_model.php
+++ b/includes/model/Shifts_model.php
@@ -1,79 +1,90 @@
<?php
+function Shifts_by_user($user) {
+ return sql_select("
+ SELECT *
+ FROM `ShiftEntry`
+ JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`)
+ JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`)
+ WHERE `UID`=" . sql_escape($user['UID']) . "
+ ORDER BY `start`
+ ");
+}
/**
* TODO: $_REQUEST is not allowed in model!
* Returns Shift id array
*/
function Shifts_filtered() {
- global $_REQUEST;
- $filter = "";
-
- // filterRoom (Array of integer) - Array of Room IDs (optional, for list request)
- if (isset($_REQUEST['filterRoom']) && is_array($_REQUEST['filterRoom']) ) {
- foreach ( $_REQUEST['filterRoom'] as $key => $value ) {
- $filter .= ", `RID`=" . sql_escape($value) . " ";
- }
- }
-
- //filterTask (Array of integer) - Array if Task (optional, for list request)
- if (isset($_REQUEST['filterTask']) && is_array($_REQUEST['filterTask']) ) {
- foreach ( $_REQUEST['filterTask'] as $key => $value ) {
-// TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
- }
- }
-
- // filterOccupancy (integer) - Occupancy state: (optional, for list request)
- // 1 occupied, 2 free, 3 occupied and free
- if (isset($_REQUEST['filterOccupancy']) && is_array($_REQUEST['filterOccupancy']) ) {
- foreach ( $_REQUEST['filterOccupancy'] as $key => $value ) {
-// TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
- }
- }
-
- // format filter
- if( $filter != "" ) {
- $filter = ' WHERE '. substr($filter, 1);
- }
-
- // real request
- $shifts_source = sql_select("SELECT `SID` FROM `Shifts`". $filter);
- if ($shifts_source === false)
- return false;
- if (count($shifts_source) > 0) {
- return $shifts_source;
- }
- return null;
+ global $_REQUEST;
+ $filter = "";
+
+ // filterRoom (Array of integer) - Array of Room IDs (optional, for list request)
+ if (isset($_REQUEST['filterRoom']) && is_array($_REQUEST['filterRoom'])) {
+ foreach ($_REQUEST['filterRoom'] as $key => $value) {
+ $filter .= ", `RID`=" . sql_escape($value) . " ";
+ }
+ }
+
+ // filterTask (Array of integer) - Array if Task (optional, for list request)
+ if (isset($_REQUEST['filterTask']) && is_array($_REQUEST['filterTask'])) {
+ foreach ($_REQUEST['filterTask'] as $key => $value) {
+ // TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
+ }
+ }
+
+ // filterOccupancy (integer) - Occupancy state: (optional, for list request)
+ // 1 occupied, 2 free, 3 occupied and free
+ if (isset($_REQUEST['filterOccupancy']) && is_array($_REQUEST['filterOccupancy'])) {
+ foreach ($_REQUEST['filterOccupancy'] as $key => $value) {
+ // TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
+ }
+ }
+
+ // format filter
+ if ($filter != "") {
+ $filter = ' WHERE ' . substr($filter, 1);
+ }
+
+ // real request
+ $shifts_source = sql_select("SELECT `SID` FROM `Shifts`" . $filter);
+ if ($shifts_source === false)
+ return false;
+ if (count($shifts_source) > 0) {
+ return $shifts_source;
+ }
+ return null;
}
/**
* Returns Shift by id.
*
- * @param $id Shift ID
+ * @param $id Shift
+ * ID
*/
function Shift($id) {
- $shifts_source = sql_select("SELECT * FROM `Shifts` WHERE `SID`=" . sql_escape($id) . " LIMIT 1");
- $shiftsEntry_source = sql_select("SELECT `TID` , `UID` , `freeloaded` FROM `ShiftEntry` WHERE `SID`=" . sql_escape($id) );
-
- if ($shifts_source === false)
- return false;
- if (count($shifts_source) > 0) {
- $result = $shifts_source[0];
-
- $result['ShiftEntry'] = $shiftsEntry_source;
-
- $temp = NeededAngelTypes_by_shift($id);
- foreach( $temp as $e)
- {
- $result['NeedAngels'][] = array (
- 'TID' => $e['angel_type_id'],
- 'count' => $e['count'],
- 'restricted' => $e['restricted'],
- 'taken' => $e['taken'] );
- }
-
- return $result;
- }
- return null;
+ $shifts_source = sql_select("SELECT * FROM `Shifts` WHERE `SID`=" . sql_escape($id) . " LIMIT 1");
+ $shiftsEntry_source = sql_select("SELECT `TID` , `UID` , `freeloaded` FROM `ShiftEntry` WHERE `SID`=" . sql_escape($id));
+
+ if ($shifts_source === false)
+ return false;
+ if (count($shifts_source) > 0) {
+ $result = $shifts_source[0];
+
+ $result['ShiftEntry'] = $shiftsEntry_source;
+
+ $temp = NeededAngelTypes_by_shift($id);
+ foreach ($temp as $e) {
+ $result['NeedAngels'][] = array(
+ 'TID' => $e['angel_type_id'],
+ 'count' => $e['count'],
+ 'restricted' => $e['restricted'],
+ 'taken' => $e['taken']
+ );
+ }
+
+ return $result;
+ }
+ return null;
}
/**
@@ -92,7 +103,7 @@ function Shifts() {
$needed_angeltypes = NeededAngelTypes_by_shift($shift['SID']);
if ($needed_angeltypes === false)
return false;
-
+
$shift['angeltypes'] = $needed_angeltypes;
}
diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php
index a9944ff1..4a25d25a 100644
--- a/includes/model/UserAngelTypes_model.php
+++ b/includes/model/UserAngelTypes_model.php
@@ -3,6 +3,15 @@
* User angeltypes model
*/
+function User_angeltypes($user) {
+ return sql_select("
+ SELECT `AngelTypes`.*, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`coordinator`
+ FROM `UserAngelTypes`
+ JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`
+ WHERE `UserAngelTypes`.`user_id`=" . sql_escape($user['UID']) . "
+ ");
+}
+
/**
* Gets unconfirmed user angeltypes for angeltypes of which the given user is a coordinator.
*
diff --git a/includes/model/UserGroups_model.php b/includes/model/UserGroups_model.php
new file mode 100644
index 00000000..1d018386
--- /dev/null
+++ b/includes/model/UserGroups_model.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * Returns users groups
+ * @param User $user
+ */
+function User_groups($user) {
+ return sql_select("
+ SELECT `Groups`.*
+ FROM `UserGroups`
+ JOIN `Groups` ON `Groups`.`UID`=`UserGroups`.`group_id`
+ WHERE `UserGroups`.`uid`=" . sql_escape($user['UID']) . "
+ ORDER BY `UserGroups`.`group_id`
+ ");
+}
+
+?> \ No newline at end of file
diff --git a/includes/model/User_model.php b/includes/model/User_model.php
index c8c48e6c..45600676 100644
--- a/includes/model/User_model.php
+++ b/includes/model/User_model.php
@@ -4,6 +4,34 @@
*/
/**
+ * Returns -seconds until free if user is busy or seconds until next shift.
+ * 0 if there is an error or no upcoming shift.
+ *
+ * @param User $user
+ */
+function User_shift_state($user) {
+ $shifts = ShiftEntries_upcoming_for_user($user);
+ if ($shifts === false)
+ return 0;
+ if (count($shifts) == 0)
+ return 0;
+ if ($shifts[0]['start'] < time())
+ return $shifts[0]['end'] - time();
+ return $shifts[0]['start'] - time();
+}
+
+/**
+ * Returns true if user is freeloader
+ *
+ * @param User $user
+ */
+function User_is_freeloader($user) {
+ global $max_freeloadable_shifts, $user;
+
+ return count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts;
+}
+
+/**
* Returns all users that are not member of given angeltype.
*
* @param Angeltype $angeltype
diff --git a/includes/pages/admin_questions.php b/includes/pages/admin_questions.php
index 5d4fbd61..8bdde714 100644
--- a/includes/pages/admin_questions.php
+++ b/includes/pages/admin_questions.php
@@ -10,7 +10,7 @@ function admin_new_questions() {
$new_messages = sql_num_query("SELECT * FROM `Questions` WHERE `AID` IS NULL");
if ($new_messages > 0)
- return info('<a href="' . page_link_to("admin_questions") . '">Es gibt unbeantwortete Fragen!</a>', true);
+ info('<a href="' . page_link_to("admin_questions") . '">Es gibt unbeantwortete Fragen!</a>');
}
return "";
diff --git a/includes/pages/user_messages.php b/includes/pages/user_messages.php
index a1b565ec..b0ac66b1 100644
--- a/includes/pages/user_messages.php
+++ b/includes/pages/user_messages.php
@@ -53,7 +53,7 @@ function user_messages() {
return template_render('../templates/user_messages.html', array(
'title' => messages_title(),
'link' => page_link_to("user_messages"),
- 'greeting' => sprintf(_("Hello %s, here can you leave messages for other angels"), User_Nick_render($user)) . '<br /><br />',
+ 'greeting' => msg() . sprintf(_("Hello %s, here can you leave messages for other angels"), User_Nick_render($user)) . '<br /><br />',
'messages' => $messages_html,
'new_label' => _("New"),
'date_label' => _("Date"),
diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php
index 12ba5562..333f9517 100644
--- a/includes/pages/user_myshifts.php
+++ b/includes/pages/user_myshifts.php
@@ -80,86 +80,8 @@ function user_myshifts() {
} else
redirect(page_link_to('user_myshifts'));
}
- $shifts = sql_select("SELECT * FROM `ShiftEntry` JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`=" . sql_escape($shifts_user['UID']) . " ORDER BY `start`");
- $myshifts_table = array();
- $html = "";
- $timesum = 0;
- foreach ($shifts as $shift) {
- $shift_info = $shift['name'];
- $needed_angel_types_source = sql_select("SELECT DISTINCT `AngelTypes`.* FROM `ShiftEntry` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " ORDER BY `AngelTypes`.`name`");
- foreach ($needed_angel_types_source as $needed_angel_type) {
- $shift_info .= '<br><b>' . $needed_angel_type['name'] . ':</b> ';
-
- $users_source = sql_select("SELECT `ShiftEntry`.`freeloaded`, `User`.* FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " AND `ShiftEntry`.`TID`=" . sql_escape($needed_angel_type['id']));
- $shift_entries = array();
- foreach ($users_source as $user_source) {
- if ($user['UID'] == $user_source['UID'])
- $member = '<b>' . $user_source['Nick'] . '</b>';
- else
- $member = User_Nick_render($user_source);
- if ($user_source['freeloaded'])
- $member = '<strike>' . $member . '</strike>';
-
- $shift_entries[] = $member;
- }
- $shift_info .= join(", ", $shift_entries);
- }
-
- $myshift = array(
- 'date' => date("Y-m-d", $shift['start']),
- 'time' => date("H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']),
- 'room' => $shift['Name'],
- 'shift_info' => $shift_info,
- 'comment' => $shift['Comment']
- );
-
- if ($shift['freeloaded']) {
- if (in_array("user_shifts_admin", $privileges))
- $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '</p>';
- else
- $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . '</p>';
- }
-
- $myshift['actions'] = "";
- if ($id == $user['UID'] || in_array('user_shifts_admin', $privileges))
- $myshift['actions'] .= img_button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $id, 'pencil', _("edit"));
- if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges))
- $myshift['actions'] .= img_button(page_link_to('user_myshifts') . (($id != $user['UID']) ? '&id=' . $id : '') . '&cancel=' . $shift['id'], 'cross', _("sign off"));
-
- if ($shift['freeloaded'])
- $timesum += - 2 * ($shift['end'] - $shift['start']);
- else
- $timesum += $shift['end'] - $shift['start'];
- $myshifts_table[] = $myshift;
- }
- if (count($myshifts_table) > 0)
- $myshifts_table[] = array(
- 'date' => '<b>' . _("Sum:") . '</b>',
- 'time' => "<b>" . round($timesum / (60 * 60), 1) . " h</b>",
- 'room' => "",
- 'shift_info' => "",
- 'comment' => "",
- 'actions' => ""
- );
-
- return page_with_title(myshifts_title(), array(
- msg(),
- $id == $user['UID'] ? sprintf(_('These are your shifts.<br/>Please try to appear <b>15 minutes</b> before your shift begins!<br/>You can remove yourself from a shift up to %d hours before it starts.'), $LETZTES_AUSTRAGEN) : '',
- $id != $user['UID'] ? info(sprintf("You are viewing %s's shifts.", $shifts_user['Nick']), true) : '',
- $id != $user['UID'] ? buttons(array(
- button(page_link_to('admin_user') . '&amp;id=' . $shifts_user['UID'], "Edit " . $shifts_user['Nick'], 'edit')
- )) : '',
- table(array(
- 'date' => _("Day"),
- 'time' => _("Time"),
- 'room' => _("Location"),
- 'shift_info' => _("Name &amp; workmates"),
- 'comment' => _("Comment"),
- 'actions' => _("Action")
- ), $myshifts_table),
- $id == $user['UID'] && count($shifts) == 0 ? error(sprintf(_("Go to the <a href=\"%s\">shifts table</a> to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '',
- '<h2>' . _("Exports") . '</h2>' . sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $shifts_user['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $shifts_user['api_key'], page_link_to('user_myshifts') . '&reset')
- ));
+ msg();
+ redirect(page_link_to('users') . '&action=view');
}
?>
diff --git a/includes/pages/user_news.php b/includes/pages/user_news.php
index b8879e62..c4d243f4 100644
--- a/includes/pages/user_news.php
+++ b/includes/pages/user_news.php
@@ -14,7 +14,7 @@ function meetings_title() {
function user_meetings() {
global $DISPLAY_NEWS, $privileges, $user;
- $html = '<div class="col-md-10"><h1>' . meetings_title() . '</h1>';
+ $html = '<div class="col-md-10"><h1>' . meetings_title() . '</h1>' . msg();
if (isset($_REQUEST['page']) && preg_match("/^[0-9]{1,}$/", $_REQUEST['page']))
$page = $_REQUEST['page'];
diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php
index 2adce0d5..faf6f162 100644
--- a/includes/pages/user_shifts.php
+++ b/includes/pages/user_shifts.php
@@ -6,7 +6,7 @@ function shifts_title() {
function user_shifts() {
global $user, $privileges, $max_freeloadable_shifts;
- if (count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts)
+ if (User_is_freeloader($user))
redirect(page_link_to('user_myshifts'));
// Löschen einzelner Schicht-Einträge (Also Belegung einer Schicht von Engeln) durch Admins
@@ -743,7 +743,7 @@ function view_user_shifts() {
'filled_select' => make_select($filled, $_SESSION['user_shifts']['filled'], "filled", _("Occupancy")),
'task_notice' => '<sup>1</sup>' . _("The tasks shown here are influenced by the preferences you defined in your settings!") . " <a href=\"" . page_link_to('angeltypes') . '&action=about' . "\">" . _("Description of the jobs.") . "</a>",
'new_style_checkbox' => '<label><input type="checkbox" name="new_style" value="1" ' . ($_SESSION['user_shifts']['new_style'] ? ' checked' : '') . '> ' . _("Use new style if possible") . '</label>',
- 'shifts_table' => $shifts_table,
+ 'shifts_table' =>msg(). $shifts_table,
'ical_text' => '<h2>' . _("iCal export") . '</h2><p>' . sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $user['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $user['api_key'], page_link_to('user_myshifts') . '&reset') . '</p>',
'filter' => _("Filter")
)),
diff --git a/includes/sys_menu.php b/includes/sys_menu.php
index 781218f1..407b784c 100644
--- a/includes/sys_menu.php
+++ b/includes/sys_menu.php
@@ -22,7 +22,7 @@ function header_toolbar() {
$toolbar_items[] = toolbar_item_link(page_link_to('register'), 'plus', register_title(), $p == 'register');
if (in_array('user_myshifts', $privileges))
- $toolbar_items[] = toolbar_item_link(page_link_to('user_myshifts'), ' icon-icon_angel', $user['Nick'], $p == 'user_myshifts');
+ $toolbar_items[] = toolbar_item_link(page_link_to('users') . '&amp;action=view', ' icon-icon_angel', $user['Nick'], $p == 'user_myshifts');
if (in_array('user_settings', $privileges))
$toolbar_items[] = toolbar_item_link(page_link_to('user_settings'), 'list-alt', settings_title(), $p == 'user_settings');
diff --git a/includes/sys_template.php b/includes/sys_template.php
index bb3d5731..9fc87ef3 100644
--- a/includes/sys_template.php
+++ b/includes/sys_template.php
@@ -8,6 +8,11 @@ $themes = array(
"1" => "Engelsystem dark"
);
+function div($class, $content = array(), $id = "") {
+ $id = $id != '' ? ' id="' . $id . '"' : '';
+ return '<div' . $id . ' class="' . $class . '">' . join("\n", $content) . '</div>';
+}
+
/**
* Render a toolbar.
*
@@ -273,7 +278,7 @@ function button($href, $label, $class = "") {
* Rendert eine Toolbar mit Knöpfen
*/
function buttons($buttons = array ()) {
- return '<div class="form-group">' . join(' ', $buttons) . '</div>';
+ return '<div class="form-group"><div class="btn-group">' . join(' ', $buttons) . '</div></div>';
}
// Load and render template
diff --git a/includes/view/User_view.php b/includes/view/User_view.php
index 20a6de6e..f7011ffd 100644
--- a/includes/view/User_view.php
+++ b/includes/view/User_view.php
@@ -1,8 +1,126 @@
<?php
-function User_view($user_source) {
+function User_shift_mode_render($shift_mode) {
+ if ($shift_mode == 0)
+ return '<span class="text-success">' . _("Free") . '</span>';
+ if ($shift_mode > 8 * 3600)
+ return '<span class="text-success">' . sprintf(_("Next shift in %s min"), floor($shift_mode / 60)) . '</span>';
+ if ($shift_mode > 0)
+ return '<span class="text-warning">' . sprintf(_("Next shift in %s min"), floor($shift_mode / 60)) . '</span>';
+ if ($shift_mode < 0)
+ return '<span class="text-danger">' . sprintf(_("Current ends in %s min"), floor($shift_mode / 60)) . '</span>';
+}
+
+function User_view($user_source, $admin_user_privilege, $freeloader, $user_shift_mode, $user_angeltypes, $user_groups, $shifts, $its_me) {
+ global $LETZTES_AUSTRAGEN, $privileges;
+
$user_name = htmlspecialchars($user_source['Vorname']) . " " . htmlspecialchars($user_source['Name']);
- return page_with_title('<span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . ' <small>' . $user_name . '</small>', array());
+
+ $myshifts_table = array();
+ $html = "";
+ $timesum = 0;
+ foreach ($shifts as $shift) {
+ $shift_info = $shift['name'];
+ foreach ($shift['needed_angeltypes'] as $needed_angel_type) {
+ $shift_info .= '<br><b>' . $needed_angel_type['name'] . ':</b> ';
+
+ $shift_entries = array();
+ foreach ($needed_angel_type['users'] as $user_source) {
+ if ($its_me)
+ $member = '<strong>' . User_Nick_render($user_source) . '</strong>';
+ else
+ $member = User_Nick_render($user_source);
+ if ($user_source['freeloaded'])
+ $member = '<strike>' . $member . '</strike>';
+
+ $shift_entries[] = $member;
+ }
+ $shift_info .= join(", ", $shift_entries);
+ }
+
+ $myshift = array(
+ 'date' => date("Y-m-d", $shift['start']),
+ 'time' => date("H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']),
+ 'room' => $shift['Name'],
+ 'shift_info' => $shift_info,
+ 'comment' => $shift['Comment']
+ );
+
+ if ($shift['freeloaded']) {
+ if (in_array("user_shifts_admin", $privileges))
+ $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '</p>';
+ else
+ $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . '</p>';
+ }
+
+ $myshift['actions'] = "";
+ if ($its_me || in_array('user_shifts_admin', $privileges))
+ $myshift['actions'] .= img_button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $user_source['UID'], 'pencil', _("edit"));
+ if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges))
+ $myshift['actions'] .= img_button(page_link_to('user_myshifts') . ((! $its_me) ? '&id=' . $id : '') . '&cancel=' . $shift['id'], 'cross', _("sign off"));
+
+ if ($shift['freeloaded'])
+ $timesum += - 2 * ($shift['end'] - $shift['start']);
+ else
+ $timesum += $shift['end'] - $shift['start'];
+ $myshifts_table[] = $myshift;
+ }
+ if (count($myshifts_table) > 0)
+ $myshifts_table[] = array(
+ 'date' => '<b>' . _("Sum:") . '</b>',
+ 'time' => "<b>" . round($timesum / (60 * 60), 1) . " h</b>",
+ 'room' => "",
+ 'shift_info' => "",
+ 'comment' => "",
+ 'actions' => ""
+ );
+
+ return page_with_title('<span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . ' <small>' . $user_name . '</small>', array(
+ msg(),
+ div('row', array(
+ div('col-md-3', array(
+ '<h1>',
+ '<span class="glyphicon glyphicon-phone"></span>',
+ $user_source['DECT'],
+ '</h1>'
+ )),
+ div('col-md-3', array(
+ '<h4>' . _("User state") . '</h4>',
+ ($admin_user_privilege && $freeloader) ? '<span class="text-danger"><span class="glyphicon glyphicon-exclamation-sign"></span> ' . _("Freeloader") . '</span><br />' : '',
+ $user_source['Gekommen'] ? User_shift_mode_render($user_shift_mode) . '<br />' : '',
+ ($user_source['Gekommen'] ? '<span class="text-success"><span class="glyphicon glyphicon-home"></span> ' . _("Arrived") . '</span>' : '<span class="text-danger">' . _("Not arrived") . '</span>'),
+ ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Aktiv']) ? ' <span class="text-success">' . _("Active") . '</span>' : '',
+ ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Tshirt']) ? ' <span class="text-success">' . _("T-Shirt") . '</span>' : ''
+ )),
+ div('col-md-3', array(
+ '<h4>' . _("Angeltypes") . '</h4>',
+ User_angeltypes_render($user_angeltypes)
+ )),
+ div('col-md-3', array(
+ '<h4>' . _("Rights") . '</h4>',
+ User_groups_render($user_groups)
+ ))
+ )),
+ $admin_user_privilege ? buttons(array(
+ button(page_link_to('admin_user') . '&id=' . $user_source['UID'], '<span class="glyphicon glyphicon-edit"></span> ' . _("edit"))
+ )) : '',
+ ($its_me || $admin_user_privilege) ? '<h2>' . _("Shifts") . '</h2>' : '',
+ ($its_me || $admin_user_privilege) ? table(array(
+ 'date' => _("Day"),
+ 'time' => _("Time"),
+ 'room' => _("Location"),
+ 'shift_info' => _("Name &amp; workmates"),
+ 'comment' => _("Comment"),
+ 'actions' => _("Action")
+ ), $myshifts_table) : '',
+ $its_me && count($shifts) == 0 ? error(sprintf(_("Go to the <a href=\"%s\">shifts table</a> to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '',
+ ($its_me || $admin_user_privilege) ? '<h2>' . _("Exports") . '</h2>' : '',
+ $its_me ? (sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $user_source['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $user_source['api_key'], page_link_to('user_myshifts') . '&reset')) : '',
+ (! $its_me && $admin_user_privilege) ? buttons(array(
+ button(page_link_to_absolute('ical') . '&key=' . $user_source['api_key'], '<span class="glyphicon glyphicon-calendar"></span> ' . _("iCal Export")),
+ button(page_link_to_absolute('shifts_json_export') . '&key=' . $user_source['api_key'], '<span class="glyphicon glyphicon-export"></span> ' . _("JSON Export"))
+ )) : ''
+ ));
}
/**
@@ -53,6 +171,30 @@ function User_password_set_view() {
));
}
+function User_angeltypes_render($user_angeltypes) {
+ $output = array();
+ foreach ($user_angeltypes as $angeltype) {
+ $class = "";
+ if ($angeltype['restricted'] == 1)
+ if ($angeltype['confirm_user_id'] != null)
+ $class = 'text-success';
+ else
+ $class = 'text-warning';
+ else
+ $class = 'text-success';
+ $output[] = '<span class="' . $class . '">' . ($angeltype['coordinator'] ? '<span class="glyphicon glyphicon-certificate"></span> ' : '') . $angeltype['name'] . '</span>';
+ }
+ return join('<br />', $output);
+}
+
+function User_groups_render($user_groups) {
+ $output = array();
+ foreach ($user_groups as $group) {
+ $output[] = substr($group['Name'], 2);
+ }
+ return join('<br />', $output);
+}
+
/**
* Render a users avatar.
*
@@ -72,7 +214,7 @@ function User_Avatar_render($user) {
function User_Nick_render($user_source) {
global $user, $privileges;
if ($user['UID'] == $user_source['UID'] || in_array('user_shifts_admin', $privileges))
- return '<a href="' . page_link_to('user_myshifts') . '&amp;id=' . $user_source['UID'] . '"><span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . '</a>';
+ return '<a href="' . page_link_to('users') . '&amp;action=view&amp;user_id=' . $user_source['UID'] . '"><span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . '</a>';
else
return htmlspecialchars($user_source['Nick']);
}
diff --git a/public/index.php b/public/index.php
index f24c425f..eac59104 100644
--- a/public/index.php
+++ b/public/index.php
@@ -18,6 +18,7 @@ require_once ('includes/model/Room_model.php');
require_once ('includes/model/ShiftEntry_model.php');
require_once ('includes/model/Shifts_model.php');
require_once ('includes/model/UserAngelTypes_model.php');
+require_once ('includes/model/UserGroups_model.php');
require_once ('includes/model/User_model.php');
require_once ('includes/view/AngelTypes_view.php');
@@ -84,11 +85,35 @@ $free_pages = array(
);
// Gewünschte Seite/Funktion
+$p = "";
if (! isset($_REQUEST['p']))
$_REQUEST['p'] = isset($user) ? "news" : "login";
if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && (in_array($_REQUEST['p'], $free_pages) || in_array($_REQUEST['p'], $privileges))) {
$p = $_REQUEST['p'];
+ if (isset($user)) {
+ $hints = "";
+
+ if (User_is_freeloader($user))
+ error(sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts));
+
+ // Hinweis für Engel, die noch nicht angekommen sind
+ if ($user['Gekommen'] == 0)
+ error(_("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."));
+
+ if ($enable_tshirt_size && $user['Size'] == "")
+ error(_("You need to specify a tshirt size in your settings!"));
+
+ if ($user['DECT'] == "")
+ error(_("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."));
+
+ // Erzengel Hinweis für unbeantwortete Fragen
+ if ($p != "admin_questions")
+ admin_new_questions();
+
+ user_angeltypes_unconfirmed_hint();
+ }
+
$title = $p;
$content = "";
@@ -214,33 +239,6 @@ if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && (i
}
}
-if (isset($user)) {
- $hints = "";
-
- $freeloaded_shifts_count = count(ShiftEntries_freeloaded_by_user($user));
- if ($freeloaded_shifts_count >= $max_freeloadable_shifts)
- $hints = error(sprintf(_("You freeloaded %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $freeloaded_shifts_count), true);
-
- // Hinweis für Engel, die noch nicht angekommen sind
- if ($user['Gekommen'] == 0)
- $hints = error(_("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."), true) . $hints;
-
- if ($enable_tshirt_size && $user['Size'] == "")
- $hints = error(_("You need to specify a tshirt size in your settings!"), true) . $hints;
-
- if ($user['DECT'] == "")
- $hints = error(_("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."), true) . $hints;
-
- // Erzengel Hinweis für unbeantwortete Fragen
- if ($p != "admin_questions")
- $hints = admin_new_questions() . $hints;
-
- $hints = user_angeltypes_unconfirmed_hint() . $hints;
-
- if ($hints != "")
- $content = '<div class="col-md-10">' . $hints . '</div>' . $content;
-}
-
echo template_render('../templates/layout.html', array(
'theme' => isset($user) ? $user['color'] : $default_theme,
'title' => $title,
diff --git a/public/vendor/bootstrap-3.2.0/css/theme0.css b/public/vendor/bootstrap-3.2.0/css/theme0.css
index 060467ad..52236b90 100644
--- a/public/vendor/bootstrap-3.2.0/css/theme0.css
+++ b/public/vendor/bootstrap-3.2.0/css/theme0.css
@@ -249,8 +249,8 @@ th {
border: 1px solid #ddd !important; } }
@font-face {
font-family: 'Glyphicons Halflings';
- src: url("bootstrap/glyphicons-halflings-regular.eot");
- src: url("bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); }
+ src: url("../fonts/glyphicons-halflings-regular.eot");
+ src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); }
.glyphicon {
position: relative;
@@ -5294,3 +5294,6 @@ button.close {
display: none !important; } }
body {
padding-top: 50px; }
+
+.footer a {
+ color: #777777; }
diff --git a/public/vendor/bootstrap-3.2.0/css/theme1.css b/public/vendor/bootstrap-3.2.0/css/theme1.css
index 27a5500a..179ac12d 100644
--- a/public/vendor/bootstrap-3.2.0/css/theme1.css
+++ b/public/vendor/bootstrap-3.2.0/css/theme1.css
@@ -1,100 +1,26 @@
-@import url("//fonts.googleapis.com/css?family=Roboto:400,700");
-.text-primary,
-.text-primary:hover {
- color: #2a9fd6; }
-
-.text-success,
-.text-success:hover {
- color: #77b300; }
-
-.text-danger,
-.text-danger:hover {
- color: #cc0000; }
-
-.text-warning,
-.text-warning:hover {
- color: #ff8800; }
-
-.text-info,
-.text-info:hover {
- color: #2a9fd6; }
-
-table,
-.table {
- color: #fff; }
- table a:not(.btn),
- .table a:not(.btn) {
- color: #fff;
- text-decoration: underline; }
- table .text-muted,
- .table .text-muted {
- color: #888888; }
-
-.table-responsive > .table {
- background-color: #181818; }
-
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .form-control-feedback {
- color: #ff8800; }
-.has-warning .form-control,
-.has-warning .form-control:focus,
-.has-warning .input-group-addon {
- border-color: #ff8800; }
-
-.has-error .help-block,
-.has-error .control-label,
-.has-error .form-control-feedback {
- color: #cc0000; }
-.has-error .form-control,
-.has-error .form-control:focus,
-.has-error .input-group-addon {
- border-color: #cc0000; }
-
-.has-success .help-block,
-.has-success .control-label,
-.has-success .form-control-feedback {
- color: #77b300; }
-.has-success .form-control,
-.has-success .form-control:focus,
-.has-success .input-group-addon {
- border-color: #77b300; }
-
-legend {
- color: #fff; }
-
-.input-group-addon {
- background-color: #424242; }
-
-.nav-tabs a,
-.nav-pills a,
-.breadcrumb a,
-.pager a {
- color: #fff; }
-
-.alert .alert-link,
-.alert a {
- color: white;
- text-decoration: underline; }
-.alert .close {
- text-decoration: none; }
-
-.close {
- color: #fff;
- text-decoration: none;
- opacity: 0.4; }
- .close:hover, .close:focus {
- color: #fff;
- opacity: 1; }
-
-a.thumbnail:hover,
-a.thumbnail:focus,
-a.thumbnail.active {
- border-color: #282828; }
-
-.jumbotron h1, .jumbotron h2, .jumbotron h3, .jumbotron h4, .jumbotron h5, .jumbotron h6 {
- color: #fff; }
-
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 Thomas Park
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
html {
font-family: sans-serif;
@@ -976,7 +902,7 @@ html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
body {
- font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.42857;
color: #888888;
@@ -991,10 +917,10 @@ textarea {
line-height: inherit; }
a {
- color: #2a9fd6;
+ color: #428bca;
text-decoration: none; }
a:hover, a:focus {
- color: #2a9fd6;
+ color: #428bca;
text-decoration: underline; }
a:focus {
outline: thin dotted;
@@ -1059,7 +985,7 @@ hr {
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
- font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-weight: 500;
line-height: 1.1;
color: white; }
@@ -1114,16 +1040,16 @@ h6, .h6 {
font-size: 75%; }
h1, .h1 {
- font-size: 56px; }
+ font-size: 34px; }
h2, .h2 {
- font-size: 45px; }
+ font-size: 24px; }
h3, .h3 {
- font-size: 34px; }
+ font-size: 20px; }
h4, .h4 {
- font-size: 24px; }
+ font-size: 20px; }
h5, .h5 {
font-size: 20px; }
@@ -1152,7 +1078,7 @@ cite {
mark,
.mark {
- background-color: #ff8800;
+ background-color: #f0ad4e;
padding: .2em; }
.text-left {
@@ -1183,10 +1109,10 @@ mark,
color: #888888; }
.text-primary {
- color: #2a9fd6; }
+ color: #428bca; }
a.text-primary:hover {
- color: #2180ac; }
+ color: #3071a9; }
.text-success {
color: white; }
@@ -1216,34 +1142,34 @@ a.text-danger:hover {
color: #fff; }
.bg-primary {
- background-color: #2a9fd6; }
+ background-color: #428bca; }
a.bg-primary:hover {
- background-color: #2180ac; }
+ background-color: #3071a9; }
.bg-success {
- background-color: #77b300; }
+ background-color: #5cb85c; }
a.bg-success:hover {
- background-color: #558000; }
+ background-color: #449d44; }
.bg-info {
- background-color: #2a9fd6; }
+ background-color: #5bc0de; }
a.bg-info:hover {
- background-color: #2180ac; }
+ background-color: #31b0d5; }
.bg-warning {
- background-color: #ff8800; }
+ background-color: #f0ad4e; }
a.bg-warning:hover {
- background-color: #cc6d00; }
+ background-color: #ec971f; }
.bg-danger {
- background-color: #cc0000; }
+ background-color: #d9534f; }
a.bg-danger:hover {
- background-color: #990000; }
+ background-color: #c9302c; }
.page-header {
padding-bottom: 9px;
@@ -2183,11 +2109,11 @@ table th[class*="col-"] {
.table > tfoot > tr > th.success,
.table > tfoot > tr.success > td,
.table > tfoot > tr.success > th {
- background-color: #77b300; }
+ background-color: #5cb85c; }
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th {
- background-color: #669a00; }
+ background-color: #4cae4c; }
.table > thead > tr > td.info,
.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th,
@@ -2199,11 +2125,11 @@ table th[class*="col-"] {
.table > tfoot > tr > th.info,
.table > tfoot > tr.info > td,
.table > tfoot > tr.info > th {
- background-color: #2a9fd6; }
+ background-color: #5bc0de; }
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th {
- background-color: #258fc1; }
+ background-color: #46b8da; }
.table > thead > tr > td.warning,
.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th,
@@ -2215,11 +2141,11 @@ table th[class*="col-"] {
.table > tfoot > tr > th.warning,
.table > tfoot > tr.warning > td,
.table > tfoot > tr.warning > th {
- background-color: #ff8800; }
+ background-color: #f0ad4e; }
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th {
- background-color: #e67a00; }
+ background-color: #eea236; }
.table > thead > tr > td.danger,
.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th,
@@ -2231,11 +2157,11 @@ table th[class*="col-"] {
.table > tfoot > tr > th.danger,
.table > tfoot > tr.danger > td,
.table > tfoot > tr.danger > th {
- background-color: #cc0000; }
+ background-color: #d9534f; }
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th {
- background-color: #b30000; }
+ background-color: #d43f3a; }
@media screen and (max-width: 767px) {
.table-responsive {
@@ -2590,7 +2516,7 @@ select[multiple].input-lg,
.has-success .input-group-addon {
color: white;
border-color: white;
- background-color: #77b300; }
+ background-color: #5cb85c; }
.has-success .form-control-feedback {
color: white; }
@@ -2612,7 +2538,7 @@ select[multiple].input-lg,
.has-warning .input-group-addon {
color: white;
border-color: white;
- background-color: #ff8800; }
+ background-color: #f0ad4e; }
.has-warning .form-control-feedback {
color: white; }
@@ -2634,7 +2560,7 @@ select[multiple].input-lg,
.has-error .input-group-addon {
color: white;
border-color: white;
- background-color: #cc0000; }
+ background-color: #d9534f; }
.has-error .form-control-feedback {
color: white; }
@@ -2779,91 +2705,91 @@ select[multiple].input-lg,
.btn-primary {
color: white;
- background-color: #2a9fd6;
- border-color: #2a9fd6; }
+ background-color: #428bca;
+ border-color: #428bca; }
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle {
color: white;
- background-color: #2180ac;
- border-color: #1f79a3; }
+ background-color: #3071a9;
+ border-color: #2d6ca2; }
.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle {
background-image: none; }
.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
- background-color: #2a9fd6;
- border-color: #2a9fd6; }
+ background-color: #428bca;
+ border-color: #428bca; }
.btn-primary .badge {
- color: #2a9fd6;
+ color: #428bca;
background-color: white; }
.btn-success {
color: white;
- background-color: #77b300;
- border-color: #77b300; }
+ background-color: #5cb85c;
+ border-color: #5cb85c; }
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle {
color: white;
- background-color: #558000;
- border-color: #4e7600; }
+ background-color: #449d44;
+ border-color: #419641; }
.btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle {
background-image: none; }
.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
- background-color: #77b300;
- border-color: #77b300; }
+ background-color: #5cb85c;
+ border-color: #5cb85c; }
.btn-success .badge {
- color: #77b300;
+ color: #5cb85c;
background-color: white; }
.btn-info {
color: white;
- background-color: #2a9fd6;
- border-color: #2a9fd6; }
+ background-color: #5bc0de;
+ border-color: #5bc0de; }
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle {
color: white;
- background-color: #2180ac;
- border-color: #1f79a3; }
+ background-color: #31b0d5;
+ border-color: #2aabd2; }
.btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle {
background-image: none; }
.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
- background-color: #2a9fd6;
- border-color: #2a9fd6; }
+ background-color: #5bc0de;
+ border-color: #5bc0de; }
.btn-info .badge {
- color: #2a9fd6;
+ color: #5bc0de;
background-color: white; }
.btn-warning {
color: white;
- background-color: #ff8800;
- border-color: #ff8800; }
+ background-color: #f0ad4e;
+ border-color: #f0ad4e; }
.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle {
color: white;
- background-color: #cc6d00;
- border-color: #c26700; }
+ background-color: #ec971f;
+ border-color: #eb9316; }
.btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle {
background-image: none; }
.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
- background-color: #ff8800;
- border-color: #ff8800; }
+ background-color: #f0ad4e;
+ border-color: #f0ad4e; }
.btn-warning .badge {
- color: #ff8800;
+ color: #f0ad4e;
background-color: white; }
.btn-danger {
color: white;
- background-color: #cc0000;
- border-color: #cc0000; }
+ background-color: #d9534f;
+ border-color: #d9534f; }
.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle {
color: white;
- background-color: #990000;
- border-color: #8f0000; }
+ background-color: #c9302c;
+ border-color: #c12e2a; }
.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle {
background-image: none; }
.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
- background-color: #cc0000;
- border-color: #cc0000; }
+ background-color: #d9534f;
+ border-color: #d9534f; }
.btn-danger .badge {
- color: #cc0000;
+ color: #d9534f;
background-color: white; }
.btn-link {
- color: #2a9fd6;
+ color: #428bca;
font-weight: normal;
cursor: pointer;
border-radius: 0; }
@@ -2874,7 +2800,7 @@ select[multiple].input-lg,
.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
border-color: transparent; }
.btn-link:hover, .btn-link:focus {
- color: #2a9fd6;
+ color: #428bca;
text-decoration: underline;
background-color: transparent; }
.btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus {
@@ -3000,7 +2926,7 @@ tbody.collapse.in {
color: white;
text-decoration: none;
outline: 0;
- background-color: #2a9fd6; }
+ background-color: #428bca; }
.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
color: #777777; }
@@ -3354,7 +3280,7 @@ tbody.collapse.in {
cursor: not-allowed; }
.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
background-color: #222222;
- border-color: #2a9fd6; }
+ border-color: #428bca; }
.nav .nav-divider {
height: 1px;
margin: 9px 0;
@@ -3377,7 +3303,7 @@ tbody.collapse.in {
border-color: transparent transparent #282828; }
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
color: white;
- background-color: #2a9fd6;
+ background-color: #428bca;
border: 1px solid #282828;
border-bottom-color: transparent;
cursor: default; }
@@ -3390,7 +3316,7 @@ tbody.collapse.in {
margin-left: 2px; }
.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: white;
- background-color: #2a9fd6; }
+ background-color: #428bca; }
.nav-stacked > li {
float: none; }
@@ -3845,7 +3771,7 @@ tbody.collapse.in {
.pagination > li > span:hover,
.pagination > li > span:focus {
color: white;
- background-color: #2a9fd6;
+ background-color: #428bca;
border-color: transparent; }
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,
.pagination > .active > span,
@@ -3853,7 +3779,7 @@ tbody.collapse.in {
.pagination > .active > span:focus {
z-index: 2;
color: white;
- background-color: #2a9fd6;
+ background-color: #428bca;
border-color: transparent;
cursor: default; }
.pagination > .disabled > span,
@@ -3915,7 +3841,7 @@ tbody.collapse.in {
.pager li > a:hover,
.pager li > a:focus {
text-decoration: none;
- background-color: #2a9fd6; }
+ background-color: #428bca; }
.pager .next > a,
.pager .next > span {
float: right; }
@@ -3958,29 +3884,29 @@ a.label:hover, a.label:focus {
background-color: #282828; }
.label-primary {
- background-color: #2a9fd6; }
+ background-color: #428bca; }
.label-primary[href]:hover, .label-primary[href]:focus {
- background-color: #2180ac; }
+ background-color: #3071a9; }
.label-success {
- background-color: #77b300; }
+ background-color: #5cb85c; }
.label-success[href]:hover, .label-success[href]:focus {
- background-color: #558000; }
+ background-color: #449d44; }
.label-info {
- background-color: #2a9fd6; }
+ background-color: #5bc0de; }
.label-info[href]:hover, .label-info[href]:focus {
- background-color: #2180ac; }
+ background-color: #31b0d5; }
.label-warning {
- background-color: #ff8800; }
+ background-color: #f0ad4e; }
.label-warning[href]:hover, .label-warning[href]:focus {
- background-color: #cc6d00; }
+ background-color: #ec971f; }
.label-danger {
- background-color: #cc0000; }
+ background-color: #d9534f; }
.label-danger[href]:hover, .label-danger[href]:focus {
- background-color: #990000; }
+ background-color: #c9302c; }
.badge {
display: inline-block;
@@ -3993,7 +3919,7 @@ a.label:hover, a.label:focus {
vertical-align: baseline;
white-space: nowrap;
text-align: center;
- background-color: #2a9fd6;
+ background-color: #428bca;
border-radius: 10px; }
.badge:empty {
display: none; }
@@ -4004,7 +3930,7 @@ a.label:hover, a.label:focus {
top: 0;
padding: 1px 5px; }
a.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
- color: #2a9fd6;
+ color: #428bca;
background-color: white; }
.nav-pills > li > a > .badge {
margin-left: 3px; }
@@ -4069,7 +3995,7 @@ a.badge:hover, a.badge:focus {
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
- border-color: #2a9fd6; }
+ border-color: #428bca; }
.alert {
padding: 15px;
@@ -4098,38 +4024,38 @@ a.thumbnail.active {
color: inherit; }
.alert-success {
- background-color: #77b300;
- border-color: #669a00;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
color: white; }
.alert-success hr {
- border-top-color: #558000; }
+ border-top-color: #449d44; }
.alert-success .alert-link {
color: #e6e6e6; }
.alert-info {
- background-color: #2a9fd6;
- border-color: #2489b9;
+ background-color: #5bc0de;
+ border-color: #3db5d8;
color: white; }
.alert-info hr {
- border-top-color: #1f79a3; }
+ border-top-color: #2aabd2; }
.alert-info .alert-link {
color: #e6e6e6; }
.alert-warning {
- background-color: #ff8800;
- border-color: #f08000;
+ background-color: #f0ad4e;
+ border-color: #efa640;
color: white; }
.alert-warning hr {
- border-top-color: #d67200; }
+ border-top-color: #ed9c28; }
.alert-warning .alert-link {
color: #e6e6e6; }
.alert-danger {
- background-color: #cc0000;
- border-color: #bd0000;
+ background-color: #d9534f;
+ border-color: #d64742;
color: white; }
.alert-danger hr {
- border-top-color: #a30000; }
+ border-top-color: #d2322d; }
.alert-danger .alert-link {
color: #e6e6e6; }
@@ -4164,7 +4090,7 @@ a.thumbnail.active {
line-height: 20px;
color: white;
text-align: center;
- background-color: #2a9fd6;
+ background-color: #428bca;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-webkit-transition: width 0.6s ease;
@@ -4194,28 +4120,28 @@ a.thumbnail.active {
box-shadow: none; }
.progress-bar-success {
- background-color: #77b300; }
+ background-color: #5cb85c; }
.progress-striped .progress-bar-success {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
.progress-bar-info {
- background-color: #2a9fd6; }
+ background-color: #5bc0de; }
.progress-striped .progress-bar-info {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
.progress-bar-warning {
- background-color: #ff8800; }
+ background-color: #f0ad4e; }
.progress-striped .progress-bar-warning {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }
.progress-bar-danger {
- background-color: #cc0000; }
+ background-color: #d9534f; }
.progress-striped .progress-bar-danger {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
@@ -4290,8 +4216,8 @@ a.list-group-item {
.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
z-index: 2;
color: white;
- background-color: #2a9fd6;
- border-color: #2a9fd6; }
+ background-color: #428bca;
+ border-color: #428bca; }
.list-group-item.active .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,
@@ -4301,11 +4227,11 @@ a.list-group-item {
.list-group-item.active:focus .list-group-item-heading > .small {
color: inherit; }
.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {
- color: #d5ecf7; }
+ color: #e1edf7; }
.list-group-item-success {
color: white;
- background-color: #77b300; }
+ background-color: #5cb85c; }
a.list-group-item-success {
color: white; }
@@ -4313,7 +4239,7 @@ a.list-group-item-success {
color: inherit; }
a.list-group-item-success:hover, a.list-group-item-success:focus {
color: white;
- background-color: #669a00; }
+ background-color: #4cae4c; }
a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus {
color: #fff;
background-color: white;
@@ -4321,7 +4247,7 @@ a.list-group-item-success {
.list-group-item-info {
color: white;
- background-color: #2a9fd6; }
+ background-color: #5bc0de; }
a.list-group-item-info {
color: white; }
@@ -4329,7 +4255,7 @@ a.list-group-item-info {
color: inherit; }
a.list-group-item-info:hover, a.list-group-item-info:focus {
color: white;
- background-color: #258fc1; }
+ background-color: #46b8da; }
a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus {
color: #fff;
background-color: white;
@@ -4337,7 +4263,7 @@ a.list-group-item-info {
.list-group-item-warning {
color: white;
- background-color: #ff8800; }
+ background-color: #f0ad4e; }
a.list-group-item-warning {
color: white; }
@@ -4345,7 +4271,7 @@ a.list-group-item-warning {
color: inherit; }
a.list-group-item-warning:hover, a.list-group-item-warning:focus {
color: white;
- background-color: #e67a00; }
+ background-color: #eea236; }
a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus {
color: #fff;
background-color: white;
@@ -4353,7 +4279,7 @@ a.list-group-item-warning {
.list-group-item-danger {
color: white;
- background-color: #cc0000; }
+ background-color: #d9534f; }
a.list-group-item-danger {
color: white; }
@@ -4361,7 +4287,7 @@ a.list-group-item-danger {
color: inherit; }
a.list-group-item-danger:hover, a.list-group-item-danger:focus {
color: white;
- background-color: #b30000; }
+ background-color: #d43f3a; }
a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus {
color: #fff;
background-color: white;
@@ -4570,74 +4496,74 @@ a.list-group-item-danger {
border-bottom-color: #282828; }
.panel-primary {
- border-color: #2a9fd6; }
+ border-color: #428bca; }
.panel-primary > .panel-heading {
color: white;
- background-color: #2a9fd6;
- border-color: #2a9fd6; }
+ background-color: #428bca;
+ border-color: #428bca; }
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #2a9fd6; }
+ border-top-color: #428bca; }
.panel-primary > .panel-heading .badge {
- color: #2a9fd6;
+ color: #428bca;
background-color: white; }
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #2a9fd6; }
+ border-bottom-color: #428bca; }
.panel-success {
- border-color: #669a00; }
+ border-color: #4cae4c; }
.panel-success > .panel-heading {
color: white;
- background-color: #77b300;
- border-color: #669a00; }
+ background-color: #5cb85c;
+ border-color: #4cae4c; }
.panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #669a00; }
+ border-top-color: #4cae4c; }
.panel-success > .panel-heading .badge {
- color: #77b300;
+ color: #5cb85c;
background-color: white; }
.panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #669a00; }
+ border-bottom-color: #4cae4c; }
.panel-info {
- border-color: #2489b9; }
+ border-color: #3db5d8; }
.panel-info > .panel-heading {
color: white;
- background-color: #2a9fd6;
- border-color: #2489b9; }
+ background-color: #5bc0de;
+ border-color: #3db5d8; }
.panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #2489b9; }
+ border-top-color: #3db5d8; }
.panel-info > .panel-heading .badge {
- color: #2a9fd6;
+ color: #5bc0de;
background-color: white; }
.panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #2489b9; }
+ border-bottom-color: #3db5d8; }
.panel-warning {
- border-color: #f08000; }
+ border-color: #efa640; }
.panel-warning > .panel-heading {
color: white;
- background-color: #ff8800;
- border-color: #f08000; }
+ background-color: #f0ad4e;
+ border-color: #efa640; }
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #f08000; }
+ border-top-color: #efa640; }
.panel-warning > .panel-heading .badge {
- color: #ff8800;
+ color: #f0ad4e;
background-color: white; }
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #f08000; }
+ border-bottom-color: #efa640; }
.panel-danger {
- border-color: #bd0000; }
+ border-color: #d64742; }
.panel-danger > .panel-heading {
color: white;
- background-color: #cc0000;
- border-color: #bd0000; }
+ background-color: #d9534f;
+ border-color: #d64742; }
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bd0000; }
+ border-top-color: #d64742; }
.panel-danger > .panel-heading .badge {
- color: #cc0000;
+ color: #d9534f;
background-color: white; }
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bd0000; }
+ border-bottom-color: #d64742; }
.embed-responsive {
position: relative;
@@ -5391,3 +5317,102 @@ button.close {
display: none !important; } }
body {
padding-top: 50px; }
+
+.footer a {
+ color: #888888; }
+
+.text-primary,
+.text-primary:hover {
+ color: #428bca; }
+
+.text-success,
+.text-success:hover {
+ color: #5cb85c; }
+
+.text-danger,
+.text-danger:hover {
+ color: #d9534f; }
+
+.text-warning,
+.text-warning:hover {
+ color: #f0ad4e; }
+
+.text-info,
+.text-info:hover {
+ color: #5bc0de; }
+
+table,
+.table {
+ color: #fff; }
+ table a:not(.btn),
+ .table a:not(.btn) {
+ color: #fff;
+ text-decoration: underline; }
+ table .text-muted,
+ .table .text-muted {
+ color: #888888; }
+
+.table-responsive > .table {
+ background-color: #181818; }
+
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .form-control-feedback {
+ color: #f0ad4e; }
+.has-warning .form-control,
+.has-warning .form-control:focus,
+.has-warning .input-group-addon {
+ border-color: #f0ad4e; }
+
+.has-error .help-block,
+.has-error .control-label,
+.has-error .form-control-feedback {
+ color: #d9534f; }
+.has-error .form-control,
+.has-error .form-control:focus,
+.has-error .input-group-addon {
+ border-color: #d9534f; }
+
+.has-success .help-block,
+.has-success .control-label,
+.has-success .form-control-feedback {
+ color: #5cb85c; }
+.has-success .form-control,
+.has-success .form-control:focus,
+.has-success .input-group-addon {
+ border-color: #5cb85c; }
+
+legend {
+ color: #fff; }
+
+.input-group-addon {
+ background-color: #424242; }
+
+.nav-tabs a,
+.nav-pills a,
+.breadcrumb a,
+.pager a {
+ color: #fff; }
+
+.alert .alert-link,
+.alert a {
+ color: white;
+ text-decoration: underline; }
+.alert .close {
+ text-decoration: none; }
+
+.close {
+ color: #fff;
+ text-decoration: none;
+ opacity: 0.4; }
+ .close:hover, .close:focus {
+ color: #fff;
+ opacity: 1; }
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #282828; }
+
+.jumbotron h1, .jumbotron h2, .jumbotron h3, .jumbotron h4, .jumbotron h5, .jumbotron h6 {
+ color: #fff; }
diff --git a/templates/layout.html b/templates/layout.html
index af412184..6f5a4886 100644
--- a/templates/layout.html
+++ b/templates/layout.html
@@ -24,17 +24,17 @@
</div>
</div>
<div class="container-fluid">
- <div class="col-md-2" style="margin-top: 28px;">
- %menu%
- <ul>
- <li><a href="%faq_url%">FAQ</a></li>
- <li><a href="mailto:erzengel@lists.ccc.de">Contact <img src="pic/icons/email.png" alt="E-Mail"></a></li>
- <li><a href="mailto:bugs@engelsystem.de">Bugs / Features <img src="pic/icons/email.png" alt="E-Mail"></a></li>
- <li><a href="https://vcs.wybt.net/engelsystem/trac/">Development Platform</a></li>
- <li><a href="?p=credits">Credits</a></li>
- </ul>
- </div>
+ <div class="col-md-2" style="margin-top: 28px;">%menu%</div>
%content%
+ <div class="row">
+ <div class="col-md-12">
+ <hr />
+ <div class="text-center footer">
+ <a href="%faq_url%">FAQ</a> · <a href="mailto:erzengel@lists.ccc.de"><span class="glyphicon glyphicon-envelope"></span> Contact</a> · <a href="mailto:bugs@engelsystem.de"><span class="glyphicon glyphicon-envelope"></span> Bugs / Features</a> · <a
+ href="https://vcs.wybt.net/engelsystem/trac/">Development Platform</a> · <a href="?p=credits">Credits</a>
+ </div>
+ </div>
+ </div>
</div>
</body>
</html>
diff --git a/themes/base.scss b/themes/base.scss
index 802524a6..70d1a4b7 100644
--- a/themes/base.scss
+++ b/themes/base.scss
@@ -6,3 +6,7 @@ $icon-font-path: "../fonts/";
body {
padding-top: 50px;
}
+
+.footer a {
+ color: $text-muted;
+} \ No newline at end of file
diff --git a/themes/theme1.scss b/themes/theme1.scss
index 699ddd86..bd1919e1 100644
--- a/themes/theme1.scss
+++ b/themes/theme1.scss
@@ -1,5 +1,29 @@
@import "../vendor/bootstrap-3.2.0/_variables";
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 Thomas Park
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
// Cyborg 3.2.0
// Variables
// --------------------------------------------------
@@ -14,11 +38,11 @@ $gray: #555; // #555
$gray-light: #888; // #999
$gray-lighter: #ADAFAE; // #eee
-$brand-primary: #2A9FD6;
-$brand-success: #77B300;
-$brand-info: $brand-primary;
-$brand-warning: #FF8800;
-$brand-danger: #CC0000;
+$brand-primary: #428bca;
+$brand-success: #5cb85c;
+$brand-info: #5bc0de;
+$brand-warning: #f0ad4e;
+$brand-danger: #d9534f;
//== Scaffolding
@@ -40,7 +64,6 @@ $link-hover-color: $link-color;
//
//## Font, line-height, and color for body text, headings, and more.
-$font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
$font-family-serif: Georgia, "Times New Roman", Times, serif;
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
@@ -50,10 +73,10 @@ $font-size-base: 14px;
$font-size-large: ceil(($font-size-base * 1.25)); // ~18px
$font-size-small: ceil(($font-size-base * 0.85)); // ~12px
-$font-size-h1: 56px;
-$font-size-h2: 45px;
-$font-size-h3: 34px;
-$font-size-h4: 24px;
+$font-size-h1: 34px;
+$font-size-h2: 24px;
+$font-size-h3: 20px;
+$font-size-h4: 20px;
$font-size-h5: 20px;
$font-size-h6: 16px;
@@ -845,12 +868,12 @@ $dl-horizontal-offset: $component-offset-horizontal;
//** Horizontal line color.
$hr-border: $gray-dark;
+@import "base";
+
// Cyborg 3.2.0
// Bootswatch
// -----------------------------------------------------
-@import url("//fonts.googleapis.com/css?family=Roboto:400,700");
-
// Navbar =====================================================================
// Buttons ====================================================================
@@ -1009,5 +1032,3 @@ a.thumbnail.active {
color: #fff;
}
}
-
-@import "base"; \ No newline at end of file