Issue 91: Create feature to disable a repo

This commit is contained in:
Nathan Adams 2015-02-09 23:24:51 -06:00
parent feb001ed8e
commit 4febdda65f
9 changed files with 85 additions and 5 deletions

View File

@ -86,6 +86,12 @@ class IDF_Form_ProjectConf extends Pluf_Form
'initial' => $this->project->enableads,
'widget' => 'Pluf_Form_Widget_CheckboxInput',
));
$this->fields['disabled'] = new Pluf_Form_Field_Boolean(
array('required' => false,
'label' => __('Disable Project'),
'initial' => $this->project->disabled,
'widget' => 'Pluf_Form_Widget_CheckboxInput',
));
} else {
$this->fields['enableads'] = new Pluf_Form_Field_Boolean(
array('required' => false,
@ -94,6 +100,7 @@ class IDF_Form_ProjectConf extends Pluf_Form
'widget' => 'Pluf_Form_Widget_CheckboxInput',
'widget_attrs' => array('disabled' => 'disabled')
));
}
$tags = $this->project->get_tags_list();
for ($i=1;$i<7;$i++) {
@ -228,8 +235,10 @@ class IDF_Form_ProjectConf extends Pluf_Form
$this->project->description = $this->cleaned_data['description'];
$this->project->batchAssoc('IDF_Tag', $tagids);
$this->project->syntaxtheme = $this->cleaned_data["syntaxtheme"];
if ($this->user->administrator)
$this->project->enableads = $this->cleaned_data['enableads'];
if ($this->user->administrator) {
$this->project->enableads = $this->cleaned_data['enableads'];
$this->project->disabled = $this->cleaned_data["disabled"];
}
$this->project->update();
$conf = $this->project->getConf();

View File

@ -40,6 +40,8 @@ class IDF_Middleware_GoogleAds
*/
function process_response($request, $response)
{
if (isset($response) && !isset($response->status_code))
return $response;
if (!Pluf::f('google_ads', false)) {
return $response;
}

View File

@ -18,7 +18,7 @@ function IDF_Migrations_30SyntaxHighlightTheme_up()
}
function IDF_Migrations_28OTPKey_down()
function IDF_Migrations_30SyntaxHighlightTheme_down()
{
$table = Pluf::factory('IDF_Project')->getSqlTable();

View File

@ -0,0 +1,36 @@
<?php
function IDF_Migrations_31DisableProject_up()
{
$table = Pluf::factory('IDF_Project')->getSqlTable();
$sql = array();
$sql["MySQL"] = "ALTER TABLE " . $table . " ADD COLUMN `disabled` int(11) NULL AFTER `current_activity`;";
$db = Pluf::db();
$engine = Pluf::f('db_engine');
if (!isset($sql[$engine])) {
throw new Exception('SQLite complex migration not supported.');
}
$db->execute($sql[$engine]);
}
function IDF_Migrations_31DisableProject_down()
{
$table = Pluf::factory('IDF_Project')->getSqlTable();
$sql = array();
$sql["MySQL"] = "ALTER TABLE " . $table . " DROP COLUMN `disabled`;";
$db = Pluf::db();
$engine = Pluf::f('db_engine');
if (!isset($sql[$engine])) {
throw new Exception('SQLite complex migration not supported.');
}
$db->execute($sql[$engine]);
}

View File

@ -34,6 +34,10 @@ class IDF_Precondition
*/
static public function baseAccess($request)
{
if ($request->user->administrator)
return true;
if ($request->project->disabled)
return false;
if (!$request->project->private) {
return true;
}

View File

@ -117,6 +117,14 @@ class IDF_Project extends Pluf_Model
'default' => 1,
),
'disabled' =>
array(
'type' => 'Pluf_DB_Field_Integer',
'blank' => false,
'verbose' => __('disabled'),
'default' => 0,
),
'syntaxtheme' =>
array(
'type' => 'Pluf_DB_Field_Text',

View File

@ -393,6 +393,15 @@ class IDF_Views
// anonymous users can only see non-private projects
$false = Pluf_DB_BooleanToDb(false, $db);
$true = Pluf_DB_BooleanToDb(true, $db);
$dbpfx = $db->pfx;
$disabled_results = $db->select("SELECT id FROM ${dbpfx}idf_projects WHERE disabled = $true");
$disabled_ids = [];
foreach($disabled_results as $id) {
$disabled_ids[] = $id['id'];
}
$sql_results = $db->select(
'SELECT id FROM '.$db->pfx.'idf_projects '.
'WHERE '.$db->qn('private').'='.$false
@ -400,9 +409,13 @@ class IDF_Views
$ids = array();
foreach ($sql_results as $id) {
$ids[] = $id['id'];
if (!in_array($id['id'], $disabled_ids)) {
$ids[] = $id['id'];
}
}
// registered users may additionally see private projects with which
// they're somehow affiliated
if (!$user->isAnonymous()) {
@ -418,7 +431,7 @@ class IDF_Views
$rows = Pluf::factory('Pluf_RowPermission')->getList(array('filter' => $permSql->gen()));
if ($rows->count() > 0) {
foreach ($rows as $row) {
if (in_array($row->model_id, $ids))
if (in_array($row->model_id, $ids) || in_array($row->model_id, $disabled_ids))
continue;
$ids[] = $row->model_id;
}

View File

@ -77,6 +77,12 @@
{$form.f.enableads|unsafe}
</td>
</tr>
<tr>
<th>{$form.f.disabled.labelTag}:</th>
<td>{if $form.f.disabled.errors}{$form.f.disabled.fieldErrors}{/if}
{$form.f.disabled|unsafe}
</td>
</tr>
<tr>
<th>{$form.f.syntaxtheme.labelTag}:</th>
<td>{if $form.f.syntaxtheme.errors}{$form.f.syntaxtheme.fieldErrors}{/if}

View File

@ -42,6 +42,8 @@ class Pluf_Middleware_Stats
*/
function process_response($request, $response)
{
if (isset($response) && !isset($response->status_code))
return $response;
if (!in_array($response->status_code,
array(200, 201, 202, 203, 204, 205, 206, 404, 501))) {
return $response;