Go to the documentation of this file.00001 <?php
00002
00003 DEFINE("ERR_SUCCESS", 1);
00004 DEFINE("ERR_REQUIREDMISSING", -1);
00005 DEFINE("ERR_POSOUTOFBOUNDS", -2);
00006
00011 class SelectList_Main extends oxAdminDetails
00012 {
00016 public $aFieldArray = null;
00017
00025 public function render()
00026 {
00027 $myConfig = $this->getConfig();
00028 parent::render();
00029
00030
00031 $sOxId = oxConfig::getParameter( "oxid");
00032
00033 $sSavedId = oxConfig::getParameter( "saved_oxid");
00034 if ( ($sOxId == "-1" || !isset( $sOxId)) && isset( $sSavedId) ) {
00035 $sOxId = $sSavedId;
00036 oxSession::deleteVar( "saved_oxid");
00037 $this->_aViewData["oxid"] = $sOxId;
00038
00039 $this->_aViewData["updatelist"] = "1";
00040 }
00041
00042 $sArticleTable = getViewName('oxarticles');
00043
00044
00045 $this->_aViewData["edit"] = oxNew( "oxselectlist" );
00046
00047 if ( $sOxId != "-1" && isset( $sOxId)) {
00048
00049
00050 $_POST["language"] = $this->_iEditLang;
00051 $sChosenArtCat = $this->_getCategoryTree( "artcattree", $sChosenArtCat, $sOxId);
00052
00053
00054 $oAttr = oxNew( "oxselectlist" );
00055 $oAttr->loadInLang( $this->_iEditLang, $sOxId );
00056
00057 $aFieldList = $oAttr->getFieldList();
00058 if ( is_array( $aFieldList ) ) {
00059 foreach ( $aFieldList as $key => $oField ) {
00060 if ( $oField->priceUnit == '%' ) {
00061 $oField->price = $oField->fprice;
00062 }
00063 }
00064 }
00065
00066 $oOtherLang = $oAttr->getAvailableInLangs();
00067 if (!isset($oOtherLang[$this->_iEditLang])) {
00068
00069 $oAttr->loadInLang( key($oOtherLang), $sOxId );
00070 }
00071 $this->_aViewData["edit"] = $oAttr;
00072
00073
00074
00075 $aLang = array_diff ( oxLang::getInstance()->getLanguageNames(), $oOtherLang);
00076 if ( count( $aLang))
00077 $this->_aViewData["posslang"] = $aLang;
00078
00079 foreach ( $oOtherLang as $id => $language) {
00080 $oLang = new oxStdClass();
00081 $oLang->sLangDesc = $language;
00082 $oLang->selected = ($id == $this->_iEditLang);
00083 $this->_aViewData["otherlang"][$id] = clone $oLang;
00084 }
00085
00086 $iErr = oxConfig::getParameter( "iErrorCode");
00087 if (!$iErr)
00088 $iErr = ERR_SUCCESS;
00089 $this->_aViewData["iErrorCode"] = $iErr;
00090 oxSession::setVar("iErrorCode", ERR_SUCCESS);
00091
00092 }
00093 if ( oxConfig::getParameter("aoc") ) {
00094
00095 $aColumns = array();
00096 include_once 'inc/'.strtolower(__CLASS__).'.inc.php';
00097 $this->_aViewData['oxajax'] = $aColumns;
00098
00099 return "popups/selectlist_main.tpl";
00100 }
00101 return "selectlist_main.tpl";
00102 }
00103
00109 public function save()
00110 {
00111
00112 $sOxId = oxConfig::getParameter( "oxid");
00113 $aParams = oxConfig::getParameter( "editval");
00114
00115
00116 $sShopID = oxSession::getVar( "actshop");
00117 $aParams['oxselectlist__oxshopid'] = $sShopID;
00118 $oAttr = oxNew( "oxselectlist" );
00119
00120 if ( $sOxId != "-1") {
00121 $oAttr->loadInLang( $this->_iEditLang, $sOxId );
00122 } else {
00123 $aParams['oxselectlist__oxid'] = null;
00124 }
00125
00126
00127
00128 $oAttr->setLanguage(0);
00129 $oAttr->assign( $aParams);
00130
00131
00132 if ( !is_array( $this->aFieldArray)) {
00133 $this->aFieldArray = oxUtils::getInstance()->assignValuesFromText( $oAttr->oxselectlist__oxvaldesc->getRawValue() );
00134 }
00135
00136 $oAttr->oxselectlist__oxvaldesc = new oxField("", oxField::T_RAW);
00137 foreach ( $this->aFieldArray as $oField) {
00138 $oAttr->oxselectlist__oxvaldesc->setValue( $oAttr->oxselectlist__oxvaldesc->getRawValue() . $oField->name, oxField::T_RAW);
00139 if ( isset( $oField->price) && $oField->price) {
00140 $oAttr->oxselectlist__oxvaldesc->setValue( $oAttr->oxselectlist__oxvaldesc->getRawValue() . "!P!" . trim(str_replace( ",", ".", $oField->price)), oxField::T_RAW);
00141 if ($oField->priceUnit == '%')
00142 $oAttr->oxselectlist__oxvaldesc->setValue( $oAttr->oxselectlist__oxvaldesc->getRawValue() . '%', oxField::T_RAW);
00143 }
00144 $oAttr->oxselectlist__oxvaldesc->setValue( $oAttr->oxselectlist__oxvaldesc->getRawValue() . "__@@", oxField::T_RAW);
00145 }
00146
00147 $oAttr->setLanguage($this->_iEditLang);
00148 $oAttr->save();
00149 $this->_aViewData["updatelist"] = "1";
00150
00151
00152 if ( $sOxId == "-1") {
00153 oxSession::setVar( "saved_oxid", $oAttr->oxselectlist__oxid->value);
00154 }
00155 }
00156
00162 public function saveinnlang()
00163 {
00164 $sOxId = oxConfig::getParameter( "oxid");
00165 $aParams = oxConfig::getParameter( "editval");
00166
00167
00168 $sShopID = oxSession::getVar( "actshop");
00169 $aParams['oxselectlist__oxshopid'] = $sShopID;
00170 $oObj = oxNew( "oxselectlist" );
00171
00172 if ( $sOxId != "-1")
00173 $oObj->loadInLang( $this->_iEditLang, $sOxId );
00174 else
00175 $aParams['oxselectlist__oxid'] = null;
00176
00177
00178
00179 $oObj->setLanguage(0);
00180 $oObj->assign( $aParams);
00181
00182
00183 $sNewLanguage = oxConfig::getParameter( "new_lang");
00184 $oObj->setLanguage( $sNewLanguage);
00185 $oObj->save();
00186 $this->_aViewData["updatelist"] = "1";
00187
00188
00189 oxSession::setVar( "new_lang", $sNewLanguage);
00190
00191
00192 if ( $sOxId == "-1")
00193 oxSession::setVar( "saved_oxid", $oObj->oxselectlist__oxid->value);
00194 }
00195
00201 public function delFields()
00202 {
00203 $oSelectlist = oxNew( "oxselectlist" );
00204 if ( $oSelectlist->loadInLang( $this->_iEditLang, oxConfig::getParameter( "oxid" ) ) ) {
00205
00206 $aDelFields = oxConfig::getParameter( "aFields" );
00207 $this->aFieldArray = oxUtils::getInstance()->assignValuesFromText( $oSelectlist->oxselectlist__oxvaldesc->getRawValue() );
00208
00209 if ( is_array( $aDelFields ) && count( $aDelFields ) ) {
00210 foreach ( $aDelFields as $sDelField ) {
00211 $sDel = $this->parseFieldName( $sDelField );
00212 foreach ( $this->aFieldArray as $sKey => $oField ) {
00213 if ( $oField->name == $sDel ) {
00214 unset( $this->aFieldArray[$sKey]);
00215 break;
00216 }
00217 }
00218 }
00219 $this->save();
00220 }
00221 }
00222 }
00223
00229 public function addField()
00230 {
00231 $oSelectlist = oxNew( "oxselectlist" );
00232 if ( $oSelectlist->loadInLang( $this->_iEditLang, oxConfig::getParameter( "oxid" ) ) ) {
00233
00234
00235 $sAddField = oxConfig::getParameter("sAddField");
00236 if ( empty( $sAddField ) ) {
00237 oxSession::setVar( "iErrorCode", ERR_REQUIREDMISSING );
00238 return;
00239 }
00240
00241 $this->aFieldArray = oxUtils::getInstance()->assignValuesFromText( $oSelectlist->oxselectlist__oxvaldesc->getRawValue() );
00242
00243 $oField = new stdClass();
00244 $oField->name = $sAddField;
00245 $oField->price = oxConfig::getParameter( "sAddFieldPriceMod" );
00246 $oField->priceUnit = oxConfig::getParameter( "sAddFieldPriceModUnit" );
00247
00248 $this->aFieldArray[] = $oField;
00249 if ( $iPos = oxConfig::getParameter( "sAddFieldPos" ) ) {
00250 if ( $this->_rearrangeFields( $oField, $iPos-1 ) ) {
00251 return;
00252 }
00253 }
00254
00255 $this->save();
00256 }
00257 }
00258
00264 public function changeField()
00265 {
00266 $sAddField = oxConfig::getParameter( "sAddField" );
00267 if ( empty( $sAddField ) ) {
00268 oxSession::setVar("iErrorCode", ERR_REQUIREDMISSING );
00269 return;
00270 }
00271
00272 $aChangeFields = oxConfig::getParameter( "aFields" );
00273 if ( is_array( $aChangeFields ) && count( $aChangeFields ) ) {
00274
00275 $oSelectlist = oxNew( "oxselectlist" );
00276 if ( $oSelectlist->loadInLang( $this->_iEditLang, oxConfig::getParameter( "oxid" ) ) ) {
00277
00278 $this->aFieldArray = oxUtils::getInstance()->assignValuesFromText( $oSelectlist->oxselectlist__oxvaldesc->getRawValue() );
00279 $sChangeFieldName = $this->parseFieldName( $aChangeFields[0] );
00280
00281 foreach ( $this->aFieldArray as $sKey => $oField ) {
00282 if ( $oField->name == $sChangeFieldName ) {
00283 $this->aFieldArray[$sKey]->name = $sAddField;
00284 $this->aFieldArray[$sKey]->price = oxConfig::getParameter( "sAddFieldPriceMod" );
00285 $this->aFieldArray[$sKey]->priceUnit = oxConfig::getParameter( "sAddFieldPriceModUnit" );
00286 if ( $iPos = oxConfig::getParameter( "sAddFieldPos" ) ) {
00287 if ( $this->_rearrangeFields( $this->aFieldArray[$sKey], $iPos-1 ) ) {
00288 return;
00289 }
00290 }
00291 break;
00292 }
00293 }
00294 $this->save();
00295 }
00296 }
00297 }
00298
00308 protected function _rearrangeFields( $oField, $iPos )
00309 {
00310 if ( !isset( $this->aFieldArray ) || !is_array( $this->aFieldArray ) ) {
00311 return true;
00312 }
00313
00314 $iFieldCount = count( $this->aFieldArray );
00315 if ( $iPos < 0 || $iPos >= $iFieldCount ) {
00316 oxSession::setVar( "iErrorCode", ERR_POSOUTOFBOUNDS );
00317 return true;
00318 }
00319
00320 $iCurrentPos = -1;
00321 for ( $i = 0; $i < $iFieldCount; $i++ ) {
00322 if ( $this->aFieldArray[$i] == $oField ) {
00323 $iCurrentPos = $i;
00324 break;
00325 }
00326 }
00327
00328 if ( $iCurrentPos == -1 ) {
00329 return true;
00330 }
00331
00332 if ( $iCurrentPos == $iPos ) {
00333 return false;
00334 }
00335
00336 $sField = $this->aFieldArray[$iCurrentPos];
00337 if ( $iCurrentPos < $iPos ) {
00338 for ( $i = $iCurrentPos; $i < $iPos; $i++ ) {
00339 $this->aFieldArray[$i] = $this->aFieldArray[$i+1];
00340 }
00341 $this->aFieldArray[$iPos] = $sField;
00342 return false;
00343 } else {
00344 for ( $i = $iCurrentPos; $i > $iPos; $i-- ) {
00345 $this->aFieldArray[$i] = $this->aFieldArray[$i-1];
00346 }
00347 $this->aFieldArray[$iPos] = $sField;
00348 return false;
00349 }
00350 }
00351
00360 function parseFieldName($sInput)
00361 {
00362 $aInput = explode('__@@', $sInput, 3);
00363 return $aInput[1];
00364 }
00365 }