0001_initial.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. import django.db.models.deletion
  2. import django.utils.timezone
  3. from django.conf import settings
  4. from django.db import migrations, models
  5. import misago.users.avatars.store
  6. class Migration(migrations.Migration):
  7. initial = True
  8. dependencies = [("auth", "0001_initial"), ("misago_acl", "0001_initial")]
  9. operations = [
  10. migrations.CreateModel(
  11. name="User",
  12. fields=[
  13. (
  14. "id",
  15. models.AutoField(
  16. verbose_name="ID",
  17. serialize=False,
  18. auto_created=True,
  19. primary_key=True,
  20. ),
  21. ),
  22. ("password", models.CharField(max_length=128, verbose_name="password")),
  23. (
  24. "last_login",
  25. models.DateTimeField(
  26. null=True, blank=True, verbose_name="last login"
  27. ),
  28. ),
  29. ("username", models.CharField(max_length=30)),
  30. ("slug", models.CharField(unique=True, max_length=30)),
  31. ("email", models.EmailField(max_length=255, db_index=True)),
  32. ("email_hash", models.CharField(unique=True, max_length=32)),
  33. (
  34. "joined_on",
  35. models.DateTimeField(
  36. default=django.utils.timezone.now, verbose_name="joined on"
  37. ),
  38. ),
  39. ("joined_from_ip", models.GenericIPAddressField()),
  40. ("last_ip", models.GenericIPAddressField(null=True, blank=True)),
  41. ("is_hiding_presence", models.BooleanField(default=False)),
  42. ("title", models.CharField(max_length=255, null=True, blank=True)),
  43. ("requires_activation", models.PositiveIntegerField(default=0)),
  44. (
  45. "is_staff",
  46. models.BooleanField(
  47. default=False,
  48. help_text="Designates whether the user can log into admin sites.",
  49. verbose_name="staff status",
  50. ),
  51. ),
  52. (
  53. "is_superuser",
  54. models.BooleanField(
  55. default=False,
  56. help_text="Designates that this user has all permissions without explicitly assigning them.",
  57. verbose_name="superuser status",
  58. ),
  59. ),
  60. ("acl_key", models.CharField(max_length=12, null=True, blank=True)),
  61. (
  62. "is_active",
  63. models.BooleanField(
  64. db_index=True,
  65. default=True,
  66. verbose_name="active",
  67. help_text=(
  68. "Designates whether this user should be treated as active. Unselect this instead of deleting "
  69. "accounts."
  70. ),
  71. ),
  72. ),
  73. ("is_active_staff_message", models.TextField(null=True, blank=True)),
  74. (
  75. "groups",
  76. models.ManyToManyField(
  77. related_query_name="user",
  78. related_name="user_set",
  79. to="auth.Group",
  80. blank=True,
  81. help_text="The groups this user belongs to. A user will get all permissions granted to each of his/her group.",
  82. verbose_name="groups",
  83. ),
  84. ),
  85. ("roles", models.ManyToManyField(to="misago_acl.Role")),
  86. (
  87. "user_permissions",
  88. models.ManyToManyField(
  89. related_query_name="user",
  90. related_name="user_set",
  91. to="auth.Permission",
  92. blank=True,
  93. help_text="Specific permissions for this user.",
  94. verbose_name="user permissions",
  95. ),
  96. ),
  97. (
  98. "avatar_tmp",
  99. models.ImageField(
  100. max_length=255,
  101. upload_to=misago.users.avatars.store.upload_to,
  102. null=True,
  103. blank=True,
  104. ),
  105. ),
  106. (
  107. "avatar_src",
  108. models.ImageField(
  109. max_length=255,
  110. upload_to=misago.users.avatars.store.upload_to,
  111. null=True,
  112. blank=True,
  113. ),
  114. ),
  115. (
  116. "avatar_crop",
  117. models.CharField(max_length=255, null=True, blank=True),
  118. ),
  119. ("avatars", models.JSONField(null=True, blank=True)),
  120. ("is_avatar_locked", models.BooleanField(default=False)),
  121. ("avatar_lock_user_message", models.TextField(null=True, blank=True)),
  122. ("avatar_lock_staff_message", models.TextField(null=True, blank=True)),
  123. ("signature", models.TextField(null=True, blank=True)),
  124. ("signature_parsed", models.TextField(null=True, blank=True)),
  125. (
  126. "signature_checksum",
  127. models.CharField(max_length=64, null=True, blank=True),
  128. ),
  129. ("is_signature_locked", models.BooleanField(default=False)),
  130. (
  131. "signature_lock_user_message",
  132. models.TextField(null=True, blank=True),
  133. ),
  134. (
  135. "signature_lock_staff_message",
  136. models.TextField(null=True, blank=True),
  137. ),
  138. ("following", models.PositiveIntegerField(default=0)),
  139. ("followers", models.PositiveIntegerField(default=0)),
  140. (
  141. "limits_private_thread_invites_to",
  142. models.PositiveIntegerField(default=0),
  143. ),
  144. ("unread_private_threads", models.PositiveIntegerField(default=0)),
  145. ("sync_unread_private_threads", models.BooleanField(default=False)),
  146. (
  147. "subscribe_to_started_threads",
  148. models.PositiveIntegerField(default=0),
  149. ),
  150. (
  151. "subscribe_to_replied_threads",
  152. models.PositiveIntegerField(default=0),
  153. ),
  154. ("threads", models.PositiveIntegerField(default=0)),
  155. ("posts", models.PositiveIntegerField(default=0, db_index=True)),
  156. ("last_posted_on", models.DateTimeField(null=True, blank=True)),
  157. ],
  158. options={"abstract": False},
  159. bases=(models.Model,),
  160. ),
  161. migrations.CreateModel(
  162. name="Online",
  163. fields=[
  164. ("current_ip", models.GenericIPAddressField()),
  165. ("last_click", models.DateTimeField(default=django.utils.timezone.now)),
  166. (
  167. "user",
  168. models.OneToOneField(
  169. related_name="online_tracker",
  170. on_delete=django.db.models.deletion.CASCADE,
  171. primary_key=True,
  172. serialize=False,
  173. to=settings.AUTH_USER_MODEL,
  174. ),
  175. ),
  176. ],
  177. options={},
  178. bases=(models.Model,),
  179. ),
  180. migrations.CreateModel(
  181. name="UsernameChange",
  182. fields=[
  183. (
  184. "id",
  185. models.AutoField(
  186. verbose_name="ID",
  187. serialize=False,
  188. auto_created=True,
  189. primary_key=True,
  190. ),
  191. ),
  192. ("changed_by_username", models.CharField(max_length=30)),
  193. ("changed_on", models.DateTimeField(default=django.utils.timezone.now)),
  194. ("new_username", models.CharField(max_length=255)),
  195. ("old_username", models.CharField(max_length=255)),
  196. (
  197. "changed_by",
  198. models.ForeignKey(
  199. related_name="user_renames",
  200. on_delete=django.db.models.deletion.SET_NULL,
  201. blank=True,
  202. to=settings.AUTH_USER_MODEL,
  203. null=True,
  204. ),
  205. ),
  206. (
  207. "user",
  208. models.ForeignKey(
  209. related_name="namechanges",
  210. on_delete=django.db.models.deletion.CASCADE,
  211. to=settings.AUTH_USER_MODEL,
  212. ),
  213. ),
  214. ],
  215. options={"get_latest_by": "changed_on"},
  216. bases=(models.Model,),
  217. ),
  218. migrations.CreateModel(
  219. name="Rank",
  220. fields=[
  221. (
  222. "id",
  223. models.AutoField(
  224. verbose_name="ID",
  225. serialize=False,
  226. auto_created=True,
  227. primary_key=True,
  228. ),
  229. ),
  230. ("name", models.CharField(max_length=255)),
  231. ("slug", models.CharField(unique=True, max_length=255)),
  232. ("description", models.TextField(null=True, blank=True)),
  233. ("title", models.CharField(max_length=255, null=True, blank=True)),
  234. ("css_class", models.CharField(max_length=255, null=True, blank=True)),
  235. ("is_default", models.BooleanField(default=False)),
  236. ("is_tab", models.BooleanField(default=False)),
  237. ("order", models.IntegerField(default=0)),
  238. (
  239. "roles",
  240. models.ManyToManyField(to="misago_acl.Role", null=True, blank=True),
  241. ),
  242. ],
  243. options={"get_latest_by": "order"},
  244. bases=(models.Model,),
  245. ),
  246. migrations.AddField(
  247. model_name="user",
  248. name="rank",
  249. field=models.ForeignKey(
  250. on_delete=django.db.models.deletion.PROTECT,
  251. to_field="id",
  252. blank=True,
  253. to="misago_users.Rank",
  254. null=True,
  255. ),
  256. preserve_default=True,
  257. ),
  258. migrations.AddField(
  259. model_name="user",
  260. name="follows",
  261. field=models.ManyToManyField(
  262. related_name="followed_by", to=settings.AUTH_USER_MODEL
  263. ),
  264. preserve_default=True,
  265. ),
  266. migrations.AddField(
  267. model_name="user",
  268. name="blocks",
  269. field=models.ManyToManyField(
  270. related_name="blocked_by", to=settings.AUTH_USER_MODEL
  271. ),
  272. preserve_default=True,
  273. ),
  274. migrations.CreateModel(
  275. name="ActivityRanking",
  276. fields=[
  277. (
  278. "id",
  279. models.AutoField(
  280. verbose_name="ID",
  281. serialize=False,
  282. auto_created=True,
  283. primary_key=True,
  284. ),
  285. ),
  286. (
  287. "user",
  288. models.ForeignKey(
  289. related_name="+",
  290. on_delete=django.db.models.deletion.CASCADE,
  291. to=settings.AUTH_USER_MODEL,
  292. ),
  293. ),
  294. ("score", models.PositiveIntegerField(default=0, db_index=True)),
  295. ],
  296. options={},
  297. bases=(models.Model,),
  298. ),
  299. migrations.CreateModel(
  300. name="Avatar",
  301. fields=[
  302. (
  303. "id",
  304. models.AutoField(
  305. auto_created=True,
  306. primary_key=True,
  307. serialize=False,
  308. verbose_name="ID",
  309. ),
  310. ),
  311. (
  312. "user",
  313. models.ForeignKey(
  314. on_delete=django.db.models.deletion.CASCADE,
  315. to=settings.AUTH_USER_MODEL,
  316. ),
  317. ),
  318. ("size", models.PositiveIntegerField(default=0)),
  319. (
  320. "image",
  321. models.ImageField(
  322. max_length=255, upload_to=misago.users.avatars.store.upload_to
  323. ),
  324. ),
  325. ],
  326. ),
  327. migrations.CreateModel(
  328. name="AvatarGallery",
  329. fields=[
  330. (
  331. "id",
  332. models.AutoField(
  333. auto_created=True,
  334. primary_key=True,
  335. serialize=False,
  336. verbose_name="ID",
  337. ),
  338. ),
  339. ("gallery", models.CharField(max_length=255)),
  340. (
  341. "image",
  342. models.ImageField(
  343. max_length=255, upload_to=misago.users.avatars.store.upload_to
  344. ),
  345. ),
  346. ],
  347. options={"ordering": ["gallery", "pk"]},
  348. ),
  349. migrations.CreateModel(
  350. name="Ban",
  351. fields=[
  352. (
  353. "id",
  354. models.AutoField(
  355. verbose_name="ID",
  356. serialize=False,
  357. auto_created=True,
  358. primary_key=True,
  359. ),
  360. ),
  361. ("check_type", models.PositiveIntegerField(default=0, db_index=True)),
  362. ("banned_value", models.CharField(max_length=255, db_index=True)),
  363. ("user_message", models.TextField(null=True, blank=True)),
  364. ("staff_message", models.TextField(null=True, blank=True)),
  365. (
  366. "expires_on",
  367. models.DateTimeField(null=True, blank=True, db_index=True),
  368. ),
  369. ("is_checked", models.BooleanField(default=True, db_index=True)),
  370. ],
  371. bases=(models.Model,),
  372. ),
  373. migrations.CreateModel(
  374. name="BanCache",
  375. fields=[
  376. ("user_message", models.TextField(null=True, blank=True)),
  377. ("staff_message", models.TextField(null=True, blank=True)),
  378. ("bans_version", models.PositiveIntegerField(default=0)),
  379. ("expires_on", models.DateTimeField(null=True, blank=True)),
  380. (
  381. "ban",
  382. models.ForeignKey(
  383. on_delete=django.db.models.deletion.SET_NULL,
  384. blank=True,
  385. to="misago_users.Ban",
  386. null=True,
  387. ),
  388. ),
  389. (
  390. "user",
  391. models.OneToOneField(
  392. related_name="ban_cache",
  393. on_delete=django.db.models.deletion.CASCADE,
  394. primary_key=True,
  395. serialize=False,
  396. to=settings.AUTH_USER_MODEL,
  397. ),
  398. ),
  399. ],
  400. options={},
  401. bases=(models.Model,),
  402. ),
  403. ]