00001 <?php
00002
00003 require_once( 'oxerptype.php');
00004 require_once( realpath(dirname(__FILE__).'/../oxerpcompatability.php'));
00005
00006 class oxERPType_User extends oxERPType
00007 {
00008 static $CAN_NOT_IMPORT_SALT = 'ERROR: Can not import user password salt to shop config.';
00009 protected $_aFieldListVersions = array(
00010 '1' => array(
00011 'OXID' => 'OXID',
00012 'OXACTIV' => 'OXACTIV',
00013 'OXRIGHTS' => 'OXRIGHTS',
00014 'OXSHOPID' => 'OXSHOPID',
00015 'OXUSERNAME' => 'OXUSERNAME',
00016 'OXPASSWORD' => 'OXPASSWORD',
00017 'OXCUSTNR' => 'OXCUSTNR',
00018 'OXUSTID' => 'OXUSTID',
00019 'OXCOMPANY' => 'OXCOMPANY',
00020 'OXFNAME' => 'OXFNAME',
00021 'OXLNAME' => 'OXLNAME',
00022 'OXSTREET' => 'OXSTREET',
00023 'OXSTREETNR' => 'OXSTREETNR',
00024 'OXADDINFO' => 'OXADDINFO',
00025 'OXCITY' => 'OXCITY',
00026 'OXCOUNTRY' => 'OXCOUNTRY',
00027 'OXCOUNTRYID' => 'OXCOUNTRYID',
00028 'OXZIP' => 'OXZIP',
00029 'OXFON' => 'OXFON',
00030 'OXFAX' => 'OXFAX',
00031 'OXSAL' => 'OXSAL',
00032 'OXBONI' => 'OXBONI',
00033 'OXCREATE' => 'OXCREATE',
00034 'OXREGISTER' => 'OXREGISTER',
00035 'OXPRIVFON' => 'OXPRIVFON',
00036 'OXMOBFON' => 'OXMOBFON',
00037 'OXBIRTHDATE' => 'OXBIRTHDATE',
00038 'OXURL' => 'OXURL',
00039 'OXBUERGELLASTCHECK' => 'OXBUERGELLASTCHECK',
00040 'OXBUERGELTEXT' => 'OXBUERGELTEXT',
00041 'OXBUERGELADRESSSTATUS' => 'OXBUERGELADRESSSTATUS',
00042 'OXBUERGELADRESSTEXT' => 'OXBUERGELADRESSTEXT',
00043 'OXDISABLEAUTOGRP' => 'OXDISABLEAUTOGRP',
00044 'OXLDAPKEY' => 'OXLDAPKEY',
00045 'OXWRONGLOGINS' => 'OXWRONGLOGINS'
00046 ),
00047 '2' => array(
00048 'OXID' => 'OXID',
00049 'OXACTIVE' => 'OXACTIVE',
00050 'OXRIGHTS' => 'OXRIGHTS',
00051 'OXSHOPID' => 'OXSHOPID',
00052 'OXUSERNAME' => 'OXUSERNAME',
00053 'OXPASSWORD' => 'OXPASSWORD',
00054 'OXCUSTNR' => 'OXCUSTNR',
00055 'OXUSTID' => 'OXUSTID',
00056 'OXUSTIDSTATUS' => 'OXUSTIDSTATUS',
00057 'OXCOMPANY' => 'OXCOMPANY',
00058 'OXFNAME' => 'OXFNAME',
00059 'OXLNAME' => 'OXLNAME',
00060 'OXSTREET' => 'OXSTREET',
00061 'OXSTREETNR' => 'OXSTREETNR',
00062 'OXADDINFO' => 'OXADDINFO',
00063 'OXCITY' => 'OXCITY',
00064 'OXCOUNTRYID' => 'OXCOUNTRYID',
00065 'OXZIP' => 'OXZIP',
00066 'OXFON' => 'OXFON',
00067 'OXFAX' => 'OXFAX',
00068 'OXSAL' => 'OXSAL',
00069 'OXBONI' => 'OXBONI',
00070 'OXCREATE' => 'OXCREATE',
00071 'OXREGISTER' => 'OXREGISTER',
00072 'OXPRIVFON' => 'OXPRIVFON',
00073 'OXMOBFON' => 'OXMOBFON',
00074 'OXBIRTHDATE' => 'OXBIRTHDATE',
00075 'OXURL' => 'OXURL',
00076 'OXDISABLEAUTOGRP' => 'OXDISABLEAUTOGRP',
00077 'OXLDAPKEY' => 'OXLDAPKEY',
00078 'OXWRONGLOGINS' => 'OXWRONGLOGINS',
00079 ),
00080 );
00081
00082 public function __construct()
00083 {
00084 parent::__construct();
00085
00086 $oCompat = oxNew('OXERPCompatability');
00087 if ($oCompat->isPasswordSaltInOxUser() && (oxERPBase::getUsedDbFieldsVersion() < 3)) {
00088
00089 $this->_aFieldList['OXPASSSALT'] = 'OXPASSSALT';
00090 }
00091
00092 $this->_sTableName = 'oxuser';
00093 $this->_sShopObjectName = 'oxuser';
00094 }
00095
00103 public function getSQL( $sWhere, $iLanguage = 0,$iShopID = 1)
00104 {
00105 $myConfig = oxConfig::getInstance();
00106
00107
00108 if( strstr( $sWhere, 'where'))
00109 $sWhere .= ' and ';
00110 else
00111 $sWhere .= ' where ';
00112
00113 $sWhere .= ' oxrights = \'user\'';
00114
00115 if(!$myConfig->getConfigParam('blMallUsers')){
00116 $sWhere .= ' AND oxshopid = \''.$iShopID.'\'';
00117 }
00118
00119 return parent::getSQL( $sWhere, $iLanguage);;
00120 }
00121
00122 public function checkWriteAccess($sOxid)
00123 {
00124 $myConfig = oxConfig::getInstance();
00125
00126 if (!$myConfig->getConfigParam('blMallUsers')) {
00127 parent::checkWriteAccess($sOxid);
00128 }
00129 }
00130
00131 public function getObjectForDeletion( $sId)
00132 {
00133 $myConfig = oxConfig::getInstance();
00134
00135 if( !isset($sId))
00136 throw new Exception( "Missing ID!");
00137
00138 $oUser = oxNew( $this->getShopObjectName(), "core");
00139 if(!$oUser->exists($sId)){
00140 throw new Exception( $this->getShopObjectName(). " " . $sId. " does not exists!");
00141 }
00142
00143
00144 $oUser->Load($sId);
00145
00146
00147 if($oUser->getShopId() != $myConfig->getShopId() && !$myConfig->getConfigParam('blMallUsers'))
00148 throw new Exception( "No right to delete object {$sId} !");
00149
00150
00151 $oUser->setIsDerived(false);
00152 return $oUser;
00153 }
00154
00155 public function getFunctionSuffix()
00156 {
00157 return parent::getFunctionSuffix();
00158 }
00159
00168 protected function getSqlFieldName($sField, $iLanguage = 0, $iShopID = 1)
00169 {
00170 if ('1' == oxERPBase::getUsedDbFieldsVersion()) {
00171 switch ($sField) {
00172 case 'OXACTIV':
00173 return "OXACTIVE as OXACTIV";
00174 case 'OXACTIVFROM':
00175 return "OXACTIVEFROM as OXACTIVEFROM";
00176 case 'OXACTIVTO':
00177 return "OXACTIVETO as OXACTIVTO";
00178 case 'OXCOUNTRY':
00179 return "(select oxtitle from oxcountry where oxcountry.oxid=OXCOUNTRYID limit 1) as OXCOUNTRY";
00180 case 'OXBUERGELLASTCHECK':
00181 return "'0000-00-00 00:00:00' as $sField";
00182 case 'OXBUERGELADRESSSTATUS':
00183 return "'0' as $sField";
00184 case 'OXBUERGELTEXT':
00185 case 'OXBUERGELADRESSTEXT':
00186 return "'' as $sField";
00187 }
00188 }
00189
00190 return parent::getSqlFieldName($sField, $iLanguage, $iShopID);
00191 }
00192
00193
00203 protected function _preAssignObject($oShopObject, $aData, $blAllowCustomShopId)
00204 {
00205 $aData = parent::_preAssignObject($oShopObject, $aData, $blAllowCustomShopId);
00206
00207 $oCompat = oxNew('OXERPCompatability');
00208 if ($oCompat->isPasswordSaltSupported() && (oxERPBase::getUsedDbFieldsVersion() < 3)) {
00209
00210
00211 $aCombo = @explode(':', $aData['OXPASSWORD']);
00212 if (is_array($aCombo) && (3 == count($aCombo)) && (md5($aCombo[0].$aCombo[1]) == $aCombo[2])) {
00213
00214 $aData['OXPASSWORD'] = $aCombo[0];
00215 if ($oCompat->isPasswordSaltInOxUser()) {
00216 $aData['OXPASSSALT'] = $aCombo[1];
00217 } else {
00218 $sConfigSalt = oxConfig::getInstance()->getConfigParam( 'sPasswdSalt' );
00219 $sConfigSalt = unpack('H*', $sConfigSalt);
00220 $sConfigSalt = $sConfigSalt[1];
00221 if ($aCombo[1] != $sConfigSalt) {
00222
00223 throw new Exception( self::$CAN_NOT_IMPORT_SALT );
00224 }
00225 }
00226 }
00227 }
00228 return $aData;
00229 }
00230
00240 protected function _preSaveObject($oShopObject, $aData)
00241 {
00242 $oCompat = oxNew('OXERPCompatability');
00243 if ($oCompat->isPasswordSaltSupported()) {
00244 if (method_exists($oShopObject, 'getPasswordHash')) {
00245 $oShopObject->getPasswordHash();
00246 } else {
00247 if ( $oShopObject->oxuser__oxpassword->value ) {
00248 if ( strpos( $oShopObject->oxuser__oxpassword->value, 'ox_' ) === 0 ) {
00249
00250 $oShopObject->setPassword( oxUtils::getInstance()->strRem( $oShopObject->oxuser__oxpassword->value ) );
00251 } elseif ( ( strlen( $oShopObject->oxuser__oxpassword->value ) < 32 ) && ( strpos( $oShopObject->oxuser__oxpassword->value, 'openid_' ) !== 0 ) ) {
00252
00253 $oShopObject->setPassword( $oShopObject->oxuser__oxpassword->value );
00254 }
00255 }
00256 }
00257 }
00258 return parent::_preSaveObject($oShopObject, $aData);
00259 }
00260
00266 public function addExportData( $aFields)
00267 {
00268 $oCompat = oxNew('OXERPCompatability');
00269 if ($oCompat->isPasswordSaltSupported() && (oxERPBase::getUsedDbFieldsVersion() < 3)) {
00270 $sSalt = '';
00271 if ($oCompat->isPasswordSaltInOxUser()) {
00272 $sSalt = $aFields['OXPASSSALT'];
00273 $aFields['OXPASSSALT'] = null;
00274 unset($aFields['OXPASSSALT']);
00275 } else {
00276 $sSalt = oxConfig::getInstance()->getConfigParam( 'sPasswdSalt' );
00277 $sSalt = unpack('H*', $sSalt);
00278 $sSalt = $sSalt[1];
00279 }
00280 $sCheckSum = md5($aFields['OXPASSWORD'].$sSalt);
00281 $aFields['OXPASSWORD'] = implode(':', array($aFields['OXPASSWORD'], $sSalt, $sCheckSum));
00282 }
00283 return $aFields;
00284 }
00285
00286 }