Added profile edit page

This commit is contained in:
Gregorio Chiko Putra 2017-10-28 10:47:16 +07:00
parent f687983b45
commit 5eb78b4440
12 changed files with 296 additions and 20 deletions

View File

@ -61,6 +61,17 @@ class Api
} }
} }
if ($table == 'users') {
unset($get['data']['salt']);
}
if (is_array($get['data'])) {
$get['status'] = true;
} else {
$get['status'] = false;
$get['message'] = $get['data'];
unset($get['data']);
}
header('Content-Type: application/json'); header('Content-Type: application/json');
echo json_encode($get); echo json_encode($get);

View File

@ -240,4 +240,53 @@ class Home
'user' => $user 'user' => $user
]); ]);
} }
public function editProfile($args) {
$user = Access::showAll([
['id', '=', $args['id']]
]);
if (is_array($user)) {
if (Hash::compare($args['old_password'], $user['salt'], $args['password'])) {
unset($args['old_password']);
$args['password'] = $args['new_password'];
unset($args['new_password']);
$args['password'] = Hash::make($args['password'], $user['salt']);
$data = Access::update($args, $args['id']);
if ($data) {
if (isset($_SERVER['HTTP_CLIENT']) && $_SERVER['HTTP_CLIENT'] == 'api') {
echo json_encode([
'status' => true,
'route_to' => '/user' . '/' . $args['id'],
'message' => 'Proses berhasil'
]);die();
}
} else {
if (isset($_SERVER['HTTP_CLIENT']) && $_SERVER['HTTP_CLIENT'] == 'api') {
echo json_encode([
'status' => false,
'route_to' => '/user' . '/' . $args['id'],
'message' => 'Proses gagal'
]);die();
}
}
} else {
if (isset($_SERVER['HTTP_CLIENT']) && $_SERVER['HTTP_CLIENT'] == 'api') {
echo json_encode([
'status' => false,
'route_to' => '/user' . '/' . $args['id'],
'message' => 'Password lama tidak sama'
]);die();
}
}
} else {
if (isset($_SERVER['HTTP_CLIENT']) && $_SERVER['HTTP_CLIENT'] == 'api') {
echo json_encode([
'status' => false,
'route_to' => '/user' . '/' . $args['id'],
'message' => 'User tidak ditemukan'
]);die();
}
}
}
} }

View File

@ -245,3 +245,7 @@ h1 {
transform: scale(1); transform: scale(1);
} }
} }
.noTrans {
transition: none;
}

View File

@ -12,7 +12,6 @@ var createPost = {
category.loadList(1) category.loadList(1)
}, },
oncreate: function() { oncreate: function() {
clearInterval(window.intv)
var valid_at = rome(left, { var valid_at = rome(left, {
dateValidator: rome.val.beforeEq(right), dateValidator: rome.val.beforeEq(right),
time: false, time: false,

View File

@ -46,6 +46,17 @@ var nav = {
}), }),
' User' ' User'
]) : null, ]) : null,
m('a.navy.button', {
'data-tooltip': 'Profil',
onclick: function() {
m.route.set('/user/' + window.location.search.split('&')[1].slice('2'))
}
}, [
m('i.fa.fa-user-circle-o', {
'aria-hidden': 'true'
}),
' Profil'
]),
m('a.navy.button', { m('a.navy.button', {
'data-tooltip': 'Keluar', 'data-tooltip': 'Keluar',
onclick: function() {user.logout()} onclick: function() {user.logout()}

View File

@ -23,6 +23,9 @@ var showPost = {
style: 'padding: 0 .6em' style: 'padding: 0 .6em'
}, m(listAdmin)) }, m(listAdmin))
]))) ])))
},
onremove: function() {
clearInterval(window.intv)
} }
} }

View File

@ -0,0 +1,110 @@
let m = require('mithril')
let fecha = require('fecha')
let user = require('../models/user')
let Loading = require('./Loading')
var userProfile = {
changePassword: false,
oninit: function(vnode) {
user.current = {}
user.loadCurrent(vnode.attrs.id)
},
oncreate: function() {
userProfile.changePassword = false
},
view: function() {
return m('main.documentation', m('section', [
user.loading ? m(Loading) :
m('form', {
onsubmit: function(e) {
e.preventDefault()
user.editProfile()
}
}, [
m('h1', m('input', {
type: 'text',
required: 'required',
placeholder: 'Nama Lengkap',
value: user.current.full_name,
onclick: function() {
user.current.full_name = ''
},
oninput: m.withAttr('value', function(value) {
user.current.full_name = value
})
})),
m('table.full', [
m('tr.full', [
m('td', 'Username'),
m('td', ':'),
m('td', user.current.username)
]),
m('tr', [
m('td', 'Password'),
m('td', ':'),
m('td', [
m('input.full.noTrans#nPwd', {
type: 'password',
required: 'required',
placeholder: 'Password Baru',
value: user.current.new_password,
onclick: function() {
user.current.new_password = ''
this.className = 'third noTrans'
userProfile.changePassword = true
},
oninput: m.withAttr('value', function(value) {
user.current.new_password = value
})
}),
m('input.third#oPwd', {
type: 'password',
required: 'required',
style: userProfile.changePassword ?
'display: inline-block;'
: 'display: none;',
placeholder: 'Password Lama',
oninput: m.withAttr('value', function(value) {
user.current.old_password = value
})
}),
m('input.third#rNPwd', {
type: 'password',
required: 'required',
style: userProfile.changePassword ?
'display: inline-block;'
: 'display: none;',
placeholder: 'Ulang Password Baru',
oninput: m.withAttr('value', function(value) {
user.current.re_new_password = value
})
})
])
]),
m('tr', [
m('td', 'Hak Akses'),
m('td', ':'),
m('td', user.current.privilege == 1 ? 'Admin' : 'User')
]),
m('tr', [
m('td', 'Registrasi'),
m('td', ':'),
m('td', fecha.format(new Date(user.current.registered_at), 'YYYY-MM-DD'))
])
]),
m('button.full.pseudo', {
type: 'submit',
}, [
m('i.fa.fa-check-square-o', {
'aria-hidden': 'true'
}),
m('span', {
style: 'font-size: smaller;'
}, ' Simpan')
])
])
]))
}
}
module.exports = userProfile

View File

@ -6,6 +6,7 @@ let showPost = require('./components/showPost')
let createCategory = require('./components/createCategory') let createCategory = require('./components/createCategory')
let editCategory = require('./components/editCategory') let editCategory = require('./components/editCategory')
let registerUser = require('./components/registerUser') let registerUser = require('./components/registerUser')
let userProfile = require('./components/userProfile')
let createPost = require('./components/createPost') let createPost = require('./components/createPost')
let editPost = require('./components/editPost') let editPost = require('./components/editPost')
let cookie = require('./others/cookie') let cookie = require('./others/cookie')
@ -64,6 +65,16 @@ if (page == '') {
]) ])
} }
}, },
'/user/:id': { view: function(vnode) {
return m('span',
window.message || window.message != null ?
m(label) : null,
[
m(nav),
m(userProfile, { 'id': vnode.attrs.id })
])
}
},
'/posts/edit/:id': { '/posts/edit/:id': {
view: function(vnode) { view: function(vnode) {
return m('span', return m('span',

View File

@ -1,7 +1,26 @@
let m = require('mithril') let m = require('mithril')
let _ = require('lodash')
var user = { var user = {
current: {}, current: {},
loading: false,
loadCurrent: function(id) {
user.loading = true
return m.request({
method: 'GET',
url: '/api/users/' + id,
withCredentials: true
})
.then(function(result) {
if (result.status == true) {
user.current = result.data
user.current.new_password = user.current.password
} else {
window.message = result.message
}
user.loading = false
})
},
login: function() { login: function() {
return m.request({ return m.request({
method: 'POST', method: 'POST',
@ -40,12 +59,32 @@ var user = {
headers: {client: 'api', 'x-query': window.location.search} headers: {client: 'api', 'x-query': window.location.search}
}) })
.then(function(response) { .then(function(response) {
console.log(response);
if (response.status == true) { if (response.status == true) {
m.route.set(response.route_to) m.route.set(response.route_to)
} }
window.message = response.message window.message = response.message
}) })
},
editProfile: function() {
if (_.isEqual(user.current.re_new_password, user.current.new_password)) {
_.unset(user.current, 're_new_password')
return m.request({
method: 'POST',
url: '/edit-profile/' + window.location.search,
data: user.current,
withCredentials: true,
headers: {client: 'api', 'x-query': window.location.search}
})
.then(function(response) {
if (response.status == true) {
user.logout()
}
window.message = response.message
})
} else {
window.message = 'Password baru tidak sama'
m.redraw()
}
} }
} }

View File

@ -245,3 +245,7 @@ h1 {
transform: scale(1); transform: scale(1);
} }
} }
.noTrans {
transition: none;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long