diff --git a/application/controllers/ajax.php b/application/controllers/ajax.php index a1c99b8..995ac9f 100644 --- a/application/controllers/ajax.php +++ b/application/controllers/ajax.php @@ -46,4 +46,13 @@ class Ajax extends MY_Controller { $tpl['messages'] = $this->messages->get(); $this->load->view('global/notifications', $tpl); } + + /** + * Saves a projects description. + */ + public function save_project() { + $this->load->model('project'); + $data['description'] = $this->input->post('content'); + $this->project->update($this->session->userdata('active_project'), $data); + } } \ No newline at end of file diff --git a/application/models/project.php b/application/models/project.php index 063015f..510c3a7 100644 --- a/application/models/project.php +++ b/application/models/project.php @@ -24,7 +24,7 @@ /** * Configurations are used to store different variations of the same project. - * + * * @author Karsten Heiken */ class Project extends CI_Model { @@ -35,8 +35,7 @@ class Project extends CI_Model { * @return array The user's projects. */ public function getOwn() { - // TODO: Session: $query = $this->db->where(array('owner' => $this->session->userdata('user_id'))) - $query = $this->db->where(array('owner' => '215cd70f310ae6ae')) + $query = $this->db->where(array('owner' => $this->session->userdata('user_id'))) ->order_by('lastaccess', 'desc') ->get('projects'); return $query->result_array(); @@ -65,7 +64,7 @@ class Project extends CI_Model { $query = $this->db->where(array('public' => '1')) ->order_by('name', 'asc') ->get('projects'); - + return $query->result_array(); } @@ -79,10 +78,10 @@ class Project extends CI_Model { $this->db->where('id', $project_id)->update('projects', array( 'lastaccess' => mysql_now(), )); - + return $result; } - + /** * Get all projects from the database. */ @@ -91,8 +90,6 @@ class Project extends CI_Model { ->join('users', 'users.id = projects.owner', 'left') ->get('projects')->result_array(); - - return $result; } @@ -155,19 +152,33 @@ class Project extends CI_Model { } while ($this->db->where('id', $data['id'])->from('projects')->count_all_results() > 0); - if($this->db->insert('projects', $data)) + if ($this->db->insert('projects', $data)) { return $data['id']; - else + } else { return FALSE; + } } /** - * Delete a project. + * Updates a project. + * + * @param integer $projectId The ID of the project to update + * @param array $data Array with data to update + */ + public function update($projectId, $data) { + return $this->db->where('id', $projectId)->update('projects', $data); + } + + /** + * Deletes a project. * * There is no security check in here to verify if the user has the * rights to do so. This needs to be done in the controller! + * + * @param integer $projectId The ID of the project to delete */ - public function delete($project_id) { - return $this->db->delete('projects', array('id' => $project_id)); + public function delete($projectId) { + return $this->db->delete('projects', array('id' => $projectId)); } + } \ No newline at end of file diff --git a/application/views/project/detail.php b/application/views/project/detail.php index 51f58e7..87e4f1a 100644 --- a/application/views/project/detail.php +++ b/application/views/project/detail.php @@ -2,87 +2,80 @@
-
-

Projektinformationen

-
+
+

Projektinformationen

+
-
-

Versuche

- - - - - - - - - - 0): - foreach($trials as $trial): -?> - - - - - - - - - - - -
VersuchBerechnungenAktionen
Erfolgreich abgeschlossen - Ergebnisse anzeigen | - Bearbeiten | - Entfernen
Keine Versuche vorhanden.
+
+

Beschreibung

+
+

+

Versuche

+ + + + + + + + + + 0):?> + + + + + + + + + + + + + +
VersuchBerechnungenAktionen
Erfolgreich abgeschlossen + Ergebnisse anzeigen | + Bearbeiten | + Entfernen +
Keine Versuche vorhanden.
-

Neuen Versuch erstellen -

+

Neuen Versuch erstellen

+
-
-

Letzte Berechnungen

-
+
+

Letzte Berechnungen

+
-
- - - - - - - - - - 0): - foreach($jobsDone as $job): -?> - - - - - - - - - - - -
VersuchFertiggestelltAktionen
VersuchsnameHeute, 09:32 - Ergebnisse anzeigen | - Bearbeiten
Es wurden noch keine Berechnungen durchgeführt.
-
+
+ + + + + + + + + + 0):?> + + + + + + + + + + + + + +
VersuchFertiggestelltAktionen
VersuchsnameHeute, 09:32 + Ergebnisse anzeigen | + Bearbeiten +
Es wurden noch keine Berechnungen durchgeführt.
+
diff --git a/application/views/project/list.php b/application/views/project/list.php index 7509673..005d00d 100644 --- a/application/views/project/list.php +++ b/application/views/project/list.php @@ -1,75 +1,71 @@ -load->view('header'); ?> +load->view('header');?>
-
-

Projektübersicht

-
+
+

Projektübersicht

+
-
-

Übersicht aller Projekte

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ProjektBesitzerBerechnungenAktion
Erfolgreich abgeschlossenErgebnisse anzeigen |
BlutkörperchenKarsten HeikenFehlgeschlagenFehlerbericht | Entfernen
BlutkörperchenKarsten HeikenBerechnung im Gange: 20%Anhalten | Entfernen
BlutkörperchenKarsten HeikenBerechnung im Gange: 60%Anhalten | Entfernen
BlutkörperchenKarsten HeikenBerechnung im Gange: 0%Anhalten | Entfernen
BlutkörperchenKarsten HeikenFehlgeschlagenFehlerbericht | Entfernen
BlutkörperchenKarsten HeikenFehlgeschlagenFehlerbericht | Entfernen
-
+
+

Übersicht aller Projekte

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjektBesitzerBerechnungenAktion
Erfolgreich abgeschlossenErgebnisse anzeigen |
BlutkörperchenKarsten HeikenFehlgeschlagenFehlerbericht | Entfernen
BlutkörperchenKarsten HeikenBerechnung im Gange: 20%Anhalten | Entfernen
BlutkörperchenKarsten HeikenBerechnung im Gange: 60%Anhalten | Entfernen
BlutkörperchenKarsten HeikenBerechnung im Gange: 0%Anhalten | Entfernen
BlutkörperchenKarsten HeikenFehlgeschlagenFehlerbericht | Entfernen
BlutkörperchenKarsten HeikenFehlgeschlagenFehlerbericht | Entfernen
+
-load->view('footer'); ?> +load->view('footer');?> diff --git a/assets/js/scattport.js b/assets/js/scattport.js index 4f2aa4b..fd474fc 100644 --- a/assets/js/scattport.js +++ b/assets/js/scattport.js @@ -1,17 +1,62 @@ -function get_notifications() { +/** + * + */ +function getNotifications() { $.get(SITE_URL + 'ajax/get_notifications', function(data) { - if(data.length > 0) { + if (data.length > 0) { $('#notifications').append(data).slideDown(); } }); } +/** + * Saves the changes done by in-place edit. + * + * @param obj + * @param cancel + */ +function saveChanges(obj, cancel) { + var a; + + if (!cancel) { + a = $(obj).parent().siblings(0).val(); + $.post(SITE_URL + 'ajax/save_project', { content: a }, function(response) { + alert("Die Änderungen wurden gespeichert."); + }); + } else { + a = cancel; + } + + $(obj).parent().parent().after('
' + a + '
').remove(); +} + +/** + * Alternates the table rows. + */ $.fn.alternateRowColors = function() { - $('tbody tr:odd', this).removeClass('even').addClass('odd'); - $('tbody tr:even', this).removeClass('odd').addClass('even'); - return this; + $('tbody tr:odd', this).removeClass('even').addClass('odd'); + $('tbody tr:even', this).removeClass('odd').addClass('even'); + return this; }; +/** + * Replaces html line breaks with newlines. + */ +$.fn.br2nl = function() { + return $(this).html().replace(/(
)|(
)|(

)|(<\/p>)/g, ""); +}; + +/** + * Similar to PHP's nl2br function. + */ +$.fn.nl2br = function() { + var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '
' : '
'; + return $(this).html().replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2'); +}; + +/* + * Tabs + */ $(document).ready(function() { $(".tab_content").hide(); // hide all content $("ul.tabs li:first").addClass("active").show(); // activate first tab @@ -30,75 +75,100 @@ $(document).ready(function() { }); $('#notifications').hide(); - get_notifications(); - setInterval('get_notifications()', '5000'); + getNotifications(); + setInterval('getNotifications()', '5000'); }); -/* - * Tables +/** + * Do some stuff if document is ready. */ $(document).ready(function() { - var settings = { - table_class : 'tableList' - }; + /* + * Tables + */ + var settings = { + table_class : 'tableList' + }; - // add or delete "hover" class on mouseOver event - $('.' + settings.table_class + ' tbody tr').hover(function() { - $(this).addClass("hover"); - }, function() { - $(this).removeClass("hover"); - }); + // add or delete "hover" class on mouseOver event + $('.' + settings.table_class + ' tbody tr').hover(function() { + $(this).addClass("hover"); + }, function() { + $(this).removeClass("hover"); + }); - // add or delete "selected" class if a row is selected via checkbox - $('.' + settings.table_class + ' tbody input:checkbox').click(function() { - if ($(this).attr('checked') == true) { - $(this).parent().parent().addClass('selected'); - } else { - $(this).parent().parent().removeClass('selected'); - } - }); + // add or delete "selected" class if a row is selected via checkbox + $('.' + settings.table_class + ' tbody input:checkbox').click(function() { + if ($(this).attr('checked') == true) { + $(this).parent().parent().addClass('selected'); + } else { + $(this).parent().parent().removeClass('selected'); + } + }); - // alternate table rows - $('.' + settings.table_class).each(function() { - var table = $(this); - table.alternateRowColors(table); - }); + // alternate table rows + $('.' + settings.table_class).each(function() { + var table = $(this); + table.alternateRowColors(table); + }); - /* - * Pagination - */ - $('.paginated').each(function() { - var currentPage = 0; - var numPerPage = 6; - var table = $(this); + /* + * Pagination + */ + $('.paginated').each(function() { + var currentPage = 0; + var numPerPage = 6; + var table = $(this); - table.bind('repaginate', function() { - var start = currentPage * numPerPage; - var end = (currentPage + 1) * numPerPage; - table.find('tbody tr').slice(start, end).show().end().slice(0, start).hide().end().slice(end).hide().end(); - }); + table.bind('repaginate', function() { + var start = currentPage * numPerPage; + var end = (currentPage + 1) * numPerPage; + table.find('tbody tr').slice(start, end).show().end().slice(0, start).hide().end().slice(end).hide().end(); + }); - var numRows = table.find('tbody tr').length; - var numPages = Math.ceil(numRows / numPerPage); + var numRows = table.find('tbody tr').length; + var numPages = Math.ceil(numRows / numPerPage); - var $pager = $('

'); - var $pagelist = $(''); + var $pager = $(''); + var $pagelist = $(''); - $pagelist.append('
  • Seite:
  • '); + $pagelist.append('
  • Seite:
  • '); - for (var page = 0; page < numPages; page++) { - $('
  • ' + (page + 1) + '
  • ').bind('click', {'newPage': page}, function(event) { - currentPage = event.data['newPage']; - table.trigger('repaginate'); + for (var page = 0; page < numPages; page++) { + $('
  • ' + (page + 1) + '
  • ').bind('click', {'newPage': page}, function(event) { + currentPage = event.data['newPage']; + table.trigger('repaginate'); - $(this).addClass('active').siblings().removeClass('active'); - }).appendTo($pagelist).addClass('clickable'); - } + $(this).addClass('active').siblings().removeClass('active'); + }).appendTo($pagelist).addClass('clickable'); + } - $pagelist.find('li.page-number:first').addClass('active'); - $pager.append($pagelist); - $pager.insertAfter(table); + $pagelist.find('li.page-number:first').addClass('active'); + $pager.append($pagelist); + $pager.insertAfter(table); - table.trigger('repaginate'); - }); + table.trigger('repaginate'); + }); + + /* + * In-place editor + */ + $('.editInPlace').click(function() { + var textarea = '

    '; + var button = '

    Speichern Abbrechen

    '; + var revert = $(this).html(); + + $(this).after(textarea + button).remove(); + + $('.save').click(function() { + saveChanges(this, false); + }); + $('.cancel').click(function() { + saveChanges(this, revert); + }); + }).mouseover(function() { + $(this).addClass('editable'); + }).mouseout(function() { + $(this).removeClass('editable'); + }); });