1
0
Fork 0
mirror of https://github.com/Oreolek/kangana.git synced 2024-06-26 03:40:56 +03:00

auth and look

This commit is contained in:
Alexander Yakovlev 2014-01-16 19:01:14 +07:00
parent a78da95e35
commit e5945aaa9a
15 changed files with 811 additions and 239 deletions

1
.gitignore vendored
View file

@ -1,5 +1,4 @@
application/config/database.php
application/config/auth.php
application/config/stats.php
application/config/sphinxql.php
application/cache

View file

@ -0,0 +1,96 @@
// Readable 3.0.3
// Bootswatch
// -----------------------------------------------------
@import url("//fonts.googleapis.com/css?family=Raleway:700");
// Navbar =====================================================================
.navbar {
font-family: @headings-font-family;
text-transform: uppercase;
&-nav > li > a {
padding-top: @navbar-padding-vertical + 6px;
}
&-nav > .active > a,
&-nav > .active > a:hover {
text-decoration: underline;
}
&-default .navbar-nav > .active > a:hover {
color: @navbar-default-link-hover-color;
}
&-inverse .navbar-nav > .active > a:hover {
color: @navbar-inverse-link-hover-color;
}
&-brand {
padding-top: @navbar-padding-vertical + 5px;
}
}
// Buttons ====================================================================
.btn {
font-family: @headings-font-family;
text-transform: uppercase;
}
// Typography =================================================================
h1, h2, h3, h4, h5, h6 {
text-transform: uppercase;
}
p {
margin-bottom: 1.4em;
}
// Tables =====================================================================
// Forms ======================================================================
// Navs =======================================================================
.pagination {
.active > a,
.active > a:hover {
border-color: #ddd;
}
&-lg > li > a,
&-lg > li > span {
padding: 14px 24px;
}
}
// Indicators =================================================================
.alert {
a,
.alert-link {
color: @alert-success-text;
text-decoration: underline;
}
}
// Progress bars ==============================================================
// Containers =================================================================
.panel {
&-primary,
&-success,
&-warning,
&-danger,
&-info {
.panel-heading {
color: #fff;
}
}
}

View file

@ -1,86 +0,0 @@
@background1: #fff;
@background2: #ddd;
@background3: #bbb;
@background4: #999;
@foreground1: #000;
@foreground2: #222;
@foreground3: #444;
@foreground4: #666;
@font-family-sans-serif: "Open Sans", Arial, sans-serif;
@link-color: @foreground2;
@btn-primary-color: @foreground1;
@btn-primary-bg: @background1;
@btn-primary-border: @foreground4;
@btn-default-color: @foreground1;
@btn-default-bg: @background2;
@btn-default-border: @foreground4;
.red {
color: darkred;
}
.green {
color: darkgreen;
}
.blue {
color: darkblue;
}
body {
color: @foreground1;
background: @background1;
}
.navigation {
background: @background1;
}
a {
&:hover {
color: @foreground4;
}
&:visited {
color: @foreground3;
}
}
.comment {
&:nth-child(odd) {
background: @background2;
}
}
.paging {
a.active {
color: @foreground4;
}
}
input[type='text'],
input[type='password'],
textarea,
.form-control {
background: @background2;
}
.sidequote() {
color: @foreground4;
}
.footer {
color: @foreground2;
}
acronym, abbr {
border-bottom: 1px dashed @foreground4;
color: @foreground4;
}
blockquote {
border-left: 1px dashed @background4;
background: @background3;
}

View file

@ -1,5 +1,6 @@
@import 'bootstrap/bootstrap';
@import 'fontawesome/font-awesome';
@import 'colors';
@import 'layout';
@import 'variables';
@import 'bootswatch';
@fa-font-path: "../../assets/fonts";

View file

@ -0,0 +1,642 @@
// Yeti 3.0.3
// Variables
// --------------------------------------------------
// Global values
// --------------------------------------------------
// Grays
// -------------------------
@gray-darker: lighten(#000, 13.5%); // #222
@gray-dark: lighten(#000, 20%); // #333
@gray: #6f6f6f;
@gray-light: lighten(#000, 60%); // #999
@gray-lighter: lighten(#000, 93.5%); // #eee
// Brand colors
// -------------------------
@brand-primary: #008cba;
@brand-success: #43ac6a;
@brand-warning: #E99002;
@brand-danger: #F04124;
@brand-info: #5bc0de;
// Scaffolding
// -------------------------
@body-bg: #fff;
@text-color: @gray-darker;
// Links
// -------------------------
@link-color: @brand-primary;
@link-hover-color: darken(@link-color, 15%);
// Typography
// -------------------------
@font-family-sans-serif: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-family-serif: Georgia, "Times New Roman", Times, serif;
@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
@font-family-base: @font-family-sans-serif;
@font-size-base: 15px;
@font-size-large: ceil(@font-size-base * 1.25); // ~18px
@font-size-small: 12px;
@font-size-h1: floor(@font-size-base * 2.6); // ~36px
@font-size-h2: floor(@font-size-base * 2.15); // ~30px
@font-size-h3: ceil(@font-size-base * 1.7); // ~24px
@font-size-h4: ceil(@font-size-base * 1.25); // ~18px
@font-size-h5: @font-size-base;
@font-size-h6: ceil(@font-size-base * 0.85); // ~12px
@line-height-base: 1.428571429; // 20/14
@line-height-computed: floor(@font-size-base * @line-height-base); // ~20px
@headings-font-family: @font-family-base;
@headings-font-weight: 300;
@headings-line-height: 1.1;
@headings-color: inherit;
// Iconography
// -------------------------
@icon-font-path: "../fonts/";
@icon-font-name: "glyphicons-halflings-regular";
// Components
// -------------------------
// Based on 14px font-size and 1.428 line-height (~20px to start)
@padding-base-vertical: 6px;
@padding-base-horizontal: 12px;
@padding-large-vertical: 10px;
@padding-large-horizontal: 16px;
@padding-small-vertical: 5px;
@padding-small-horizontal: 10px;
@padding-xs-vertical: 1px;
@padding-xs-horizontal: 5px;
@line-height-large: 1.33;
@line-height-small: 1.5;
@border-radius-base: 0;
@border-radius-large: 0;
@border-radius-small: 0;
@component-active-color: #fff;
@component-active-bg: @brand-primary;
@caret-width-base: 4px;
@caret-width-large: 5px;
// Tables
// -------------------------
@table-cell-padding: 8px;
@table-condensed-cell-padding: 5px;
@table-bg: transparent; // overall background-color
@table-bg-accent: #f9f9f9; // for striping
@table-bg-hover: #f5f5f5;
@table-bg-active: @table-bg-hover;
@table-border-color: #ddd; // table and cell border
// Buttons
// -------------------------
@btn-font-weight: normal;
@btn-default-color: @gray-dark;
@btn-default-bg: #e7e7e7;
@btn-default-border: #dadada;
@btn-primary-color: #fff;
@btn-primary-bg: @brand-primary;
@btn-primary-border: darken(@btn-primary-bg, 5%);
@btn-success-color: #fff;
@btn-success-bg: @brand-success;
@btn-success-border: darken(@btn-success-bg, 5%);
@btn-warning-color: #fff;
@btn-warning-bg: @brand-warning;
@btn-warning-border: darken(@btn-warning-bg, 5%);
@btn-danger-color: #fff;
@btn-danger-bg: @brand-danger;
@btn-danger-border: darken(@btn-danger-bg, 5%);
@btn-info-color: #fff;
@btn-info-bg: @brand-info;
@btn-info-border: darken(@btn-info-bg, 5%);
@btn-link-disabled-color: @gray-light;
// Forms
// -------------------------
@input-bg: #fff;
@input-bg-disabled: @gray-lighter;
@input-color: @gray;
@input-border: #ccc;
@input-border-radius: @border-radius-base;
@input-border-focus: #66afe9;
@input-color-placeholder: @gray-light;
@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
@legend-color: @gray-dark;
@legend-border-color: #e5e5e5;
@input-group-addon-bg: @gray-lighter;
@input-group-addon-border-color: @input-border;
// Dropdowns
// -------------------------
@dropdown-bg: #fff;
@dropdown-border: rgba(0,0,0,.15);
@dropdown-fallback-border: #ccc;
@dropdown-divider-bg: rgba(0,0,0,.2);
@dropdown-link-color: #555;
@dropdown-link-hover-color: darken(@gray-dark, 5%);
@dropdown-link-hover-bg: #eee;
@dropdown-link-active-color: @component-active-color;
@dropdown-link-active-bg: @component-active-bg;
@dropdown-link-disabled-color: @gray-light;
@dropdown-header-color: @gray-light;
// COMPONENT VARIABLES
// --------------------------------------------------
// Z-index master list
// -------------------------
// Used for a bird's eye view of components dependent on the z-axis
// Try to avoid customizing these :)
@zindex-navbar: 1000;
@zindex-dropdown: 1000;
@zindex-popover: 1010;
@zindex-tooltip: 1030;
@zindex-navbar-fixed: 1030;
@zindex-modal-background: 1040;
@zindex-modal: 1050;
// Media queries breakpoints
// --------------------------------------------------
// Extra small screen / phone
// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1
@screen-xs: 480px;
@screen-xs-min: @screen-xs;
@screen-phone: @screen-xs-min;
// Small screen / tablet
// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1
@screen-sm: 768px;
@screen-sm-min: @screen-sm;
@screen-tablet: @screen-sm-min;
// Medium screen / desktop
// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1
@screen-md: 992px;
@screen-md-min: @screen-md;
@screen-desktop: @screen-md-min;
// Large screen / wide desktop
// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1
@screen-lg: 1200px;
@screen-lg-min: @screen-lg;
@screen-lg-desktop: @screen-lg-min;
// So media queries don't overlap when required, provide a maximum
@screen-xs-max: (@screen-sm-min - 1);
@screen-sm-max: (@screen-md-min - 1);
@screen-md-max: (@screen-lg-min - 1);
// Grid system
// --------------------------------------------------
// Number of columns in the grid system
@grid-columns: 12;
// Padding, to be divided by two and applied to the left and right of all columns
@grid-gutter-width: 30px;
// Navbar collapse
// Point at which the navbar becomes uncollapsed
@grid-float-breakpoint: @screen-sm-min;
// Point at which the navbar begins collapsing
@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
// Navbar
// -------------------------
// Basics of a navbar
@navbar-height: 45px;
@navbar-margin-bottom: @line-height-computed;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor(@grid-gutter-width / 2);
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
@navbar-default-color: #fff;
@navbar-default-bg: @gray-dark;
@navbar-default-border: darken(@navbar-default-bg, 6.5%);
// Navbar links
@navbar-default-link-color: #fff;
@navbar-default-link-hover-color: #fff;
@navbar-default-link-hover-bg: #272727;
@navbar-default-link-active-color: #fff;
@navbar-default-link-active-bg: #272727;
@navbar-default-link-disabled-color: #ccc;
@navbar-default-link-disabled-bg: transparent;
// Navbar brand label
@navbar-default-brand-color: @navbar-default-link-color;
@navbar-default-brand-hover-color: @navbar-default-brand-color;
@navbar-default-brand-hover-bg: transparent;
// Navbar toggle
@navbar-default-toggle-hover-bg: transparent;
@navbar-default-toggle-icon-bar-bg: #fff;
@navbar-default-toggle-border-color: transparent;
// Inverted navbar
//
// Reset inverted navbar basics
@navbar-inverse-color: #fff;
@navbar-inverse-bg: @brand-primary;
@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
// Inverted navbar links
@navbar-inverse-link-color: #fff;
@navbar-inverse-link-hover-color: #fff;
@navbar-inverse-link-hover-bg: darken(@navbar-inverse-bg, 10%);
@navbar-inverse-link-active-color: #fff;
@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
@navbar-inverse-link-disabled-color: #444;
@navbar-inverse-link-disabled-bg: transparent;
// Inverted navbar brand label
@navbar-inverse-brand-color: @navbar-inverse-link-color;
@navbar-inverse-brand-hover-color: #fff;
@navbar-inverse-brand-hover-bg: transparent;
// Inverted navbar toggle
@navbar-inverse-toggle-hover-bg: transparent;
@navbar-inverse-toggle-icon-bar-bg: #fff;
@navbar-inverse-toggle-border-color: transparent;
// Navs
// -------------------------
@nav-link-padding: 10px 15px;
@nav-link-hover-bg: @gray-lighter;
@nav-disabled-link-color: @gray-light;
@nav-disabled-link-hover-color: @gray-light;
@nav-open-link-hover-color: #fff;
// Tabs
@nav-tabs-border-color: #ddd;
@nav-tabs-link-hover-border-color: @gray-lighter;
@nav-tabs-active-link-hover-bg: @body-bg;
@nav-tabs-active-link-hover-color: @gray;
@nav-tabs-active-link-hover-border-color: #ddd;
@nav-tabs-justified-link-border-color: #ddd;
@nav-tabs-justified-active-link-border-color: @body-bg;
// Pills
@nav-pills-border-radius: @border-radius-base;
@nav-pills-active-link-hover-bg: @component-active-bg;
@nav-pills-active-link-hover-color: @component-active-color;
// Pagination
// -------------------------
@pagination-bg: transparent;
@pagination-border: transparent;
@pagination-hover-bg: @gray-lighter;
@pagination-active-bg: @brand-primary;
@pagination-active-color: #fff;
@pagination-disabled-color: @gray-light;
// Pager
// -------------------------
@pager-border-radius: 3px;
@pager-disabled-color: @gray-light;
// Jumbotron
// -------------------------
@jumbotron-padding: 30px;
@jumbotron-color: inherit;
@jumbotron-bg: #fafafa;
@jumbotron-heading-color: inherit;
@jumbotron-font-size: ceil(@font-size-base * 1.5);
// Form states and alerts
// -------------------------
@state-success-text: @brand-success;
@state-success-bg: #dff0d8;
@state-success-border: darken(@state-success-text, 5%);
@state-info-text: @brand-info;
@state-info-bg: #d9edf7;
@state-info-border: darken(@state-info-text, 7%);
@state-warning-text: @brand-warning;
@state-warning-bg: #fcf8e3;
@state-warning-border: darken(@state-warning-text, 5%);
@state-danger-text: @brand-danger;
@state-danger-bg: #f2dede;
@state-danger-border: darken(@state-danger-text, 5%);
// Tooltips
// -------------------------
@tooltip-max-width: 200px;
@tooltip-color: #fff;
@tooltip-bg: @gray-dark;
@tooltip-arrow-width: 5px;
@tooltip-arrow-color: @tooltip-bg;
// Popovers
// -------------------------
@popover-bg: @gray-dark;
@popover-max-width: 276px;
@popover-border-color: transparent;
@popover-fallback-border-color: @gray-dark;
@popover-title-bg: @popover-bg;
@popover-arrow-width: 10px;
@popover-arrow-color: @popover-bg;
@popover-arrow-outer-width: (@popover-arrow-width + 1);
@popover-arrow-outer-color: rgba(0,0,0,.25);
@popover-arrow-outer-fallback-color: #999;
// Labels
// -------------------------
@label-default-bg: @gray-light;
@label-primary-bg: @brand-primary;
@label-success-bg: @brand-success;
@label-info-bg: @brand-info;
@label-warning-bg: @brand-warning;
@label-danger-bg: @brand-danger;
@label-color: #fff;
@label-link-hover-color: #fff;
// Modals
// -------------------------
@modal-inner-padding: 20px;
@modal-title-padding: 15px;
@modal-title-line-height: @line-height-base;
@modal-content-bg: #fff;
@modal-content-border-color: rgba(0,0,0,.2);
@modal-content-fallback-border-color: #999;
@modal-backdrop-bg: #000;
@modal-header-border-color: #e5e5e5;
@modal-footer-border-color: @modal-header-border-color;
// Alerts
// -------------------------
@alert-padding: 15px;
@alert-border-radius: @border-radius-base;
@alert-link-font-weight: bold;
@alert-success-bg: @brand-success;
@alert-success-text: #fff;
@alert-success-border: @state-success-border;
@alert-info-bg: @brand-info;
@alert-info-text: #fff;
@alert-info-border: @state-info-border;
@alert-warning-bg: @brand-warning;
@alert-warning-text: #fff;
@alert-warning-border: @state-warning-border;
@alert-danger-bg: @brand-danger;
@alert-danger-text: #fff;
@alert-danger-border: @state-danger-border;
// Progress bars
// -------------------------
@progress-bg: #f5f5f5;
@progress-bar-color: #fff;
@progress-bar-bg: @brand-primary;
@progress-bar-success-bg: @brand-success;
@progress-bar-warning-bg: @brand-warning;
@progress-bar-danger-bg: @brand-danger;
@progress-bar-info-bg: @brand-info;
// List group
// -------------------------
@list-group-bg: #fff;
@list-group-border: #ddd;
@list-group-border-radius: @border-radius-base;
@list-group-hover-bg: #f5f5f5;
@list-group-active-color: @component-active-color;
@list-group-active-bg: @component-active-bg;
@list-group-active-border: @list-group-active-bg;
@list-group-link-color: #555;
@list-group-link-heading-color: #333;
// Panels
// -------------------------
@panel-bg: #fff;
@panel-inner-border: #ddd;
@panel-border-radius: @border-radius-base;
@panel-footer-bg: #f5f5f5;
@panel-default-text: @gray-dark;
@panel-default-border: #ddd;
@panel-default-heading-bg: #f5f5f5;
@panel-primary-text: #fff;
@panel-primary-border: @brand-primary;
@panel-primary-heading-bg: @brand-primary;
@panel-success-text: @state-success-text;
@panel-success-border: @state-success-border;
@panel-success-heading-bg: @state-success-bg;
@panel-warning-text: @state-warning-text;
@panel-warning-border: @state-warning-border;
@panel-warning-heading-bg: @state-warning-bg;
@panel-danger-text: @state-danger-text;
@panel-danger-border: @state-danger-border;
@panel-danger-heading-bg: @state-danger-bg;
@panel-info-text: @state-info-text;
@panel-info-border: @state-info-border;
@panel-info-heading-bg: @state-info-bg;
// Thumbnails
// -------------------------
@thumbnail-padding: 4px;
@thumbnail-bg: @body-bg;
@thumbnail-border: #ddd;
@thumbnail-border-radius: @border-radius-base;
@thumbnail-caption-color: @text-color;
@thumbnail-caption-padding: 9px;
// Wells
// -------------------------
@well-bg: @jumbotron-bg;
// Badges
// -------------------------
@badge-color: #777;
@badge-link-hover-color: #fff;
@badge-bg: @btn-default-bg;
@badge-active-color: @link-color;
@badge-active-bg: #fff;
@badge-font-weight: bold;
@badge-line-height: 1;
@badge-border-radius: 10px;
// Breadcrumbs
// -------------------------
@breadcrumb-bg: #f5f5f5;
@breadcrumb-color: @gray-light;
@breadcrumb-active-color: @gray-dark;
@breadcrumb-separator: "/";
// Carousel
// ------------------------
@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
@carousel-control-color: #fff;
@carousel-control-width: 15%;
@carousel-control-opacity: .5;
@carousel-control-font-size: 20px;
@carousel-indicator-active-bg: #fff;
@carousel-indicator-border-color: #fff;
@carousel-caption-color: #fff;
// Close
// ------------------------
@close-font-weight: bold;
@close-color: #000;
@close-text-shadow: 0 1px 0 #fff;
// Code
// ------------------------
@code-color: #c7254e;
@code-bg: #f9f2f4;
@pre-bg: #f5f5f5;
@pre-color: @gray-dark;
@pre-border-color: #ccc;
@pre-scrollable-max-height: 340px;
// Type
// ------------------------
@text-muted: @gray-light;
@abbr-border-color: @gray-light;
@headings-small-color: @gray-light;
@blockquote-small-color: @gray;
@blockquote-border-color: @hr-border;
@page-header-border-color: @hr-border;
// Miscellaneous
// -------------------------
// Hr border color
@hr-border: #ddd;
// Horizontal forms & lists
@component-offset-horizontal: 180px;
// Container sizes
// --------------------------------------------------
// Small screen / tablet
@container-tablet: ((720px + @grid-gutter-width));
@container-sm: @container-tablet;
// Medium screen / desktop
@container-desktop: ((940px + @grid-gutter-width));
@container-md: @container-desktop;
// Large screen / wide desktop
@container-large-desktop: ((1140px + @grid-gutter-width));
@container-lg: @container-large-desktop;

View file

@ -118,6 +118,11 @@ Kohana::modules(array(
* Set the routes. Each route must have a minimum of a name, a URI and a set of
* defaults for the URI.
*/
Route::set('minion', 'minion(/<action>)', array('action' => '.+'))
->defaults(array(
'controller' => 'Minion',
));
Route::set('error', 'error/<action>(/<message>)', array('action' => '[0-9]++','message' => '.+'))
->defaults(array(
'controller' => 'Error',
@ -125,6 +130,6 @@ Route::set('error', 'error/<action>(/<message>)', array('action' => '[0-9]++','m
Route::set('default', '(<controller>(/<action>(/<id>)(/page/<page>)))')
->defaults(array(
'controller' => 'Client',
'action' => 'search',
'controller' => 'User',
'action' => 'signin',
));

View file

@ -4,4 +4,18 @@
* Client controller.
**/
class Controller_Client extends Controller_Layout {
/**
* Manually add a client.
**/
public function action_add()
{
}
/**
* Search a client.
**/
public function action_search()
{
$this->template = new View_Client_Search;
}
}

View file

@ -11,33 +11,19 @@ class Controller_Layout extends Controller {
parent::before();
$action_name = $this->request->action();
if (
Kohana::$environment === Kohana::PRODUCTION &&
is_array($this->secure_actions) &&
array_key_exists($action_name, $this->secure_actions)
)
{
if ( Auth::instance()->logged_in($this->secure_actions[$action_name]) === FALSE)
if ( Auth::instance()->logged_in() === FALSE)
{
if (Auth::instance()->logged_in())
{
$this->redirect('error/403');
}
else
{
$this->redirect('user/signin');
}
$this->redirect('user/signin');
}
else
{
//user is clear to go but his pages are cache-sensitive
$this->is_private = TRUE;
// force https
if (Kohana::$config->load('common')->get('force_https'))
{
if (!$this->request->secure())
{
$this->request->secure(TRUE);
}
}
}
}
}

View file

@ -5,10 +5,6 @@
* Sign in and edit password.
**/
class Controller_User extends Controller_Layout {
protected $secure_actions = array(
'edit' => array('login'),
'search' => array('login', 'admin')
);
public function action_view()
{
$this->redirect('');
@ -22,13 +18,19 @@ class Controller_User extends Controller_Layout {
$this->template = new View_Edit;
$this->template->title = __('User login');
$this->template->errors = array();
$this->template->controls = array(
'username' => 'input',
'password' => 'password'
$this->template->custom_controls = array(
'username' => array(
'type' => 'input',
'label' => __('Username'),
'value' => ''
),
'password' => array(
'type' => 'password',
'label' => __('Password'),
'value' => ''
),
);
$user = ORM::factory('User');
if (HTTP_Request::POST == $this->request->method()) {
$user->username = $this->request->post('username');
$validation = Validation::factory($this->request->post())
->rules('username', array(
array('not_empty'),
@ -38,7 +40,7 @@ class Controller_User extends Controller_Layout {
if ($validation->check()) {
if (Auth::instance()->login( $this->request->post('username'), $this->request->post('password'), true))
{
$this->redirect('post/index');
$this->redirect('page/index');
}
else
{
@ -50,92 +52,5 @@ class Controller_User extends Controller_Layout {
$this->template->errors = $validation->errors('default');
}
}
$this->template->model = $user;
}
/**
* Set user password - available only in development mode
**/
public function action_password()
{
$this->template = new View_Edit;
$this->template->title = 'Изменение пароля';
$this->template->errors = array();
$this->template->controls = array(
'username' => 'input',
'password' => 'password'
);
$user = ORM::factory('User');
if (HTTP_Request::POST == $this->request->method()) {
$user = ORM::factory('User')->where('username', '=', $this->request->post('username'))->find();
if (!$user->loaded())
{
$this->template->errors = array('Указанный пользователь не найден. Пожалуйста, проверьте имя пользователя.');
}
else
{
$validation = Validation::factory($this->request->post())
->rule('password', 'not_empty');
if ($validation->check()) {
$user->password = $this->request->post('password');
if ($user->update())
{
$this->redirect('user/pwmessage');
}
}
else
{
$this->template->errors = $validation->errors('default');
}
}
}
$this->template->model = $user;
}
/**
* Message when password is successfully changed.
**/
public function action_pwmessage()
{
$this->template = new View_Message;
$this->template->title = 'Пароль изменён';
$this->template->message = 'Пароль пользователя успешно изменён.';
}
/**
* Edit own user information -- change password etc.
**/
public function action_edit()
{
if (!Auth::instance()->logged_in())
{
$this->redirect('post/index');
}
$this->template = new View_Edit;
$this->template->title = 'Редактирование логина и пароля';
$this->template->errors = array();
$this->template->controls = array(
'username' => 'input',
'password' => 'password'
);
$user = Auth::instance()->get_user();
if (HTTP_Request::POST == $this->request->method()) {
$validation = Validation::factory($this->request->post())
->rules('username', array(
array('not_empty'),
array('max_length', array(':value', 32))
))
->rule('password', 'not_empty');
if ($validation->check()) {
$user->values($this->request->post());
$user->update();
$this->redirect('post/index');
}
else
{
$this->template->errors = $validation->errors();
}
}
$this->template->model = $user;
}
}

View file

@ -1,13 +0,0 @@
<?php defined('SYSPATH') OR die('No direct access allowed.');
class Model_User extends Model_Auth_User {
/**
* Array of field labels.
* Used in forms.
**/
protected $_labels = array(
'username' => 'Имя пользователя',
'password' => 'Пароль пользователя',
'email' => 'Email',
);
}

View file

@ -0,0 +1,7 @@
<?php defined('SYSPATH') or die('No direct script access.');
/**
* Search client view controller
**/
class View_Client_Search extends View_Layout {
}

View file

@ -1,11 +0,0 @@
<?php defined('SYSPATH') or die('No direct access allowed.');
return array(
'driver' => 'ORM',
'hash_method' => 'sha256',
'hash_key' => "choose your own hash key",
'lifetime' => 1209600,
'session_key' => 'auth_user',
);

View file

@ -2,5 +2,7 @@
return array(
'User login' => 'Вход пользователя',
'Authorization error. Please check user login and password.' => 'Ошибка авторизации. Проверьте правильность имени пользователя и пароля.'
'Authorization error. Please check user login and password.' => 'Ошибка авторизации. Проверьте правильность имени пользователя и пароля.',
'Username' => 'Имя пользователя',
'Password' => 'Пароль'
);

View file

@ -0,0 +1 @@
{{content}}

View file

@ -9,19 +9,33 @@
</head>
<body>
<div class="container-fluid">
<header>
<h1>{{site_title}}</h1>
</header>
<div class="paging">
{{{get_paging}}}
</div>
<div class = "navigation">
<ul>
{{#navigation}}
<li><a href="{{url}}">{{title}}</a></li>
{{/navigation}}
</ul>
</div>
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">{{site_title}}</a>
</div>
<div class="collapse navbar-collapse">
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<ul class="nav navbar-nav navbar-right">
{{#navigation}}
<li><a href="{{url}}">{{title}}</a></li>
{{/navigation}}
</ul>
</div>
</nav>
<a href="#" class="link_top hidden-xs"><i class="fa fa-angle-up">&nbsp;</i>Наверх</a>
<div class = "main_content">
<h2>{{title}}</h2>