Workshops page

This commit is contained in:
2019-09-04 23:09:39 +02:00
parent b3ef86089b
commit 91b1a025c5
17 changed files with 245 additions and 64 deletions

View File

@@ -33,8 +33,8 @@ class CATC extends Main
'tables' => array 'tables' => array
( (
Auth::USER_TABLE => array(Db::getText(Auth::USER_TABLE), 'nickname', 'pass', 'cookie'), Auth::USER_TABLE => array(Db::getText(Auth::USER_TABLE), 'nickname', 'pass', 'cookie'),
'workshops' => array('dates'), Course::WS_TABLE => array('dates'),
'courses' => array(Db::getId('workshops'), 'description', 'timeslot', 'notes'), Course::COURSE_TABLE=> array(Db::getId('workshops'), 'description', 'timeslot', 'notes'),
'docs' => array(Db::getId('courses'), 'type', 'path'), 'docs' => array(Db::getId('courses'), 'type', 'path'),
'todos' => array(Db::getId('courses'), 'description') 'todos' => array(Db::getId('courses'), 'description')
), ),
@@ -136,7 +136,12 @@ class CATC extends Main
return $this->oAuth->checkApiKey($sApiKey); return $this->oAuth->checkApiKey($sApiKey);
} }
/* Managing projects */ /* Managing Courses */
public function getWorkshops() {
return self::getJsonResult(true, '', (new Course($this->oDb))->getWorkshops());
}
/* /*
public function upload() public function upload()
{ {

View File

@@ -2,4 +2,34 @@
class Course extends PhpObject { class Course extends PhpObject {
const WS_TABLE = 'workshops';
const COURSE_TABLE = 'courses';
/**
* DB
* @var Db
*/
private $oDb;
public function __construct(Db &$oDb)
{
parent::__construct(__CLASS__, Settings::DEBUG);
$this->oDb = &$oDb;
}
public function getWorkshops() {
$asCourses = $this->oDb->selectRows(array(
'select'=> array(Db::getId(self::WS_TABLE), 'dates', Db::getId(self::COURSE_TABLE), 'description', 'timeslot'),
'from' => self::COURSE_TABLE,
'join' => array(self::WS_TABLE => Db::getId(self::WS_TABLE)))
);
$asWorkshops = array();
foreach($asCourses as $asCourse) {
$asWorkshops[$asCourse[Db::getId(self::WS_TABLE)]]['dates'] = $asCourse['dates'];
$asWorkshops[$asCourse[Db::getId(self::WS_TABLE)]]['courses'][$asCourse[Db::getId(self::COURSE_TABLE)]] = array('description'=>$asCourse['description'], 'timeslot'=>$asCourse['timeslot']);
}
return $asWorkshops;
}
} }

View File

@@ -49,6 +49,9 @@ elseif($sAction!='' && $bLoggedIn)
{ {
switch ($sAction) switch ($sAction)
{ {
case 'workshops':
$sResult = $oCATC->getWorkshops();
break;
default: default:
$sResult = CATC::getJsonResult(false, CATC::NOT_FOUND); $sResult = CATC::getJsonResult(false, CATC::NOT_FOUND);
} }
@@ -59,9 +62,6 @@ elseif($sAction!='' && !$bLoggedIn)
{ {
switch ($sAction) switch ($sAction)
{ {
case '':
//$sResult = $oCATC->apifunction();
break;
default: default:
$sResult = CATC::getJsonResult(false, CATC::NOT_FOUND); $sResult = CATC::getJsonResult(false, CATC::NOT_FOUND);
} }

View File

@@ -10,7 +10,7 @@
<script type="text/javascript" src="scripts/quill.min.js"></script> <script type="text/javascript" src="scripts/quill.min.js"></script>
<script type="text/javascript" src="scripts/common.js"></script> <script type="text/javascript" src="scripts/common.js"></script>
<script type="text/javascript" src="scripts/catc.js"></script> <script type="text/javascript" src="scripts/catc.js"></script>
<link rel="shortcut icon" href="images/favicon2.ico" /> <link rel="icon" type="image/png" href="images/favicon.png">
<title>CATC Notes</title> <title>CATC Notes</title>
<script type="text/javascript"> <script type="text/javascript">
var oCATC = new CATC(asGlobalVars); var oCATC = new CATC(asGlobalVars);

View File

@@ -36,10 +36,14 @@
<script type="text/javascript"> <script type="text/javascript">
oCATC.pageInit = function(asHash, bFirstPage) oCATC.pageInit = function(asHash, bFirstPage)
{ {
self.elem.$Main.addClass('no_frame');
$('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').tooltip();
//$(window).keyup(function(e){if(e.which==13) logMeIn();}); $(window).keyup(function(e) {
if(e.which==13) {
if($('#signin').is(':visible')) $('#signin').click();
else $('#register').click();
}
});
$('#signin').click(logMeIn); $('#signin').click(logMeIn);
$('#register').on('click submit', function(event){ $('#register').on('click submit', function(event){
event.preventDefault(); event.preventDefault();

View File

@@ -1,3 +0,0 @@
<a id="signout" href="?p=w" title="Exit" class="option">Write</a>&nbsp;.&nbsp;
<a id="signout" href="?p=s" title="Exit" class="option">Settings</a>&nbsp;.&nbsp;
<a id="signout" href="?p=q" title="Exit" class="option">Sign out</a>

View File

@@ -5,16 +5,15 @@
</div> </div>
<div id="menu"> <div id="menu">
<ul> <ul>
<li><a href="#settings" class="button fal fa-settings"></a></li> <li><a href="#" class="button fal fa-home"></a></li><li><a href="#logoff" class="button fal fa-logoff"></a></li>
<li><a href="#logoff" class="button fal fa-logoff"></a></li>
</ul> </ul>
</div> </div>
<div id="main_title"><h1></h1></div>
<div id="main"></div> <div id="main"></div>
<div id="side"> <div id="side">
<div class="tag write"><a href="#write" class="fal fa-write"></a></div> <div class="tag write"><a href="#write" class="fal fa-write"></a></div>
</div> </div>
<footer> <footer>
<span>Designed and powered by Franzz &amp; Clarita. </span> <span>Designed and powered by Franzz &amp; Clarita - CATC Notes Project under <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GPLv3</a> License</span>
<span>My Thoughts Project under <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GPLv3</a> License.</span>
</footer> </footer>
#errors# #errors#

View File

@@ -1,7 +1,50 @@
<h1>Workshops</h1> <div id="workshops">
<div class="ws_title"><h1>Workshops</h1></div>
<div id="ws_data"></div>
</div>
<script type="text/javascript"> <script type="text/javascript">
oCATC.pageInit = function(asHash, bFirstPage) oCATC.pageInit = function(asHash, bFirstPage)
{ {
console.log('workshops init'); self.setPageTitle('');
//Workshops list
var $Workshops = $('<div>', {'class':'ws_list'});
Tools.ajax('workshops', function(asData){
$.each(asData, function(iWsId, asWorkshop){
var $Workshop = $('<div>', {'class':'ws_item clickable transition'})
.click(openCourses)
.append($('<span>', {'class':'title'}).text('WS '+iWsId))
.append($('<span>', {'class':'previous fa-fw clickable'})
.click(closeCourses)
.appendIcon('previous'))
.append($('<span>', {'class':'dates'}).text(asWorkshop.dates));
var $Courses = $('<div>', {'class':'courses'}).appendTo($Workshop);
$.each(asWorkshop.courses, function(iCourseId, asCourse){
var $Course = $('<div>', {'class':'course clickable transition'})
.click(function(){oCATC.setHash('course', iCourseId)})
.text(asCourse.description);
$Courses.append($Course);
});
$Workshops.append($Workshop);
});
});
$('#ws_data').append($Workshops);
}
function openCourses() {
var $This = $(this);
$('.ws_list').find('.ws_item').not($This).hide();
$This
.addClass('opened')
.removeClass('clickable');
}
function closeCourses(e) {
e.stopPropagation();
console.log('sdqsdf');
$('.ws_list').find('.ws_item').removeClass('opened').addClass('clickable').show();
} }
</script> </script>

View File

@@ -55,24 +55,8 @@ function CATC(asGlobals)
this.initMenu = function() this.initMenu = function()
{ {
self.elem.$Menu.find('.fa-home').attr('href', '#'+self.consts.default_page);
self.elem.$Menu.show('fast'); self.elem.$Menu.show('fast');
//Thoughts on side menu
self.updateSideMenu();
};
this.updateSideMenu = function() {
Tools.ajax(
'thoughts',
function(asData){
self.elem.$Side.find('.tag:not(.write)').remove();
$.each(asData, function(iKey, asThought) {
$Tile = $('<div>', {'class': 'tag'}).appendTo(self.elem.$Side);
var $Link = $('<a>', {'href': '#read-'+asThought.id_thought}).html(asThought.created_f.replace(' ', '<br />')).appendTo($Tile);
});
self.elem.$Side.slideDown('fast', self.setSideElemVisibility);
}
);
}; };
this.setSideElemVisibility = function() { this.setSideElemVisibility = function() {
@@ -166,6 +150,8 @@ function CATC(asGlobals)
self.vars('log_in', asData.log_in); self.vars('log_in', asData.log_in);
self.vars('id', asData.id); self.vars('id', asData.id);
$(window).off('keyup');
if(self.vars('log_in')) { if(self.vars('log_in')) {
//Setup menu //Setup menu
self.initMenu(); self.initMenu();
@@ -175,6 +161,10 @@ function CATC(asGlobals)
} }
}; };
this.setPageTitle = function(sTitle) {
$('#main_title').find('h1').text(sTitle);
};
this.getActionLink = function(sAction, oVars) this.getActionLink = function(sAction, oVars)
{ {
if(!oVars) oVars = {}; if(!oVars) oVars = {};
@@ -247,9 +237,6 @@ function CATC(asGlobals)
$FadeInElem.empty(); $FadeInElem.empty();
$FadeInElem.html($Dom); $FadeInElem.html($Dom);
//Page Bootstrap
self.elem.$Main.removeClass('no_frame');
//Show main //Show main
$FadeInElem.fadeTo('fast', 1, function(){self.pageInit(asHash, bFirstPage);}); $FadeInElem.fadeTo('fast', 1, function(){self.pageInit(asHash, bFirstPage);});
}; };

View File

@@ -31,7 +31,7 @@ var Tools = {
} }
asData['a'] = sAction; asData['a'] = sAction;
$.ajax({ return $.ajax({
url: oCATC.consts.context.process_page, url: oCATC.consts.context.process_page,
type: sType, type: sType,
data: asData, data: asData,
@@ -168,6 +168,10 @@ function copyArray(asArray)
return asArray.slice(0); //trick to copy array return asArray.slice(0); //trick to copy array
} }
$.prototype.appendIcon = function(sIcon, bFull) {
return $(this).append(Tools.getIcon(sIcon, bFull));
};
$.prototype.addButton = function(sType, sTitle, oClickLink, sId, sButtonClass) $.prototype.addButton = function(sType, sTitle, oClickLink, sId, sButtonClass)
{ {
$This = $(this); $This = $(this);

View File

@@ -12,14 +12,18 @@ $fa-css-prefix: fa;
@import 'fa/rotated-flipped'; @import 'fa/rotated-flipped';
@import 'fa/stacked'; @import 'fa/stacked';
//Logon
.#{$fa-css-prefix}-user:before { content: fa-content($fa-var-user); } .#{$fa-css-prefix}-user:before { content: fa-content($fa-var-user); }
.#{$fa-css-prefix}-password:before { content: fa-content($fa-var-key); } .#{$fa-css-prefix}-password:before { content: fa-content($fa-var-key); }
//Menu //Menu
.#{$fa-css-prefix}-write:before { content: fa-content($fa-var-pen); } .#{$fa-css-prefix}-home:before { content: fa-content($fa-var-home); }
.#{$fa-css-prefix}-settings:before { content: fa-content($fa-var-cog); } .#{$fa-css-prefix}-settings:before { content: fa-content($fa-var-cog); }
.#{$fa-css-prefix}-logoff:before { content: fa-content($fa-var-sign-out); } .#{$fa-css-prefix}-logoff:before { content: fa-content($fa-var-sign-out); }
//Workshops
.#{$fa-css-prefix}-previous:before { content: fa-content($fa-var-chevron-left); }
//Writer //Writer
.#{$fa-css-prefix}-bold:before { content: fa-content($fa-var-bold); } .#{$fa-css-prefix}-bold:before { content: fa-content($fa-var-bold); }
.#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); } .#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); }

View File

@@ -0,0 +1,96 @@
#workshops {
max-width: 800px;
margin: auto;
text-align: center;
.ws_title {
border-bottom: 2px solid $col_main_1;
margin-bottom: 1em;
}
#ws_data .ws_list {
.ws_item {
color: $col_main_1;
background: $gray-400;
border-radius: 3px;
margin-bottom: 1em;
margin-right: 1em;
width: 100px;
height: 100px;
display: inline-block;
overflow: hidden;
position: relative;
&:not(.opened):hover {
background: $col_main_2;
color: $gray-300;
}
span {
display: inline-block;
text-align: center;
width: 100%;
&.title {
border-bottom: 1px solid $gray-300;
font-weight: bold;
}
&.previous {
display: none;
}
}
.courses {
display: none;
width: 100%;
text-align: left;
}
&.opened {
width: auto;
height: auto;
span.title {
color: $gray-300;
background: $col_main_1;
}
span.previous {
display: block;
position: absolute;
top: 0;
left: 5px;
width: auto;
color: $gray-300;
&:hover {
color: $col_main_2;
}
}
span.dates {
display: none;
}
.courses {
display: inline-block;
.course {
border-bottom: 1px solid $gray-300;
padding: 1em;
&:last-child {
border-bottom: none;
}
&:hover {
background: $col_main_2;
color: $gray-300;
}
}
}
}
}
}
}

View File

@@ -31,8 +31,8 @@ a:hover {
transition: all 0.3s ease 0s !important; transition: all 0.3s ease 0s !important;
} }
.bold { .clickable {
font-weight: bold; cursor: pointer;
} }
/* Common Classes - Containers */ /* Common Classes - Containers */
@@ -48,22 +48,23 @@ a:hover {
/* Common Classes - Inputs */ /* Common Classes - Inputs */
a.button { a.button {
font-weight:normal; font-weight: normal;
height:50px; height: 40px;
width:50px; width: 40px;
line-height:50px; line-height: 40px;
font-size: 1.0em; font-size: 1.0em;
text-align:center; text-align: center;
background: url("../images/minicloud.png") 0 0 no-repeat;
color: $gray-600; color: $gray-600;
border-radius: 3px;
background-color: $gray-400;
} }
a.button:hover { a.button:hover {
color:white; color: white;
background-position:0 -50px; background-color: $col_main_2;
} }
a.button:active { a.button:active {
color:white; color:white;
background-position:0 -100px; background-color: $col_main_2;
} }
.input-group-text i.fal { .input-group-text i.fal {
@@ -87,10 +88,12 @@ a.button:active {
#header { #header {
position: relative; position: relative;
height: 138px;
width: 50%;
#logo_box { #logo_box {
height: 138px;
width: 100%; width: 100%;
height: 100%;
background: url('../images/logo.png') 0 0 no-repeat; background: url('../images/logo.png') 0 0 no-repeat;
} }
@@ -124,32 +127,40 @@ a.button:active {
display: none; display: none;
top: 0; top: 0;
right: 0; right: 0;
width: 50%;
height: 111px;
text-align: right;
a.button {
margin-top: calc( ( 110px - 40px ) /2 );
}
ul { ul {
list-style: none; list-style: none;
li { li {
display: inline; display: inline;
margin-left: 1em;
} }
} }
} }
/* Main */ /* Main */
#main_title {
margin-top: 1em;
}
#main { #main {
display: none; display: none;
margin-top: 1em;
position: absolute; position: absolute;
top:203px; top: 138px;
bottom: 2rem; bottom: 2rem;
right:0; right:0;
left:0; left:0;
border-radius: 0.5em; border-radius: 0.5em;
padding: 1em; padding: 1em;
overflow: auto;
&:not(.no_frame) {
@extend .shadow;
}
} }
/* Side */ /* Side */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -18,4 +18,5 @@
/* Pages */ /* Pages */
@import 'logon'; @import 'page_logon';
@import 'page_workshops';