Skip to content

Commit b256c09

Browse files
committed
Add Portfolio Tool - refs BT#14056
1 parent f2c684e commit b256c09

File tree

11 files changed

+990
-0
lines changed

11 files changed

+990
-0
lines changed

app/config/portfolio.conf.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
/*
4+
* This file contains the portfolios configuration.
5+
*
6+
* Portfolios are external applicatoins used to display and share files. The
7+
* portfolio configuration set up where files can be sent.
8+
*
9+
* @see \Portfolio
10+
*/
11+
12+
$portfolios = array();
13+
14+
//$_mahara_portfolio = new Portfolio\Mahara('http(s)://...');
15+
//$portfolios[] = $_mahara_portfolio;
16+
17+
//$download_portfolio = new Portfolio\Download();
18+
//$download_portfolio->set_title(get_lang('Download'));
19+
//$portfolios[] = $download_portfolio;

main/img/icons/64/wiki_task_na.png

5.65 KB
Loading

main/portfolio/add_category.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
4+
use Chamilo\CoreBundle\Entity\PortfolioCategory;
5+
6+
$form = new FormValidator('add_category', 'post', "$baseUrl&action=add_category");
7+
$form->addText('title', get_lang('Title'));
8+
$form->addHtmlEditor('description', get_lang('Description'), false, false, ['ToolbarSet' => 'Minimal']);
9+
$form->addButtonCreate(get_lang('Create'));
10+
11+
if ($form->validate()) {
12+
$values = $form->exportValues();
13+
14+
$category = new PortfolioCategory();
15+
$category
16+
->setTitle($values['title'])
17+
->setDescription($values['description'])
18+
->setUser($user);
19+
20+
$em->persist($category);
21+
$em->flush();
22+
23+
Display::addFlash(
24+
Display::return_message(get_lang('CategoryAdded'), 'success')
25+
);
26+
27+
header("Location: $baseUrl");
28+
exit;
29+
}
30+
31+
$toolName = get_lang('AddCategory');
32+
$interbreadcrumb[] = [
33+
'name' => get_lang('Portfolio'),
34+
'url' => $baseUrl,
35+
];
36+
37+
$actions[] = Display::url(
38+
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM),
39+
$baseUrl
40+
);
41+
$content = $form->returnForm();

main/portfolio/add_item.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
4+
use Chamilo\CoreBundle\Entity\Portfolio;
5+
6+
$categories = $em
7+
->getRepository('ChamiloCoreBundle:PortfolioCategory')
8+
->findBy([
9+
'user' => $user,
10+
]);
11+
12+
$form = new FormValidator('add_portfolio', 'post', $baseUrl.'action=add_item');
13+
$form->addText('title', get_lang('Title'));
14+
$form->addHtmlEditor('content', get_lang('Content'), true, false, ['ToolbarSet' => 'NotebookStudent']);
15+
$form->addSelectFromCollection('category', get_lang('Category'), $categories, [], true);
16+
$form->addButtonCreate(get_lang('Create'));
17+
18+
if ($form->validate()) {
19+
$values = $form->exportValues();
20+
$currentTime = new DateTime(
21+
api_get_utc_datetime(),
22+
new DateTimeZone('UTC')
23+
);
24+
25+
$portfolio = new Portfolio();
26+
$portfolio
27+
->setTitle($values['title'])
28+
->setContent($values['content'])
29+
->setUser($user)
30+
->setCourse($course)
31+
->setSession($session)
32+
->setCategory(
33+
$em->find('ChamiloCoreBundle:PortfolioCategory', $values['category'])
34+
)
35+
->setCreationDate($currentTime)
36+
->setUpdateDate($currentTime);
37+
38+
$em->persist($portfolio);
39+
$em->flush();
40+
41+
Display::addFlash(
42+
Display::return_message(get_lang('PortfolioItemAdded'), 'success')
43+
);
44+
45+
header("Location: $baseUrl");
46+
exit;
47+
}
48+
49+
$toolName = get_lang('AddPortfolioItem');
50+
$interbreadcrumb[] = [
51+
'name' => get_lang('Portfolio'),
52+
'url' => $baseUrl,
53+
];
54+
55+
$actions[] = Display::url(
56+
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM),
57+
$baseUrl
58+
);
59+
$content = $form->returnForm();

main/portfolio/edit_category.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
4+
$form = new FormValidator('edit_category', 'post', $baseUrl."action=edit_category&id={$category->getId()}");
5+
$form->addText('title', get_lang('Title'));
6+
$form->addHtmlEditor('description', get_lang('Description'), false, false, ['ToolbarSet' => 'Minimal']);
7+
$form->addButtonUpdate(get_lang('Update'));
8+
$form->setDefaults([
9+
'title' => $category->getTitle(),
10+
'description' => $category->getDescription(),
11+
]);
12+
13+
if ($form->validate()) {
14+
$values = $form->exportValues();
15+
16+
$category
17+
->setTitle($values['title'])
18+
->setDescription($values['description']);
19+
20+
$em->persist($category);
21+
$em->flush();
22+
23+
Display::addFlash(
24+
Display::return_message(get_lang('Updated'), 'success')
25+
);
26+
27+
header("Location: $baseUrl");
28+
exit;
29+
}
30+
31+
$toolName = get_lang('EditCategory');
32+
$interbreadcrumb[] = [
33+
'name' => get_lang('Portfolio'),
34+
'url' => $baseUrl,
35+
];
36+
$actions[] = Display::url(
37+
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM),
38+
$baseUrl
39+
);
40+
$content = $form->returnForm();

main/portfolio/edit_item.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
4+
$categories = $em
5+
->getRepository('ChamiloCoreBundle:PortfolioCategory')
6+
->findBy([
7+
'user' => $user,
8+
]);
9+
10+
$form = new FormValidator('edit_portfolio', 'post', $baseUrl."action=edit_item&id={$item->getId()}");
11+
$form->addText('title', get_lang('Title'));
12+
$form->addHtmlEditor('content', get_lang('Content'), true, false, ['ToolbarSet' => 'NotebookStudent']);
13+
$form->addSelectFromCollection('category', get_lang('Category'), $categories, [], true, '__toString');
14+
$form->addButtonUpdate(get_lang('Update'));
15+
$form->setDefaults([
16+
'title' => $item->getTitle(),
17+
'content' => $item->getContent(),
18+
'category' => $item->getCategory() ? $item->getCategory()->getId() : '',
19+
]);
20+
21+
if ($form->validate()) {
22+
$values = $form->exportValues();
23+
$currentTime = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
24+
25+
$item
26+
->setTitle($values['title'])
27+
->setContent($values['content'])
28+
->setUpdateDate($currentTime)
29+
->setCategory(
30+
$em->find('ChamiloCoreBundle:PortfolioCategory', $values['category'])
31+
);
32+
33+
$em->persist($item);
34+
$em->flush();
35+
36+
Display::addFlash(
37+
Display::return_message(get_lang('Updated'), 'success')
38+
);
39+
40+
header("Location: $baseUrl");
41+
exit;
42+
}
43+
44+
$toolName = get_lang('EditPortfolioItem');
45+
$interbreadcrumb[] = [
46+
'name' => get_lang('Portfolio'),
47+
'url' => $baseUrl,
48+
];
49+
$actions[] = Display::url(
50+
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM),
51+
$baseUrl
52+
);
53+
$content = $form->returnForm();

main/portfolio/list.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
4+
if ($currentUserId == $user->getId()) {
5+
if ($allowEdit) {
6+
$actions[] = Display::url(
7+
Display::return_icon('add.png', get_lang('Add'), [], ICON_SIZE_MEDIUM),
8+
$baseUrl.'action=add_item'
9+
);
10+
$actions[] = Display::url(
11+
Display::return_icon('folder.png', get_lang('AddCategory'), [], ICON_SIZE_MEDIUM),
12+
$baseUrl.'action=add_category'
13+
);
14+
$actions[] = Display::url(
15+
Display::return_icon('shared_setting.png', get_lang('Preview'), [], ICON_SIZE_MEDIUM),
16+
$baseUrl.'preview=&user='.$user->getId()
17+
);
18+
} else {
19+
$actions[] = Display::url(
20+
Display::return_icon('shared_setting_na.png', get_lang('Preview'), [], ICON_SIZE_MEDIUM),
21+
$baseUrl
22+
);
23+
}
24+
}
25+
26+
$form = new FormValidator('a');
27+
$form->addUserAvatar('user', get_lang('User'), 'medium');
28+
$form->setDefaults(['user' => $user]);
29+
30+
$criteria = ['user' => $user];
31+
32+
if (!$allowEdit) {
33+
$criteria['isVisible'] = true;
34+
}
35+
36+
$categories = $em
37+
->getRepository('ChamiloCoreBundle:PortfolioCategory')
38+
->findBy($criteria);
39+
40+
if ($course) {
41+
$criteria['course'] = $course;
42+
$criteria['session'] = $session;
43+
}
44+
45+
$criteria['category'] = null;
46+
47+
$items = $em
48+
->getRepository('ChamiloCoreBundle:Portfolio')
49+
->findBy($criteria);
50+
51+
$template = new Template(null, false, false, false, false, false, false);
52+
$template->assign('user', $user);
53+
$template->assign('course', $course);
54+
$template->assign('session', $session);
55+
$template->assign('allow_edit', $allowEdit);
56+
$template->assign('portfolio', $categories);
57+
$template->assign('uncategorized_items', $items);
58+
$layout = $template->get_template('portfolio/list.html.twig');
59+
$content = $template->fetch($layout);
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
{% macro display(items, category_id, allow_edit, _c) %}
2+
{% set edit_img = 'edit.png'|img(22, 'Edit'|get_lang) %}
3+
{% set visible_img = 'visible.png'|img(22, 'Invisible'|get_lang) %}
4+
{% set invisible_img = 'invisible.png'|img(22, 'Visible'|get_lang) %}
5+
{% set delete_img = 'delete.png'|img(22, 'Delete'|get_lang) %}
6+
{% set baseurl = _p.web_self ~ '?' ~ (_p.web_cid_query ? _p.web_cid_query ~ '&' : '') %}
7+
8+
<div class="panel-group" id="accordion-list-{{ category_id }}" role="tablist" aria-multiselectable="true">
9+
{% for item in items %}
10+
<div class="panel panel-default">
11+
<div class="panel-heading" role="tab" id="heading-item-{{ item.id }}">
12+
{% if allow_edit %}
13+
<div class="pull-right">
14+
<a href="{{ baseurl ~ {'action':'edit_item', 'id':item.id}|url_encode }}">
15+
{{ edit_img }}
16+
</a>
17+
{% if item.isVisible %}
18+
<a href="{{ baseurl ~ {'action':'hide_item', 'id':item.id}|url_encode }}">
19+
{{ visible_img }}
20+
</a>
21+
{% else %}
22+
<a href="{{ baseurl ~ {'action':'show_item', 'id':item.id}|url_encode }}">
23+
{{ invisible_img }}
24+
</a>
25+
{% endif %}
26+
<a href="{{ baseurl ~ {'action':'delete_item', 'id':item.id}|url_encode }}"
27+
class="btn-delete">
28+
{{ delete_img }}
29+
</a>
30+
</div>
31+
{% endif %}
32+
<h5 class="panel-title">
33+
<a href="#collapse-{{ item.id }}" class="collapsed" role="button"
34+
data-parent="#accordion-list-{{ category_id }}"
35+
data-toggle="collapse" aria-expanded="false" aria-controls="collapse-{{ item.id }}">
36+
{{ item.title }}
37+
</a>
38+
</h5>
39+
{% if _c is empty %}
40+
{% if item.session %}
41+
<div class="clearfix">
42+
{{ 'Course'|get_lang ~ ': ' ~ item.session.name ~ ' (' ~ item.course.title ~ ')' }}
43+
</div>
44+
{% elseif not item.session and item.course %}
45+
<div class="clearfix">
46+
{{ 'Course'|get_lang ~ ': ' ~ item.course.title }}<br>
47+
</div>
48+
{% endif %}
49+
{% endif %}
50+
</div>
51+
<div id="collapse-{{ item.id }}" class="panel-collapse collapse" role="tabpanel"
52+
aria-labelledby="heading-item-{{ item.id }}">
53+
<div class="panel-body">
54+
{{ item.content }}
55+
</div>
56+
</div>
57+
<div class="panel-footer">
58+
{{ 'CreationDate'|get_lang ~ ': ' ~ item.creationDate|api_convert_and_format_date(6) }}
59+
{% if item.creationDate != item.updateDate %}
60+
&centerdot;
61+
{{ 'UpdateDate'|get_lang ~ ': ' ~ item.updateDate|api_convert_and_format_date(6) }}
62+
{% endif %}
63+
</div>
64+
</div>
65+
{% endfor %}
66+
</div>
67+
{% endmacro %}

0 commit comments

Comments
 (0)