mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-23 09:52:22 +00:00
Merge branch 'feature-68957/CIS4_Dashboard_Bookmark_Widget_Sort_Tags' into cis40_2026-02_rc
This commit is contained in:
@@ -29,9 +29,15 @@ class Bookmark extends FHCAPI_Controller
|
||||
parent::__construct([
|
||||
'getBookmarks' => self::PERM_LOGGED,
|
||||
'delete' => self::PERM_LOGGED,
|
||||
'insert' => self::PERM_LOGGED,
|
||||
'insert' => self::PERM_LOGGED,
|
||||
'update' => self::PERM_LOGGED,
|
||||
]);
|
||||
'changeOrder' => self::PERM_LOGGED,
|
||||
'getAllBookmarkTags' => self::PERM_LOGGED,
|
||||
'getTagFilter' => self::PERM_LOGGED,
|
||||
'addAndUpdateTagFilter' => self::PERM_LOGGED,
|
||||
'isInOverride' => self::PERM_LOGGED,
|
||||
'addWidgetToOverride' => self::PERM_LOGGED,
|
||||
]);
|
||||
|
||||
$this->load->model('dashboard/Bookmark_model', 'BookmarkModel');
|
||||
|
||||
@@ -51,7 +57,7 @@ class Bookmark extends FHCAPI_Controller
|
||||
*/
|
||||
public function getBookmarks()
|
||||
{
|
||||
$this->BookmarkModel->addOrder("bookmark_id");
|
||||
$this->BookmarkModel->addOrder("sort");
|
||||
$bookmarks = $this->BookmarkModel->loadWhere(["uid"=>$this->uid]);
|
||||
|
||||
$bookmarks = $this->getDataOrTerminateWithError($bookmarks);
|
||||
@@ -99,8 +105,12 @@ class Bookmark extends FHCAPI_Controller
|
||||
$url = $this->input->post('url',true);
|
||||
$title = $this->input->post('title',true);
|
||||
$tag = $this->input->post('tag', true);
|
||||
if (is_array($tag)) {
|
||||
$tag = json_encode($tag); // convert PHP array to JSON string
|
||||
}
|
||||
$sort = $this->input->post('sort', true);
|
||||
|
||||
$insert_into_result = $this->BookmarkModel->insert(['uid'=>$this->uid, 'url'=>$url, 'title'=>$title,'tag'=>$tag, 'insertvon'=>$this->uid, 'updateamum'=>NULL, 'updatevon'=>NULL]);
|
||||
$insert_into_result = $this->BookmarkModel->insert(['uid'=>$this->uid, 'url'=>$url, 'title'=>$title,'tag'=>$tag, 'insertvon'=>$this->uid, 'updateamum'=>NULL, 'updatevon'=>NULL, 'sort'=>$sort,]);
|
||||
|
||||
$insert_into_result = $this->getDataOrTerminateWithError($insert_into_result);
|
||||
|
||||
@@ -123,16 +133,195 @@ class Bookmark extends FHCAPI_Controller
|
||||
|
||||
$url = $this->input->post('url',true);
|
||||
$title = $this->input->post('title',true);
|
||||
$tag = $this->input->post('tag', true);
|
||||
if (is_array($tag)) {
|
||||
$tag = json_encode($tag);
|
||||
}
|
||||
|
||||
$now = new DateTime();
|
||||
$now = $now->format('Y-m-d H:i:s');
|
||||
|
||||
$update_result = $this->BookmarkModel->update($bookmark_id,['url'=>$url, 'title'=>$title,'updateamum'=>$now]);
|
||||
$update_result = $this->BookmarkModel->update($bookmark_id,['url'=>$url, 'title'=>$title, 'tag'=>$tag, 'updateamum'=>$now]);
|
||||
|
||||
$update_result = $this->getDataOrTerminateWithError($update_result);
|
||||
|
||||
$this->terminateWithSuccess($update_result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* changes sort of two bookmarks in the bookmark table
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function changeOrder($bookmark_id1, $bookmark_id2)
|
||||
{
|
||||
|
||||
$result1 = $this->BookmarkModel->load($bookmark_id1);
|
||||
$data1 = $this->getDataOrTerminateWithError($result1);
|
||||
$sort1 = current($data1)->sort;
|
||||
|
||||
$result2 = $this->BookmarkModel->load(["bookmark_id"=>$bookmark_id2]);
|
||||
$data2 = $this->getDataOrTerminateWithError($result2);
|
||||
$sort2 = current($data2)->sort;
|
||||
|
||||
$update_result1 = $this->BookmarkModel->update($bookmark_id1,['sort'=>$sort2,]);
|
||||
$update_result[] = $this->getDataOrTerminateWithError($update_result1);
|
||||
|
||||
$update_result2 = $this->BookmarkModel->update($bookmark_id2,['sort'=>$sort1,]);
|
||||
$update_result[] = $this->getDataOrTerminateWithError($update_result2);
|
||||
|
||||
$this->terminateWithSuccess($update_result);
|
||||
}
|
||||
|
||||
/**
|
||||
* get all the bookmark tags associated to a user
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getAllBookmarkTags()
|
||||
{
|
||||
$this->BookmarkModel->addOrder("sort");
|
||||
$result = $this->BookmarkModel->getAllBookmarkTags($this->uid);
|
||||
|
||||
$bookmarks = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(current($bookmarks));
|
||||
}
|
||||
|
||||
/**
|
||||
* get all tagFilter of a certain bookmark widget
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getTagFilter($widgetId, $sectionName)
|
||||
{
|
||||
$result = $this->BookmarkModel->getTagFilter($widgetId, $this->uid, $sectionName);
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(current($data));
|
||||
}
|
||||
/**
|
||||
* get all tagFilter of a certain bookmark widget
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function addAndUpdateTagFilter($widgetId, $sectionName)
|
||||
{
|
||||
$tags = $this->input->post('tags',true);
|
||||
if (is_array($tags))
|
||||
{
|
||||
$tags = json_encode($tags);
|
||||
}
|
||||
$result = $this->BookmarkModel->addAndUpdateTagFilter($widgetId, $this->uid, $sectionName, $tags);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a widget has already an entry in the benutzeroverride
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function isInOverride($widgetId, $sectionName)
|
||||
{
|
||||
$result = $this->BookmarkModel->checkOrAddToOverride($widgetId, $this->uid, $sectionName);
|
||||
|
||||
$data = getData($result);
|
||||
if(!$data)
|
||||
$this->terminateWithSuccess([false, 0]);
|
||||
|
||||
$id = current($data)->widgetid;
|
||||
$id = trim($id, '"');
|
||||
|
||||
if ($id != $widgetId)
|
||||
$this->terminateWithSuccess([false, 1]);
|
||||
else
|
||||
$this->terminateWithSuccess([true, null]);
|
||||
}
|
||||
/**
|
||||
* adds widget benutzeroverride
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function addWidgetToOverride($widgetId, $sectionName, $mode, $x, $y, $h, $w)
|
||||
{
|
||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
||||
$dashboard_kurzbz = "CIS";
|
||||
$structure = [
|
||||
"custom" => [
|
||||
"widgets" => []
|
||||
],
|
||||
"general" => [
|
||||
"widgets" => [
|
||||
$widgetId => [
|
||||
"widget" => 3,
|
||||
"config" => new stdClass(),
|
||||
"place" => [
|
||||
"3" => [
|
||||
"x" => $x,
|
||||
"y" => $y,
|
||||
"w" => $w,
|
||||
"h" => $h
|
||||
]
|
||||
],
|
||||
"widgetid" => $widgetId,
|
||||
"custom" => 1,
|
||||
"id" => "insertByBookmarkwidget"
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$jsonOverrideNew = json_encode($structure, JSON_UNESCAPED_UNICODE);
|
||||
|
||||
//no existing benutzeroverride
|
||||
if($mode == 0)
|
||||
{
|
||||
$override = $this->DashboardLib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $this->uid);
|
||||
|
||||
$override->override = $jsonOverrideNew;
|
||||
|
||||
$result = $this->DashboardLib->insertOrUpdateOverride($override);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
|
||||
}
|
||||
//benutzeroverride existing, but widget not included
|
||||
elseif($mode == 1)
|
||||
{
|
||||
$overrideExisting = $this->DashboardLib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $this->uid);
|
||||
$override = json_decode($overrideExisting->override, true); // decode as Array
|
||||
|
||||
$newWidget = [
|
||||
"widget" => 3,
|
||||
"config" => new stdClass(),
|
||||
"place" => [
|
||||
"3" => [
|
||||
"x" => $x,
|
||||
"y" => $y,
|
||||
"w" => $w,
|
||||
"h" => $h
|
||||
]
|
||||
],
|
||||
"widgetid" => $widgetId,
|
||||
"custom" => 1,
|
||||
"id" => "insertByBookmarkwidget"
|
||||
];
|
||||
|
||||
$override['general']['widgets'][$widgetId] = $newWidget;
|
||||
|
||||
$jsonOverrideUpdated = json_encode($override, JSON_UNESCAPED_UNICODE);
|
||||
$overrideExisting->override = $jsonOverrideUpdated;
|
||||
|
||||
$result = $this->DashboardLib->insertOrUpdateOverride($overrideExisting);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
else
|
||||
$this->terminateWithError("Error: no known mode");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,83 @@ class Bookmark_model extends DB_Model
|
||||
$this->pk = 'bookmark_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* returns all bookmark tags of a user
|
||||
*/
|
||||
public function getAllBookmarkTags($uid)
|
||||
{
|
||||
$qry = "
|
||||
SELECT array_agg(DISTINCT tag) AS data
|
||||
FROM (
|
||||
SELECT jsonb_array_elements_text(tag) AS tag
|
||||
FROM dashboard.tbl_bookmark
|
||||
WHERE uid = ?
|
||||
) t;
|
||||
";
|
||||
|
||||
|
||||
return $this->execQuery($qry, array('uid' => $uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Overrides of given uid and funktion_kurzbz and widget_id
|
||||
* @param integer $widget_id
|
||||
* @param string $uid
|
||||
* @param string $funktion_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getTagFilter($widgetId, $uid, $funktion_kurzbz)
|
||||
{
|
||||
$qry = " SELECT override -> '" . $funktion_kurzbz . "'-> 'widgets'-> '" . $widgetId . "'-> 'config' -> 'tags' AS tags FROM dashboard.tbl_dashboard_benutzer_override WHERE uid = '" . $uid . "';";
|
||||
|
||||
return $this->execQuery($qry);
|
||||
}
|
||||
|
||||
/*
|
||||
* updates Tagfilter
|
||||
* checks and changes type of config
|
||||
* if config == array -> change to object
|
||||
*/
|
||||
public function addAndUpdateTagFilter($widgetId, $uid, $funktion_kurzbz, $tags)
|
||||
{
|
||||
$params = [
|
||||
$funktion_kurzbz, $widgetId,
|
||||
$funktion_kurzbz, $widgetId,
|
||||
$funktion_kurzbz, $widgetId,
|
||||
$funktion_kurzbz, $widgetId,
|
||||
$tags,
|
||||
$uid
|
||||
];
|
||||
|
||||
$qry = "
|
||||
UPDATE dashboard.tbl_dashboard_benutzer_override
|
||||
SET override = jsonb_set(
|
||||
-- check if config is object
|
||||
jsonb_set(
|
||||
COALESCE(override, '{}'::jsonb),
|
||||
format('{%s,widgets,%s,config}', ?, ?)::text[],
|
||||
CASE
|
||||
WHEN jsonb_typeof(override #> format('{%s,widgets,%s,config}', ?, ?)::text[]) = 'array'
|
||||
THEN '{}'::jsonb
|
||||
ELSE COALESCE((override #> format('{%s,widgets,%s,config}', ?, ?)::text[])::jsonb, '{}'::jsonb)
|
||||
END,
|
||||
true
|
||||
),
|
||||
-- insert tags
|
||||
format('{%s,widgets,%s,config,tags}', ?, ?)::text[],
|
||||
?::jsonb,
|
||||
true
|
||||
)
|
||||
WHERE uid = ?
|
||||
";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function checkOrAddToOverride($widgetId, $uid, $funktion_kurzbz)
|
||||
{
|
||||
$params = [$funktion_kurzbz, $widgetId, $uid];
|
||||
$qry = " SELECT override -> '" . $funktion_kurzbz . "'-> 'widgets'-> '" . $widgetId . "'-> 'widgetid' as widgetid FROM dashboard.tbl_dashboard_benutzer_override WHERE uid = '" . $uid . "';";
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,12 +23,14 @@ $includesArray = array(
|
||||
'public/css/components/FormUnderline.css',
|
||||
'public/css/components/abgabetool/abgabe.css',
|
||||
'public/css/Cis4/Cms.css',
|
||||
'public/css/Cis4/Studium.css',
|
||||
'public/css/Cis4/Studium.css'
|
||||
),
|
||||
'customJSs' => array(
|
||||
'vendor/npm-asset/primevue/accordion/accordion.min.js',
|
||||
'vendor/npm-asset/primevue/accordiontab/accordiontab.min.js',
|
||||
'vendor/npm-asset/primevue/checkbox/checkbox.min.js',
|
||||
'vendor/npm-asset/primevue/chips/chips.min.js',
|
||||
'vendor/npm-asset/primevue/multiselect/multiselect.min.js',
|
||||
'vendor/npm-asset/primevue/inputnumber/inputnumber.min.js',
|
||||
'vendor/npm-asset/primevue/speeddial/speeddial.min.js',
|
||||
'vendor/npm-asset/primevue/textarea/textarea.min.js',
|
||||
|
||||
Reference in New Issue
Block a user