public function submitStatusBitAction(Request $request, $databox_id, $bit) { if (!$this->getAclForUser()->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $this->app->abort(403); } $properties = ['searchable' => $request->request->get('searchable') ? '1' : '0', 'printable' => $request->request->get('printable') ? '1' : '0', 'name' => $request->request->get('name', ''), 'labelon' => $request->request->get('label_on', ''), 'labeloff' => $request->request->get('label_off', ''), 'labels_on' => $request->request->get('labels_on', []), 'labels_off' => $request->request->get('labels_off', [])]; $databox = $this->findDataboxById($databox_id); /** @var StatusStructureProviderInterface $statusProvider */ $statusProvider = $this->app['status.provider']; $statusProvider->updateStatus($databox->getStatusStructure(), $bit, $properties); if (null !== $request->request->get('delete_icon_off')) { \databox_status::deleteIcon($this->app, $databox_id, $bit, 'off'); } if (null !== ($file = $request->files->get('image_off'))) { try { \databox_status::updateIcon($this->app, $databox_id, $bit, 'off', $file); } catch (AccessDeniedHttpException $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'rights']); } catch (\Exception_InvalidArgument $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } catch (\Exception_Upload_FileTooBig $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'too-big']); } catch (\Exception_Upload_Error $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'upload-error']); } catch (\Exception_Upload_CannotWriteFile $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'wright-error']); } catch (\Exception $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } } if (null !== $request->request->get('delete_icon_on')) { \databox_status::deleteIcon($this->app, $databox_id, $bit, 'on'); } if (null !== ($file = $request->files->get('image_on'))) { try { \databox_status::updateIcon($this->app, $databox_id, $bit, 'on', $file); } catch (AccessDeniedHttpException $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'rights']); } catch (\Exception_InvalidArgument $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } catch (\Exception_Upload_FileTooBig $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'too-big']); } catch (\Exception_Upload_Error $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'upload-error']); } catch (\Exception_Upload_CannotWriteFile $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'wright-error']); } catch (\Exception $e) { return $this->app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } } return $this->app->redirectPath('database_display_statusbit', ['databox_id' => $databox_id, 'success' => 1]); }
public function connect(Application $app) { $app['controller.admin.root'] = $this; $controllers = $app['controllers_factory']; $app['firewall']->addMandatoryAuthentication($controllers); $controllers->before(function (Request $request) use($app) { $app['firewall']->requireAccessToModule('admin'); }); $controllers->get('/', function (Application $app, Request $request) { try { \Session_Logger::updateClientInfos($app, 3); } catch (SessionNotFound $e) { return $app->redirectPath('logout'); } $section = $request->query->get('section', false); $available = ['connected', 'registrations', 'taskmanager', 'base', 'bases', 'collection', 'user', 'users']; $feature = 'connected'; $featured = false; $position = explode(':', $section); if (count($position) > 0) { if (in_array($position[0], $available)) { $feature = $position[0]; if (isset($position[1])) { $featured = $position[1]; } } } $databoxes = $off_databoxes = []; foreach ($app['phraseanet.appbox']->get_databoxes() as $databox) { try { if (!$app['acl']->get($app['authentication']->getUser())->has_access_to_sbas($databox->get_sbas_id())) { continue; } $databox->get_connection(); } catch (\Exception $e) { $off_databoxes[] = $databox; continue; } $databoxes[] = $databox; } $params = ['feature' => $feature, 'featured' => $featured, 'databoxes' => $databoxes, 'off_databoxes' => $off_databoxes]; return $app['twig']->render('admin/index.html.twig', ['module' => 'admin', 'events' => $app['events-manager'], 'module_name' => 'Admin', 'notice' => $request->query->get("notice"), 'feature' => $feature, 'featured' => $featured, 'databoxes' => $databoxes, 'off_databoxes' => $off_databoxes, 'tree' => $app['twig']->render('admin/tree.html.twig', $params)]); })->bind('admin'); $controllers->get('/tree/', function (Application $app, Request $request) { try { \Session_Logger::updateClientInfos($app, 3); } catch (SessionNotFound $e) { return $app->redirectPath('logout'); } $available = ['connected', 'registrations', 'taskmanager', 'base', 'bases', 'collection', 'user', 'users']; $feature = 'connected'; $featured = false; $position = explode(':', $request->query->get('position', false)); if (count($position) > 0) { if (in_array($position[0], $available)) { $feature = $position[0]; if (isset($position[1])) { $featured = $position[1]; } } } $databoxes = $off_databoxes = []; foreach ($app['phraseanet.appbox']->get_databoxes() as $databox) { try { if (!$app['acl']->get($app['authentication']->getUser())->has_access_to_sbas($databox->get_sbas_id())) { continue; } $databox->get_connection(); } catch (\Exception $e) { $off_databoxes[] = $databox; continue; } $databoxes[] = $databox; } $params = ['feature' => $feature, 'featured' => $featured, 'databoxes' => $databoxes, 'off_databoxes' => $off_databoxes]; return $app['twig']->render('admin/tree.html.twig', $params); })->bind('admin_display_tree'); $controllers->get('/test-paths/', function (Application $app, Request $request) { if (!$request->isXmlHttpRequest() || !array_key_exists($request->getMimeType('json'), array_flip($request->getAcceptableContentTypes()))) { $app->abort(400, $app->trans('Bad request format, only JSON is allowed')); } if (0 !== count($tests = $request->query->get('tests', []))) { $app->abort(400, $app->trans('Missing tests parameter')); } if (null !== ($path = $request->query->get('path'))) { $app->abort(400, $app->trans('Missing path parameter')); } foreach ($tests as $test) { switch ($test) { case 'writeable': if (!is_writable($path)) { $result = false; } break; case 'readable': default: if (!is_readable($path)) { $result = true; } break; } } return $app->json(['results' => $result]); })->bind('admin_test_paths'); $controllers->get('/structure/{databox_id}/', function (Application $app, Request $request, $databox_id) { if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $app->abort(403); } $databox = $app['phraseanet.appbox']->get_databox((int) $databox_id); $structure = $databox->get_structure(); $errors = \databox::get_structure_errors($app['translator'], $structure); if ($updateOk = !!$request->query->get('success', false)) { $updateOk = true; } if (false !== ($errorsStructure = $request->query->get('error', false))) { $errorsStructure = true; } return $app['twig']->render('admin/structure.html.twig', ['databox' => $databox, 'errors' => $errors, 'structure' => $structure, 'errorsStructure' => $errorsStructure, 'updateOk' => $updateOk]); })->assert('databox_id', '\\d+')->bind('database_display_stucture'); $controllers->post('/structure/{databox_id}/', function (Application $app, Request $request, $databox_id) { if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $app->abort(403); } if (null === ($structure = $request->request->get('structure'))) { $app->abort(400, $app->trans('Missing "structure" parameter')); } $errors = \databox::get_structure_errors($app['translator'], $structure); $domst = new \DOMDocument('1.0', 'UTF-8'); $domst->preserveWhiteSpace = false; $domst->formatOutput = true; if (count($errors) == 0 && $domst->loadXML($structure)) { $databox = $app['phraseanet.appbox']->get_databox($databox_id); $databox->saveStructure($domst); return $app->redirectPath('database_display_stucture', ['databox_id' => $databox_id, 'success' => 1]); } else { return $app->redirectPath('database_display_stucture', ['databox_id' => $databox_id, 'success' => 0, 'error' => 'struct']); } })->assert('databox_id', '\\d+')->bind('database_submit_stucture'); $controllers->get('/statusbit/{databox_id}/', function (Application $app, Request $request, $databox_id) { if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $app->abort(403); } return $app['twig']->render('admin/statusbit.html.twig', ['databox' => $app['phraseanet.appbox']->get_databox($databox_id)]); })->assert('databox_id', '\\d+')->bind('database_display_statusbit'); $controllers->get('/statusbit/{databox_id}/status/{bit}/', function (Application $app, Request $request, $databox_id, $bit) { if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $app->abort(403); } $databox = $app['phraseanet.appbox']->get_databox($databox_id); $status = $databox->get_statusbits(); switch ($errorMsg = $request->query->get('error')) { case 'rights': $errorMsg = $app->trans('You do not enough rights to update status'); break; case 'too-big': $errorMsg = $app->trans('File is too big : 64k max'); break; case 'upload-error': $errorMsg = $app->trans('Status icon upload failed : upload error'); break; case 'wright-error': $errorMsg = $app->trans('Status icon upload failed : can not write on disk'); break; case 'unknow-error': $errorMsg = $app->trans('Something wrong happend'); break; } if (isset($status[$bit])) { $status = $status[$bit]; } else { $status = ["labeloff" => '', "labelon" => '', "img_off" => '', "img_on" => '', "path_off" => '', "path_on" => '', "searchable" => false, "printable" => false]; foreach ($app['locales.available'] as $code => $language) { $status['labels_on'][$code] = null; $status['labels_off'][$code] = null; } } return $app['twig']->render('admin/statusbit/edit.html.twig', ['status' => $status, 'errorMsg' => $errorMsg]); })->assert('databox_id', '\\d+')->assert('bit', '\\d+')->bind('database_display_statusbit_form'); $controllers->post('/statusbit/{databox_id}/status/{bit}/delete/', function (Application $app, Request $request, $databox_id, $bit) { if (!$request->isXmlHttpRequest() || !array_key_exists($request->getMimeType('json'), array_flip($request->getAcceptableContentTypes()))) { $app->abort(400, $app->trans('Bad request format, only JSON is allowed')); } if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $app->abort(403); } $error = false; try { \databox_status::deleteStatus($app, $app['phraseanet.appbox']->get_databox($databox_id), $bit); } catch (\Exception $e) { $error = true; } return $app->json(['success' => !$error]); })->bind('admin_statusbit_delete')->assert('databox_id', '\\d+')->assert('bit', '\\d+'); $controllers->post('/statusbit/{databox_id}/status/{bit}/', function (Application $app, Request $request, $databox_id, $bit) { if (!$app['acl']->get($app['authentication']->getUser())->has_right_on_sbas($databox_id, 'bas_modify_struct')) { $app->abort(403); } $properties = ['searchable' => $request->request->get('searchable') ? '1' : '0', 'printable' => $request->request->get('printable') ? '1' : '0', 'name' => $request->request->get('name', ''), 'labelon' => $request->request->get('label_on', ''), 'labeloff' => $request->request->get('label_off', ''), 'labels_on' => $request->request->get('labels_on', []), 'labels_off' => $request->request->get('labels_off', [])]; \databox_status::updateStatus($app, $databox_id, $bit, $properties); if (null !== $request->request->get('delete_icon_off')) { \databox_status::deleteIcon($app, $databox_id, $bit, 'off'); } if (null !== ($file = $request->files->get('image_off'))) { try { \databox_status::updateIcon($app, $databox_id, $bit, 'off', $file); } catch (AccessDeniedHttpException $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'rights']); } catch (\Exception_InvalidArgument $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } catch (\Exception_Upload_FileTooBig $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'too-big']); } catch (\Exception_Upload_Error $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'upload-error']); } catch (\Exception_Upload_CannotWriteFile $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'wright-error']); } catch (\Exception $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } } if (null !== $request->request->get('delete_icon_on')) { \databox_status::deleteIcon($app, $databox_id, $bit, 'on'); } if (null !== ($file = $request->files->get('image_on'))) { try { \databox_status::updateIcon($app, $databox_id, $bit, 'on', $file); } catch (AccessDeniedHttpException $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'rights']); } catch (\Exception_InvalidArgument $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } catch (\Exception_Upload_FileTooBig $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'too-big']); } catch (\Exception_Upload_Error $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'upload-error']); } catch (\Exception_Upload_CannotWriteFile $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'wright-error']); } catch (\Exception $e) { return $app->redirectPath('database_display_statusbit_form', ['databox_id' => $databox_id, 'bit' => $bit, 'error' => 'unknow-error']); } } return $app->redirectPath('database_display_statusbit', ['databox_id' => $databox_id, 'success' => 1]); })->assert('databox_id', '\\d+')->assert('bit', '\\d+')->bind('database_submit_statusbit'); return $controllers; }