diff --git a/indefero/src/IDF/Form/ProjectRequest.php b/indefero/src/IDF/Form/ProjectRequest.php
new file mode 100644
index 0000000..782cd6c
--- /dev/null
+++ b/indefero/src/IDF/Form/ProjectRequest.php
@@ -0,0 +1,72 @@
+ __('git'),
+ 'svn' => __('Subversion'),
+ 'mercurial' => __('mercurial'),
+ 'mtn' => __('monotone'),
+ );
+ foreach (Pluf::f('allowed_scm', array()) as $key => $class) {
+ $choices[$options[$key]] = $key;
+ }
+
+ $this->fields['shortname'] = new Pluf_Form_Field_Varchar(
+ array('required' => true,
+ 'label' => __('Name'),
+ 'initial' => '',
+ 'help_text' => __('This will be the name of your repo and of your project - however - you can change the project name later.'),
+ ));
+
+ $this->fields['repotype'] = new Pluf_Form_Field_Varchar(
+ array('required' => true,
+ 'label' => __('Repository type'),
+ 'initial' => 'git',
+ 'widget_attrs' => array('choices' => $choices),
+ 'widget' => 'Pluf_Form_Widget_SelectInput',
+ ));
+
+ $this->fields['desc'] = new Pluf_Form_Field_Varchar(
+ array('required' => true,
+ 'label' => __('Short description'),
+ 'help_text' => __('A one line description of the project.'),
+ 'initial' => '',
+ 'widget_attrs' => array('size' => '35'),
+ ));
+
+ $this->user = $extra['user'];
+ }
+
+
+ function save($commit=true)
+ {
+ if (!$this->isValid()) {
+ throw new Exception(__('Cannot save the model from an invalid form.'));
+ }
+
+ $checksql = new Pluf_SQL(sprintf("shortname='%s'", $this->cleaned_data['shortname']));
+ $requestcheck = Pluf::factory("IDF_Project")->getCount(array('filter'=>$checksql->gen()));
+ if ($requestcheck == 1)
+ return false;
+ try
+ {
+ $request = new IDF_ProjectRequest();
+ $request->shortname = $this->cleaned_data['shortname'];
+ $request->repotype = $this->cleaned_data['repotype'];
+ $request->desc = $this->cleaned_data['desc'];
+ $request->submitter = $this->user;
+ $request->create();
+ return true;
+ } catch (Exception $e)
+ {
+ return false;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/indefero/src/IDF/ProjectRequest.php b/indefero/src/IDF/ProjectRequest.php
new file mode 100644
index 0000000..3301ea5
--- /dev/null
+++ b/indefero/src/IDF/ProjectRequest.php
@@ -0,0 +1,85 @@
+_a['table'] = 'idf_projectrequest';
+ $this->_a['model'] = __CLASS__;
+
+ $this->_a['cols'] = array(
+ // It is mandatory to have an "id" column.
+ 'id' =>
+ array(
+ 'type' => 'Pluf_DB_Field_Sequence',
+ 'blank' => true,
+ ),
+ 'shortname' =>
+ array(
+ 'type' => 'Pluf_DB_Field_Varchar',
+ 'blank' => false,
+ 'size' => 50,
+ 'verbose' => __('shortname'),
+ 'unique' => true,
+ ),
+ 'repotype' =>
+ array(
+ 'type' => 'Pluf_DB_Field_Varchar',
+ 'blank' => false,
+ 'size' => 25,
+ 'verbose' => __('Repository Type'),
+ ),
+ 'desc' =>
+ array(
+ 'type' => 'Pluf_DB_Field_Varchar',
+ 'blank' => false,
+ 'size' => 250,
+ 'verbose' => __('Description'),
+ ),
+ 'creation_dtime' =>
+ array(
+ 'type' => 'Pluf_DB_Field_Datetime',
+ 'blank' => true,
+ 'verbose' => __('creation date'),
+ ),
+ 'submitter' =>
+ array(
+ 'type' => 'Pluf_DB_Field_Foreignkey',
+ 'model' => 'Pluf_User',
+ 'blank' => false,
+ 'verbose' => __('submitter'),
+ ));
+ }
+
+ /**
+ * String representation of the abstract.
+ */
+ function __toString()
+ {
+ return $this->shortname;
+ }
+
+ /**
+ * String ready for indexation.
+ */
+ function _toIndex()
+ {
+ return '';
+ }
+
+ function preSave($create=false)
+ {
+ if ($this->id == '') {
+ $this->creation_dtime = gmdate('Y-m-d H:i:s');
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/indefero/src/IDF/templates/idf/admin/approveprojects.html b/indefero/src/IDF/templates/idf/admin/approveprojects.html
new file mode 100644
index 0000000..77dcd28
--- /dev/null
+++ b/indefero/src/IDF/templates/idf/admin/approveprojects.html
@@ -0,0 +1,60 @@
+{extends "idf/gadmin/base.html"}
+{block request} class="active"{/block}
+
+{block body}
+{if $createdtext}
+{$createdtext}
+
+
+{/if}
+{if $errors}
+{foreach $errors as $error}
+{$error}
+{/foreach}
+{/if}
+
+ Short Name + | ++ Description + | ++ Repotype + | ++ Submitter + | ++ Date + | ++ Approve + | +
---|---|---|---|---|---|
+ {$req.shortname} + | ++ {$req.desc} + | ++ {$req.repotype} + | ++ {$req.get_submitter.login} + | ++ {$req.creation_dtime} + | ++ Approve + | +
+ Thank you - your request has been received and will be approved by an admin shortly. +
+