REvize
This commit is contained in:
parent
316d242297
commit
8b3e047831
|
|
@ -1,17 +0,0 @@
|
|||
const {Application} = require("../core/server");
|
||||
const Joi = require("joi");
|
||||
const { PostDataProcess } = require("../core/postdata");
|
||||
const User = require("../database/user");
|
||||
const { MiddlewareAuth } = require("./auth");
|
||||
|
||||
|
||||
Application.get("/panel", MiddlewareAuth,PanelPage);
|
||||
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function PanelPage(request, response)
|
||||
{
|
||||
response.render("panel");
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
const {Application} = require("../core/server");
|
||||
const Joi = require("joi");
|
||||
const { PostDataProcess } = require("../core/postdata");
|
||||
const User = require("../database/user");
|
||||
const { MiddlewareAuth } = require("./auth");
|
||||
const express = require("express");
|
||||
const { countCatalogs, getCatalogs, createCatalog } = require("../database/catalog");
|
||||
|
||||
|
||||
Application.get("/catalogs", MiddlewareAuth,CatalogPage);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function CatalogPage(request, response)
|
||||
{
|
||||
response.render("panel/catalogs");
|
||||
}
|
||||
|
||||
Application.post("/catalog/list", MiddlewareAuth, express.urlencoded({extended: true}), CatalogsList);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function CatalogsList(request, response)
|
||||
{
|
||||
let start = request.body.start ?? 0;
|
||||
let length = request.body.length ?? 100;
|
||||
let term = request.body.search?.value ?? null;
|
||||
let count = await countCatalogs(request.session.user_id, term);
|
||||
let data = await getCatalogs(request.session.user_id,start,length, term);
|
||||
response.json({
|
||||
"draw": request.body.draw | 0,
|
||||
"recordsTotal": count,
|
||||
"recordsFiltered" : count,
|
||||
"length": 0,
|
||||
"data": data
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Application.post("/catalog/store", MiddlewareAuth, PostDataProcess(), CatalogStore);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function CatalogStore(request, response)
|
||||
{
|
||||
const error = catalogStoreValidation(request.body);
|
||||
|
||||
if(error)
|
||||
{
|
||||
return response.status(400).json({
|
||||
status: "fail",
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
|
||||
try{
|
||||
await createCatalog(
|
||||
request.session.user_id,
|
||||
request.body.name,
|
||||
request.body.score,
|
||||
request.body.description
|
||||
);
|
||||
return response.status(200).json({
|
||||
status: "success"
|
||||
});
|
||||
}catch(err){
|
||||
console.log(err)
|
||||
return response.status(500).json({
|
||||
status: "fail"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function catalogStoreValidation(body)
|
||||
{
|
||||
const schema = Joi.object({
|
||||
id: Joi.number().min(1),
|
||||
name: Joi.string().min(3).max(200).required().error(new Error('Adı en az 3 karakter ve zorunludur')),
|
||||
score: Joi.number().min(1).allow('', null).error(new Error('Soyadı formatı hatalı')),
|
||||
description: Joi.string().allow('', null)
|
||||
});
|
||||
const {error} = schema.validate(body);
|
||||
return error;
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
const {Application} = require("../core/server");
|
||||
const Joi = require("joi");
|
||||
const { PostDataProcess } = require("../core/postdata");
|
||||
const User = require("../database/user");
|
||||
const { MiddlewareAuth } = require("./auth");
|
||||
const { createStudent, getStudents, countStudents, updateStudent } = require("../database/student");
|
||||
const express = require("express");
|
||||
|
||||
|
||||
Application.get("/panel", MiddlewareAuth,PanelPage);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function PanelPage(request, response)
|
||||
{
|
||||
response.render("panel/panel");
|
||||
}
|
||||
|
||||
Application.post("/user/profile", MiddlewareAuth,ApiUserProfile);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function ApiUserProfile(request, response)
|
||||
{
|
||||
let name = request.session.user.name;
|
||||
let surname = request.session.user.surname;
|
||||
|
||||
response.json({
|
||||
status: "active",
|
||||
name,
|
||||
surname
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Application.get("/students", MiddlewareAuth,StudentsPage);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function StudentsPage(request, response)
|
||||
{
|
||||
response.render("panel/students");
|
||||
}
|
||||
|
||||
Application.post("/students/store", MiddlewareAuth, PostDataProcess(), StudentStore);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function StudentStore(request, response)
|
||||
{
|
||||
const error = studentStoreValidation(request.body);
|
||||
|
||||
if(error)
|
||||
{
|
||||
return response.status(400).json({
|
||||
status: "fail",
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
|
||||
try{
|
||||
await createStudent(
|
||||
request.session.user_id,
|
||||
request.body.name,
|
||||
request.body.surname,
|
||||
request.body.studentno,
|
||||
request.body.email,
|
||||
request.body.gender,
|
||||
request.body.birthdate || null,
|
||||
request.body.description
|
||||
);
|
||||
return response.status(200).json({
|
||||
status: "success"
|
||||
});
|
||||
}catch(err){
|
||||
console.log(err)
|
||||
return response.status(500).json({
|
||||
status: "fail"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Application.post("/students/update", MiddlewareAuth, PostDataProcess(), StudentUpdate);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function StudentUpdate(request, response)
|
||||
{
|
||||
const error = studentStoreValidation(request.body);
|
||||
|
||||
if(error)
|
||||
{
|
||||
return response.status(400).json({
|
||||
status: "fail",
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
|
||||
try{
|
||||
await updateStudent(
|
||||
request.body.id,
|
||||
request.session.user_id,
|
||||
request.body.name,
|
||||
request.body.surname,
|
||||
request.body.studentno,
|
||||
request.body.email,
|
||||
request.body.gender,
|
||||
request.body.birthdate || null,
|
||||
request.body.description
|
||||
);
|
||||
return response.status(200).json({
|
||||
status: "success"
|
||||
});
|
||||
}catch(err){
|
||||
console.log(err)
|
||||
return response.status(500).json({
|
||||
status: "fail"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Application.post("/students/list", MiddlewareAuth, express.urlencoded({extended: true}), StudentList);
|
||||
/**
|
||||
* @param {import("express").Request} request
|
||||
* @param {import("express").Response} response
|
||||
*/
|
||||
async function StudentList(request, response)
|
||||
{
|
||||
let start = request.body.start ?? 0;
|
||||
let length = request.body.length ?? 100;
|
||||
let term = request.body.search?.value ?? null;
|
||||
let count = await countStudents(request.session.user_id, term);
|
||||
let data = await getStudents(request.session.user_id,start,length, term);
|
||||
response.json({
|
||||
"draw": request.body.draw | 0,
|
||||
"recordsTotal": count,
|
||||
"recordsFiltered" : count,
|
||||
"data": data
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function studentStoreValidation(body)
|
||||
{
|
||||
const schema = Joi.object({
|
||||
id: Joi.number().min(1),
|
||||
name: Joi.string().min(3).max(200).required().error(new Error('Adı en az 3 karakter ve zorunludur')),
|
||||
surname: Joi.string().max(200).allow('', null).error(new Error('Soyadı formatı hatalı')),
|
||||
studentno: Joi.string().max(200).allow('', null).error(new Error('Numara formatı hatalı')),
|
||||
email: Joi.string().email().max(200).allow('', null).error(new Error('E-posta adresi geçersiz')),
|
||||
birthdate: Joi.date().iso().allow('', null).error(new Error('Doğum tarihi geçersiz')),
|
||||
gender: Joi.string().valid('male', 'female', 'Belirtilmemiş').allow('', null).error(new Error('Cinsiyet seçimi hatalı')),
|
||||
description: Joi.string().allow('', null)
|
||||
});
|
||||
const {error} = schema.validate(body);
|
||||
return error;
|
||||
}
|
||||
|
|
@ -5,7 +5,10 @@ const storage = multer.memoryStorage();
|
|||
|
||||
const upload = multer({
|
||||
storage: storage,
|
||||
limits: { fileSize: 5 * 1024 * 1024 } // Örn: Max 5MB sınırı
|
||||
limits: {
|
||||
fileSize: 5 * 1024 * 1024,
|
||||
fieldNameSize: 200
|
||||
}
|
||||
});
|
||||
|
||||
exports.PostDataProcess = () => upload.none();
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
const crypto = require("node:crypto");
|
||||
const DB = require("./connection");
|
||||
|
||||
|
||||
exports.createCatalog = createCatalog;
|
||||
exports.getCatalogs = getCatalogs;
|
||||
exports.countCatalogs = countCatalogs;
|
||||
exports.updateCatalog = updateCatalog;
|
||||
|
||||
async function createCatalog(
|
||||
owner_id,
|
||||
name,
|
||||
score,
|
||||
description
|
||||
)
|
||||
{
|
||||
const [id] = await DB.table("events")
|
||||
.insert({
|
||||
owner_id,
|
||||
name,
|
||||
score,
|
||||
description
|
||||
})
|
||||
.returning("id");
|
||||
return id;
|
||||
}
|
||||
async function updateCatalog(
|
||||
id,
|
||||
owner_id,
|
||||
name,
|
||||
score,
|
||||
description
|
||||
)
|
||||
{
|
||||
await DB.table("events")
|
||||
.where("id",id)
|
||||
.where("owner_id", owner_id)
|
||||
.update({
|
||||
name,
|
||||
score,
|
||||
description
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
async function getCatalogs(
|
||||
owner_id,
|
||||
offset,
|
||||
limit,
|
||||
searchTerm
|
||||
)
|
||||
{
|
||||
return await DB.table("events")
|
||||
.where("owner_id",owner_id)
|
||||
.whereNull("deleted_at")
|
||||
.where("name","like",`%${searchTerm ?? ""}%`)
|
||||
.limit(limit)
|
||||
.offset(offset);
|
||||
}
|
||||
async function countCatalogs(owner_id, searchTerm)
|
||||
{
|
||||
return (
|
||||
await DB.table("events")
|
||||
.where("owner_id",owner_id)
|
||||
.whereNull("deleted_at")
|
||||
.where("name","like",`%${searchTerm ?? ""}%`)
|
||||
.count("id as total")
|
||||
.first()
|
||||
).total;
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ exports.up = function(knex) {
|
|||
table.string("studentno").nullable();
|
||||
table.string("email").nullable();
|
||||
table.string("gender").nullable();
|
||||
table.dateTime("bithdate").nullable();
|
||||
table.dateTime("birthdate").nullable();
|
||||
table.text("description").nullable();
|
||||
|
||||
table.dateTime("created_at").defaultTo(knex.fn.now());;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,88 @@
|
|||
const crypto = require("node:crypto");
|
||||
const DB = require("./connection");
|
||||
|
||||
|
||||
exports.createStudent = createStudent;
|
||||
exports.getStudents = getStudents;
|
||||
exports.countStudents = countStudents;
|
||||
exports.updateStudent = updateStudent;
|
||||
|
||||
async function createStudent(
|
||||
owner_id,
|
||||
name,
|
||||
surname,
|
||||
studentno,
|
||||
email,
|
||||
gender,
|
||||
birthdate,
|
||||
description
|
||||
)
|
||||
{
|
||||
const [id] = await DB.table("students")
|
||||
.insert({
|
||||
owner_id,
|
||||
name,
|
||||
surname,
|
||||
studentno,
|
||||
email,
|
||||
gender,
|
||||
birthdate,
|
||||
description
|
||||
})
|
||||
.returning("id");
|
||||
return id;
|
||||
}
|
||||
async function updateStudent(
|
||||
id,
|
||||
owner_id,
|
||||
name,
|
||||
surname,
|
||||
studentno,
|
||||
email,
|
||||
gender,
|
||||
birthdate,
|
||||
description
|
||||
)
|
||||
{
|
||||
await DB.table("students")
|
||||
.where("id",id)
|
||||
.where("owner_id", owner_id)
|
||||
.update({
|
||||
name,
|
||||
surname,
|
||||
studentno,
|
||||
email,
|
||||
gender,
|
||||
birthdate,
|
||||
description
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
async function getStudents(
|
||||
owner_id,
|
||||
offset,
|
||||
limit,
|
||||
searchTerm
|
||||
)
|
||||
{
|
||||
return await DB.table("students")
|
||||
.where("owner_id",owner_id)
|
||||
.whereNull("deleted_at")
|
||||
.where("name","like",`%${searchTerm ?? ""}%`)
|
||||
.limit(limit)
|
||||
.offset(offset);
|
||||
}
|
||||
async function countStudents(owner_id, searchTerm)
|
||||
{
|
||||
return (
|
||||
await DB.table("students")
|
||||
.where("owner_id",owner_id)
|
||||
.whereNull("deleted_at")
|
||||
.where("name","like",`%${searchTerm ?? ""}%`)
|
||||
.count("id as total")
|
||||
.first()
|
||||
).total;
|
||||
}
|
||||
3
index.js
3
index.js
|
|
@ -5,5 +5,6 @@ require("./core/static");
|
|||
require("./database/session");
|
||||
|
||||
require("./controllers/auth");
|
||||
require("./controllers/backend");
|
||||
require("./controllers/students");
|
||||
require("./controllers/catalog");
|
||||
require("./controllers/fallback");
|
||||
|
|
@ -12108,19 +12108,6 @@ nav .app-logo .profile-menu-dropdown .dropdown-menu {
|
|||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
transform: translate(32px, -70px) !important;
|
||||
}
|
||||
nav .app-logo .profile-menu-dropdown .dropdown-menu:before {
|
||||
content: "";
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
background: rgba(var(--white), 1);
|
||||
border-left: 1px solid rgba(var(--secondary), 0.4);
|
||||
border-bottom: 1px solid rgba(var(--secondary), 0.4);
|
||||
position: absolute;
|
||||
top: 73px;
|
||||
left: -8px;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
nav .app-nav {
|
||||
height: calc(100% - 162px);
|
||||
|
|
@ -12665,7 +12652,7 @@ div .semi-nav ~ footer {
|
|||
width: 100%;
|
||||
height: 100%;
|
||||
transition: var(--app-transition);
|
||||
box-shadow: var(--box-shadow);
|
||||
/*box-shadow: var(--box-shadow);*/
|
||||
overflow: hidden;
|
||||
}
|
||||
.app-wrapper .app-content .container-xxl {
|
||||
|
|
@ -34725,9 +34712,9 @@ body.dark nav .app-logo .logo img {
|
|||
}
|
||||
}
|
||||
@media screen and (max-width: 576px) {
|
||||
nav .app-logo .profile-menu-dropdown .dropdown-menu {
|
||||
/*nav .app-logo .profile-menu-dropdown .dropdown-menu {
|
||||
transform: translate(-28px, -70px) !important;
|
||||
}
|
||||
}*/
|
||||
nav .app-logo .profile-menu-dropdown .dropdown-menu:before {
|
||||
left: auto;
|
||||
right: -8px;
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
<%-include("./partials/header.ejs") %>
|
||||
|
||||
<div class="app-wrapper default">
|
||||
<%-include("./partials/sidebar.ejs") %>
|
||||
<div class="app-content">
|
||||
<%-include("./partials/navbar.ejs") %>
|
||||
</div>
|
||||
<main>
|
||||
<h1>Merhaba</h1>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<%-include("./partials/footer.ejs") %>
|
||||
|
|
@ -0,0 +1,273 @@
|
|||
<%-include("../partials/header.ejs") %>
|
||||
<%-include("../partials/sidebar.ejs") %>
|
||||
<div class="app-content">
|
||||
<%-include("../partials/navbar.ejs") %>
|
||||
|
||||
<main>
|
||||
<div class="container-fluid">
|
||||
<!-- Breadcrumb start -->
|
||||
<div class="row m-1">
|
||||
<div class="col-12">
|
||||
<h4 class="main-title">Puan Kataloğu</h4>
|
||||
<p>
|
||||
Öğrencileri değerlendireceğiniz kategorileri belirleyin
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card ">
|
||||
<div class="card-header ">
|
||||
<div class="d-flex flex-row flex-1">
|
||||
<h5 class="flex-fill">
|
||||
Puan Kataloğu listesi
|
||||
</h5>
|
||||
<div class="flex-min">
|
||||
<button class="btn btn-success" data-bs-target="#add_student" data-bs-toggle="modal" type="button">
|
||||
<i class="fa fa-plus"></i>
|
||||
Puan Kataloğu ekle
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="app-datatable-default overflow-auto">
|
||||
<table class="table display app-data-table default-data-table" id="cataloglist"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<div aria-hidden="true" class="modal fade" id="add_student" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Yeni Katalog Ekle</h5>
|
||||
<button aria-label="Close" class="btn-close m-0 fs-5" data-bs-dismiss="modal" type="button"></button>
|
||||
</div>
|
||||
<form class="modal-body" id="catalogaveform" onsubmit="saveStudent(this);return false;">
|
||||
<div class="row app-form">
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Adı <small class="text-danger">*</small></label>
|
||||
<input type="text" class="form-control" name="name" placeholder="Aktivite Adı" required min="3">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Puanı</label>
|
||||
<input type="number" class="form-control" name="score" placeholder="Skor değeri" min="0" step="1" required>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-outline-success" type="submit" form="catalogaveform">Kaydet</button>
|
||||
<button class="btn btn-light-secondary" data-bs-dismiss="modal" type="button">Kapat</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div aria-hidden="true" class="modal fade" id="update_student" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Öğrenci güncelle</h5>
|
||||
<button aria-label="Close" class="btn-close m-0 fs-5" data-bs-dismiss="modal" type="button"></button>
|
||||
</div>
|
||||
<form class="modal-body" id="studentupdateform" onsubmit="updateStudent(this);return false;">
|
||||
<input type="hidden" name="id">
|
||||
<div class="row app-form">
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Adı <small class="text-danger">*</small></label>
|
||||
<input type="text" class="form-control" name="name" placeholder="Öğrencinin adı" required min="3">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Soyadı</label>
|
||||
<input type="text" class="form-control" name="surname" placeholder="Öğrencinin Soyadı">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Numarası</label>
|
||||
<input type="text" class="form-control" name="studentno" placeholder="Öğrencinin Numarası">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">E-Posta Adresi</label>
|
||||
<input type="email" class="form-control" name="email" placeholder="Öğrencinin E-Posta Adresi">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Doğum Tarihi</label>
|
||||
<input type="date" class="form-control" name="birthdate" placeholder="Öğrencinin E-Posta Adresi">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Cinsiyeti</label>
|
||||
<select name="gender" class="form-control">
|
||||
<option>Belirtilmemiş</option>
|
||||
<option value="male">Erkek</option>
|
||||
<option value="female">Kadın</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-12 mt-3">
|
||||
<label class="form-label">Açıklama</label>
|
||||
<textarea name="description" class="form-control" placeholder="Öğrenci hakkında"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-outline-success" type="submit" form="studentupdateform">Güncelle</button>
|
||||
<button class="btn btn-light-secondary" data-bs-dismiss="modal" type="button">Kapat</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
let dataTable;
|
||||
$(function(){
|
||||
dataTable = $("#cataloglist").DataTable({
|
||||
serverSide: true,
|
||||
processing: true,
|
||||
autoWidth: false,
|
||||
ajax: {
|
||||
url: "/catalog/list",
|
||||
method:"post"
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
width: "1%",
|
||||
title: "#",
|
||||
data: null,
|
||||
render: function (data, type, row, meta) {
|
||||
return meta.row + 1;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Adı Soyadı",
|
||||
data: null,
|
||||
name: "fullname",
|
||||
render: function (data, row) {
|
||||
return `${data.name} ${data.surname || ''}`;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Öğrenci No",
|
||||
data: "studentno",
|
||||
name: "studentno"
|
||||
},
|
||||
{
|
||||
title: "Cinsiyet",
|
||||
data: "gender",
|
||||
name: "gender",
|
||||
render: function (data) {
|
||||
if (data === 'male') return 'Erkek';
|
||||
if (data === 'female') return 'Kadın';
|
||||
return 'Belirtilmemiş';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "E-Posta",
|
||||
data: "email",
|
||||
name: "email"
|
||||
},
|
||||
{
|
||||
width: "1%",
|
||||
title: "İşlemler",
|
||||
data: null,
|
||||
orderable: false, // İşlemlere göre sıralama yapılamasın
|
||||
render: function (data) {
|
||||
return `
|
||||
<div class="btn-group d-flex flex-row flex-nowrap" role="group">
|
||||
<button class="btn btn-sm btn-outline-primary text-nowrap" onclick="updateModal(this)" title="Düzenle">
|
||||
<i class="fa fa-edit"></i>
|
||||
Düzenle
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-danger text-nowrap" onclick="deleteStudent(${data.id})" title="Sil">
|
||||
<i class="fa fa-trash"></i>
|
||||
Sil
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
}
|
||||
],
|
||||
"language": {
|
||||
"url": "https://cdn.datatables.net/plug-ins/1.13.6/i18n/tr.json"
|
||||
}
|
||||
});
|
||||
});
|
||||
async function saveStudent(form)
|
||||
{
|
||||
blockui("#add_student .modal-content");
|
||||
$.ajax({
|
||||
url: "/catalog/store",
|
||||
type: "post",
|
||||
data: new FormData(form),
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
dataTable.ajax.reload(null, false);
|
||||
ublockui();
|
||||
},
|
||||
error: function(err) {
|
||||
ublockui();
|
||||
},
|
||||
});
|
||||
}
|
||||
async function updateStudent(form)
|
||||
{
|
||||
blockui("#update_student .modal-content");
|
||||
$.ajax({
|
||||
url: "/catalog/update",
|
||||
type: "post",
|
||||
data: new FormData(form),
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
dataTable.ajax.reload(null, false);
|
||||
$("#update_student").modal("hide");
|
||||
ublockui();
|
||||
},
|
||||
error: function(err) {
|
||||
ublockui();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function updateModal(tr)
|
||||
{
|
||||
let data = dataTable.row($(tr).closest('tr')).data();
|
||||
|
||||
$("#update_student form").get(0).reset();
|
||||
$("#update_student [name='id']").val(data.id);
|
||||
|
||||
$("#update_student form input,#update_student form textarea").each(function(){
|
||||
let name = this.name;
|
||||
$(this).val(data[name]);
|
||||
});
|
||||
$("#update_student form select").each(function(){
|
||||
let name = this.name;
|
||||
$(this).find("option:selected").removeAttr("selected");
|
||||
$(this).find(`option[value="${data[name]}"]`).attr("selected","selected");
|
||||
});
|
||||
$("#update_student").modal("show");
|
||||
}
|
||||
function blockui(ui)
|
||||
{
|
||||
$(blockui.id = ui).block({
|
||||
message: '<div class="loader-container-box"><div class="loader"></div></div>',
|
||||
//timeout: 13000,
|
||||
overlayCSS: {
|
||||
backgroundColor: 'rgba(var(--dark), 0.8)',
|
||||
opacity: 0.8,
|
||||
borderRadius: 'var(--app-border-radius)',
|
||||
cursor: 'wait'
|
||||
},
|
||||
css: {
|
||||
border: 0,
|
||||
padding: 0,
|
||||
backgroundColor: 'transparent'
|
||||
}
|
||||
});
|
||||
}
|
||||
function ublockui()
|
||||
{
|
||||
$(blockui.id).unblock()
|
||||
}
|
||||
</script>
|
||||
<%-include("../partials/footer.ejs") %>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<%-include("../partials/header.ejs") %>
|
||||
<%-include("../partials/sidebar.ejs") %>
|
||||
<div class="app-content">
|
||||
<%-include("../partials/navbar.ejs") %>
|
||||
<main>
|
||||
<h1>Merhaba</h1>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<%-include("../partials/footer.ejs") %>
|
||||
|
|
@ -0,0 +1,297 @@
|
|||
<%-include("../partials/header.ejs") %>
|
||||
<%-include("../partials/sidebar.ejs") %>
|
||||
<div class="app-content">
|
||||
<%-include("../partials/navbar.ejs") %>
|
||||
|
||||
<main>
|
||||
<div class="container-fluid">
|
||||
<!-- Breadcrumb start -->
|
||||
<div class="row m-1">
|
||||
<div class="col-12">
|
||||
<h4 class="main-title">Sisteme Kayıtlı Öğrenciler</h4>
|
||||
<p>
|
||||
Öğrenciler ekleyebilir, düzenleyebilir ve silebilirsiniz
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card ">
|
||||
<div class="card-header ">
|
||||
<div class="d-flex flex-row flex-1">
|
||||
<h5 class="flex-fill">
|
||||
Öğrenciler
|
||||
</h5>
|
||||
<div class="flex-min">
|
||||
<button class="btn btn-success" data-bs-target="#add_student" data-bs-toggle="modal" type="button">
|
||||
<i class="fa fa-plus"></i>
|
||||
Öğrenci ekle
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="app-datatable-default overflow-auto">
|
||||
<table class="table display app-data-table default-data-table" id="studentslist"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<div aria-hidden="true" class="modal fade" id="add_student" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Yeni Öğrenci Ekle</h5>
|
||||
<button aria-label="Close" class="btn-close m-0 fs-5" data-bs-dismiss="modal" type="button"></button>
|
||||
</div>
|
||||
<form class="modal-body" id="studentsaveform" onsubmit="saveStudent(this);return false;">
|
||||
<div class="row app-form">
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Adı <small class="text-danger">*</small></label>
|
||||
<input type="text" class="form-control" name="name" placeholder="Öğrencinin adı" required min="3">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Soyadı</label>
|
||||
<input type="text" class="form-control" name="surname" placeholder="Öğrencinin Soyadı">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Numarası</label>
|
||||
<input type="text" class="form-control" name="studentno" placeholder="Öğrencinin Numarası">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">E-Posta Adresi</label>
|
||||
<input type="email" class="form-control" name="email" placeholder="Öğrencinin E-Posta Adresi">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Doğum Tarihi</label>
|
||||
<input type="date" class="form-control" name="birthdate" placeholder="Öğrencinin E-Posta Adresi">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Cinsiyeti</label>
|
||||
<select name="gender" class="form-control">
|
||||
<option>Belirtilmemiş</option>
|
||||
<option value="male">Erkek</option>
|
||||
<option value="female">Kadın</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-12 mt-3">
|
||||
<label class="form-label">Açıklama</label>
|
||||
<textarea name="description" class="form-control" placeholder="Öğrenci hakkında"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-outline-success" type="submit" form="studentsaveform">Kaydet</button>
|
||||
<button class="btn btn-light-secondary" data-bs-dismiss="modal" type="button">Kapat</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div aria-hidden="true" class="modal fade" id="update_student" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Öğrenci güncelle</h5>
|
||||
<button aria-label="Close" class="btn-close m-0 fs-5" data-bs-dismiss="modal" type="button"></button>
|
||||
</div>
|
||||
<form class="modal-body" id="studentupdateform" onsubmit="updateStudent(this);return false;">
|
||||
<input type="hidden" name="id">
|
||||
<div class="row app-form">
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Adı <small class="text-danger">*</small></label>
|
||||
<input type="text" class="form-control" name="name" placeholder="Öğrencinin adı" required min="3">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Soyadı</label>
|
||||
<input type="text" class="form-control" name="surname" placeholder="Öğrencinin Soyadı">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Numarası</label>
|
||||
<input type="text" class="form-control" name="studentno" placeholder="Öğrencinin Numarası">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">E-Posta Adresi</label>
|
||||
<input type="email" class="form-control" name="email" placeholder="Öğrencinin E-Posta Adresi">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Doğum Tarihi</label>
|
||||
<input type="date" class="form-control" name="birthdate" placeholder="Öğrencinin E-Posta Adresi">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label class="form-label">Cinsiyeti</label>
|
||||
<select name="gender" class="form-control">
|
||||
<option>Belirtilmemiş</option>
|
||||
<option value="male">Erkek</option>
|
||||
<option value="female">Kadın</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-12 mt-3">
|
||||
<label class="form-label">Açıklama</label>
|
||||
<textarea name="description" class="form-control" placeholder="Öğrenci hakkında"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-outline-success" type="submit" form="studentupdateform">Güncelle</button>
|
||||
<button class="btn btn-light-secondary" data-bs-dismiss="modal" type="button">Kapat</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
let dataTable;
|
||||
$(function(){
|
||||
dataTable = $("#studentslist").DataTable({
|
||||
serverSide: true,
|
||||
processing: true,
|
||||
autoWidth: false,
|
||||
ajax: {
|
||||
url: "/students/list",
|
||||
method:"post"
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
width: "1%",
|
||||
title: "#",
|
||||
data: null,
|
||||
render: function (data, type, row, meta) {
|
||||
return meta.row + 1;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Adı Soyadı",
|
||||
data: null,
|
||||
name: "fullname",
|
||||
render: function (data, row) {
|
||||
return `${data.name} ${data.surname || ''}`;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "Öğrenci No",
|
||||
data: "studentno",
|
||||
name: "studentno"
|
||||
},
|
||||
{
|
||||
title: "Cinsiyet",
|
||||
data: "gender",
|
||||
name: "gender",
|
||||
render: function (data) {
|
||||
if (data === 'male') return 'Erkek';
|
||||
if (data === 'female') return 'Kadın';
|
||||
return 'Belirtilmemiş';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "E-Posta",
|
||||
data: "email",
|
||||
name: "email"
|
||||
},
|
||||
{
|
||||
width: "1%",
|
||||
title: "İşlemler",
|
||||
data: null,
|
||||
orderable: false, // İşlemlere göre sıralama yapılamasın
|
||||
render: function (data) {
|
||||
return `
|
||||
<div class="btn-group d-flex flex-row flex-nowrap" role="group">
|
||||
<button class="btn btn-sm btn-outline-primary text-nowrap" onclick="updateModal(this)" title="Düzenle">
|
||||
<i class="fa fa-edit"></i>
|
||||
Düzenle
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-danger text-nowrap" onclick="deleteStudent(${data.id})" title="Sil">
|
||||
<i class="fa fa-trash"></i>
|
||||
Sil
|
||||
</button>
|
||||
</div>`;
|
||||
}
|
||||
}
|
||||
],
|
||||
"language": {
|
||||
"url": "https://cdn.datatables.net/plug-ins/1.13.6/i18n/tr.json"
|
||||
}
|
||||
});
|
||||
});
|
||||
async function saveStudent(form)
|
||||
{
|
||||
blockui("#add_student .modal-content");
|
||||
$.ajax({
|
||||
url: "/students/store",
|
||||
type: "post",
|
||||
data: new FormData(form),
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
dataTable.ajax.reload(null, false);
|
||||
ublockui();
|
||||
},
|
||||
error: function(err) {
|
||||
ublockui();
|
||||
},
|
||||
});
|
||||
}
|
||||
async function updateStudent(form)
|
||||
{
|
||||
blockui("#update_student .modal-content");
|
||||
$.ajax({
|
||||
url: "/students/update",
|
||||
type: "post",
|
||||
data: new FormData(form),
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: function(response) {
|
||||
dataTable.ajax.reload(null, false);
|
||||
$("#update_student").modal("hide");
|
||||
ublockui();
|
||||
},
|
||||
error: function(err) {
|
||||
ublockui();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function updateModal(tr)
|
||||
{
|
||||
let data = dataTable.row($(tr).closest('tr')).data();
|
||||
|
||||
$("#update_student form").get(0).reset();
|
||||
$("#update_student [name='id']").val(data.id);
|
||||
|
||||
$("#update_student form input,#update_student form textarea").each(function(){
|
||||
let name = this.name;
|
||||
$(this).val(data[name]);
|
||||
});
|
||||
$("#update_student form select").each(function(){
|
||||
let name = this.name;
|
||||
$(this).find("option:selected").removeAttr("selected");
|
||||
$(this).find(`option[value="${data[name]}"]`).attr("selected","selected");
|
||||
});
|
||||
$("#update_student").modal("show");
|
||||
}
|
||||
function blockui(ui)
|
||||
{
|
||||
$(blockui.id = ui).block({
|
||||
message: '<div class="loader-container-box"><div class="loader"></div></div>',
|
||||
//timeout: 13000,
|
||||
overlayCSS: {
|
||||
backgroundColor: 'rgba(var(--dark), 0.8)',
|
||||
opacity: 0.8,
|
||||
borderRadius: 'var(--app-border-radius)',
|
||||
cursor: 'wait'
|
||||
},
|
||||
css: {
|
||||
border: 0,
|
||||
padding: 0,
|
||||
backgroundColor: 'transparent'
|
||||
}
|
||||
});
|
||||
}
|
||||
function ublockui()
|
||||
{
|
||||
$(blockui.id).unblock()
|
||||
}
|
||||
</script>
|
||||
<%-include("../partials/footer.ejs") %>
|
||||
|
|
@ -5,14 +5,13 @@
|
|||
</span>
|
||||
</div>
|
||||
<div id="customizer"></div>
|
||||
<script src="/assets/vendor/datatable/jquery-3.5.1.js"></script>
|
||||
<script src="/assets/vendor/datatable/jquery.dataTables.min.js"></script>
|
||||
<script src="/assets/vendor/phosphor/phosphor.js"></script>
|
||||
<script src="/assets/vendor/bootstrap/bootstrap.bundle.min.js"></script>
|
||||
<script src="/assets/vendor/phosphor/phosphor.js"></script>
|
||||
<script src="/assets/vendor/simplebar/simplebar.js"></script>
|
||||
<script src="/assets/js/data_table.js"></script>
|
||||
<script src="/assets/js/script.js"></script>
|
||||
<script src="/assets/js/customizer.js"></script>
|
||||
<script src="/assets/vendor/datatable/jquery.dataTables.min.js"></script>
|
||||
<script src="/assets/vendor/block-ui/jquery.blockUI.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -20,6 +20,8 @@
|
|||
<link href="/assets/vendor/simplebar/simplebar.css" rel="stylesheet" type="text/css">
|
||||
<link href="/assets/css/style.css" rel="stylesheet" type="text/css">
|
||||
<link href="/assets/css/responsive.css" rel="stylesheet" type="text/css">
|
||||
<script src="/assets/vendor/datatable/jquery-3.5.1.js"></script>
|
||||
<link href="/assets/vendor/datatable/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="app-wrapper">
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
<nav>
|
||||
<div class="app-logo">
|
||||
<a class="logo d-inline-block" href="index.html">
|
||||
<img alt="#" src="../assets/images/logo/1.png">
|
||||
<a class="d-inline-block py-2 px-3" href="index.html">
|
||||
<img alt="#" src="/logo.png" style="max-height: 50px;vertical-align: middle">
|
||||
<span style="font-size: 2em; vertical-align: middle; letter-spacing: 3px;">
|
||||
YeşilSkor
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<span class="bg-light-primary toggle-semi-nav d-flex-center">
|
||||
|
|
@ -9,484 +12,73 @@
|
|||
</span>
|
||||
|
||||
<div class="d-flex align-items-center nav-profile p-3">
|
||||
<span class="h-45 w-45 d-flex-center b-r-10 position-relative bg-danger m-auto">
|
||||
<span class="h-45 w-45 d-flex-center b-r-10 position-relative bg-danger m-auto d-none">
|
||||
<img alt="avatar" class="img-fluid b-r-10" src="../assets/images/avatar/woman.jpg">
|
||||
<span class="position-absolute top-0 end-0 p-1 bg-success border border-light rounded-circle"></span>
|
||||
</span>
|
||||
<div class="flex-grow-1 ps-2">
|
||||
<h6 class="text-primary mb-0"> Ninfa Monaldo</h6>
|
||||
<p class="text-muted f-s-12 mb-0">Web Developer</p>
|
||||
<h6 class="text-primary mb-0 profile-username"></h6>
|
||||
<p class="text-muted f-s-12 mb-0 profile-usersurname"></p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="dropdown profile-menu-dropdown">
|
||||
<a aria-expanded="false" data-bs-auto-close="true" data-bs-placement="top" data-bs-toggle="dropdown"
|
||||
role="button">
|
||||
<i class="ti ti-settings fs-5"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="dropdown-item">
|
||||
<a class="f-w-500" href="profile.html" target="_blank">
|
||||
<i class="ph-duotone ph-user-circle pe-1 f-s-20"></i> Profile Details
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown-item">
|
||||
<a class="f-w-500" href="setting.html" target="_blank">
|
||||
<i class="ph-duotone ph-gear pe-1 f-s-20"></i> Settings
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown-item">
|
||||
<div class="d-flex align-items-center justify-content-between">
|
||||
<div>
|
||||
<a class="f-w-500" href="data_table.html#">
|
||||
<i class="ph-duotone ph-detective pe-1 f-s-20"></i> Incognito
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-shrink-0">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input form-check-primary" id="incognitoSwitch"
|
||||
type="checkbox">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="dropdown-item">
|
||||
<a class="mb-0 text-secondary f-w-500" href="sign_up.html" target="_blank">
|
||||
<i class="ph-bold ph-plus pe-1 f-s-20"></i> Add account
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="app-divider-v dotted py-1"></li>
|
||||
|
||||
<li class="dropdown-item">
|
||||
<a class="mb-0 text-danger" href="sign_in.html" target="_blank">
|
||||
<i class="ph-duotone ph-sign-out pe-1 f-s-20"></i> Log Out
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function(){
|
||||
$.ajax({
|
||||
url: "/user/profile",
|
||||
method: "post",
|
||||
success:data => {
|
||||
$(".profile-username").text(data.name);
|
||||
$(".profile-usersurname").text(data.surname);
|
||||
}
|
||||
})
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="app-nav" id="app-simple-bar">
|
||||
<ul class="main-nav p-0 mt-2">
|
||||
<li class="menu-title no-sub">
|
||||
<a href="/">
|
||||
Anasayfa
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-title">
|
||||
<span>Dashboard</span>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#dashboard">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#home"></use>
|
||||
</svg>
|
||||
dashboard
|
||||
<span class="badge bg-danger badge-dashboard badge-notification ms-2">New</span>
|
||||
|
||||
</a>
|
||||
<ul class="collapse" id="dashboard">
|
||||
<li><a href="index.html">Ecommerce</a></li>
|
||||
<li><a href="project_dashboard.html">Project</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#apps">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#stack"></use>
|
||||
</svg>
|
||||
Apps
|
||||
</a>
|
||||
<ul class="collapse" id="apps">
|
||||
<li><a href="calendar.html">Calender</a></li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#Profile-page">
|
||||
Profile
|
||||
</a>
|
||||
<ul class="collapse" id="Profile-page">
|
||||
<li><a href="profile.html">Profile</a></li>
|
||||
<li><a href="setting.html">Setting</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#projects-page">
|
||||
Projects Page
|
||||
</a>
|
||||
<ul class="collapse" id="projects-page">
|
||||
<li><a href="project_app.html">projects</a></li>
|
||||
<li><a href="project_details.html">projects Details</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="to_do.html">To-Do</a></li>
|
||||
<li><a href="team.html">Team</a></li>
|
||||
<li><a href="api.html">API</a></li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#ticket-page">
|
||||
Ticket
|
||||
</a>
|
||||
<ul class="collapse" id="ticket-page">
|
||||
<li><a href="ticket.html">Ticket</a></li>
|
||||
<li><a href="ticket_details.html">Ticket Details</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#email-page">
|
||||
Email Page
|
||||
</a>
|
||||
<ul class="collapse" id="email-page">
|
||||
<li><a href="email.html"> Email</a></li>
|
||||
<li><a href="read_email.html">Read Email</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#e-shop">
|
||||
E-shop
|
||||
</a>
|
||||
<ul class="collapse" id="e-shop">
|
||||
<li><a href="cart.html">Cart</a></li>
|
||||
<li><a href="product.html">Product</a></li>
|
||||
<li><a href="add_product.html">Add Product</a></li>
|
||||
<li><a href="product_details.html">Product-Details</a></li>
|
||||
<li><a href="product_list.html">Product list</a></li>
|
||||
<li><a href="orders.html">Orders</a></li>
|
||||
<li><a href="orders_details.html">Orders Details</a></li>
|
||||
<li><a href="orders_list.html">Orders List</a></li>
|
||||
<li><a href="checkout.html">Check out</a></li>
|
||||
<li><a href="wishlist.html">Wishlist</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="invoice.html">Invoice</a></li>
|
||||
<li><a href="chat.html">Chat</a></li>
|
||||
<li><a href="file_manager.html">File manager</a></li>
|
||||
<li><a href="bookmark.html">Bookmark</a></li>
|
||||
<li><a href="kanban_board.html">Kanban board</a></li>
|
||||
<li><a href="timeline.html">Timeline</a></li>
|
||||
<li><a href="faq.html">FAQS</a></li>
|
||||
<li><a href="pricing.html">Pricing</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#blog-page">
|
||||
Blog Page
|
||||
</a>
|
||||
<ul class="collapse" id="blog-page">
|
||||
<li><a href="blog.html">Blog</a></li>
|
||||
<li><a href="blog_read_more.html">Blog Details</a></li>
|
||||
<li><a href="add_blog.html">Add Blog</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="no-sub">
|
||||
<a href="widget.html">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#squares"></use>
|
||||
</svg>
|
||||
Widgets
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="menu-title"><span>Component</span></li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#ui-kits">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#briefcase"></use>
|
||||
</svg>
|
||||
UI kits
|
||||
</a>
|
||||
<ul class="collapse" id="ui-kits">
|
||||
<li><a href="cheatsheet.html">Cheatsheet</a></li>
|
||||
<li><a href="alert.html">Alert</a></li>
|
||||
<li><a href="badges.html">Badges</a></li>
|
||||
<li><a href="buttons.html">Buttons</a></li>
|
||||
<li><a href="cards.html">Cards</a></li>
|
||||
<li><a href="dropdown.html">Dropdown</a></li>
|
||||
<li><a href="grid.html">Grid</a></li>
|
||||
<li><a href="avatar.html">Avatar</a></li>
|
||||
<li><a href="tabs.html">Tabs</a></li>
|
||||
<li><a href="accordions.html">Accordions</a></li>
|
||||
<li><a href="progress.html">Progress</a></li>
|
||||
<li><a href="notifications.html">Notifications</a></li>
|
||||
<li><a href="list.html">Lists</a></li>
|
||||
<li><a href="helper_classes.html">Helper Classes</a></li>
|
||||
<li><a href="background.html">Background</a></li>
|
||||
<li><a href="divider.html">Divider</a></li>
|
||||
<li><a href="ribbons.html">Ribbons</a></li>
|
||||
<li><a href="editor.html">Editor </a></li>
|
||||
<li><a href="collapse.html">Collapse</a></li>
|
||||
<li><a href="footer-page.html">Footer</a></li>
|
||||
<li><a href="shadow.html">Shadow</a></li>
|
||||
<li><a href="wrapper.html">Wrapper</a></li>
|
||||
<li><a href="bullet.html">Bullet</a></li>
|
||||
<li><a href="placeholder.html">Placeholder</a></li>
|
||||
<li><a href="alignment.html">Alignment Thing</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#advance-ui">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#briefcase-advance"></use>
|
||||
</svg>
|
||||
Advance UI
|
||||
<span class=" badge rounded-pill bg-warning badge-notification ms-2">
|
||||
12+
|
||||
<span class="visually-hidden">unread messages</span>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="collapse" id="advance-ui">
|
||||
<li><a href="modals.html">Modals</a></li>
|
||||
<li><a href="offcanvas.html">Offcanvas Toggle</a></li>
|
||||
<li><a href="sweetalert.html">Sweat Alert</a></li>
|
||||
<li><a href="scrollbar.html">Scrollbar</a></li>
|
||||
<li><a href="spinners.html">Spinners</a></li>
|
||||
<li><a href="animation.html">Animation</a></li>
|
||||
<li><a href="video_embed.html">Video Embed</a></li>
|
||||
<li><a href="tour.html">Tour</a></li>
|
||||
<li><a href="slick.html">Slider</a></li>
|
||||
<li><a href="bootstrap_slider.html">Bootstrap Slider</a></li>
|
||||
<li><a href="scrollpy.html">Scrollpy</a></li>
|
||||
<li><a href="tooltips_popovers.html">Tooltip & Popovers</a></li>
|
||||
<li><a href="ratings.html">Rating</a></li>
|
||||
<li><a href="prismjs.html">Prismjs</a></li>
|
||||
<li><a href="count_down.html">Count Down</a></li>
|
||||
<li><a href="count_up.html"> Count up </a></li>
|
||||
<li><a href="draggable.html">Draggable</a></li>
|
||||
<li><a href="tree-view.html">Tree View</a></li>
|
||||
<li><a href="block_ui.html">Block Ui </a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#icons">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#gift"></use>
|
||||
</svg>
|
||||
Icons
|
||||
</a>
|
||||
<ul class="collapse" id="icons">
|
||||
<li><a href="fontawesome.html">Fontawesome</a></li>
|
||||
<li><a href="flag_icons.html">Flag</a></li>
|
||||
<li><a href="tabler-icons.html">Tabler</a></li>
|
||||
<li><a href="weather_icon.html">Weather</a></li>
|
||||
<li><a href="animated_icon.html">Animated</a></li>
|
||||
<li><a href="iconoir_icon.html">Iconoir</a></li>
|
||||
<li><a href="phosphor.html">Phosphor</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="no-sub">
|
||||
<a href="misc.html">
|
||||
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#rectangle"></use>
|
||||
</svg>
|
||||
Misc
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-title"><span>Map & Charts </span></li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#maps">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#location"></use>
|
||||
</svg>
|
||||
Map
|
||||
</a>
|
||||
<ul class="collapse" id="maps">
|
||||
<li><a href="google-map.html">Google Maps</a></li>
|
||||
<li><a href="leaflet-map.html">Leaflet map</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#chart">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#chart"></use>
|
||||
</svg>
|
||||
Chart
|
||||
</a>
|
||||
<ul class="collapse" id="chart">
|
||||
<li><a href="chart_js.html">Chart js</a></li>
|
||||
|
||||
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#apexcharts-page">
|
||||
Apexcharts
|
||||
</a>
|
||||
<ul class="collapse" id="apexcharts-page">
|
||||
<li><a href="line.html">Line</a></li>
|
||||
<li><a href="area_charts.html">Area</a></li>
|
||||
<li><a href="column.html">Column</a></li>
|
||||
<li><a href="bar.html">Bar</a></li>
|
||||
<li><a href="mixed.html">Mixed</a></li>
|
||||
<li><a href="timeline_range_charts.html">Timeline & Range-Bars</a></li>
|
||||
<li><a href="candlestick_charts.html">Candlestick</a></li>
|
||||
<li><a href="boxplot.html">Boxplot</a></li>
|
||||
<li><a href="bubble.html">Bubble</a></li>
|
||||
<li><a href="scatter.html">Scatter</a></li>
|
||||
<li><a href="heatmap.html">Heatmap</a></li>
|
||||
<li><a href="treemap.html">Treemap</a></li>
|
||||
<li><a href="pie_charts.html">Pie</a></li>
|
||||
<li><a href="radial_bar.html">Radial bar</a></li>
|
||||
<li><a href="radar_chart.html">Radar</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="menu-title"><span>Table & forms </span></li>
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#table">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#table"></use>
|
||||
</svg>
|
||||
Table
|
||||
</a>
|
||||
<ul class="collapse" id="table">
|
||||
<li><a href="basic_table.html">BasicTable</a></li>
|
||||
<li><a href="data_table.html">Data Table</a></li>
|
||||
<li><a href="list_table.html">List Js</a></li>
|
||||
<li><a href="advance_table.html">Advance Table</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#forms">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#wallet"></use>
|
||||
</svg>
|
||||
Forms elements
|
||||
</a>
|
||||
<ul class="collapse" id="forms">
|
||||
<li><a href="form_validation.html">Form Validation</a></li>
|
||||
<li><a href="base_inputs.html">Base Input</a></li>
|
||||
<li><a href="checkbox_radio.html">Checkbox & Radio</a></li>
|
||||
<li><a href="input_groups.html">Input Groups</a></li>
|
||||
<li><a href="input_masks.html">Input Masks</a></li>
|
||||
<li><a href="floating_labels.html">Floating Labels</a></li>
|
||||
<li><a href="date_picker.html">Datetimepicker</a></li>
|
||||
<li><a href="touch_spin.html">Touch spin</a></li>
|
||||
<li><a href="select.html">Select2</a></li>
|
||||
<li><a href="switch.html">Switch</a></li>
|
||||
<li><a href="range_slider.html">Range Slider</a></li>
|
||||
<li><a href="typeahead.html">Typeahead</a></li>
|
||||
<li><a href="textarea.html">Textarea</a></li>
|
||||
<li><a href="clipboard.html">Clipboard</a></li>
|
||||
<li><a href="file_upload.html">File Upload</a></li>
|
||||
<li><a href="dual_list_boxes.html">Dual List Boxes</a></li>
|
||||
<li><a href="default_forms.html">Default Forms</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#ready_to_use">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#newspaper"></use>
|
||||
</svg>
|
||||
Ready to use
|
||||
<span class="badge text-bg-success badge-notification ms-2">2</span>
|
||||
</a>
|
||||
<ul class="collapse" id="ready_to_use">
|
||||
<li><a href="form_wizards.html">Form wizards</a></li>
|
||||
<li><a href="form_wizard_1.html">Form wizards 1</a></li>
|
||||
<li><a href="form_wizard_2.html">Form wizards 2</a></li>
|
||||
<li><a href="ready_to_use_form.html">Ready To Use Form</a></li>
|
||||
<li><a href="ready_to_use_table.html">Ready To Use Tables</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="menu-title"><span>Pages</span></li>
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#auth_pages">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#window"></use>
|
||||
</svg>
|
||||
Auth Pages
|
||||
</a>
|
||||
<ul class="collapse" id="auth_pages">
|
||||
<li><a href="sign_in.html">Sign In</a></li>
|
||||
<li><a href="sign_in_1.html">Sign In with Bg-image</a></li>
|
||||
<li><a href="sign_up.html">Sign Up</a></li>
|
||||
<li><a href="sign_up_1.html">Sign Up with Bg-image</a></li>
|
||||
<li><a href="password_reset.html">Password Reset</a></li>
|
||||
<li><a href="password_reset_1.html">Password Reset with Bg-image</a></li>
|
||||
<li><a href="password_create.html">Password Create</a></li>
|
||||
<li><a href="password_create_1.html">Password Create with Bg-image</a></li>
|
||||
<li><a href="lock_screen.html">Lock Screen</a></li>
|
||||
<li><a href="lock_screen_1.html">Lock Screen with Bg-image</a></li>
|
||||
<li><a href="two_step_verification.html">Two-Step Verification</a></li>
|
||||
<li><a href="two_step_verification_1.html">Two-Step Verification with Bg-image</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#error_pages">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#exclamation-circle"></use>
|
||||
</svg>
|
||||
Error Pages
|
||||
</a>
|
||||
<ul class="collapse" id="error_pages">
|
||||
<li><a href="error_400.html">Bad Request </a></li>
|
||||
<li><a href="error_403.html">Forbidden </a></li>
|
||||
<li><a href="error_404.html">Not Found</a></li>
|
||||
<li><a href="error_500.html">Internal Server</a></li>
|
||||
<li><a href="error_503.html">Service Unavailable</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#other_pages">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#document"></use>
|
||||
</svg>
|
||||
Other Pages
|
||||
</a>
|
||||
<ul class="collapse" id="other_pages">
|
||||
<li><a href="blank.html">Blank</a></li>
|
||||
<li><a href="maintenance.html">Maintenance</a></li>
|
||||
<li><a href="landing.html">Landing Page</a></li>
|
||||
<li><a href="coming_soon.html">Coming Soon</a></li>
|
||||
<li><a href="sitemap.html">Sitemap</a></li>
|
||||
<li><a href="privacy_policy.html">Privacy Policy</a></li>
|
||||
<li><a href="terms_condition.html">Terms & Condition</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="menu-title"><span>Others</span></li>
|
||||
|
||||
<li>
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#level">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#arrow-down"></use>
|
||||
</svg>
|
||||
2 level
|
||||
</a>
|
||||
<ul class="collapse" id="level">
|
||||
<li><a href="data_table.html#">Blank</a></li>
|
||||
<li class="another-level">
|
||||
<a aria-expanded="false" data-bs-toggle="collapse" href="data_table.html#level2">
|
||||
Another level
|
||||
</a>
|
||||
<ul class="collapse" id="level2">
|
||||
<li><a href="blank.html">Blank</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li class="no-sub">
|
||||
<a href="https://phpstack-1384472-5121645.cloudwaysapps.com/document/html/ki-admin/index.html">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#document-text"></use>
|
||||
</svg>
|
||||
Document
|
||||
</a>
|
||||
<span>Panel</span>
|
||||
</li>
|
||||
|
||||
<li class="no-sub">
|
||||
<a href="mailto:teqlathemes@gmail.com">
|
||||
<a href="/students">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
<use xlink:href="../assets/svg/_sprite.svg#chat-bubble"></use>
|
||||
</svg>
|
||||
Support
|
||||
Öğrenciler
|
||||
</a>
|
||||
</li>
|
||||
<li class="no-sub">
|
||||
<a href="/catalogs">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
</svg>
|
||||
Puan Katalogu
|
||||
</a>
|
||||
</li>
|
||||
<li class="no-sub">
|
||||
<a href="/catalogs">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
</svg>
|
||||
Geçmiş İşlemler
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-title"><span>Hesap</span></li>
|
||||
<li class="no-sub">
|
||||
<a href="/profile">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
</svg>
|
||||
Hesap Ayarları
|
||||
</a>
|
||||
</li>
|
||||
<li class="no-sub bg-danger text-danger">
|
||||
<a href="/profile">
|
||||
<svg stroke="currentColor" stroke-width="1.5">
|
||||
</svg>
|
||||
Çıkış yap
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Reference in New Issue