0001_initial.py 16 KB

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