", $talks = array(),$urlPhoto = ""){
+ $this->name = $name;
+ $this->talks = $talks;
+ $this->urlPhoto = $urlPhoto;
+ $instance->id = $id;
+
+ }
+
+ public static function fromJsonObject($object){
+ $instance = new self();
+ $instance->name = $object->name;
+ $instance->urlPhoto = $object->urlPhoto;
+ $instance->talks = array();
+ $instance->id = $object->id;
+
+ $instanceForTalks = clone $instance;
+ $tmpTalks = array();
+
+ foreach($object->talks as $key => $elem){
+ $newTalk = Talk::fromJsonObject($elem);
+ $newTalk->place = $instanceForTalks;
+ $tmpTalks[] = $newTalk;
+ }
+
+ $instance->talks = $tmpTalks;
+
+ return $instance;
+ }
+}
+
+
+
+
+
+?>
diff --git a/stoneSoup/files/templates/initialText.mustache b/stoneSoup/files/templates/initialText.mustache
new file mode 100755
index 0000000..4c59ec0
--- /dev/null
+++ b/stoneSoup/files/templates/initialText.mustache
@@ -0,0 +1,7 @@
+
+
Agiles Open Buenos Aires Seguridad 2013!
+
+
Desde 2008 con las Jornadas Latinoamericanas Ágiles, y desde el 2009 con los Agile Open en Buenos Aires, Córdoba, Tandil, La Plata, Mar del Plata, Bahía Blanca, Tucumán y Paraná, este año organizamos el evento Agile Open Buenos Aires Seguridad 2013, enfocado en el tema Seguridad y Agile.
+
+
Este evento servirá para la capacitación y el intercambio de experiencias relacionadas con la seguridad informática. Esperamos juntar distintas comunidades en un encuentro enriquecedor con un formato que nunca falla (Open Space).
+
\ No newline at end of file
diff --git a/stoneSoup/files/templates/mapTpl.mustache b/stoneSoup/files/templates/mapTpl.mustache
new file mode 100644
index 0000000..dc0188b
--- /dev/null
+++ b/stoneSoup/files/templates/mapTpl.mustache
@@ -0,0 +1,30 @@
+Mapa del evento.
+
+
+
+
diff --git a/stoneSoup/files/templates/query.mustache b/stoneSoup/files/templates/query.mustache
new file mode 100755
index 0000000..b224928
--- /dev/null
+++ b/stoneSoup/files/templates/query.mustache
@@ -0,0 +1,18 @@
+
+Dale gas!
+
+
diff --git a/stoneSoup/files/templates/section.mustache b/stoneSoup/files/templates/section.mustache
new file mode 100755
index 0000000..21ac2ad
--- /dev/null
+++ b/stoneSoup/files/templates/section.mustache
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/stoneSoup/files/templates/talkHref.mustache b/stoneSoup/files/templates/talkHref.mustache
new file mode 100755
index 0000000..bbfad11
--- /dev/null
+++ b/stoneSoup/files/templates/talkHref.mustache
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/stoneSoup/files/templates/talkPages.mustache b/stoneSoup/files/templates/talkPages.mustache
new file mode 100755
index 0000000..c8c11d2
--- /dev/null
+++ b/stoneSoup/files/templates/talkPages.mustache
@@ -0,0 +1,19 @@
+
+
+
+
+
+
{{name}}
+
{{timeDateInit}} a {{timeDateFinish}}
+
{{place.name}}
+
{{description}}
+
+
+
+
+
diff --git a/stoneSoup/img/banner.jpg b/stoneSoup/img/banner.jpg
new file mode 100644
index 0000000..867f566
Binary files /dev/null and b/stoneSoup/img/banner.jpg differ
diff --git a/stoneSoup/img/logo_flisol.png b/stoneSoup/img/logo_flisol.png
new file mode 100755
index 0000000..cf1f0e3
Binary files /dev/null and b/stoneSoup/img/logo_flisol.png differ
diff --git a/stoneSoup/index.php b/stoneSoup/index.php
new file mode 100755
index 0000000..5f80d20
--- /dev/null
+++ b/stoneSoup/index.php
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Agile Open Buenos Aires 2013
+
+
+
+
+ Creado y mantendio por
GNUtn
+
+
+
+
diff --git a/stoneSoup/js/eventCatchers/default.js b/stoneSoup/js/eventCatchers/default.js
new file mode 100755
index 0000000..6686755
--- /dev/null
+++ b/stoneSoup/js/eventCatchers/default.js
@@ -0,0 +1,128 @@
+Utils = {
+ _createPage: function(html, page) {
+ //append the new page onto the end of the body
+ if(page == null)
+ return;
+ $('#theBody').append(html);
+ $("#"+page).one( 'pagecreate', $.mobile._bindPageRemove );
+ }
+}
+
+ListComponent = { // TODO: Inherit from CollapsableComponent
+ func: function(section){
+ return function(evt){
+ var theContent = $("[id='" + this.id + "Content']");
+ theContent.empty();
+ var name = this.id
+ var tpl = View.tpl[name][0];
+ var tplPage = View.tpl[name][1];
+ // Obtengo las proximas charlas.
+ Model[name](function(talks){
+ // Creo las paginas
+ ListComponent.createListOfTalks(talks,tplPage,tpl,name+"Ul",name+"Content")
+ });
+ };
+ },
+ component:function(section){
+ var div = $(Mustache.render(View.tpl.section,section));
+ div.collapsible({refresh:true});
+ div.bind('expand', View.components[section.type].func(section));
+ return div;
+ },
+ createListOfTalks:function(talks,tplPage,tpl,idUl,idContent){
+ var viewTalks = [];
+ for(var i in talks){
+ id = null;
+
+ id = "talkPage" + talks[i].id;
+
+ //clonning attribute by atribute in javascript is too slow :(
+ var viewTalk = JSON.parse(JSON.stringify(talks[i]));
+ viewTalk.timeDateInit = talks[i].timeDateInit.date.substring(11,16);
+ viewTalk.timeDateFinish = talks[i].timeDateFinish.date.substring(11,16);
+ viewTalks.push(viewTalk);
+
+ Utils._createPage(Mustache.render(tplPage, viewTalk),id);
+
+ }
+
+ var obj = { 'data' : viewTalks, 'id' : idUl };
+
+ $("#" + idContent).html( Mustache.render(tpl, obj) );
+ $("#" + idUl ).listview();
+ }
+}
+
+CollapsableHtmlComponent = {
+ expand : function(section){
+ return function(evt){
+ var name = this.id
+ var tpl = View.tpl[name][0];
+ $("#" + name + "Content").html(Mustache.render(tpl,section));
+ }
+ },
+ component: function(section){
+ var div = $(Mustache.render(View.tpl.section,section));
+ div.collapsible({refresh:true});
+ div.bind('expand', this.expand(section));
+ return div;
+ }
+}
+
+ImageComponent = {
+ component:function(section){
+ return " ";
+ }
+}
+
+PicasaComponent = { //TODO : all ;)
+ component:function(section){
+ return " ";
+ }
+}
+
+PlainComponent = {
+ component:function(section){
+ return div = $(Mustache.render(View.tpl.section,section));
+ }
+}
+
+
+OpenStreetMapComponent = {
+ component: function(section){
+ var div = $("");
+ div.attr("style","width:95%;height:280px;margin:0px auto;margin-bottom:30px"); //TODO: pass to class
+ $(document).ready(function(){
+ var name = section.innerName
+ var tpl = View.tpl[name][0];
+ div.prepend($(Mustache.render(tpl,section)));
+ });
+ return div;
+ }
+};
+
+TextComponent = Object.create(CollapsableHtmlComponent,{
+ expand: {
+ value: function(section){
+ return function(evt){
+ var name = section.innerName
+ $("#" + name + "Content").html(section.html);
+ }
+ }
+ }
+});
+
+DefaultComponents = {
+ "list": ListComponent,
+ "htmlTemplate": CollapsableHtmlComponent,
+ "plain" : PlainComponent,
+ "image" : ImageComponent,
+ "map" : OpenStreetMapComponent,
+ "html" : TextComponent,
+ addComponent : function(name,component){
+ if(DefaultComponents[name])
+ throw "Component " + name + " already exists";
+ else
+ DefaultComponents[name] = component;
+ }
+};
\ No newline at end of file
diff --git a/stoneSoup/js/injector.js b/stoneSoup/js/injector.js
new file mode 100755
index 0000000..2cd9a25
--- /dev/null
+++ b/stoneSoup/js/injector.js
@@ -0,0 +1,5 @@
+$.getJSON("config/sections.json",function(data){
+ Model.loadAll(data);
+ View.loadEvents(DefaultComponents);
+ View.loadAll(data);
+});
diff --git a/stoneSoup/js/models.js b/stoneSoup/js/models.js
new file mode 100755
index 0000000..9f21d3b
--- /dev/null
+++ b/stoneSoup/js/models.js
@@ -0,0 +1,29 @@
+Model = {
+ loadAll: function(sections){
+ for(var i in sections){
+ elem = sections[i];
+
+ if(elem.controller)
+ Model[elem.innerName] = Model.genericGetter(elem.innerName, elem);
+ };
+ },
+ genericGetter : function(name, elem){
+ return function(callback){
+ $.getJSON(elem.controller, function(data){
+ Cache[name] = {
+ response: data,
+ date: new Date()
+ };
+ callback(data);
+ });
+ }
+ },
+ NullTalk : function(){
+ this.name = "No hay charlas";
+ this.id = null;
+ }
+}
+
+Cache = {
+
+}
diff --git a/stoneSoup/js/views.js b/stoneSoup/js/views.js
new file mode 100755
index 0000000..339db9d
--- /dev/null
+++ b/stoneSoup/js/views.js
@@ -0,0 +1,78 @@
+View = {
+ tpl : {
+ "section" : "files/templates/section.mustache"
+ },
+ components : {},
+ loadEvents:function(component){
+ View.components = component;
+ },
+ loadAll:function(sections){
+ View._countSections = sections.length;
+
+ $.get(View.tpl["section"],function(data){
+ View.tpl["section"] = data;
+ View.loadTemplates(sections);
+ });
+ },
+ loadTemplates : function(sections){
+ $.each(sections, function(i,section){
+ View.tpl[section.innerName] = [];
+ if(section.views){
+ $.each(section.views, function(i,elem){
+ $.get("files/templates/"+elem,View._loadTemplate(section));
+ });
+ } else {
+ View.eventLoadedAllTemplatesOf(section);
+ }
+ });
+ },
+ _loadTemplate: function(section){
+ return function(data){
+ View.tpl[section.innerName].push(data);
+ /**
+ * _loadTemplate loads a template :P.
+ * If all templates of this section are loaded, then
+ * throw the LoadedAllTemplatesOf event.
+ */
+
+ if(section.views.length == View.tpl[section.innerName].length){
+ View.eventLoadedAllTemplatesOf(section);
+
+ }
+ }
+ },
+ eventLoadedAllTemplatesOf: function(section){
+ /**
+ *
+ * save the Loaded template.
+ *
+ */
+ View._loadedTemplates.push (section);
+ /**
+ *
+ * If all the section's templates are loaded, throw
+ * the LoadedAllComponents event.
+ *
+ */
+ if(View._loadedTemplates.length == View._countSections){
+ View._loadedTemplates.sort(function(a,b){
+ return a.id-b.id;
+ });
+ console.log(View._loadedTemplates);
+ View.eventLoadedAllComponents();
+ }
+ },
+ eventLoadedAllComponents: function(){
+ $.each(View._loadedTemplates,function(i,data){
+ if(data){
+ View.loadComponent(data);
+ }
+ });
+ },
+ loadComponent : function(section){
+ var div = View.components[section.type].component(section);
+ $("#mainContent").append(div);
+ },
+ _loadedTemplates : [],
+ _countSections : 0
+ };
\ No newline at end of file
diff --git a/stoneSoup/model.php b/stoneSoup/model.php
new file mode 100755
index 0000000..4b838e8
--- /dev/null
+++ b/stoneSoup/model.php
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/stoneSoup/phpinfo.php b/stoneSoup/phpinfo.php
new file mode 100644
index 0000000..34f1171
--- /dev/null
+++ b/stoneSoup/phpinfo.php
@@ -0,0 +1 @@
+ phpinfo() ?>
\ No newline at end of file
diff --git a/stoneSoup/querys/talks.php b/stoneSoup/querys/talks.php
new file mode 100755
index 0000000..3ea380d
--- /dev/null
+++ b/stoneSoup/querys/talks.php
@@ -0,0 +1,20 @@
+data);;break;
+ case "now": $resp = json_encode($dao->now());; break;
+ case "after": $resp = json_encode($dao->after());; break;
+ case "before": $resp = json_encode($dao->before());; break;
+ case "query": $resp = json_encode($dao->query($_POST["query"]));
+ break;
+ default: $resp = '["STATUS":"BAD REQUEST"]';
+}
+header('Content-type: application/json');
+exit($resp);
+?>