Things: Moduł obsługujący "rzeczy"

Moduł ten będzie posiadał całą logikę dodawania, przetwarzania, obsługi, aktualizacji, wyświetlania rzeczy dodawanych przez użytkowników.
Zgodnie z "filozofią" drupala musi zawierać niektóre funkcję (hooks) określające zachowanie się modułu.

  • things_access
  • things_perm
  • things_insert
  • things_delete
  • things_update
  • things_load
  • things_block
  • things_menu
  • things_submit
  • things_validate
  • things_view
  • things_form

W razie potrzeby implementacji innego hook'a wymaganego przez moduł powyższa lista będzie się poszerzać.
Opisy funkcjonalności poszczególnych funkcji ze względu na ich skomplikowanie znajdą się w kolejnych issue'ach.

Każdy użytkownik będzie mógł "wystawić" max. 10 wpisów. Każde życzenie oprócz standardowych pól jakie istnieją w nodach będzie zawierało dodatkowe. Do przechowywania tych dodatkowych należy stworzyć tabelę, która zawierać będzie następujące pola:

nid - int - globalny identyfikator wpisu
tid - int - identyfikator w obrębie użytkownika
uid - int - identyfikator użytkownika
status - int - status: zrealizowany(0), niezrealizowany(1), częściowo zrealizowany(2), porzucony(3) itd.
description - varchar - ew. opis dodany przez użytkownika po zmianie statusu na zrealizowany albo porzucony itp.
valid_date - datetime - opcjonalny czas po którym segment zostaje oznaczony jako porzucony
// TODO //

Bardzo ważną cechą tego projektu jest możliwość wyszukiwania podobnych segmentów (lub według zadanych kryteriów). Należy wprowadzić jakiś mechanizm mapowania pomiędzy konkretnymi wpisami. Najprostszą metodą wydaje się być wprowadzenie mechanizmu znaczników (tags). Każdy użytkownik wprowadzając "życzenie" musiałby/mógłby wpisać kilka słów/sformułowań opisujących jego "rzecz". Na tej podstawie system mógłby "podczepić" pod każdy wpis kilka innych prawdopodobnie mu odpowiadających/podobnych. Poza tym funkcjonalność wyszukiwania "ręcznego" była by łatwiejsza do implementacji.

Kolejną cechą projektu mogło by być wyszukiwanie rozdzielnych "rzeczy". System oprócz pola z tagami opisującymi daną rzecz zaproponował by pole z kontrtagami. Każdy użytkownik tworząc wpis mógłby wpisać też przeciwieństwa znaczników. Przykład: dziewczyna - chłopak, dam pracę - szukam pracy, sprzedam - kupię itd. Można też utworzyć osobny słownik najczęściej powtarzających się wpisów. Na tej podstawie można by wyszukiwać też "kontr-wpisy".
Osobnym zagadnieniem jest sam proces wyszukiwania. Może on być zrealizowany najprościej tzn. jeżeli jeden użytkownik wpisał np. telewizor i drugi użytkownik podał to samo hasło to system połączy te dwa zdarzenia. Najprawdopodobniej jednak będzie istnieć duża ilość wpisów różniących się kilkoma literami np. telewizor i telewizory, przemiał i miał, dupa i półdupek itd. Wpisy te z dużym prawdopodobieństwem spełniały by kryteria wyszukiwania lecz w najprostszej wersji systemu nie zostaną znalezione.

Aby przechowywać hasła skojarzone z thingsami należy stworzyć tabele skojarzoną relacyjnie z tabela things:
id - int - identyfikator rekordu, autoincrement
word - varchar - słowo