Files
2025-03-12 17:06:23 +01:00

246 lines
6.4 KiB
PHP

<?php
/**
* SOTESHOP/stAuthUsers
*
* Ten plik należy do aplikacji stAuthUsers opartej na licencji (Open License SOTE) Otwarta Licencja SOTE.
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stAuthUsers
* @subpackage actions
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/open (Open License SOTE) Otwarta Licencja SOTE
* @version $Id: actions.class.php 251 2009-03-30 11:35:06Z marek $
*/
class sfGuardUserActions extends autosfGuardUserActions
{
protected function addFiltersCriteria($c)
{
parent::addFiltersCriteria($c);
$group = sfGuardGroupPeer::retrieveByName('admin');
$c->addJoin(sfGuardUserPeer::ID, sfGuardUserGroupPeer::USER_ID);
$c->add(sfGuardUserGroupPeer::GROUP_ID, $group->getId());
}
public function executeDelete()
{
if (!$this->getUser()->isSuperAdmin())
{
$this->setFlash('warning', 'Nie posiadasz uprawnień do wykonywania tej operacji');
return $this->redirect('sfGuardUser/list?page='.$this->getRequestParameter('page', 1));
}
if ($this->getRequestParameter('sf_guard_user[selected]['.$this->getUser()->getGuardUserId().']') !== null)
{
$this->setFlash('warning', 'Nie możesz usunąć własnego konta');
return $this->redirect('sfGuardUser/list?page='.$this->getRequestParameter('page', 1));
}
return parent::executeDelete();
}
/**
* Przeciążenie zapisu - automatyczne nadawanie grupy
*
* @param sfGuardUser $sf_guard_user Użytkownik
*/
protected function savesfGuardUser($sf_guard_user)
{
if (!$this->getUser()->isSuperAdmin())
{
$sf_guard_user->setIsSuperAdmin(false);
}
parent::savesfGuardUser($sf_guard_user);
if ($this->getUser()->isSuperAdmin())
{
$this->saveGroups($sf_guard_user);
$this->savePermissions($sf_guard_user);
$this->saveModulePermissions($sf_guard_user);
}
$this->saveUpdateCredentials();
}
public function validateList()
{
if (!$this->getUser()->isSuperAdmin())
{
return $this->redirect('sfGuardAuth/secure');
}
return true;
}
public function validateEdit()
{
if (!$this->getUser()->isSuperAdmin() && $this->getUser()->getGuardUserId() != $this->getRequest()->getParameter('id'))
{
return $this->redirect('sfGuardAuth/secure');
}
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
if (!$this->getRequest()->getParameter('id'))
{
$error_exists = false;
$i18n = $this->getContext()->getI18N();
if (!$this->getRequestParameter('sf_guard_user[password]'))
{
$this->getRequest()->setError('sf_guard_user{password}', $i18n->__('Proszę podać hasło.'));
$error_exists = true;
}
if (!$this->getRequestParameter('sf_guard_user[password_bis]'))
{
$this->getRequest()->setError('sf_guard_user{password_bis}', $i18n->__('Proszę podać hasło.'));
$error_exists = true;
}
return !$error_exists;
}
}
return true;
}
protected function saveModulePermissions(sfGuardUser $user)
{
$user_id = $user->getId();
sfGuardUserModulePermissionPeer::doDelete($user_id);
$permission = new sfGuardUserModulePermission();
$permission->setId($user_id);
$permissions = $this->getRequestParameter('module_permission');
$permission->setPermissions($permissions);
$permission->save();
}
protected function saveGroups(sfGuardUser $user)
{
$user_id = $user->getId();
$c = new Criteria();
$c->add(sfGuardUserGroupPeer::USER_ID, $user_id);
sfGuardUserGroupPeer::doDelete($c);
$groups = $this->getRequestParameter('group');
foreach ($groups as $id)
{
$group = new sfGuardUserGroup();
$group->setUserId($user_id);
$group->setGroupId($id);
$group->save();
}
$user->addGroupByName('admin');
}
protected function savePermissions(sfGuardUser $user)
{
$user_id = $user->getId();
$c = new Criteria();
$c->add(sfGuardUserPermissionPeer::USER_ID, $user_id);
sfGuardUserPermissionPeer::doDelete($c);
$permissions = $this->getRequestParameter('permission');
foreach ($permissions as $id)
{
$permission = new sfGuardUserPermission();
$permission->setUserId($user_id);
$permission->setPermissionId($id);
$permission->save();
}
}
protected function saveUpdateCredentials()
{
$config = stConfig::getInstance('stAuth');
$permission = sfGuardPermissionPeer::retrieveByName('update');
$group_ids = array();
$c = new Criteria();
$c->addSelectColumn(sfGuardGroupPeer::ID);
$c->addJoin(sfGuardGroupPeer::ID, sfGuardGroupPermissionPeer::GROUP_ID);
$c->add(sfGuardGroupPermissionPeer::PERMISSION_ID, $permission->getId());
$rs = sfGuardGroupPermissionPeer::doSelectRs($c);
while($rs->next())
{
$group_ids[] = $rs->getInt(1);
}
$c = new Criteria();
$c->addJoin(sfGuardUserPeer::ID, sfGuardUserPermissionPeer::USER_ID, Criteria::LEFT_JOIN);
if ($group_ids)
{
$c->addJoin(sfGuardUserPeer::ID, sfGuardUserGroupPeer::USER_ID, Criteria::LEFT_JOIN);
}
$criterion = $c->getNewCriterion(sfGuardUserPeer::IS_SUPER_ADMIN, true);
$criterion->addOr($c->getNewCriterion(sfGuardUserPermissionPeer::PERMISSION_ID, $permission->getId()));
if ($group_ids)
{
$criterion->addOr($c->getNewCriterion(sfGuardUserGroupPeer::GROUP_ID, $group_ids, Criteria::IN));
}
$c->add($criterion);
$c->addGroupByColumn(sfGuardUserPeer::ID);
$users = sfGuardUserPeer::doSelect($c);
$credentials = array();
foreach ($users as $user)
{
$credentials[] = array('username' => $user->getUsername(), 'salt' => $user->getSalt(), 'password' => $user->getPassword());
}
$config->set('users', $credentials);
$config->save();
}
}