Tab

From EIK wiki

Meeskond

  • Rene Mändel
  • Mikk Pürg

XML

XML fail

<?xml version="1.0" encoding="utf-8"?>

<chat>
  <toad>
    <tuba id="1" privaatne="true">
      <andmed>
        <nimi><![CDATA[Tuba]]></nimi>
        <looja><![CDATA[Peeter]]></looja>
        <loojaId>1</loojaId>
        <loomisKuupaev>5.03.2015 16:11:22</loomisKuupaev>
        <kustutamisKuupaev></kustutamisKuupaev>
        <parool><![CDATA[pommpomm]]></parool>
        <kirjeldus><![CDATA[Siin on kanali kirjeldus]]></kirjeldus>
      </andmed>
      <sisu>
        <jutt kirjutajaId="1" kirjutajaNimi="Peeter" kuupaev=""><![CDATA[See on siin esimene jutustav lause.]]></jutt>
      </sisu>
    </tuba>
    <tuba id="2" privaatne="false">
      <andmed>
        <nimi><![CDATA[ITK room]]></nimi>
        <looja><![CDATA[Juhan]]></looja>
        <loojaId>1</loojaId>
        <loomisKuupaev>5.03.2015 16:11:22</loomisKuupaev>
        <kustutamisKuupaev>5.03.2015 16:11:22</kustutamisKuupaev>
        <parool><![CDATA[pomm]]></parool>
        <kirjeldus><![CDATA[Tuba ainult ITK tudengitele]]></kirjeldus>
      </andmed>
      <sisu>
        <jutt kirjutajaId="1" kirjutajaNimi="Peeter" kuupaev=""><![CDATA[Täna ma paitasin kassi.]]></jutt>
      </sisu>
    </tuba>
    <tuba id="3" privaatne="false">
      <andmed>
        <nimi><![CDATA[Kiisu generaator]]></nimi>
        <looja><![CDATA[Peeter]]></looja>
        <loojaId>1</loojaId>
        <loomisKuupaev>5.03.2015 16:11:22</loomisKuupaev>
        <kustutamisKuupaev></kustutamisKuupaev>
        <parool><![CDATA[pommpomm]]></parool>
        <kirjeldus><![CDATA[kasse tegelikult siin ei ole]]></kirjeldus>
      </andmed>
      <sisu>
        <jutt kirjutajaId="2" kirjutajaNimi="Juhan" kuupaev=""><![CDATA[See on siin esimene jutustav lause.]]></jutt>
      </sisu>
    </tuba>
  </toad>
  <kasutajad>
    <kasutaja id="1" tyyp="administraator">
      <kasutajanimi><![CDATA[Peeter]]></kasutajanimi>
      <email><![CDATA[Peeter@peeter.ee]]></email>
      <nickname><![CDATA[Peeter]]></nickname>
      <parool><![CDATA[teretere]]></parool>
      <kasutajaLoodudKuupaev>5.03.2015 16:11:22</kasutajaLoodudKuupaev>
      <kasutajaKustutatudKuupaev></kasutajaKustutatudKuupaev>
    </kasutaja>
    <kasutaja id="2" tyyp="kasutaja">
      <kasutajanimi><![CDATA[juhan]]></kasutajanimi>
      <email><![CDATA[Juhan@mail.ee]]></email>
      <nickname><![CDATA[juhh]]></nickname>
      <parool><![CDATA[juhjuh]]></parool>
      <kasutajaLoodudKuupaev>5.03.2015 16:11:22</kasutajaLoodudKuupaev>
      <kasutajaKustutatudKuupaev>5.03.2015 16:11:22</kasutajaKustutatudKuupaev>
    </kasutaja>
  </kasutajad>
</chat>


XSD

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="chat">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="toad">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="tuba">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="andmed">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="nimi" type="xs:string" />
                          <xs:element name="looja" type="xs:string" />
                          <xs:element name="loojaId" type="xs:unsignedInt" />
                          <xs:element name="loomisKuupaev" type="xs:string" />
                          <xs:element name="kustutamisKuupaev" type="xs:string" />
                          <xs:element name="parool" type="xs:string" />
                          <xs:element name="kirjeldus" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="sisu">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="jutt">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="xs:string">
                                  <xs:attribute name="kirjutajaId" type="xs:unsignedInt" use="required" />
                                  <xs:attribute name="kirjutajaNimi" type="xs:string" use="required" />
                                  <xs:attribute name="kuupaev" type="xs:string" use="required" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="privaatne" type="xs:boolean" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="kasutajad">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="kasutaja">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="kasutajanimi" type="xs:string" />
                    <xs:element name="email" type="xs:string" />
                    <xs:element name="nickname" type="xs:string" />
                    <xs:element name="parool" type="xs:string" />
                    <xs:element name="kasutajaLoodudKuupaev" type="xs:string" />
                    <xs:element name="kasutajaKustutatudKuupaev" type="xs:string" />
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="tyyp" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


XSLT

XML to HTML. Kuvab avalike tubade nime, kirjeldust, loojat ja loomiskuupäeva.

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes" />

  <xsl:template match="/">
    <html>
      <body>
        <xsl:for-each select="chat/toad/tuba">
          <xsl:if test="@privaatne = 'false'">
            <h2>
              <xsl:value-of select="andmed/nimi" />
            </h2>
            <h3>
              <xsl:value-of select="andmed/kirjeldus" />
            </h3>
            <ul>
              <li>
                <xsl:value-of select="andmed/looja" />
                <xsl:text> </xsl:text>
              </li>
              <li>
                <xsl:value-of select="andmed/loomisKuupaev" />
                <xsl:text> </xsl:text>
              </li>
            </ul>
          </xsl:if>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Tulemus

XML to HTML. Kuvab kõikide kasutajate hüüdnime ja õigusi.

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="html" indent="yes" />

  <xsl:template match="/">
    <html>
      <body>
        <h2>Kasutajad</h2>
        <table border="1">
          <tr>
            <th>Hüüdnimi</th>
            <th>Õigused</th>
          </tr>
          <xsl:for-each select="chat/kasutajad/kasutaja">
            <tr>
              <td>
                <xsl:value-of select="nickname" />
              </td>
              <td>
                <xsl:value-of select="@tyyp" />
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Tulemus

XML to XML. Kuvab XML failis kõik toad koos id, privaatsuse, kirjelduse ja nimega. Kõige lõpus kuvatakse registreeritud kasutajate arvu.

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="/">
    <chat>
      <toad>
        <xsl:for-each select="chat/toad/tuba">
          <tuba id="{@id}" privaatne="{@privaatne}">
            <xsl:attribute name="kirjeldus">
              <xsl:value-of select="andmed/kirjeldus"/>
            </xsl:attribute>
                <xsl:value-of select="andmed/nimi"/>             
          </tuba>
        </xsl:for-each>
      </toad>
        <kasutajateArv>
          <xsl:value-of select="count(chat/kasutajad/kasutaja)"/>
        </kasutajateArv>
    </chat>
  </xsl:template>
</xsl:stylesheet>

Tulemus

Analüüs

Chati nimi on Dank Chat.


Kirjeldus

Tegemist on erinevatest tubadest koosneva chat süsteemiga. Lehele sisenedes näeb kasutaja sisse logimis võimalust ja selle ligidalt registreerimis nuppu. Registreerimata kasutaja saab külalisena siseneda teatud tubadesse, kus on operaator selle võimalikuks teinud. Registreeritud kasutajal on UI-s lisavõimalusi nagu toa loomine, üldise statistika pärimine, lemmik kanalite näitamine, populaarsemate kanalite näitamine, otsing ja kasutaja info muutmine. Kasutaja saab toaga ühineda ja juttu rääkida.


Must have

  • võimalus sisse ja välja logida
  • registreerida kasutajaid
  • kasutajate kustutamise võimalus
  • kasutaja info lisamine ja muutmine (nickname, sugu, sünnipäev, muu info)
  • kasutaja teenuse kasutamise piiramine ja piirangute haldamine
  • erinevad kasutajagrupid nii tubades, kui ka globaalselt.
  • tubade loomis võimalus
  • tubade kustutamis võimalus
  • tubade info seadmine, muutmine ja kustutamine.
  • toa operaatoril võimalik kasutajatele õiguseid anda, muuta ja võtta.
  • toa operaatoril võimalik kasutajaid toast kickida ja bannida.
  • erinevad tubade grupid
  • üldine statistika kasutajate ja tubade kohta


Nice to have

  • lemmik kanalite meeldejätmine
  • populaarsemate tubade kuvamine
  • toa otsing
  • botid
  • kasutaja saab olla korraga mitmes toas
  • chatlog
  • muud kellad ja viled


ERD mudel

DankChat.PNG

Klientrakendus