api.pollsexport.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. /**
  3. * User polls exporting class
  4. */
  5. class PollsExport extends PollsReport {
  6. /**
  7. * Contains system alter config as key=>value
  8. *
  9. * @var array
  10. */
  11. protected $altCfg = array();
  12. /**
  13. * Contains raw votes data
  14. *
  15. * @var array
  16. */
  17. protected $allPollsVotesRaw = array();
  18. /**
  19. * Contains preprocessed votes data for each poll as:
  20. * pollId=>[login=>login/date/option_id]
  21. *
  22. * @var array
  23. */
  24. protected $allPollsVotesProcessed = array();
  25. /**
  26. * Contains current instance URL to push some data
  27. *
  28. * @var string
  29. */
  30. protected $exportUrl = '';
  31. /**
  32. * Name of POST variable to export updated users data
  33. *
  34. * @var string
  35. */
  36. protected $exportVar = '';
  37. /**
  38. * Export URL HTTP abstraction placeholder
  39. *
  40. * @var object
  41. */
  42. protected $apiCrm = '';
  43. /**
  44. * Some predefined stuff here
  45. */
  46. const EXPORT_PID = 'BTRX42_POLLS';
  47. /**
  48. * Там, де річка, наче стрічка
  49. * В`ється через балку
  50. */
  51. public function __construct() {
  52. parent::__construct();
  53. $this->loadConfig();
  54. $this->initApiCrm();
  55. $this->loadAllPollsVotes();
  56. $this->preprocessAllPollsVotes();
  57. }
  58. /**
  59. * Preloads some required configs for further usage
  60. *
  61. * @global object $ubillingConfig
  62. *
  63. * @return void
  64. */
  65. protected function loadConfig() {
  66. global $ubillingConfig;
  67. $this->altCfg = $ubillingConfig->getAlter();
  68. if (isset($this->altCfg['BTRX24_POLLS_URL'])) {
  69. $this->exportUrl = $this->altCfg['BTRX24_POLLS_URL'];
  70. }
  71. if (isset($this->altCfg['BTRX24_POLLS_VAR'])) {
  72. $this->exportVar = $this->altCfg['BTRX24_POLLS_VAR'];
  73. }
  74. }
  75. /**
  76. * Preloads raw voting data
  77. *
  78. * @return void
  79. */
  80. protected function loadAllPollsVotes() {
  81. if (!empty($this->pollsAvaible)) {
  82. $votesDb = new NyanORM('polls_votes');
  83. $this->allPollsVotesRaw = $votesDb->getAll('id');
  84. }
  85. }
  86. /**
  87. * Performs preprocessing of users votes data
  88. *
  89. * @return void
  90. */
  91. protected function preprocessAllPollsVotes() {
  92. if (!empty($this->allPollsVotesRaw)) {
  93. foreach ($this->allPollsVotesRaw as $eachVoteId => $eachVoteData) {
  94. $pollId = $eachVoteData['poll_id'];
  95. if (isset($this->pollsAvaible[$pollId])) {
  96. //users polls?
  97. if ($this->pollsAvaible[$pollId]['voting'] == 'Users') {
  98. //is poll enabled?
  99. if ($this->pollsAvaible[$pollId]['enabled'] == 1) {
  100. $this->allPollsVotesProcessed[$pollId][$eachVoteData['login']] = array(
  101. 'login' => $eachVoteData['login'],
  102. 'date' => $eachVoteData['date'],
  103. 'option_id' => $eachVoteData['option_id']
  104. );
  105. }
  106. }
  107. }
  108. }
  109. }
  110. }
  111. /**
  112. * Returns all existing polls votes
  113. *
  114. * @return array
  115. */
  116. public function getAllPollsVotes() {
  117. $result = array();
  118. $curTimestamp = time();
  119. $curDate = curdate();
  120. if (!empty($this->pollsAvaible)) {
  121. foreach ($this->pollsAvaible as $eachPollId => $eachPollData) {
  122. //is poll enabled?
  123. if ($eachPollData['enabled'] == 1) {
  124. //users polls?
  125. if ($eachPollData['voting'] == 'Users') {
  126. //poll is running now?
  127. $pollStartTimestamp = strtotime($eachPollData['start_date']);
  128. $pollEndTimestamp = strtotime($eachPollData['end_date']);
  129. //and it runs now?
  130. if (($curTimestamp >= $pollStartTimestamp) AND ( $curTimestamp <= $pollEndTimestamp)) {
  131. $result[$eachPollId]['id'] = $eachPollId;
  132. $result[$eachPollId]['title'] = $eachPollData['title'];
  133. $result[$eachPollId]['enabled'] = $eachPollData['enabled'];
  134. $votesTmp = array();
  135. if (isset($this->allPollsVotesProcessed[$eachPollId])) {
  136. $eachPollVotes = $this->allPollsVotesProcessed[$eachPollId];
  137. if (!empty($eachPollVotes)) {
  138. foreach ($eachPollVotes as $eachVotedLogin => $eachVoteData) {
  139. //only current date votes filter
  140. if (ispos($eachVoteData['date'], $curDate)) {
  141. $votesTmp[] = array(
  142. 'login' => $eachVoteData['login'],
  143. 'vote' => @$this->pollsOptions[$eachPollId][$eachVoteData['option_id']],
  144. 'option_id' => $eachVoteData['option_id'],
  145. 'address' => @$this->alladdress[$eachVotedLogin],
  146. 'date' => $eachVoteData['date']
  147. );
  148. }
  149. }
  150. }
  151. }
  152. $result[$eachPollId]['votes'] = $votesTmp;
  153. }
  154. }
  155. }
  156. }
  157. // .-""-.
  158. // (___/\ \
  159. // , (|^ ^ ) )
  160. // /( _)_\=_/ (
  161. // ,..__/ `\ ____(_/_ ` \ )
  162. // `\ _/ _/---._/(_)_ `\ (
  163. // '--\ `-.__..-' /. (_), | )
  164. // `._ ___\_____.'_| |__/
  165. // `~----"` `-.........'
  166. // ^^^^ а це типу русалонька!
  167. }
  168. return($result);
  169. }
  170. /**
  171. * Inits CRM HTTP abstraction layer
  172. *
  173. * @return void
  174. */
  175. protected function initApiCrm() {
  176. if (!empty($this->exportUrl)) {
  177. $this->apiCrm = new OmaeUrl($this->exportUrl);
  178. } else {
  179. throw new Exception('EX_NO_EXPORT_URL');
  180. }
  181. }
  182. /**
  183. * Pushes polls user votes struct into CRM hook
  184. *
  185. * @param array $pollsVoteData
  186. *
  187. * @return void
  188. */
  189. protected function pushCrmData($pollsVoteData) {
  190. $jsonData = json_encode($pollsVoteData);
  191. $this->apiCrm->dataPost($this->exportVar, $jsonData);
  192. $this->apiCrm->response();
  193. }
  194. /**
  195. * Just pushes all votes and polls data onto CRM hook
  196. *
  197. * @return void
  198. */
  199. public function runExport() {
  200. $pollsVotesData = $this->getAllPollsVotes();
  201. if (!empty($pollsVotesData)) {
  202. //empty voting cleanup
  203. foreach ($pollsVotesData as $pollId => $pollData) {
  204. if (empty($pollData['votes'])) {
  205. unset($pollsVotesData[$pollId]);
  206. }
  207. }
  208. //pushing data to CRM
  209. if (!empty($pollsVotesData)) {
  210. $this->pushCrmData($pollsVotesData);
  211. }
  212. }
  213. }
  214. }