summaryrefslogtreecommitdiffstats
path: root/projects
diff options
context:
space:
mode:
Diffstat (limited to 'projects')
-rw-r--r--projects/__init__.py0
-rw-r--r--projects/admin.py6
-rw-r--r--projects/models.py59
-rw-r--r--projects/urls.py13
-rw-r--r--projects/views.py24
5 files changed, 102 insertions, 0 deletions
diff --git a/projects/__init__.py b/projects/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/projects/__init__.py
diff --git a/projects/admin.py b/projects/admin.py
new file mode 100644
index 0000000..b5ec7d4
--- /dev/null
+++ b/projects/admin.py
@@ -0,0 +1,6 @@
+from projects.models import Project, Language, Screenshot
+from django.contrib import admin
+
+admin.site.register(Project)
+admin.site.register(Language)
+admin.site.register(Screenshot)
diff --git a/projects/models.py b/projects/models.py
new file mode 100644
index 0000000..4b2b49a
--- /dev/null
+++ b/projects/models.py
@@ -0,0 +1,59 @@
+from django.db import models
+from main.models import Tag, Activity
+from django.db.models.signals import post_save, post_delete
+
+class Language(models.Model):
+ name = models.CharField(max_length=100)
+
+ def __unicode__(self):
+ return self.name
+
+class Screenshot(models.Model):
+ url = models.URLField(max_length=255)
+ description = models.CharField(max_length=300)
+
+ def __unicode__(self):
+ return self.description
+
+class Project(models.Model):
+ STATUS_CHOICES = (
+ ('active', "Active"),
+ ('onhold', "On Hold"),
+ ('dropped', "Dropped"),
+ )
+
+ slug = models.SlugField(max_length=255, primary_key=True)
+ name = models.CharField(max_length=300)
+ status = models.CharField(max_length=8, choices=STATUS_CHOICES)
+ tagline = models.CharField(max_length=140, null=True, blank=True)
+ languages = models.ManyToManyField(Language, null=True, blank=True)
+ source_url = models.URLField(max_length=255, null=True, blank=True)
+ bugtracker_url = models.URLField(max_length=255, null=True, blank=True)
+ wiki_url = models.URLField(max_length=255, null=True, blank=True)
+ description = models.TextField()
+ screenshots = models.ForeignKey(Screenshot, null=True, blank=True)
+# tags = models.ManyToManyField(Tag, null=True, blank=True)
+
+ def __unicode__(self):
+ return self.name
+
+def project_saved_callback(sender, **kwargs):
+ if kwargs['created']:
+ acttype = 'add'
+ else:
+ acttype = 'edit'
+
+ a = Activity(actcategory='project',
+ actdescription=kwargs["instance"].name,
+ acttype = acttype,
+ objpk = kwargs["instance"].pk)
+ a.save()
+
+def project_deleted_callback(sender, **kwargs):
+ a = Activity(actcategory='project',
+ actdescription=kwargs["instance"].name,
+ acttype = 'delete')
+ a.save()
+
+post_save.connect(project_saved_callback, sender=Project)
+post_delete.connect(project_deleted_callback, sender=Project)
diff --git a/projects/urls.py b/projects/urls.py
new file mode 100644
index 0000000..053ab5b
--- /dev/null
+++ b/projects/urls.py
@@ -0,0 +1,13 @@
+from django.conf.urls.defaults import *
+from projects.models import Project, Language
+
+project_info_dict = {
+ 'queryset': Project.objects.all(),
+}
+
+urlpatterns = patterns('',
+ (r'^$',
+ 'django.views.generic.list_detail.object_list',
+ project_info_dict),
+ (r'^(?P<object_id>[\w-]+)/$', 'projects.views.project'),
+)
diff --git a/projects/views.py b/projects/views.py
new file mode 100644
index 0000000..ad46ebd
--- /dev/null
+++ b/projects/views.py
@@ -0,0 +1,24 @@
+from django.http import HttpResponse
+from django.template import Context, loader
+from projects.models import Project
+
+def project(request, object_id):
+ project = Project.objects.get(pk=object_id)
+ stats_dict = {
+ "Status": project.get_status_display(),
+ "Languages": ", ".join([language.name for language in project.languages.all()]),
+ }
+ links_dict = {
+ "Source": project.source_url,
+ "Bugtracker": project.bugtracker_url,
+ "Wiki": project.wiki_url,
+ }
+
+ t = loader.get_template("projects/project_detail.html")
+ c = Context({
+ "object": project,
+ "stats": stats_dict,
+ "links": links_dict,
+ })
+
+ return HttpResponse(t.render(c))