function setBannerTargeting($bannerId, &$aTargeting) { if ($this->checkIdExistence('banners', $bannerId)) { if (!$this->checkPermissions(null, 'banners', $bannerId)) { return false; } foreach ($aTargeting as $executionOrder => $oTargeting) { // Prepend "deliveryLimitations:" to any component-identifiers // (for 2.6 backwards compatibility) if (substr($oTargeting->type, 0, 20) != 'deliveryLimitations:') { $aTargeting[$executionOrder]->type = 'deliveryLimitations:' . $aTargeting[$executionOrder]->type; } if (!$this->_validateTargeting($oTargeting)) { return false; } } $aTargetingArray = array(); foreach ($aTargeting as $oTargeting) { $aTargetingArray[] = $oTargeting->toArray(); } $res = OX_AclCheckInputsFields($aTargetingArray, false); if ($res !== true) { $this->raiseError($res[0]); return false; } $doBannerTargeting = OA_Dal::factoryDO('acls'); $doBannerTargeting->bannerid = $bannerId; $doBannerTargeting->find(); $doBannerTargeting->delete(); // Create the new targeting options $executionOrder = 0; $aAcls = array(); foreach ($aTargetingArray as $bannerTargetingData) { $doAcl = OA_Dal::factoryDO('acls'); $doAcl->setFrom($bannerTargetingData); $doAcl->bannerid = $bannerId; $doAcl->executionorder = $executionOrder; $doAcl->insert(); $aAcls[$executionOrder] = $doAcl->toArray(); $executionOrder++; } // Recompile the banner's compiledlimitations $doBanner = OA_Dal::factoryDO('banners'); $doBanner->get($bannerId); $doBanner->compiledlimitation = OA_aclGetSLimitationFromAAcls($aAcls); $doBanner->acl_plugins = MAX_AclGetPlugins($aAcls); $doBanner->acls_updated = gmdate(OA_DATETIME_FORMAT); $doBanner->update(); return true; } else { $this->raiseError('Unknown bannerId Error'); return false; } }
function MAX_AclSave($acls, $aEntities, $page = false) { //$conf = $GLOBALS['_MAX']['CONF']; $oDbh =& OA_DB::singleton(); if ($page === false) { $page = basename($_SERVER['SCRIPT_NAME']); } switch ($page) { case 'banner-acl.php': case 'market-campaign-acl.php': $table = 'banners'; $aclsTable = 'acls'; $fieldId = 'bannerid'; break; case 'channel-acl.php': $table = 'channel'; $aclsTable = 'acls_channel'; $fieldId = 'channelid'; break; default: return false; } $aclsObjectId = $aEntities[$fieldId]; $sLimitation = OA_aclGetSLimitationFromAAcls($acls); $doTable = OA_Dal::factoryDO($table); $doTable->{$fieldId} = $aclsObjectId; $found = $doTable->find(true); if ($sLimitation == $doTable->compiledlimitation) { return true; // No changes to the ACL } $doAcls = OA_Dal::factoryDO($aclsTable); $doAcls->whereAdd($fieldId . ' = ' . $aclsObjectId); $doAcls->delete(true); if (!empty($acls)) { foreach ($acls as $acl) { $deliveryLimitationPlugin =& OA_aclGetComponentFromRow($acl); $doAcls = OA_Dal::factoryDO($aclsTable); $doAcls->{$fieldId} = $aclsObjectId; $doAcls->logical = $acl['logical']; $doAcls->type = $acl['type']; $doAcls->comparison = $acl['comparison']; $doAcls->data = $deliveryLimitationPlugin->getData(); $doAcls->executionorder = $acl['executionorder']; $id = $doAcls->insert(); if (!$id) { return false; } } } $doTable->acl_plugins = MAX_AclGetPlugins($acls); $doTable->compiledlimitation = $sLimitation; $doTable->acls_updated = OA::getNowUTC(); $doTable->update(); // When a channel limitation changes - All banners with this channel must be re-learnt if ($page == 'channel-acl.php') { $affected_ads = array(); $table = modifyTableName('acls'); $query = "\n SELECT\n DISTINCT(bannerid)\n FROM\n {$table}\n WHERE\n type = 'deliveryLimitations:Site:Channel'\n AND (data = '{$aclsObjectId}' OR data LIKE '%,{$aclsObjectId}' OR data LIKE '%,{$aclsObjectId},%' OR data LIKE '{$aclsObjectId},%')\n "; $res = $oDbh->query($query); if (PEAR::isError($res)) { return $res; } while ($row = $res->fetchRow()) { $doBanners = OA_Dal::staticGetDO('banners', $row['bannerid']); if ($doBanners->bannerid == $row['bannerid']) { $doBanners->acls_updated = OA::getNowUTC(); $doBanners->update(); } } } return true; }