ZodiacLib.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. /**
  3. * Zodiac Signs
  4. */
  5. class ZodiacLib {
  6. public $error = null;
  7. public static $res = [
  8. self::SIGN_AQUARIUS => 'aquarius',
  9. self::SIGN_ARIES => 'aries',
  10. self::SIGN_CANCER => 'cancer',
  11. self::SIGN_CAPRICORN => 'capricorn',
  12. self::SIGN_GEMINI => 'gemini',
  13. self::SIGN_LEO => 'leo',
  14. self::SIGN_LIBRA => 'libra',
  15. self::SIGN_PISCES => 'pisces',
  16. self::SIGN_SAGITTARIUS => 'sagittarius',
  17. self::SIGN_SCORPIO => 'scorpio',
  18. self::SIGN_TAURUS => 'taurus',
  19. self::SIGN_VIRGO => 'virgo',
  20. ];
  21. public function error() {
  22. return $this->error;
  23. }
  24. /**
  25. * @param int $sign
  26. * @return array(array(m, d), array(m, d)) (first is min, second is max)
  27. */
  28. public function getRange($sign) {
  29. $range = null;
  30. switch ($sign) {
  31. case static::SIGN_AQUARIUS:
  32. $range = [[1, 21], [2, 19]];
  33. break;
  34. case static::SIGN_PISCES:
  35. $range = [[2, 20], [3, 20]];
  36. break;
  37. case static::SIGN_ARIES:
  38. $range = [[3, 21], [4, 20]];
  39. break;
  40. case static::SIGN_TAURUS:
  41. $range = [[4, 21], [5, 21]];
  42. break;
  43. case static::SIGN_GEMINI:
  44. $range = [[5, 22], [6, 21]];
  45. break;
  46. case static::SIGN_CANCER:
  47. $range = [[6, 22], [7, 23]];
  48. break;
  49. case static::SIGN_LEO:
  50. $range = [[7, 24], [8, 23]];
  51. break;
  52. case static::SIGN_VIRGO:
  53. $range = [[8, 24], [9, 23]];
  54. break;
  55. case static::SIGN_LIBRA:
  56. $range = [[9, 24], [10, 23]];
  57. break;
  58. case static::SIGN_SCORPIO:
  59. $range = [[10, 24], [11, 22]];
  60. break;
  61. case static::SIGN_SAGITTARIUS:
  62. $range = [[11, 23], [12, 21]];
  63. break;
  64. case static::SIGN_CAPRICORN:
  65. $range = [[12, 22], [1, 20]];
  66. break;
  67. }
  68. return $range;
  69. }
  70. /**
  71. * Zodiac Sign for given day and month
  72. *
  73. * @param month
  74. * @param day
  75. * expects valid values
  76. * @return int sign or false on failure
  77. */
  78. public function getSign($month, $day) {
  79. switch ($month) {
  80. case 1:
  81. $zodiac = ($day <= 20) ? static::SIGN_CAPRICORN : static::SIGN_AQUARIUS;
  82. break;
  83. case 2:
  84. $zodiac = ($day <= 19) ? static::SIGN_AQUARIUS : static::SIGN_PISCES;
  85. break;
  86. case 3:
  87. $zodiac = ($day <= 20) ? static::SIGN_PISCES : static::SIGN_ARIES;
  88. break;
  89. case 4:
  90. $zodiac = ($day <= 20) ? static::SIGN_ARIES : static::SIGN_TAURUS;
  91. break;
  92. case 5 :
  93. $zodiac = ($day <= 21) ? static::SIGN_TAURUS : static::SIGN_GEMINI;
  94. break;
  95. case 6 :
  96. $zodiac = ($day <= 21) ? static::SIGN_GEMINI : static::SIGN_CANCER;
  97. break;
  98. case 7 :
  99. $zodiac = ($day <= 23) ? static::SIGN_CANCER : static::SIGN_LEO;
  100. break;
  101. case 8 :
  102. $zodiac = ($day <= 23) ? static::SIGN_LEO : static::SIGN_VIRGO;
  103. break;
  104. case 9 :
  105. $zodiac = ($day <= 23) ? static::SIGN_VIRGO : static::SIGN_LIBRA;
  106. break;
  107. case 10 :
  108. $zodiac = ($day <= 23) ? static::SIGN_LIBRA : static::SIGN_SCORPIO;
  109. break;
  110. case 11 :
  111. $zodiac = ($day <= 22) ? static::SIGN_SCORPIO : static::SIGN_SAGITTARIUS;
  112. break;
  113. case 12 :
  114. $zodiac = ($day <= 21) ? static::SIGN_SAGITTARIUS : static::SIGN_CAPRICORN;
  115. break;
  116. }
  117. return $zodiac;
  118. }
  119. /**
  120. * ZodiacLib::getChineseSign()
  121. *
  122. * @param mixed $year
  123. * @param mixed $month
  124. * @param mixed $day
  125. * @return void
  126. */
  127. public function getChineseSign($year, $month, $day) {
  128. //TODO
  129. }
  130. /**
  131. * ZodiacLib::getNativeAmericanSign()
  132. *
  133. * @param mixed $month
  134. * @param mixed $day
  135. * @return void
  136. */
  137. public function getNativeAmericanSign($month, $day) {
  138. //TODO
  139. }
  140. /**
  141. * List of all signs
  142. *
  143. * @return mixed
  144. */
  145. public static function signs($value = null) {
  146. $res = [
  147. static::SIGN_AQUARIUS => __d('tools', 'zodiacAquarius'),
  148. static::SIGN_PISCES => __d('tools', 'zodiacPisces'),
  149. static::SIGN_ARIES => __d('tools', 'zodiacAries'),
  150. static::SIGN_TAURUS => __d('tools', 'zodiacTaurus'),
  151. static::SIGN_GEMINI => __d('tools', 'zodiacGemini'),
  152. static::SIGN_CANCER => __d('tools', 'zodiacCancer'),
  153. static::SIGN_LEO => __d('tools', 'zodiacLeo'),
  154. static::SIGN_VIRGO => __d('tools', 'zodiacVirgo'),
  155. static::SIGN_LIBRA => __d('tools', 'zodiacLibra'),
  156. static::SIGN_SCORPIO => __d('tools', 'zodiacScorpio'),
  157. static::SIGN_SAGITTARIUS => __d('tools', 'zodiacSagittarius'),
  158. static::SIGN_CAPRICORN => __d('tools', 'zodiacCapricorn'),
  159. ];
  160. if ($value === null) {
  161. return $res;
  162. }
  163. return $res[$value];
  164. }
  165. /**
  166. * ZodiacLib::image()
  167. *
  168. * @param int $sign
  169. * @return string
  170. */
  171. public static function image($sign) {
  172. return static::$res[$sign];
  173. }
  174. const SIGN_AQUARIUS = 1; # from 20.01. to 18.02.
  175. const SIGN_PISCES = 2; # from 19 Febbraio to 20 marzo
  176. const SIGN_ARIES = 3;
  177. const SIGN_TAURUS = 4;
  178. const SIGN_GEMINI = 5;
  179. const SIGN_CANCER = 6;
  180. const SIGN_LEO = 7;
  181. const SIGN_VIRGO = 8; # from 23.08. to 22.09.
  182. const SIGN_LIBRA = 9;
  183. const SIGN_SCORPIO = 10;
  184. const SIGN_SAGITTARIUS = 11;
  185. const SIGN_CAPRICORN = 12;
  186. }
  187. /*
  188. 2 aries1.gif from 21 Marzo to 20 Aprile
  189. 3 cancer1.gif from 22 Giugno to 22 luglio
  190. 4 cap1.gif from 22 Dicembre to 20 gennaio
  191. 5 gemini1.gif from 22 Maggio to 22 giugno
  192. 6 leo1.gif from 22 Luglio to 21 agosto
  193. 7 libra1.gif from 24 Settembre to 23 ottobre
  194. 8
  195. 9 sag1.gif from 22 Novembre to 22 dicembre
  196. 10 scorpio1.gif from 24 Ottobre to 21 novembre
  197. 11 taurus1.gif from 21 Aprile to 21 Maggio
  198. Wassermann (21. Januar - 19. Februar)
  199. Fische (20. Februar - 20. März)
  200. Widder (21. März - 20. April)
  201. Stier (21. April - 20. Mai)
  202. Zwillinge (21. Mai - 21. Juni)
  203. Krebs (22. Juni - 22. Juli)
  204. Löwe (23. Juli - 23. August)
  205. Jungfrau (24. August - 23. September)
  206. Waage (24. September - 23. Oktober)
  207. Skorpion (24. Oktober - 22. November)
  208. Schütze (23. November - 21. Dezember)
  209. Steinbock (22. Dezember - 20. Januar)
  210. */