Fix #227 : Import/Export users

This commit is contained in:
Romain Neutron
2012-01-16 19:30:12 +01:00
parent 81b8797b66
commit c813082407
3 changed files with 125 additions and 2 deletions

View File

@@ -200,6 +200,71 @@ class Controller_Admin_Users implements ControllerProviderInterface
}
);
$controllers->post('/search/export/', function() use ($app)
{
$request = $app['request'];
$users = new module_admin_route_users($request);
$template = 'admin/users.html';
$twig = new supertwig();
$twig->addFilter(array('floor' => 'floor'));
$twig->addFilter(array('getDate' => 'phraseadate::getDate'));
$results = $users->export($request);
$userTable = array(
array(
'ID',
'Login',
'Last Name',
'First Name',
'E-Mail',
'Created',
'Updated',
'Address',
'City',
'Zip',
'Country',
'Phone',
'Fax',
'Job',
'Company',
'Position'
)
);
foreach ($results as $user)
{
/* @var $user \User_Adapter */
$userTable[] = array(
$user->get_id(),
$user->get_login(),
$user->get_lastname(),
$user->get_firstname(),
$user->get_email(),
$user->get_creation_date()->format(DATE_ATOM),
$user->get_modification_date()->format(DATE_ATOM),
$user->get_address(),
$user->get_city(),
$user->get_zipcode(),
$user->get_country(),
$user->get_tel(),
$user->get_fax(),
$user->get_job(),
$user->get_company(),
$user->get_position()
);
}
$CSVDatas = format::arr_to_csv($userTable);
$response = new Response($CSVDatas, 200, array('Content-Type' => 'text/plain'));
$response->headers->set('Content-Disposition', 'attachment; filename=export.txt');
return $response;
}
);
$controllers->post('/apply_template/', function() use ($app)
{
$request = $app['request'];

View File

@@ -43,6 +43,43 @@ class module_admin_route_users
return $this;
}
public function export(Symfony\Component\HttpFoundation\Request $request)
{
$appbox = appbox::get_instance();
$session = $appbox->get_session();
$offset_start = (int) $request->get('offset_start');
$offset_start = $offset_start < 0 ? 0 : $offset_start;
$this->query_parms = array(
'inactives' => $request->get('inactives')
, 'like_field' => $request->get('like_field')
, 'like_value' => $request->get('like_value')
, 'sbas_id' => $request->get('sbas_id')
, 'base_id' => $request->get('base_id')
, 'srt' => $request->get("srt", User_Query::SORT_CREATIONDATE)
, 'ord' => $request->get("ord", User_Query::ORD_DESC)
, 'offset_start' => 0
);
$user = User_Adapter::getInstance($session->get_usr_id(), $appbox);
$query = new User_Query($appbox);
if (is_array($this->query_parms['base_id']))
$query->on_base_ids($this->query_parms['base_id']);
elseif (is_array($this->query_parms['sbas_id']))
$query->on_sbas_ids($this->query_parms['sbas_id']);
$this->results = $query->sort_by($this->query_parms["srt"], $this->query_parms["ord"])
->like($this->query_parms['like_field'], $this->query_parms['like_value'])
->get_inactives($this->query_parms['inactives'])
->include_templates(false)
->on_bases_where_i_am($user->ACL(), array('canadmin'))
->execute();
return $this->results->get_results();
}
public function search(Symfony\Component\HttpFoundation\Request $request)
{
$appbox = appbox::get_instance();

View File

@@ -186,6 +186,23 @@
</tbody>
</table>
<form id="export_form" method="post" target="exportwindow" action="/admin/users/search/export/">
<input name="srt" value="{{parm['srt']}}" type="hidden" />
<input name="ord" value="{{parm.ord}}" type="hidden" />
<input name="act" value="{{parm.act}}" type="hidden" />
{% for sbas_id in parm.sbas_id %}
<input name="sbas_id[]" value="{{sbas_id}}" type="hidden" />
{% endfor %}
{% for base_id in parm.base_id %}
<input name="base_id[]" value="{{base_id}}" type="hidden" />
{% endfor %}
<input name="usr_ids" value="{{parm.usr_ids}}" type="hidden" />
<input name="like_value" value="{{parm.like_value}}" type="hidden" />
<input name="like_field" value="{{parm.like_field}}" type="hidden" />
<input name="inactives" value="{{parm.inactives}}" type="hidden" />
</form>
<form id="users_page_form" method="post" target="_self" action="/admin/users/search/">
{{users.get_total}} resultats
@@ -274,6 +291,10 @@
window.showModalDialog ('/admin/import0.php?rand='+Math.random(),myObj, 'dialogWidth:550px;dialogHeight:330px;center:yes;help:no;status:no;scrollbars:no' );
}
function exportlist()
{
$('#export_form').submit();
}
</script>
</div>