PageRenderTime 45ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/web/models/antrag.php

https://bitbucket.org/prauscher/att
PHP | 413 lines | 400 code | 5 blank | 8 comment | 13 complexity | 53d033c91bab7386021daa2e9bb4a178 MD5 | raw file
  1. <?php
  2. class antragsModel extends DataBase
  3. {
  4. public function neu ($name, $antrag, $gliederung, $begruendung = "", $budget = 0, $steller = "", $stellerMail = NULL)
  5. {
  6. $sql = "SELECT COUNT(id) FROM `antrag` WHERE `erstellDatum` BETWEEN ? AND ?";
  7. $res = $this->query($sql, array(date("Y-m-d")." 00:00:00", date("Y-m-d")." 23:59:59"));
  8. $antragsIDN = 0;
  9. if(isset($res[0][0]))
  10. $antragsIDN = $res[0][0];
  11. $antragsIDN++;
  12. $antragsID = date("Ymd");
  13. $antragsID .= sprintf("%'03d",$antragsIDN);
  14. $sql = 'INSERT INTO `antrag`(`id`, `name`, `beschluss`, `begruendung`, `budget`, `gliederung`, `antragssteller`, `antragsstellerMail`, `old`, `antragsID`) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, 0, ?)';
  15. $id = $this->insertID($sql, array($name, $antrag, $begruendung, $budget, $gliederung, $steller, $stellerMail, $antragsID));
  16. $logModel = new logModel();
  17. $logModel->addLog($id, $steller, "gestellt", "");
  18. return $id;
  19. }
  20. public function announceAntrag($antragsID)
  21. {
  22. $antrag = $this->getById($antragsID);
  23. //echo "ANTRAG";
  24. //var_dump($antrag);
  25. //echo "Gliederng";
  26. $gliederung = $this->getGliederungDetails($antrag["gliederung"]);
  27. //var_dump($gliederung);exit();
  28. if(!empty($gliederung["nnptName"]))
  29. {
  30. //var_dump($nntpModel = new nntpModel());
  31. //var_dump($nntpModel->connect(NNTP_SERVER));
  32. //var_dump($nntpModel->autentifizierung(NNTP_USER, NNTP_PASS));
  33. //exit();
  34. $nntpModel = new nntpModel();
  35. $nntpModel->connect(NNTP_SERVER);
  36. $nntpModel->autentifizierung(NNTP_USER, NNTP_PASS);
  37. $nntpModel->post($gliederung["nnptName"], "Neuer Antrag ".$antrag["name"], "Hallo,\r\nfolgender Antrag wurde gestellt: \r\n\r\n".$antrag["beschluss"]."\r\n\r\nBegründung:\r\n\r\n".$antrag["begruendung"]."\r\n\r\nDer Antrag kann unter ".path."antrag/antrag/".$antragsID." eingesehen werden", "bot@junge-piraten.de", array("Message-ID" => "<".md5($antragsID)."@jupisantrag.de>"));
  38. return true;
  39. }
  40. //exit();
  41. }
  42. public function createTokens($antragsID)
  43. {
  44. $antrag = $this->getById($antragsID);
  45. $berechtigte = $this->getAbstimmungsBerechtigte($antrag["gliederung"]);
  46. foreach($berechtigte as $name)
  47. {
  48. $erfolg = false;
  49. $i = 0;
  50. $userModel = new userModel();
  51. while($erfolg == false && $i < 5)
  52. {
  53. $i++;
  54. $token = $this->createToken($name);
  55. $sql = "SELECT count(`token`) FROM `token` WHERE `token` = ?";
  56. $res = $this->query($sql, array($token));
  57. if($res[0][0]==0)
  58. {
  59. $sql = "INSERT INTO `token`(`token`, `nutzer`, `antrag`) VALUES (?,?,?)";
  60. $this->insert($sql, array($token, $name, $antragsID));
  61. $erfolg = true;
  62. $userModel->generateMail($name, "newVoting", array("token"=>$token, "id"=>$antragsID, "antrag"=>$antrag));
  63. }
  64. }
  65. }
  66. }
  67. public function checkToken($token)
  68. {
  69. $sql = "SELECT * FROM `token` WHERE `token` = ?";
  70. $res = $this->query($sql, array($token));
  71. if(count($res)==1)
  72. {
  73. return $res[0];
  74. }
  75. return false;
  76. }
  77. private function createToken($name)
  78. {
  79. $token = date("d.m.Y").rand(100,999).date("H:m:s").rand(100,999).$name;
  80. return substr(hash("sha512", $token), rand(0, 50), rand(25,35));
  81. }
  82. public function getToken($name, $antragsID)
  83. {
  84. $sql = "SELECT `token` FROM `token` WHERE `nutzer` = ? AND `antrag` =?";
  85. $res = $this->query($sql, array($name, $antragsID));
  86. if(isset($res[0]["token"]))
  87. {
  88. return $res[0]["token"];
  89. }
  90. return false;
  91. }
  92. public function getTokens($antragsID)
  93. {
  94. $sql = "SELECT `token`, `nutzer` FROM `token` WHERE `antrag` =?";
  95. $res = $this->query($sql, array($antragsID));
  96. return $res;
  97. }
  98. public function getById($id)
  99. {
  100. $sql = 'SELECT * FROM `antrag` WHERE id = ?';
  101. $res = $this->query($sql, array($id));
  102. if(isset($res[0]))
  103. {
  104. return $res[0];
  105. }
  106. return false;
  107. }
  108. public function berechtigt($nutzerName, $gliederung, $antragsID = null)
  109. {
  110. $sql = "SELECT count(nutzer) FROM `Nutzer2Gliederung` WHERE nutzer = ? AND `gliederung` = ?";
  111. $res = $this->query($sql, array($nutzerName, $gliederung));
  112. if($res[0][0]==1)
  113. {
  114. /*if($antragsID!=null)
  115. {
  116. $antrag = $this->getById($antragsID);
  117. if(!($antrag["status"]=="eingereicht"||$antrag["status"]=="voting"))
  118. {
  119. return false;
  120. }
  121. }*/
  122. return true;
  123. }
  124. return false;
  125. }
  126. public function getStatus()
  127. {
  128. $sql = "SELECT * FROM status";
  129. $res = $this->query($sql, array());
  130. $statuslist = array();
  131. foreach($res as $stati)
  132. {
  133. $statuslist[] = $stati[0];
  134. }
  135. return $statuslist;
  136. }
  137. public function abstimmung($antragID, $nutzerName, $stimme, $votingUser = NULL)
  138. {
  139. if($votingUser==NULL)
  140. {
  141. $votingUser = $nutzerName;
  142. }
  143. $antrag = $this->getById($antragID);
  144. if($this->berechtigt($votingUser, $antrag["gliederung"], $antragID))
  145. {
  146. $this->setVote($antragID, $nutzerName, $stimme, $votingUser);
  147. /*$sql = "INSERT INTO `voting` (`beschlussID`, `nutzerName`, `voting`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE voting = ?";
  148. $this->insert($sql, array($antragID, $nutzerName, $stimme, $stimme));
  149. $logModel = new logModel();
  150. $logModel->addLog($antragID, $stimme, "abstimmen", $nutzerName);
  151. //$sql = "INSERT INTO `log`(`id`, `beschlussID`, `time`, `log`) VALUES (NULL, ?, ? ,?)";
  152. //$this->insert($sql, array($antragID, time(), $votingUser." stimmte im Namen von ".$nutzerName." mit ".$stimme));
  153. */
  154. }
  155. }
  156. public function setVote($antragID, $nutzerName, $stimme, $votingUser)
  157. {
  158. $sql = "INSERT INTO `voting` (`beschlussID`, `nutzerName`, `voting`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE voting = ?";
  159. $this->insert($sql, array($antragID, $nutzerName, $stimme, $stimme));
  160. $logModel = new logModel();
  161. $logModel->addLog($antragID, $stimme, "abstimmen", $nutzerName);
  162. }
  163. public function getVoting($antragsID)
  164. {
  165. $sql = "SELECT * FROM `voting` WHERE `beschlussID` = ?";
  166. $res = $this->query($sql, array($antragsID));
  167. return $res;
  168. }
  169. public function getVote($antragsID)
  170. {
  171. $sql = "SELECT * FROM `voting` WHERE `beschlussID` = ?";
  172. $res = $this->query($sql, array($antragsID));
  173. $vote = array();
  174. foreach($res as $row)
  175. {
  176. $vote[$row["nutzerName"]]=$row["voting"];
  177. }
  178. return $vote;
  179. }
  180. public function getLog($antragsID)
  181. {
  182. $logModel = new logModel();
  183. return $logModel->getLog($antragsID);
  184. }
  185. public function setErgebnis($antragsID, $ergebniss, $nutzername = NULL)
  186. {
  187. if($nutzername==NULL)
  188. {
  189. $nutzername = $_SESSION["nutzerName"];
  190. }
  191. $antrag = $this->getById($antragsID);
  192. if($this->berechtigt($nutzername, $antrag["gliederung"]))
  193. {
  194. $sql = "SELECT beschlussID FROM antrag WHERE id = ?";
  195. $res = $this->query($sql, array($antragsID));
  196. if(strlen($res[0][0])==NULL)
  197. {
  198. $sql = "SELECT COUNT(id) FROM `antrag` WHERE (gliederung = ?) AND (`beschlussDatum` BETWEEN ? AND ?)";
  199. $res = $this->query($sql, array($antrag["gliederung"], date("Y-m-d")." 00:00:00", date("Y-m-d")." 23:59:59"));
  200. $beschlussIDN = $res[0][0];
  201. $beschlussIDN++;
  202. $beschlussID = date("Ymd");
  203. $beschlussID .= sprintf("%'03d",$beschlussIDN);
  204. $sql = "UPDATE `antrag` SET `beschlussID`= ?, beschlussDatum = CURRENT_TIMESTAMP WHERE id = ?";
  205. $this->insert($sql, array($beschlussID, $antragsID));
  206. }
  207. $sql = "UPDATE `antrag` SET `info`= ? WHERE id = ?";
  208. $res = $this->insert($sql, array($ergebniss, $antragsID));
  209. $logModel = new logModel();
  210. $logModel->addLog($antragsID, $ergebniss, "ergebnis");
  211. //$sql = "INSERT INTO `log`(`id`, `beschlussID`, `time`, `log`) VALUES (NULL, ?, ? ,?)";
  212. //$this->insert($sql, array($antragsID, time(), $nutzername." setzt das Ergebniss auf ".$ergebniss));
  213. if($antrag["antragsstellerMail"]!=NULL)
  214. {
  215. mail($antrag["antragsstellerMail"], "Dein Antrag: ".$antrag["name"]." hat das Ergebniss ".$ergebniss, "Ohai, dein Antrag wurde behandelt.", "From:kontakt@junge-piraten.de");
  216. }
  217. return true;
  218. }
  219. return false;
  220. }
  221. public function setStatus($antragsID, $status)
  222. {
  223. $antrag = $this->getById($antragID);
  224. $tokenModel = new tokenModel();
  225. $tokenModel->setAntrag($antragsID);
  226. $tokenModel->setTokenByUser($antragsID);
  227. //var_dump($tokenModel->berechtigung());
  228. if($tokenModel->berechtigung())
  229. {
  230. $sql = "UPDATE `antrag` SET `status`= ? WHERE id = ?";
  231. $res = $this->query($sql, array($status, $antragsID));
  232. $logModel = new logModel();
  233. $logModel->addLog($antragsID, $status, "status");
  234. //$sql = "INSERT INTO `log`(`id`, `beschlussID`, `time`, `log`) VALUES (NULL, ?, ? ,?)";
  235. //$this->insert($sql, array($antragsID, time(), $_SESSION["nutzerName"]." setzt den Status auf ".$status));
  236. return true;
  237. }
  238. return false;
  239. }
  240. public function listAntrage($antragsFilter)
  241. {
  242. $sqldata = array();
  243. $sql = "SELECT * FROM antrag ";
  244. if($antragsFilter->getGliederung()!=null)
  245. {
  246. $sql .= "WHERE gliederung = ? ";
  247. $sqldata[] = $antragsFilter->getGliederung();
  248. }
  249. else
  250. {
  251. $sql .= "WHERE gliederung != 'Test' ";
  252. }
  253. //status
  254. if($antragsFilter->getAutor()!=null)
  255. {
  256. $sql .= "AND antragssteller = ? ";
  257. $sqldata[] = $antragsFilter->getAutor();
  258. }
  259. if($antragsFilter->getStatus()!=null)
  260. {
  261. $sql .= "AND status = ? ";
  262. $sqldata[] = $antragsFilter->getStatus();
  263. }
  264. $sql .= "ORDER BY `antrag`.`id` DESC ";
  265. $sql .= "LIMIT ".($antragsFilter->getPage()*$antragsFilter->getPageLimit()).", ".($antragsFilter->getPage()*$antragsFilter->getPageLimit()+$antragsFilter->getPageLimit());
  266. //echo $sql;
  267. return $this->query($sql, $sqldata);
  268. }
  269. public function getGliederung($name = null)
  270. {
  271. $sql = "SELECT * FROM gliederung";
  272. if($name!=null)
  273. {
  274. $sql.= ' WHERE name = "'.$name.'"';
  275. }
  276. $res = $this->query($sql, array());
  277. $gliederung = "";
  278. foreach($res as $row)
  279. {
  280. $gliederung[] = $row[0];
  281. }
  282. return $gliederung;
  283. }
  284. public function getGliederungDetails($name = null)
  285. {
  286. $sql = "SELECT * FROM gliederung";
  287. if($name!=null)
  288. {
  289. $sql.= ' WHERE name = "'.$name.'"';
  290. }
  291. $res = $this->query($sql, array());
  292. if($name!=null)
  293. {
  294. return $res[0];
  295. }
  296. return $res;
  297. }
  298. public function getAbstimmungsBerechtigte($gliederung)
  299. {
  300. $sql = "SELECT * FROM `Nutzer2Gliederung` WHERE `gliederung` = ?";
  301. $res = $this->query($sql, array($gliederung));
  302. $name = array();
  303. foreach($res as $row)
  304. {
  305. $name[] = $row[0];
  306. }
  307. return $name;
  308. }
  309. public function getAntragsDaten($antragsID)
  310. {
  311. $time = array();
  312. $sql = "SELECT time FROM `logDetails` WHERE `antragsID` = ? AND `aktion` = 'gestellt'";
  313. $res = $this->query($sql, array($antragsID));
  314. if(isset($res[0]["time"]))
  315. {
  316. $time["gestellt"] = $res[0]["time"];
  317. }
  318. $sql = "SELECT time FROM `logDetails` WHERE `antragsID` = ? AND `aktion` = 'ergebnis' ORDER BY `logDetails`.`time` DESC LIMIT 0, 1";
  319. $res = $this->query($sql, array($antragsID));
  320. if(isset($res[0]["time"]))
  321. {
  322. $time["beschluss"] = $res[0]["time"];
  323. }
  324. return $time;
  325. }
  326. public function getOffeneAntraege()
  327. {
  328. $sql = 'SELECT * FROM `antrag` WHERE NOW() > ADDTIME(`erstellDatum`, "5 1:1:1.000002") AND (`status` = "eingereicht" OR `info` = "abstimmung") AND `gliederung` != "Test"';
  329. $res = $this->query($sql, array());
  330. return $res;
  331. }
  332. public function sendReminders()
  333. {
  334. $res = $this->getOffeneAntraege();
  335. $userModel = new userModel();
  336. foreach($res as $row)
  337. {
  338. $tokens = $this->getTokens($row["id"]);
  339. foreach($tokens as $token)
  340. {
  341. $userModel->generateMail($token["nutzer"], "Reminder", array("token"=>$token["token"], "id"=>$row["id"], "antrag"=>$row));
  342. }
  343. }
  344. }
  345. //Das ist eine seriöse Methode für den Vorstandsbot
  346. public function getNamen($name)
  347. {
  348. $sql = 'SELECT nutzer FROM `Nutzer2Gliederung` WHERE (nutzer = ? OR `namenMapping` = ?) AND `gliederung` = "Bund"';
  349. $res = $this->query($sql, array(trim($name), trim($name)));
  350. if(count($res)==1)
  351. {
  352. return $res[0]["nutzer"];
  353. }
  354. return false;
  355. }
  356. }
  357. class AntragsFilter
  358. {
  359. private $gliederung = null;
  360. private $page = 0;
  361. private $pageLimit = 20;
  362. private $autor = null;
  363. private $status = null;
  364. public function setGliederung($gliederung)
  365. {
  366. $this->gliederung = $gliederung;
  367. }
  368. public function getGliederung()
  369. {
  370. return $this->gliederung;
  371. }
  372. public function setPage($page)
  373. {
  374. $this->page = $page;
  375. }
  376. public function getPage()
  377. {
  378. return $this->page;
  379. }
  380. public function setPageLimit($pageLimit)
  381. {
  382. $this->pageLimit = $pageLimit;
  383. }
  384. public function getPageLimit()
  385. {
  386. return $this->pageLimit;
  387. }
  388. public function setAutor($autor)
  389. {
  390. $this->autor = $autor;
  391. }
  392. public function getAutor()
  393. {
  394. return $this->autor;
  395. }
  396. public function setStatus($status)
  397. {
  398. $this->status = $status;
  399. }
  400. public function getStatus()
  401. {
  402. return $this->status;
  403. }
  404. }
  405. ?>