didier

gestion des projets

......@@ -4,8 +4,6 @@ var ARCSForge = {
files: {}
};
console.log(document.getElementById("codewindow"));
var cm = CodeMirror.fromTextArea(document.getElementById("codewindow"), { lineNumbers:true, mode : "javascript" });
var doc = new Document();
cm.on("change",doc.change);
......@@ -16,14 +14,54 @@ cm.refresh();
function login() {
// to be implemented
$.post("/login",{login: $('#login').val(), password: md5($('#pass').val()) }, function(data) {
ARCSForge.sessionId=data;
$.mobile.changePage('#pageEdit');
//var jsonData = JSON.parse(data);
$.mobile.changePage('#pageProjects');
ARCSForge.sessionId=data.session;
var projectList = $('#projectList');
projectList.empty();
for (p in data.projects) {
projectList.append('<li><a href="#">'+data.projects[p] + '</a></li>');
}
projectList.listview('refresh');
});
}
function logout() {
console.log('logout', ARCSForge.sessionId);
$.get("/logout/"+ARCSForge.sessionId);
ARCSForge.sessionId = "";
$.mobile.changePage('#pageLogin');
}
\ No newline at end of file
}
function createProject() {
$.get("/"+ARCSForge.sessionId+"/project/create/" + $('#projectName').val(), function(data) {
if (data === false) {
// we should display a dialog
} else {
// we are ok, we recieved components
var libraryList = $('#libraryList');
for (c in data) {
libraryList.append('<input name="cmp_'+data[c]+'" id="cmp_'+data[c]+'" type="checkbox">');
libraryList.append('<label for="cmp_'+data[c]+'">'+data[c]+'</label>');
}
//libraryList.listview('refresh');
$.mobile.changePage('#pageLibraries');
}
});
}
function fetchLibraries() {
var cbs = $('');
}
if (ARCSForge.sessionId === "") {
$.mobile.changePage('#pageLogin');
}
......
......@@ -40,7 +40,28 @@
<button onclick="logout()" class="ui-btn ui-icon-power ui-btn-right ui-corner-all ui-btn-icon-notext "></button>
</div>
<div data-role="main" class="ui-content">
<h3>Please select one of your projects in the list below</h3>
<ul id="projectList" data-role="listview" data-filter="true" data-filter-placeholder="Search projects..." data-inset="true">
<li>Gruick</li>
</ul>
<h3>Create a new project</h3>
<label for="projectName">New project name:</label>
<input name="projectName" id="projectName" value="" type="text">
<a href="#" onclick="createProject()" class="ui-btn ui-corner-all ui-btn-inline">Create project</a>
</div>
</div>
<!-- Project creation -->
<div data-role="page" id="pageLibraries">
<div data-role="header" data-theme="b">
<h1>ARCS Forge</h1>
<button onclick="logout()" class="ui-btn ui-icon-power ui-btn-right ui-corner-all ui-btn-icon-notext "></button>
</div>
<div data-role="main" class="ui-content">
<h3>Select components you want to import</h3>
<fieldset data-role="controlgroup" id="libraryList">
</fieldset>
<a href="#" onclick="fetchLibraries()" class="ui-btn ui-corner-all ui-btn-inline">Fetch libraries</a>
</div>
</div>
......
......@@ -15,7 +15,6 @@ var client = ldap.createClient({});*/
var Forge = require('./document.js');
console.log(Forge);
var usersConfig = new Forge.Settings('./etc/users.json');
var sessions=[];
......@@ -70,13 +69,17 @@ app.get('/deps/*', function(req, res) {
app.post('/login', upload.array(), function(req, res) {
console.log('attempted to login with id ', req.body);
// here we should verify user access
var login = req.body.login;
usersConfig.set(req.body.login,{});
if (!usersConfig.exists(login)) {
usersConfig.set(login,{ projects: []});
}
// let's say the user is connected.
var sessionId = Date.now().toString(16);
sessions[sessionId]={ user : req.body.login };
res.send(sessionId);
sessions[sessionId]={ user : login };
res.json({ session : sessionId, projects : usersConfig.get(login).projects});
});
app.get('/logout/:sessionId', function(req,res) {
......@@ -85,9 +88,40 @@ app.get('/logout/:sessionId', function(req,res) {
delete sessions[req.params.sessionId];
res.send(req.params.sessionId);
});
app.get('/:sessionId/project/create/:projectName', function(req, res) {
var sID = req.params.sessionId ;
var pID = req.params.projectName;
var projectPath = 'projects/' + pID;
if (! sessions.hasOwnProperty(sID)) {
// then it is obviously a fail
console.log("session Id not recognized");
res.send(false);
return;
}
var userName = sessions[sID].user;
var user = usersConfig.get(userName);
try {
var stats = fs.statSync(projectPath);
res.send(false);
} catch(e) {
fs.mkdirSync(projectPath);
fs.mkdirSync(projectPath+"/components");
fs.mkdirSync(projectPath+"/app");
// here we should add the project to the user's list
if ( user.projects.indexOf(pID) < 0) {
user.projects.push(pID);
usersConfig.set(userName, user);
}
// if the creation is a success, we should send back components list
var components = fs.readdirSync('../../../components');
res.json(components);
}
});
......
......@@ -75,6 +75,10 @@ var Settings = function(registry) {
return contents[key];
};
this.exists = function(key) {
return contents.hasOwnProperty(key);
};
this.save = function() {
var fileContents = JSON.stringify(contents);
fs.writeFileSync(fileName,fileContents);
......