From dfd74f2de84b532bd6b003044fcfdb0151c297a8 Mon Sep 17 00:00:00 2001 From: Julio Date: Tue, 15 Oct 2019 11:11:43 +0200 Subject: [PATCH] Add user career table, in my progress page see BT#16231 --- main/auth/my_progress.php | 23 +++++++ main/inc/lib/usermanager.lib.php | 2 +- main/user/career_diagram.php | 107 +++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 main/user/career_diagram.php diff --git a/main/auth/my_progress.php b/main/auth/my_progress.php index 81094b25a7..d97737d610 100755 --- a/main/auth/my_progress.php +++ b/main/auth/my_progress.php @@ -113,6 +113,29 @@ if (empty($content)) { $message = Display::return_message(get_lang('NoDataAvailable'), 'warning'); } +$show = api_get_configuration_value('allow_career_users'); + +if ($show) { + $careers = UserManager::getUserCareers($user_id); + + if (!empty($careers)) { + echo Display::page_subheader(get_lang('Careers'), null, 'h3', ['class' => 'section-title']); + $table = new HTML_Table(['class' => 'data_table']); + $table->setHeaderContents(0, 0, get_lang('Career')); + $table->setHeaderContents(0, 0, get_lang('Diagram')); + + $row = 1; + foreach ($careers as $careerData) { + $table->setCellContents($row, 0, $careerData['name']); + $url = api_get_path(WEB_CODE_PATH).'user/career_diagram.php?career_id='.$careerData['id']; + $diagram = Display::url(get_lang('Diagram'), $url); + $table->setCellContents($row, 1, $diagram); + $row++; + } + $content = $table->toHtml().$content; + } +} + $tpl = new Template($nameTools); $tpl->assign('message', $message); $tpl->assign('content', $content); diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index cd21de8d64..270fee41d6 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -6543,7 +6543,7 @@ SQL; * * @return array */ - public function getUserCareers($userId) + public static function getUserCareers($userId) { $table = Database::get_main_table(TABLE_MAIN_USER_CAREER); $tableCareer = Database::get_main_table(TABLE_CAREER); diff --git a/main/user/career_diagram.php b/main/user/career_diagram.php new file mode 100644 index 0000000000..06faeaa106 --- /dev/null +++ b/main/user/career_diagram.php @@ -0,0 +1,107 @@ +get($careerId); +if (empty($careerInfo)) { + api_not_allowed(true); +} + +$userId = api_get_user_id(); +$allow = UserManager::userHasCareer($userId, $careerId) || api_is_platform_admin(); + +if ($allow === false) { + api_not_allowed(true); +} + +$htmlHeadXtra[] = api_get_js('jsplumb2.js'); + +// setting breadcrumbs +$interbreadcrumb[] = [ + 'url' => api_get_path(WEB_CODE_PATH).'auth/my_progress.php', + 'name' => get_lang('Progress'), +]; + +$interbreadcrumb[] = [ + 'url' => '#', + 'name' => get_lang('Careers'), +]; + +$extraFieldValue = new ExtraFieldValue('career'); +$item = $extraFieldValue->get_values_by_handler_and_field_variable( + $careerId, + 'career_diagram', + false, + false, + false +); + +// Check urls +$itemUrls = $extraFieldValue->get_values_by_handler_and_field_variable( + $careerId, + 'career_urls', + false, + false, + false +); + +$urlToString = ''; +if (!empty($itemUrls) && !empty($itemUrls['value'])) { + $urls = explode(',', $itemUrls['value']); + $urlToString = '  '; + if (!empty($urls)) { + foreach ($urls as $urlData) { + $urlData = explode('@', $urlData); + if (isset($urlData[1])) { + $urlToString .= Display::url($urlData[0], $urlData[1]).' '; + } else { + $urlToString .= $urlData[0].' '; + } + } + } +} + +$tpl = new Template(get_lang('Diagram')); +$html = Display::page_subheader2($careerInfo['name'].$urlToString); +if (!empty($item) && isset($item['value']) && !empty($item['value'])) { + /** @var Graph $graph */ + $graph = UnserializeApi::unserialize('career', $item['value']); + $html .= Career::renderDiagramByColumn($graph, $tpl); +} else { + Display::addFlash( + Display::return_message( + sprintf(get_lang('CareerXDoesntHaveADiagram'), $careerInfo['name']), + 'warning' + ) + ); +} + +$tpl->assign('content', $html); +$layout = $tpl->get_template('career/diagram.tpl'); +$tpl->display($layout);