Add dynamic project tree

This commit is contained in:
Karsten Heiken
2011-04-21 15:06:34 +02:00
parent fa5f20cb47
commit b19aecd821
6 changed files with 191 additions and 23 deletions

4
.gitignore vendored
View File

@@ -1,4 +1,6 @@
.buildpath .buildpath
.project .project
.settings/ .settings/
*.xcf .htaccess
application/config/config.php
application/config/database.php

0
application/.htaccess Executable file → Normal file
View File

View File

@@ -0,0 +1,58 @@
<?php
class Projects extends CI_Controller {
/**
* List all projects the user has access to.
*/
public function getAvailable() {
$this->load->model('Project');
$path = $this->input->get_post('node');
switch($path) {
case '/projects/own':
$projects = $this->Project->getOwn();
break;
case '/projects/shared':
$projects = $this->Project->getShared();
break;
case '/projects/public':
$projects = $this->Project->getPublic();
break;
default:
$projects = array(
array(
'id' => '/projects/own',
'cls' => 'folder',
'text' => 'Eigene Projekte',
'icon' => '/ScattPort/assets/images/icons/folder.png',),
array(
'id' => '/projects/shared',
'cls' => 'leaf',
'text' => 'Für mich freigegeben',
'icon' => '/ScattPort/assets/images/icons/folder-share.png',
),
array(
'id' => '/projects/public',
'cls' => 'folder',
'text' => 'Öffentliche Projekte',
'icon' => '/ScattPort/assets/images/icons/folder-network.png',
),
);
}
$this->output
->set_content_type('application/json')
->set_output(json_encode($projects));
// ->set_output(json_encode(array('count' => $count, 'projects' => $projects)));
}
public function detail($projects, $area, $id) {
$result = $this->db->get_where('projects', array('id' => $id))->row_array();
$this->output
->set_content_type('application/json')
->set_output(json_encode(array('result' => $result)));
}
}

View File

@@ -0,0 +1,65 @@
<?php
class Project extends CI_Model {
public function getOwn() {
$query = $this->db->where(array('owner' => '215cd70f310ae6ae'))
->order_by('lastaccess', 'desc')
->get('projects');
$projects = $query->result_array();
$ownCount = $query->num_rows();
$i = 0;
foreach($projects as $project) {
$ownProjects[$i]['id'] = '/projects/own/'.$project['id'];
$ownProjects[$i]['cls'] = 'folder';
$ownProjects[$i]['text'] = $project['name'];
$ownProjects[$i]['leaf'] = true;
$ownProjects[$i]['icon'] = "/ScattPort/assets/images/icons/document.png";
$i++;
}
return $ownProjects;
}
public function getShared() {
$this->db->select('*')->from('shares')->order_by('lastaccess', 'desc')->where(array('user_id' => '215cd70f310ae6ae'));
$this->db->join('projects', 'projects.id = shares.project_id');
$query = $this->db->get();
$projects = $query->result_array();
$sharedCount = $query->num_rows();
$i = 0;
foreach($projects as $project) {
$sharedProjects[$i]['id'] = '/projects/shared/'.$project['id'];
$sharedProjects[$i]['cls'] = 'folder';
$sharedProjects[$i]['text'] = $project['name'];
$sharedProjects[$i]['leaf'] = true;
$sharedProjects[$i]['icon'] = "/ScattPort/assets/images/icons/document.png";
$i++;
}
return $sharedProjects;
}
public function getPublic() {
$query = $this->db->where(array('public' => '1'))
->order_by('name', 'asc')
->get('projects');
$projects = $query->result_array();
$publicCount = $query->num_rows();
$i = 0;
foreach($projects as $project) {
$publicProjects[$i]['id'] = '/projects/public/'.$project['id'];
$publicProjects[$i]['cls'] = 'folder';
$publicProjects[$i]['text'] = $project['name'];
$publicProjects[$i]['leaf'] = true;
$publicProjects[$i]['icon'] = "/ScattPort/assets/images/icons/document.png";
$i++;
}
return $publicProjects;
}
}

View File

@@ -10,6 +10,7 @@
<?=script_tag('assets/js/ext/adapter/jquery/ext-jquery-adapter.js');?> <?=script_tag('assets/js/ext/adapter/jquery/ext-jquery-adapter.js');?>
<!-- ExtJS library: all widgets --> <!-- ExtJS library: all widgets -->
<?=script_tag('assets/js/ext/ext-all.js');?> <?=script_tag('assets/js/ext/ext-all.js');?>
<?=script_tag('assets/js/ProjectInfoWindow.js');?>
<script type="text/javascript"> <script type="text/javascript">
var BASE_URL = '<?=base_url();?>' + 'index.php/'; var BASE_URL = '<?=base_url();?>' + 'index.php/';
var BASE_PATH = '<?=base_url();?>'; var BASE_PATH = '<?=base_url();?>';

View File

@@ -1,16 +1,16 @@
<?php $this->load->view('header'); ?> <?php $this->load->view('header'); ?>
<script type="text/javascript"> <script type="text/javascript">
var projectPanel = new Ext.tree.TreePanel({ var projectTree = new Ext.tree.TreePanel({
id: 'project-tree',
region: 'west', region: 'west',
title: "Projekte", title: "Projekte",
height: 400, height: 250,
bodyStyle: 'margin-bottom: 6px;', bodyStyle: 'margin-bottom: 6px;',
autoScroll: true, autoScroll: true,
rootVisible: true, enableDD: false,
lines: false, rootVisible: false,
tbar: [{ id: 'treePanel',
tbar: [{
icon: BASE_PATH + 'assets/images/icons/box--plus.png', icon: BASE_PATH + 'assets/images/icons/box--plus.png',
text: "Neues Projekt", text: "Neues Projekt",
scope: this scope: this
@@ -20,20 +20,18 @@ var projectPanel = new Ext.tree.TreePanel({
text: "Entfernen", text: "Entfernen",
scope: this scope: this
}], }],
dataUrl: BASE_URL + 'projects/getAvailable',
root: { root: {
text: "Meine Projekte", nodeType: 'async',
text: 'Projekte',
expanded: true, expanded: true,
children: [{ id: 'projects'
text: 'Projekt 1',
leaf: true
}, {
text: 'Projekt 2',
leaf: true
}]
} }
}); });
var layoutLeft2 = new Ext.Panel({ projectTree.on('click', loadProjectInfo);
var infoPanel = new Ext.Panel({
region: 'west', region: 'west',
margin: '10 0 0 0', margin: '10 0 0 0',
autoScroll: true, autoScroll: true,
@@ -41,7 +39,8 @@ var layoutLeft2 = new Ext.Panel({
html: 'Test' html: 'Test'
}); });
var panelCenter = new Ext.TabPanel({
var tabPanel = new Ext.TabPanel({
xtype: 'tabpanel', xtype: 'tabpanel',
resizeTabs: false, resizeTabs: false,
minTabWidth: 115, minTabWidth: 115,
@@ -55,7 +54,8 @@ var panelCenter = new Ext.TabPanel({
xtype: 'panel', xtype: 'panel',
id: 'tab_welcome', id: 'tab_welcome',
bodyStyle: 'padding: 10px', bodyStyle: 'padding: 10px',
title: "Willkommen" title: "Willkommen",
closable: true,
}] }]
}); });
@@ -66,7 +66,7 @@ var layoutCenter = new Ext.Panel({
margins: '0 5 5 0', margins: '0 5 5 0',
activeItem: 0, activeItem: 0,
border: true, border: true,
items: [panelCenter] items: [tabPanel]
}); });
var layoutMain = new Ext.Viewport({ var layoutMain = new Ext.Viewport({
@@ -88,12 +88,12 @@ var layoutMain = new Ext.Viewport({
border: false, border: false,
split: true, split: true,
margins: '0 0 0 5', margins: '0 0 0 5',
items: [projectPanel, layoutLeft2] items: [projectTree]
}, layoutCenter] }, layoutCenter]
}); });
function logout() { function logout() {
$.ajax({ Ext.Ajax.request({
url: BASE_URL + 'auth/do_logout', url: BASE_URL + 'auth/do_logout',
method: 'post', method: 'post',
success: function(xhr) { success: function(xhr) {
@@ -101,8 +101,50 @@ function logout() {
} }
}); });
} }
</script>
function loadProjectInfo(n) {
if(n.isLeaf()){
Ext.Ajax.request({
url: BASE_URL + 'projects/detail' + n.id,
method: 'get',
success: function ( result, request ) {
var theResponse = Ext.util.JSON.decode(result.responseText);
tabPanel.add({
title: 'New Tab ',
html: 'Lade Projekt...',
closable:true,
handler: function(){
alert("foo");
var data = theResponse.result;
var tpl = new Ext.Template(
'<p>ID: {id}</p>',
'<p>Name: {name}</p>'
);
tpl.overwrite(this.html, data);
}
}).show();
},
failure: function ( result, request ) {
//Ext.MessageBox.alert("Fehler!", "Das gewünschte Projekt kann nicht geladen werden.");
switch(result.status) {
case 404:
Ext.MessageBox.alert("Fehler", "Das gewünschte Projekt konnte nicht gefunden werden.");
break;
case 401:
Ext.MessageBox.alert("Fehler", "Sie besitzen nicht die nötigen Zugriffsrechte, um dieses Projekt zu lesen."
+ "Wenden Sie sich an den Projektbesitzer, um Zugriff zu erhalten.");
break;
}
}
});
}
}
</script>
<div id="main"></div> <div id="main"></div>
<?php $this->load->view('footer'); ?> <?php $this->load->view('footer'); ?>