/home/smartonegroup/www/veroserv/system/controllers/kb.php
<?php
$slug = route(1);
$ui->assign('selected_navigation', 'kb');
$ui->assign('_title', $_L['Knowledgebase'] . ' - ' . $config['CompanyName']);
if ($slug == 'a') {
$user = User::_info();
$ui->assign('user', $user);
function kbUniqueSlug($slug)
{
$x = 1;
$d = ORM::for_table('ib_kb')
->where('slug', $slug)
->first();
if ($d) {
do {
$x++;
$slug = $slug . '-' . $x;
} while (
ORM::for_table('ib_kb')
->where('slug', $slug)
->first() == true
);
}
return $slug;
}
$action = route(2);
switch ($action) {
case 'edit':
if (!has_access($user->roleid, 'kb', 'edit')) {
permissionDenied();
}
$ui->assign(
'kbs',
ORM::for_table('ib_kb')
->select('id')
->order_by_desc('id')
->select('title')
->limit(10)
->find_array()
);
$val = [];
$id = route(3);
$d = false;
if ($id != '') {
$d = ORM::for_table('ib_kb')->find($id);
}
$groups_rel = [];
if ($d) {
$val['title'] = $d->title;
$val['description'] = $d->description;
$val['id'] = $d->id;
$groups_rel_db = ORM::for_table('ib_kb_rel')
->where('kbid', $d->id)
->find_array();
foreach ($groups_rel_db as $gr) {
$groups_rel[] = $gr['gid'];
}
} else {
$val['title'] = '';
$val['description'] = '';
$val['id'] = '';
}
$ui->assign('val', $val);
$ui->assign('groups_rel', $groups_rel);
view('kb_edit');
break;
case 'save':
$data = request()->all();
if (!has_access($user->roleid, 'kb', 'edit')) {
permissionDenied();
}
$title = _post('title');
$slug = \Illuminate\Support\Str::slug($title) ?? sp_uuid();
if ($title == '') {
i_close('Title is required.');
}
$description = $data['description'] ?? '';
$id = _post('kbid');
$nxt = false;
$create = false;
if ($id == '' || $id == '0') {
$d = ORM::for_table('ib_kb')->create();
$nxt = true;
$create = true;
} else {
$d = ORM::for_table('ib_kb')->find($id);
if ($d) {
$nxt = true;
}
}
if ($nxt) {
$d->status = 'Published';
$d->title = $title;
$d->slug = $slug;
$d->description = $description;
$d->updated_at = date('Y-m-d H:i:s');
if ($create) {
$d->created_by = $user->id;
$d->created_at = date('Y-m-d H:i:s');
$d->views = 0;
$d->slug = kbUniqueSlug($slug);
} elseif ($slug !== $d->slug) {
$d->slug = kbUniqueSlug($slug);
}
$d->save();
$kbid = $d->id();
$data = request()->all();
$del = ORM::for_table('ib_kb_rel')
->where('kbid', $kbid)
->delete_many();
if (isset($data['groups'])) {
$groups = $data['groups'];
foreach ($groups as $group) {
$gid = str_replace('g_', '', $group);
if (is_numeric($gid)) {
$d = ORM::for_table('ib_kb_rel')->create();
$d->kbid = $kbid;
$d->gid = $gid;
$d->save();
}
}
}
echo $kbid;
} else {
echo 'An Error Occurred';
}
break;
case 'a_view':
$id = route(3);
$id = str_replace('k', '', $id);
$kb = ORM::for_table('ib_kb')->find($id);
if ($kb) {
view('kb_admin_view', [
'kb' => $kb,
]);
} else {
echo 'Article Not Found';
}
break;
case 'delete':
if (!has_access($user->roleid, 'kb', 'delete')) {
permissionDenied();
}
$id = route(3);
$d = ORM::for_table('ib_kb')->find($id);
if ($d) {
$d->delete();
}
r2(U . 'kb/a/all/', 's', $_L['Deleted Successfully']);
break;
case 'ajax_groups':
$kbid = route(3);
$kbm = [];
if ($kbid != '' && $kbid != '0') {
$g_rel = ORM::for_table('ib_kb_rel')
->where('kbid', $kbid)
->find_array();
foreach ($g_rel as $g) {
$kbm[] = $g['gid'];
}
}
$groups = ORM::for_table('ib_kb_groups')
->order_by_desc('id')
->find_array();
foreach ($groups as $group) {
$checked = '';
if (in_array($group['id'], $kbm)) {
$checked = ' checked';
}
echo '<div class="custom-control custom-checkbox mb-2">
<input type="checkbox" ' .
$checked .
' name="groups" value="' .
$group['id'] .
'" class="custom-control-input clx_input_groups" id="g_' .
$group['id'] .
'">
<label class="custom-control-label" for="g_' .
$group['id'] .
'">' .
$group['gname'] .
'</label>
</div>
';
}
break;
case 'group_create':
$gname = _post('gname');
if ($gname != '') {
$d = ORM::for_table('ib_kb_groups')->create();
$d->gname = $gname;
$d->save();
echo $d->id();
} else {
echo 'An Error Occurred';
}
break;
case 'all':
$articles = ORM::for_table('ib_kb')
->select('id')
->select('title')
->find_array();
$ui->assign('articles', $articles);
view('kb_all', [
'can_create' => has_access($user->roleid, 'kb', 'create'),
'can_edit' => has_access($user->roleid, 'kb', 'edit'),
'can_delete' => has_access($user->roleid, 'kb', 'delete'),
]);
break;
case 's':
is_dev();
$t = new Schema('ib_kb');
$t->add('gid', 'int', 11, 0);
$t->add('gname', 'varchar', 200);
$t->add('status', 'varchar', 200); // Draft or Published
$t->add('type', 'varchar', 200); // public or private
$t->add('groups');
$t->add('title');
$t->add('slug');
$t->add('description');
$t->add('created_by', 'int', 11, 0);
$t->add('created_at', 'datetime');
$t->add('updated_by', 'int', 11, 0);
$t->add('updated_at', 'datetime');
$t->add('views', 'int', 11, 0);
$t->add('is_public', 'int', 1, 1);
$t->add('sorder', 'int', 11, 0);
$t->save();
$t = new Schema('ib_kb_groups');
$t->add('gname', 'varchar', 200, 0);
$t->add('description');
$t->add('status', 'varchar', 200);
$t->add('color', 'varchar', 50);
$t->add('pid', 'int', 11, 0);
$t->add('sorder', 'int', 11, 0);
$t->save();
$t = new Schema('ib_kb_replies');
$t->add('kbid', 'int', 11, 0);
$t->add('cid', 'int', 11, 0);
$t->add('pid', 'int', 11, 0);
$t->add('status', 'varchar', 200);
$t->add('name', 'varchar', 200);
$t->add('phone', 'varchar', 200);
$t->add('email', 'varchar', 200);
$t->add('website', 'varchar', 200);
$t->add('ip', 'varchar', 100);
$t->add('date', 'date');
$t->add('reply');
$t->save();
$t = new Schema('ib_kb_rel');
$t->add('kbid', 'int', 11, 0);
$t->add('gid', 'int', 11, 0);
$t->save();
break;
}
} elseif ($slug == 'c') {
$action = route(2, 'all');
if ($action === 'all') {
require APP_SYSTEM_PATH . '/controllers/default/client/init.php';
$c = Contacts::details();
$ui->assign('selected_navigation', 'kb');
$ui->assign(
'_title',
$config['CompanyName'] . ' - ' . $_L['Knowledgebase']
);
$kb_all = Knowledgebase::where('status', 'Published')
->where('is_public', 1)
->select('id', 'title', 'slug')
->get();
view('kb_client', [
'selected_navigation' => 'kb',
'user' => $c,
'articles' => $kb_all,
]);
}
} else {
require APP_SYSTEM_PATH . '/controllers/default/client/init.php';
$article = Knowledgebase::where('slug', $slug)->first();
if ($article) {
$c = Contacts::details();
// $c = Contacts::all();
// find Admin
$adm = User::find($article->created_by);
view('kb_client_view', [
'selected_navigation' => 'kb',
'user' => $c,
'article' => $article,
'adm' => $adm,
]);
} else {
abort();
}
}