Fixing APC with latest version of PHP
Adding ability for user to request repo and staff members to approve repos - issue 9 Fixing issue 11 adding caching for requesting file contents with mercurial Fixing issue 10 user profiles only show the projects that they are an owner on
This commit is contained in:
parent
def4ce7283
commit
d4994854c9
@ -55,6 +55,7 @@ function IDF_Migrations_Install_setup($params=null)
|
|||||||
'IDF_Gconf',
|
'IDF_Gconf',
|
||||||
'IDF_EmailAddress',
|
'IDF_EmailAddress',
|
||||||
'IDF_IssueRelation',
|
'IDF_IssueRelation',
|
||||||
|
'IDF_ProjectRequest'
|
||||||
);
|
);
|
||||||
$db = Pluf::db();
|
$db = Pluf::db();
|
||||||
$schema = new Pluf_DB_Schema($db);
|
$schema = new Pluf_DB_Schema($db);
|
||||||
@ -121,6 +122,7 @@ function IDF_Migrations_Install_teardown($params=null)
|
|||||||
'IDF_Project',
|
'IDF_Project',
|
||||||
'IDF_EmailAddress',
|
'IDF_EmailAddress',
|
||||||
'IDF_IssueRelation',
|
'IDF_IssueRelation',
|
||||||
|
'IDF_ProjectRequest'
|
||||||
);
|
);
|
||||||
$db = Pluf::db();
|
$db = Pluf::db();
|
||||||
$schema = new Pluf_DB_Schema($db);
|
$schema = new Pluf_DB_Schema($db);
|
||||||
|
@ -109,7 +109,7 @@ class IDF_Project extends Pluf_Model
|
|||||||
'default' => null,
|
'default' => null,
|
||||||
'verbose' => __('current project activity'),
|
'verbose' => __('current project activity'),
|
||||||
),
|
),
|
||||||
'enableads' =>
|
'enableads' =>
|
||||||
array(
|
array(
|
||||||
'type' => 'Pluf_DB_Field_Integer',
|
'type' => 'Pluf_DB_Field_Integer',
|
||||||
'blank' => false,
|
'blank' => false,
|
||||||
|
@ -460,6 +460,29 @@ class IDF_Views
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getOwnedProjects($user)
|
||||||
|
{
|
||||||
|
$db =& Pluf::db();
|
||||||
|
$false = Pluf_DB_BooleanToDb(false, $db);
|
||||||
|
$permSql = new Pluf_SQL(
|
||||||
|
"model_class='IDF_Project' AND owner_class='Pluf_User' ".
|
||||||
|
"AND owner_id=%s AND negative=".$false, $user->id
|
||||||
|
);
|
||||||
|
$rows = Pluf::factory('Pluf_RowPermission')->getList(array('filter' => $permSql->gen()));
|
||||||
|
$ids = array();
|
||||||
|
if ($rows->count() > 0) {
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
if (in_array($row->model_id, $ids))
|
||||||
|
continue;
|
||||||
|
$ids[] = $row->model_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sql = new Pluf_SQL(sprintf("id IN (%s)", implode(", ", $ids)));
|
||||||
|
return Pluf::factory('IDF_Project')->getList(array(
|
||||||
|
'filter'=> $sql->gen(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of global tags each carrying the number of projects that have the
|
* Returns a list of global tags each carrying the number of projects that have the
|
||||||
* particular tag set
|
* particular tag set
|
||||||
|
@ -174,6 +174,63 @@ class IDF_Views_Admin
|
|||||||
$request);
|
$request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public $projectRequestCreate_precond = array('Pluf_Precondition::staffRequired');
|
||||||
|
public function projectRequestCreate($request, $match)
|
||||||
|
{
|
||||||
|
$title = __('Create Requested Project');
|
||||||
|
$createdtext = "";
|
||||||
|
$form = null;
|
||||||
|
$errors = null;
|
||||||
|
if (count($match) == 2)
|
||||||
|
{
|
||||||
|
|
||||||
|
$projreqobj = new IDF_ProjectRequest($match[1]);
|
||||||
|
$form = new IDF_Form_Admin_ProjectCreate(array(
|
||||||
|
"name" => $projreqobj->shortname,
|
||||||
|
"shortname" => $projreqobj->shortname,
|
||||||
|
"shortdesc" => $projreqobj->desc,
|
||||||
|
"scm" => $projreqobj->repotype,
|
||||||
|
"owners" => $projreqobj->get_submitter->login,
|
||||||
|
"template" => "--"
|
||||||
|
), array("user" => $projreqobj->get_submitter));
|
||||||
|
if ($form->isValid())
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Pluf::loadFunction('Pluf_HTTP_URL_urlForView');
|
||||||
|
$from_email = Pluf::f('from_email');
|
||||||
|
$tmpl = new Pluf_Template('idf/admin/request-email.txt');
|
||||||
|
$context = new Pluf_Template_Context(array("user" => $projreqobj->get_submitter, "shortname" => $projreqobj->shortname));
|
||||||
|
$text_email = $tmpl->render($context);
|
||||||
|
$email = new Pluf_Mail($from_email, $projreqobj->get_submitter->email,
|
||||||
|
__('Status of repository request'));
|
||||||
|
$email->addTextMessage($text_email);
|
||||||
|
$email->sendMail();
|
||||||
|
|
||||||
|
$form->save();
|
||||||
|
$projreqobj->delete();
|
||||||
|
$createdtext = "Repo was created!";
|
||||||
|
} else {
|
||||||
|
$errors = $form->errors;
|
||||||
|
$createdtext = "There was an error creating the repo!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$projectreqs = Pluf::factory("IDF_ProjectRequest")->getList();
|
||||||
|
//$projectreqs[0]->creation_dtime = "123";
|
||||||
|
//print_r($projectreqs[0]->creation_dtime);
|
||||||
|
foreach($projectreqs as $p) {
|
||||||
|
$p->creation_dtime = Pluf_Date::gmDateToString($p->creation_dtime);
|
||||||
|
}
|
||||||
|
return Pluf_Shortcuts_RenderToResponse('idf/admin/approveprojects.html', array (
|
||||||
|
'page_title' => $title,
|
||||||
|
'requests' => $projectreqs,
|
||||||
|
'createdtext' => $createdtext,
|
||||||
|
'form' => $form,
|
||||||
|
'errors' => $errors
|
||||||
|
), $request);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Creation of a project.
|
* Creation of a project.
|
||||||
*
|
*
|
||||||
|
@ -61,9 +61,11 @@ class IDF_Views_Issue
|
|||||||
'id' => __('Id'),
|
'id' => __('Id'),
|
||||||
array('summary', 'IDF_Views_Issue_SummaryAndLabels', __('Summary')),
|
array('summary', 'IDF_Views_Issue_SummaryAndLabels', __('Summary')),
|
||||||
array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),
|
array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),
|
||||||
|
array('submitter', 'Pluf_Paginator_FkToString', __('submitter')),
|
||||||
|
array('owner', 'Pluf_Paginator_FkToString', __('owner')),
|
||||||
array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),
|
array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),
|
||||||
);
|
);
|
||||||
$pag->configure($list_display, array(), array('id', 'status', 'modif_dtime'));
|
$pag->configure($list_display, array(), array('id', 'status', 'owner', 'submitter', 'modif_dtime'));
|
||||||
$pag->items_per_page = 10;
|
$pag->items_per_page = 10;
|
||||||
$pag->no_results_text = __('No issues were found.');
|
$pag->no_results_text = __('No issues were found.');
|
||||||
$pag->setFromRequest($request);
|
$pag->setFromRequest($request);
|
||||||
|
@ -378,7 +378,12 @@ class IDF_Views_Source
|
|||||||
$previous = substr($request_file, 0, -strlen($l.' '));
|
$previous = substr($request_file, 0, -strlen($l.' '));
|
||||||
$scmConf = $request->conf->getVal('scm', 'git');
|
$scmConf = $request->conf->getVal('scm', 'git');
|
||||||
$props = $scm->getProperties($commit, $request_file);
|
$props = $scm->getProperties($commit, $request_file);
|
||||||
$content = IDF_FileUtil::highLight($extra['mime'], $scm->getFile($request_file_info));
|
$cache = Pluf_Cache::factory();
|
||||||
|
$key = sha1($request_file.$commit);
|
||||||
|
if (null === ($content=$cache->get($key))) {
|
||||||
|
$content = IDF_FileUtil::highLight($extra['mime'], $scm->getFile($request_file_info));
|
||||||
|
$cache->set($key, $content);
|
||||||
|
}
|
||||||
return Pluf_Shortcuts_RenderToResponse('idf/source/'.$scmConf.'/file.html',
|
return Pluf_Shortcuts_RenderToResponse('idf/source/'.$scmConf.'/file.html',
|
||||||
array(
|
array(
|
||||||
'page_title' => $page_title,
|
'page_title' => $page_title,
|
||||||
|
@ -32,6 +32,37 @@ Pluf::loadFunction('Pluf_Shortcuts_RenderToResponse');
|
|||||||
*/
|
*/
|
||||||
class IDF_Views_User
|
class IDF_Views_User
|
||||||
{
|
{
|
||||||
|
public $requestproject_precond = array('Pluf_Precondition::loginRequired');
|
||||||
|
public function requestproject($request)
|
||||||
|
{
|
||||||
|
$params = array("user" => $request->user);
|
||||||
|
$title = __('Request Project');
|
||||||
|
$success = false;
|
||||||
|
$error = false;
|
||||||
|
if ($request->method == 'POST') {
|
||||||
|
$form = new IDF_Form_ProjectRequest((array)$request->POST, $params);
|
||||||
|
if ($form->isValid()) {
|
||||||
|
$check = $form->save();
|
||||||
|
if ($check)
|
||||||
|
{
|
||||||
|
$form = new IDF_Form_ProjectRequest(null, $params);
|
||||||
|
$success = true;
|
||||||
|
} else {
|
||||||
|
$error = "Repository shortname has already been taken.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$form = new IDF_Form_ProjectRequest(null, $params);
|
||||||
|
}
|
||||||
|
return Pluf_Shortcuts_RenderToResponse('idf/user/projectrequest.html',
|
||||||
|
array('page_title' => $title,
|
||||||
|
'form' => $form,
|
||||||
|
'success' => $success,
|
||||||
|
'error' => $error),
|
||||||
|
$request);
|
||||||
|
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Dashboard of a user.
|
* Dashboard of a user.
|
||||||
*
|
*
|
||||||
@ -83,7 +114,7 @@ class IDF_Views_User
|
|||||||
array('summary', 'IDF_Views_IssueSummaryAndLabels', __('Summary')),
|
array('summary', 'IDF_Views_IssueSummaryAndLabels', __('Summary')),
|
||||||
array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),
|
array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),
|
||||||
array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),
|
array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),
|
||||||
);
|
);
|
||||||
$pag->configure($list_display, array(), array('status', 'modif_dtime'));
|
$pag->configure($list_display, array(), array('status', 'modif_dtime'));
|
||||||
$pag->items_per_page = 10;
|
$pag->items_per_page = 10;
|
||||||
$pag->no_results_text = ($working) ? __('No issues are assigned to you, yeah!') : __('All the issues you submitted are fixed, yeah!');
|
$pag->no_results_text = ($working) ? __('No issues are assigned to you, yeah!') : __('All the issues you submitted are fixed, yeah!');
|
||||||
@ -240,6 +271,7 @@ class IDF_Views_User
|
|||||||
*/
|
*/
|
||||||
public function view($request, $match)
|
public function view($request, $match)
|
||||||
{
|
{
|
||||||
|
$db =& Pluf::db();
|
||||||
$sql = new Pluf_SQL('login=%s', array($match[1]));
|
$sql = new Pluf_SQL('login=%s', array($match[1]));
|
||||||
$users = Pluf::factory('Pluf_User')->getList(array('filter'=>$sql->gen()));
|
$users = Pluf::factory('Pluf_User')->getList(array('filter'=>$sql->gen()));
|
||||||
if (count($users) != 1 or !$users[0]->active) {
|
if (count($users) != 1 or !$users[0]->active) {
|
||||||
@ -248,20 +280,46 @@ class IDF_Views_User
|
|||||||
|
|
||||||
$user = $users[0];
|
$user = $users[0];
|
||||||
$user_data = IDF_UserData::factory($user);
|
$user_data = IDF_UserData::factory($user);
|
||||||
//$projects = $request->user->getAllPermissions();
|
|
||||||
//print_r($request->user->permissions);
|
$false = Pluf_DB_BooleanToDb(false, $db);
|
||||||
//print_r($projects[0]);
|
$sql_results = $db->select(
|
||||||
//$projects = array();
|
'SELECT id FROM '.$db->pfx.'idf_projects '.
|
||||||
//foreach (IDF_Views::getProjects($request->user) as $project) {
|
'WHERE '.$db->qn('private').'='.$false
|
||||||
// $projects[] = $project;
|
);
|
||||||
//}
|
|
||||||
$projects = IDF_Views::getProjects($request->user);
|
$ids = array();
|
||||||
//print_r($projects);
|
foreach ($sql_results as $id) {
|
||||||
return Pluf_Shortcuts_RenderToResponse('idf/user/public.html',
|
$ids[] = $id['id'];
|
||||||
|
}
|
||||||
|
$f_sql = new Pluf_SQL('owner=%s AND project IN (' . implode(', ', $ids) . ' )', array($user->id));
|
||||||
|
|
||||||
|
$pag = new Pluf_Paginator(new IDF_Issue());
|
||||||
|
$pag->class = 'recent-issues';
|
||||||
|
$pag->item_extra_props = array('current_user' => $request->user);
|
||||||
|
$pag->summary = __('This table shows the open issues.');
|
||||||
|
$pag->forced_where = $f_sql;
|
||||||
|
$pag->action = 'idf_dashboard';
|
||||||
|
$pag->sort_order = array('modif_dtime', 'ASC'); // will be reverted
|
||||||
|
$pag->sort_reverse_order = array('modif_dtime');
|
||||||
|
$list_display = array(
|
||||||
|
'id' => __('Id'),
|
||||||
|
array('project', 'Pluf_Paginator_FkToString', __('Project')),
|
||||||
|
array('summary', 'IDF_Views_IssueSummaryAndLabels', __('Summary')),
|
||||||
|
array('status', 'IDF_Views_Issue_ShowStatus', __('Status')),
|
||||||
|
array('modif_dtime', 'Pluf_Paginator_DateAgo', __('Last Updated')),
|
||||||
|
);
|
||||||
|
$pag->configure($list_display, array(), array('status', 'modif_dtime'));
|
||||||
|
$pag->items_per_page = 10;
|
||||||
|
$pag->no_results_text = __('This user has no issues assigned to them!');
|
||||||
|
$pag->setFromRequest($request);
|
||||||
|
|
||||||
|
$projects = IDF_Views::getOwnedProjects($user);
|
||||||
|
return Pluf_Shortcuts_RenderToResponse('idf/user/public.html',
|
||||||
array('page_title' => (string) $user,
|
array('page_title' => (string) $user,
|
||||||
'member' => $user,
|
'member' => $user,
|
||||||
'user_data' => $user_data,
|
'user_data' => $user_data,
|
||||||
'projects' => $projects
|
'projects' => $projects,
|
||||||
|
'issues' => $pag
|
||||||
),
|
),
|
||||||
$request);
|
$request);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,12 @@ $ctl[] = array('regex' => '#^/dashboard/$#',
|
|||||||
'method' => 'dashboard',
|
'method' => 'dashboard',
|
||||||
'name' => 'idf_dashboard');
|
'name' => 'idf_dashboard');
|
||||||
|
|
||||||
|
$ctl[] = array('regex' => '#^/requestproject/$#',
|
||||||
|
'base' => $base,
|
||||||
|
'model' => 'IDF_Views_User',
|
||||||
|
'method' => 'requestproject',
|
||||||
|
'name' => 'idf_requestproject');
|
||||||
|
|
||||||
$ctl[] = array('regex' => '#^/dashboard/submitted/$#',
|
$ctl[] = array('regex' => '#^/dashboard/submitted/$#',
|
||||||
'base' => $base,
|
'base' => $base,
|
||||||
'model' => 'IDF_Views_User',
|
'model' => 'IDF_Views_User',
|
||||||
@ -503,6 +509,16 @@ $ctl[] = array('regex' => '#^/admin/projects/create/$#',
|
|||||||
'model' => 'IDF_Views_Admin',
|
'model' => 'IDF_Views_Admin',
|
||||||
'method' => 'projectCreate');
|
'method' => 'projectCreate');
|
||||||
|
|
||||||
|
$ctl[] = array('regex' => '#^/admin/projects/createrequest/$#',
|
||||||
|
'base' => $base,
|
||||||
|
'model' => 'IDF_Views_Admin',
|
||||||
|
'method' => 'projectRequestCreate');
|
||||||
|
|
||||||
|
$ctl[] = array('regex' => '#^/admin/projects/createrequest/(\d+/)?$#',
|
||||||
|
'base' => $base,
|
||||||
|
'model' => 'IDF_Views_Admin',
|
||||||
|
'method' => 'projectRequestCreate');
|
||||||
|
|
||||||
$ctl[] = array('regex' => '#^/admin/projects/(\d+)/delete/$#',
|
$ctl[] = array('regex' => '#^/admin/projects/(\d+)/delete/$#',
|
||||||
'base' => $base,
|
'base' => $base,
|
||||||
'model' => 'IDF_Views_Admin',
|
'model' => 'IDF_Views_Admin',
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
<a href="{url 'IDF_Views_Admin::forge'}"{block tabforge}{/block}>{trans 'Forge'}</a>
|
<a href="{url 'IDF_Views_Admin::forge'}"{block tabforge}{/block}>{trans 'Forge'}</a>
|
||||||
<a href="{url 'IDF_Views_Admin::projects'}"{block tabprojects}{/block}>{trans 'Projects'}</a>
|
<a href="{url 'IDF_Views_Admin::projects'}"{block tabprojects}{/block}>{trans 'Projects'}</a>
|
||||||
<a href="{url 'IDF_Views_Admin::users'}"{block tabusers}{/block}>{trans 'People'}</a>
|
<a href="{url 'IDF_Views_Admin::users'}"{block tabusers}{/block}>{trans 'People'}</a>
|
||||||
|
<a href="{url 'IDF_Views_Admin::projectRequestCreate'}"{block request}{/block}>Approve Repo</a>
|
||||||
{if $usherConfigured}
|
{if $usherConfigured}
|
||||||
<a href="{url 'IDF_Views_Admin::usher'}"{block tabusher}{/block}>{trans 'Usher'}</a>
|
<a href="{url 'IDF_Views_Admin::usher'}"{block tabusher}{/block}>{trans 'Usher'}</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
{if !$user.isAnonymous()}
|
{if !$user.isAnonymous()}
|
||||||
{aurl 'url', 'idf_dashboard'}
|
{aurl 'url', 'idf_dashboard'}
|
||||||
<li>{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans}
|
<li>{blocktrans}Welcome, <strong><a class="userw" href="{$url}">{$user}</a></strong>.{/blocktrans}
|
||||||
<a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a></li>{else}<li>
|
<a href="{url 'IDF_Views::logout'}">{trans 'Sign Out'}</a></li>
|
||||||
|
<li><a href="{url 'IDF_Views_User::requestproject'}">Request Project</a></li>
|
||||||
|
{else}
|
||||||
<a href="{url 'IDF_Views::login'}">{trans 'Sign in or create your account'}</a></li>
|
<a href="{url 'IDF_Views::login'}">{trans 'Sign in or create your account'}</a></li>
|
||||||
{/if}{if $customForgePageEnabled}
|
{/if}{if $customForgePageEnabled}
|
||||||
<li><a href="{url 'IDF_Views::index'}">{trans 'Home'}</a></li>
|
<li><a href="{url 'IDF_Views::index'}">{trans 'Home'}</a></li>
|
||||||
|
@ -56,6 +56,8 @@ Projects:
|
|||||||
{/if}
|
{/if}
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</table>
|
</table>
|
||||||
|
Issues user is working on:<br/><br/>
|
||||||
|
{$issues.render}
|
||||||
{/block}
|
{/block}
|
||||||
{block context}
|
{block context}
|
||||||
<div class="issue-submit-info">
|
<div class="issue-submit-info">
|
||||||
|
@ -94,7 +94,7 @@ class Pluf_Cache_Apc extends Pluf_Cache
|
|||||||
public function get($key, $default=null)
|
public function get($key, $default=null)
|
||||||
{
|
{
|
||||||
$success = false;
|
$success = false;
|
||||||
$value = apc_fetch($this->keyprefix.$key, &$success);
|
$value = apc_fetch($this->keyprefix.$key, $success);
|
||||||
if (!$success) return $default;
|
if (!$success) return $default;
|
||||||
if ($this->compress) $value = gzinflate($value);
|
if ($this->compress) $value = gzinflate($value);
|
||||||
return unserialize($value);
|
return unserialize($value);
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
*/
|
*/
|
||||||
class Pluf_Search_ResultSet implements Iterator
|
class Pluf_Search_ResultSet implements Iterator
|
||||||
{
|
{
|
||||||
protected $results = array();
|
// Needs to be public for using in Wiki when there are over 100 pages
|
||||||
|
public $results = array();
|
||||||
|
|
||||||
public function __construct($search_res)
|
public function __construct($search_res)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user