/lib/max/Admin/UI/Field/OrganisationSelectionField.php

https://bitbucket.org/valmy/openx · PHP · 333 lines · 275 code · 22 blank · 36 comment · 59 complexity · 5fd31d3205333e3ef44183243dbc16b7 MD5 · raw file

  1. <?php
  2. /*
  3. +---------------------------------------------------------------------------+
  4. | OpenX v2.8 |
  5. | ========== |
  6. | |
  7. | Copyright (c) 2003-2009 OpenX Limited |
  8. | For contact details, see: http://www.openx.org/ |
  9. | |
  10. | This program is free software; you can redistribute it and/or modify |
  11. | it under the terms of the GNU General Public License as published by |
  12. | the Free Software Foundation; either version 2 of the License, or |
  13. | (at your option) any later version. |
  14. | |
  15. | This program is distributed in the hope that it will be useful, |
  16. | but WITHOUT ANY WARRANTY; without even the implied warranty of |
  17. | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
  18. | GNU General Public License for more details. |
  19. | |
  20. | You should have received a copy of the GNU General Public License |
  21. | along with this program; if not, write to the Free Software |
  22. | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
  23. +---------------------------------------------------------------------------+
  24. $Id$
  25. */
  26. require_once MAX_PATH . '/lib/max/Admin/UI/Field.php';
  27. require_once MAX_PATH . '/lib/max/Admin/UI/OrganisationScope.php';
  28. require_once MAX_PATH . '/lib/max/Admin_DA.php';
  29. require_once MAX_PATH . '/lib/max/other/common.php';
  30. class Admin_UI_OrganisationSelectionField extends Admin_UI_Field
  31. {
  32. /**
  33. * PHP4-style constructor
  34. *
  35. * @param array $aFieldSelectionNames A list of the predefined 'friendly' selections.
  36. * @param string $fieldSelectionDefault The default selection.
  37. */
  38. function Admin_UI_OrganisationSelectionField($name = 'OrganisationSelectionField', $defaultAdvertiser = 'all', $defaultPublisher = 'all', $filterBy = FILTER_NONE)
  39. {
  40. parent::__construct();
  41. $this->_name = $name;
  42. $oScope = new Admin_UI_OrganisationScope();
  43. $oScope->setAdvertiserId($defaultAdvertiser);
  44. $oScope->setPublisherId($defaultPublisher);
  45. $this->_value = $oScope;
  46. $this->_filter = $filterBy;
  47. }
  48. function _getAdvertisers()
  49. {
  50. if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN)) {
  51. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  52. $aParams = array();
  53. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  54. $aParams = $this->coreParams + array('advertiser_id' => implode(',', array_keys($aTrackers)));
  55. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  56. } else {
  57. $aParams = $this->coreParams;
  58. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  59. }
  60. } elseif (OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) {
  61. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  62. $aParams = array('agency_id' => OA_Permission::getEntityId());
  63. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  64. $aParams = $this->coreParams + array('advertiser_id' => implode(',', array_keys($aTrackers)));
  65. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  66. } else {
  67. $aParams = $this->coreParams + array('agency_id' => OA_Permission::getEntityId());
  68. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  69. }
  70. } elseif (OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) {
  71. $aAdvertisers = array();
  72. $aParams = array('publisher_id' => OA_Permission::getEntityId(), 'placement_anonymous' => 'f');
  73. $aPlacementZones = Admin_DA::getPlacementZones($aParams, false, 'placement_id');
  74. $aAdZones = Admin_DA::getAdZones($aParams, false, 'ad_id');
  75. if (!empty($aPlacementZones)) {
  76. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  77. $aParams = array('placement_id' => implode(',', array_keys($aPlacementZones)));
  78. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  79. $aParams = $this->coreParams + array('advertiser_id' => implode(',', array_keys($aTrackers)));
  80. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  81. } else {
  82. $aParams = $this->coreParams + array('placement_id' => implode(',', array_keys($aPlacementZones)));
  83. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  84. }
  85. }
  86. if (!empty($aAdZones)) {
  87. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  88. $aParams = array('ad_id' => implode(',', array_keys($aAdZones)));
  89. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  90. $aParams = $this->coreParams + array('advertiser_id' => implode(',', array_keys($aTrackers)));
  91. $aAdvertisers += Admin_DA::getAdvertisers($aParams);
  92. } else {
  93. $aParams = $this->coreParams + array('ad_id' => implode(',', array_keys($aAdZones)));
  94. $aAdvertisers += Admin_DA::getAdvertisers($aParams);
  95. }
  96. }
  97. } elseif (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER)) {
  98. $aAdvertisers = array();
  99. $aParams = $this->coreParams + array('advertiser_id' => OA_Permission::getEntityId());
  100. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  101. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  102. $aParams = $this->coreParams + array('advertiser_id' => implode(',', array_keys($aTrackers)));
  103. $aAdvertisers += Admin_DA::getAdvertisers($aParams);
  104. } else {
  105. $aAdvertisers = Admin_DA::getAdvertisers($aParams);
  106. }
  107. }
  108. // order the array by advertiser name
  109. foreach ($aAdvertisers as $key => $row) {
  110. $name[$key] = strtolower($row['name']);
  111. }
  112. array_multisort($name, SORT_ASC, $aAdvertisers);
  113. // rewrite the array to preserve key
  114. foreach ($aAdvertisers as $row) {
  115. $aAdvertisersTmp[$row['advertiser_id']] = $row;
  116. }
  117. $aAdvertisers = $aAdvertisersTmp;
  118. return $aAdvertisers;
  119. }
  120. function _getPublishers()
  121. {
  122. if (OA_Permission::isAccount(OA_ACCOUNT_ADMIN)) {
  123. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  124. $aParams = array();
  125. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  126. $aParams = array('advertiser_id' => implode(',', array_keys($aTrackers)));
  127. $aPlacementZones = Admin_DA::getPlacementZones($aParams, false, 'zone_id');
  128. $aAdZones = Admin_DA::getAdZones($aParams, false, 'zone_id');
  129. $aParams = array('zone_id' => implode(',', array_keys($aPlacementZones + $aAdZones)));
  130. $aPublishers = Admin_DA::getPublishers($aParams);
  131. } else {
  132. $aParams = array();
  133. $aPublishers = Admin_DA::getPublishers($aParams);
  134. }
  135. } elseif (OA_Permission::isAccount(OA_ACCOUNT_MANAGER)) {
  136. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  137. $aParams = array('agency_id' => OA_Permission::getEntityId());
  138. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  139. $aParams = array('advertiser_id' => implode(',', array_keys($aTrackers)));
  140. $aPlacementZones = Admin_DA::getPlacementZones($aParams, false, 'zone_id');
  141. $aAdZones = Admin_DA::getAdZones($aParams, false, 'zone_id');
  142. $aParams = array('zone_id' => implode(',', array_keys($aPlacementZones + $aAdZones)));
  143. $aPublishers = Admin_DA::getPublishers($aParams);
  144. } else {
  145. $aParams = array('agency_id' => OA_Permission::getEntityId());
  146. $aPublishers = Admin_DA::getPublishers($aParams);
  147. }
  148. } elseif (OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) {
  149. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  150. $aParams = array('agency_id' => OA_Permission::getAgencyId());
  151. $aTrackers = Admin_DA::getTrackers($aParams, false, 'advertiser_id');
  152. $aParams = array('advertiser_id' => implode(',', array_keys($aTrackers)));
  153. $aPlacementZones = Admin_DA::getAdZones($aParams, false, 'zone_id');
  154. $aAdZones = Admin_DA::getAdZones($aParams, false, 'zone_id');
  155. $aParams = array('publisher_id' => OA_Permission::getEntityId(), 'zone_id' => implode(',', array_keys($aPlacementZones + $aAdZones)));
  156. $aPublishers = Admin_DA::getPublishers($aParams);
  157. } else {
  158. $aParams = array('publisher_id' => OA_Permission::getEntityId());
  159. $aPublishers = Admin_DA::getPublishers($aParams);
  160. }
  161. } elseif (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER)) {
  162. $aPublishers = array();
  163. if ($this->_filter == FILTER_TRACKER_PRESENT) {
  164. $aParams = array('advertiser_id' => OA_Permission::getEntityId());
  165. $aTrackers = Admin_DA::getTrackers($aTrackers, 'advertiser_id');
  166. if (!empty($aTrackers)) {
  167. $aParams = array('advertiser_id' => OA_Permission::getEntityId(), 'placement_anonymous' => 'f');
  168. $aPlacementZones = Admin_DA::getPlacementZones($aParams, false, 'zone_id');
  169. $aAdZones = Admin_DA::getAdZones($aParams, false, 'zone_id');
  170. $aZones = $aPlacementZones + $aAdZones;
  171. if (!empty($aZones)) {
  172. $aParams = array('zone_id' => implode(',', array_keys($aZones)));
  173. $aPublishers = Admin_DA::getPublishers($aParams);
  174. }
  175. }
  176. } else {
  177. $aParams = array('advertiser_id' => OA_Permission::getEntityId(), 'placement_anonymous' => 'f');
  178. $aPlacementZones = Admin_DA::getPlacementZones($aParams, false, 'zone_id');
  179. $aAdZones = Admin_DA::getAdZones($aParams, false, 'zone_id');
  180. $aZones = $aPlacementZones + $aAdZones;
  181. if (!empty($aZones)) {
  182. $aParams = array('zone_id' => implode(',', array_keys($aZones)));
  183. $aPublishers = Admin_DA::getPublishers($aParams);
  184. }
  185. }
  186. }
  187. // order the array by publisher name
  188. foreach ($aPublishers as $key => $row) {
  189. $name[$key] = strtolower($row['name']);
  190. }
  191. array_multisort($name, SORT_ASC, $aPublishers);
  192. // rewrite the array to preserve key
  193. foreach ($aPublishers as $row) {
  194. $aPublishersTmp[$row['publisher_id']] = $row;
  195. }
  196. $aPublishers = $aPublishersTmp;
  197. return $aPublishers;
  198. }
  199. function _hasAnonymousCampaigns()
  200. {
  201. $hasAnonymousCampaigns = false;
  202. if (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER)) {
  203. $aParams = array(
  204. 'placement_anonymous' => 't',
  205. 'advertiser_id' => OA_Permission::getEntityId(),
  206. );
  207. } elseif (OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) {
  208. $aParams = array(
  209. 'placement_anonymous' => 't',
  210. 'publisher_id' => OA_Permission::getEntityId(),
  211. );
  212. }
  213. if (!empty($aParams)) {
  214. $aPlacementZones = Admin_DA::getPlacementZones($aParams);
  215. if (!empty($aPlacementZones)) {
  216. $hasAnonymousCampaigns = true;
  217. } else {
  218. $aAdZones = Admin_DA::getAdZones($aParams);
  219. if (!empty($aAdZones)) {
  220. $hasAnonymousCampaigns = true;
  221. }
  222. }
  223. }
  224. return $hasAnonymousCampaigns;
  225. }
  226. function display()
  227. {
  228. $name = $this->_name;
  229. $oScope = $this->_value;
  230. $hasAnonymousCampaigns = $this->_hasAnonymousCampaigns($aParams);
  231. $aAdvertisers = $this->_getAdvertisers();
  232. if (OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER)) {
  233. $advertiserId = OA_Permission::getEntityId();
  234. echo "
  235. <input type='hidden' name='{$name}_advertiser' id='{$name}_advertiser' value='$advertiserId'>";
  236. } else {
  237. echo "
  238. <select name='{$name}_advertiser' id='{$name}_advertiser' tabindex='" . $this->_tabIndex++ . "'>
  239. <option value='all'>-- {$GLOBALS['strAllAdvertisers']} --</option>";
  240. if ($hasAnonymousCampaigns) {
  241. echo "
  242. <option value='anon'>-- {$GLOBALS['strAnonAdvertisers']} --</option>";
  243. }
  244. foreach ($aAdvertisers as $advertiserId=>$aAdvertiser) {
  245. $selected = $advertiserId == $oScope->_advertiserId ? " selected='selected'" : '';
  246. echo "
  247. <option value='$advertiserId'$selected>" . htmlspecialchars($aAdvertiser['name']) . "</option>";
  248. }
  249. echo "
  250. </select>";
  251. }
  252. if (!OA_Permission::isAccount(OA_ACCOUNT_ADVERTISER) && !OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) {
  253. echo "
  254. <br /><br />";
  255. }
  256. $aPublishers = $this->_getPublishers();
  257. if (OA_Permission::isAccount(OA_ACCOUNT_TRAFFICKER)) {
  258. echo "
  259. <input type='hidden' name='{$name}_publisher' id='{$name}_publisher' value='$publisherId'>";
  260. } else {
  261. echo "
  262. <select name='{$name}_publisher' id='{$name}_publisher' tabindex='" . $this->_tabIndex++ . "'>
  263. <option value='all'>-- {$GLOBALS['strAllPublishers']} --</option>";
  264. if ($hasAnonymousCampaigns) {
  265. echo "
  266. <option value='anon'>-- {$GLOBALS['strAnonPublishers']} --</option>";
  267. }
  268. foreach ($aPublishers as $publisherId=>$aPublisher) {
  269. $selected = $publisherId == $oScope->_publisherId ? " selected='selected'" : '';
  270. echo "
  271. <option value='$publisherId'$selected>" . htmlspecialchars($aPublisher['name']) . "</option>";
  272. }
  273. echo "
  274. </select>";
  275. }
  276. }
  277. function setValueFromArray($aFieldValues)
  278. {
  279. $name = $this->_name;
  280. $oScope =& $this->_value;
  281. $publisherFieldName = $name . '_publisher';
  282. $advertiserFieldName = $name . '_advertiser';
  283. $anonymous = false;
  284. // Get advertiser scope...
  285. if (!empty($aFieldValues[$advertiserFieldName])) {
  286. if (is_numeric($aFieldValues[$advertiserFieldName])) {
  287. $advertiserId = $aFieldValues[$advertiserFieldName];
  288. } else {
  289. $advertiserId = false;
  290. if ($aFieldValues[$advertiserFieldName] == 'anon') {
  291. $anonymous = true;
  292. }
  293. }
  294. $oScope->setAdvertiserId($advertiserId);
  295. }
  296. // Get publisher scope...
  297. if (!empty($aFieldValues[$publisherFieldName])) {
  298. if (is_numeric($aFieldValues[$publisherFieldName])) {
  299. $publisherId = $aFieldValues[$publisherFieldName];
  300. } else {
  301. $publisherId = false;
  302. if ($aFieldValues[$advertiserFieldName] == 'anon') {
  303. $anonymous = true;
  304. }
  305. }
  306. $oScope->setPublisherId($publisherId);
  307. }
  308. $oScope->setAnonymous($anonymous);
  309. }
  310. }
  311. ?>