<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ UserEditor
*
* @package energine
* @author dr.Pavka
* @copyright ColoCall 2006
* @version $Id: UserEditor.class.php,v 1.9 2007/12/29 16:39:40 pavka Exp $
*/
//require_once('core/modules/share/components/Grid.class.php');
/**
* ÐлаÑÑ - ÑедакÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑелей
*
* @package energine
* @subpackage user
*/
class UserEditor extends Grid {
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @return void
*/
public function __construct($name, $module, Document $document, array $params = null) {
parent::__construct($name, $module, $document, $params);
$this->setTableName('user_users');
$this->setTitle($this->translate('TXT_USER_EDITOR'));
}
/**
* ÐеÑеопÑеделеннÑй ÑодиÑелÑÑкий меÑод
* пÑовеÑÑÐµÑ Ð° не пÑÑаемÑÑ Ð»Ð¸ Ð¼Ñ ÑдалиÑÑ ÑекÑÑего полÑзоваÑелÑ
*
* @return boolean
* @access public
*/
public function deleteData($id) {
//еÑли Ð¼Ñ Ð¿ÑÑаемÑÑ ÑдалиÑÑ ÑекÑÑего полÑзоваÑелÑ
//генеÑим оÑибкÑ
if ($this->document->user->getID() == $id) {
throw new SystemException('ERR_CANT_DELETE_YOURSELF', SystemException::ERR_CRITICAL);
}
parent::deleteData($id);
}
/**
* СоÑ
Ñанение даннÑÑ
о ÑолÑÑ
полÑзоваÑелÑ
*
* @return boolean
* @access protected
*/
protected function saveData() {
$result = parent::saveData();
$UID = (is_int($result))?$result:current($this->getFilter());
$this->dbh->modify(QAL::DELETE, 'user_user_groups', null, array('u_id'=>$UID));
if(isset($_POST['group_id']) && is_array($_POST['group_id']))
foreach ($_POST['group_id'] as $groupID) {
$this->dbh->modify(QAL::INSERT, 'user_user_groups',array('u_id'=>$UID, 'group_id'=>$groupID));
}
return $result;
}
/**
* ÐÐ»Ñ Ð¼ÐµÑода ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑбиÑаеÑÑÑ Ð¿Ð°ÑолÑ
*
* @return array
* @access protected
*/
protected function loadData() {
$result = parent::loadData();
if ($this->getAction() == 'save') {
$result[0]['u_password'] = sha1($result[0]['u_password']);
}
elseif ($this->getAction() == 'getRawData' && $result) {
$result = array_map(array($this, 'printUserGroups'), $result);
}
elseif ($this->getAction() == 'edit') {
$result[0]['u_password'] = '';
}
return $result;
}
/**
* Callback меÑод вÑзÑваÑÑийÑÑ Ð¿Ñи загÑÑзке даннÑÑ
* ÐобавлÑÐµÑ Ðº маÑÑÐ¸Ð²Ñ ÑÑÑÐ¾ÐºÑ Ñ Ð¿ÐµÑеÑнем гÑÑпп в коÑоÑÑе вÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ
*
* @return array
* @access private
*/
private function printUserGroups($row) {
$userGroup = UserGroup::getInstance();
$userGroupIDs = $userGroup->getUserGroups($row['u_id']);
$userGroupName = array();
foreach ($userGroupIDs as $UGID) {
$groupInfo = $userGroup->getInfo($UGID);
$userGroupName[] = $groupInfo['group_name'];
}
$row['u_group'] = implode(', ', $userGroupName);
return $row;
}
/**
* ÐÐ»Ñ Ð¼ÐµÑодов add и edit добавлÑеÑÑÑ Ð¿Ð¾Ð»Ðµ Ñоли
*
* @return DataDescription
* @access protected
*/
protected function createDataDescription() {
$result = parent::createDataDescription();
if ($this->getType() != self::COMPONENT_TYPE_LIST) {
foreach ($result as $fieldDescription) {
$fieldDescription->addProperty('tabName', $this->translate('TXT_USER_EDITOR'));
}
$result->getFieldDescriptionByName('u_name')->setType(FieldDescription::FIELD_TYPE_EMAIL);
if ($fd = $result->getFieldDescriptionByName('u_is_active')) {
$result->removeFieldDescription($fd);
}
$fd = new FieldDescription('group_id');
$fd->setSystemType(FieldDescription::FIELD_TYPE_INT);
$fd->setType(FieldDescription::FIELD_TYPE_MULTI);
$fd->addProperty('tabName', $this->translate('TXT_USER_GROUPS'));
$fd->addProperty('customField', true);
$data = $this->dbh->select('user_groups', array('group_id', 'group_name'));
$fd->loadAvailableValues($data, 'group_id', 'group_name');
$result->addFieldDescription($fd);
}
return $result;
}
/**
* ÐÐ»Ñ Ð¼ÐµÑодов add и edit добавлÑеÑÑÑ Ð¸Ð½Ñо о Ñоли
*
* @return Data
* @access protected
*/
protected function createData() {
$result = parent::createData();
$id = $this->getFilter();
$id = (!empty($id) && is_array($id))?current($id):false;
if ($this->getType() != self::COMPONENT_TYPE_LIST && $id) {
//Ñоздаем пеÑеменнÑÑ ÑодеÑжаÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикÑоÑÑ Ð³ÑÑпп в коÑоÑÑе вÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ
$f = new Field('group_id');
$result->addField($f);
$data = $this->dbh->select('user_user_groups', array('group_id'), array('u_id'=>$id));
if(is_array($data)) {
$f->addRowData(array_keys(convertDBResult($data, 'group_id', true)));
}
else {
$f->setData(array());
}
}
return $result;
}
/**
* ÐобавлÑем Ñаб
*
* @return DOMNode
* @access public
*/
public function build() {
if ($this->getType() != self::COMPONENT_TYPE_LIST) {
$this->addTab($this->buildTab($this->translate('TXT_USER_GROUPS')));
}
$result = parent::build();
return $result;
}
}