Meeskond "Arved": Difference between revisions
(2 intermediate revisions by the same user not shown) | |||
Line 24: | Line 24: | ||
*On võimalik lisada esilehele uudiseid | *On võimalik lisada esilehele uudiseid | ||
*On võimalik kustutada/muuta olemasolevaid uudiseid | *On võimalik kustutada/muuta olemasolevaid uudiseid | ||
*On võimalik muuta olemasolevaid lehti | |||
*Sitemap faili struktuur on muudetav | *Sitemap faili struktuur on muudetav | ||
Tekstiredaktoriks kasutasime [http://ckeditor.com/ CKEditor]'i. CKEditor salvestab sisestatud teksti HTML kujul, säilitades kasutaja poolt sisestatud vormingu. Meie rakenduse esileht näitab uudistest lühemat versiooni ning kui uudisele klikkida, siis on näha terve uudis. Selleks, et seda teostada, ei piisanud lihtsalt CKEditori poolt loodud teksti poolikuks lõikamisest. Tuletame meelde, et CKEditor salvestab teksti HTML kujul. Kui HTML vormingus tekst kuskilt pooleks lõigata, läheb kaduma osa tag'e ja leht ei valideeru enam. Lahenduseks sai loodud järgnev koodijupp, mis loeb sisse tükeldatud HTML stringi ja lisab lõppu puuduvad tagid. | |||
<source lang="csharp"> | |||
/// <summary> | |||
/// Funktsioon, mis võtab sisse html stringi ja teeb selle lühemaks. | |||
/// Ehk string lõigatakse soovitud koha pealt pooleks. Nii käitudes puuduvad stringist tagid, mis | |||
/// olid stringi teises pooles. Need lisatakse hiljem stringi lõppu, et string oleks ikka korralik | |||
/// html. | |||
/// </summary> | |||
/// <param name="maxLength">Stringi maksimum pikkus. See osa stringist, mis ei mahu | |||
/// maksimum pikkuse sisse, jäetakse välja. | |||
/// </param> | |||
/// <param name="content">String, mida hakatakse töötlema</param> | |||
/// <returns>Töödeldud stirng</returns> | |||
private static String getShortContentString(int maxLength, string content) | |||
{ | |||
String contentString = content; | |||
if (contentString.Length > maxLength) | |||
{ | |||
contentString = contentString.Substring(0, maxLength); | |||
Stack<String> tagStack = new Stack<string>(); | |||
bool isInTag = false; | |||
bool isEndTag = false; | |||
bool isInTagName = false; | |||
bool gotTagName = false; | |||
bool isAttrVal = false; | |||
bool foundObjectTag = false; | |||
bool isObjectTagPopped = false; | |||
String tagBuilder = ""; | |||
//prase contentString | |||
for (int i = 0; i < contentString.Length; i++) | |||
{ | |||
if (isInTag == false) | |||
{ | |||
//tagi algus | |||
if (contentString[i] == '<') | |||
{ | |||
isInTag = true; | |||
} | |||
} | |||
else | |||
{ | |||
//ollakse tagi sees | |||
if (contentString[i] == '>') | |||
{ | |||
if (!isEndTag) | |||
{ | |||
if (tagBuilder == "object") | |||
{ | |||
foundObjectTag = true; | |||
} | |||
tagStack.Push(tagBuilder); | |||
Console.WriteLine(tagBuilder); | |||
} | |||
else | |||
{ | |||
try | |||
{ | |||
String s = tagStack.Pop(); | |||
if (s == "object") | |||
{ | |||
isObjectTagPopped = true; | |||
} | |||
Console.WriteLine("removed " + s); | |||
} | |||
catch (Exception ex) | |||
{ | |||
return getShortContentString(maxLength + 200, content); | |||
} | |||
} | |||
tagBuilder = ""; | |||
isInTag = false; | |||
isEndTag = false; | |||
gotTagName = false; | |||
isInTagName = false; | |||
} | |||
else if (contentString[i] == '/') | |||
{ | |||
//algab lõpetav täg | |||
if (!isAttrVal) | |||
isEndTag = true; | |||
} | |||
else if (contentString[i] == '"') | |||
{ | |||
//algab või lõpeb atribuudi väärtus | |||
isAttrVal = !isAttrVal; | |||
} | |||
else | |||
{ | |||
if (contentString[i] != ' ' && isInTagName == false && gotTagName == false) | |||
{ | |||
tagBuilder += contentString[i]; | |||
isInTagName = true; | |||
} | |||
else if (contentString[i] != ' ' && isInTagName == true && gotTagName == false) | |||
{ | |||
tagBuilder += contentString[i]; | |||
} | |||
else if (contentString[i] == ' ' && isInTagName == true && gotTagName == false) | |||
{ | |||
isInTagName = false; | |||
gotTagName = true; | |||
} | |||
} | |||
} | |||
} | |||
Console.WriteLine(isInTag); | |||
if (isInTag) | |||
{ | |||
//remove half tag | |||
for (int i = contentString.Length - 1; i > 0; i--) | |||
{ | |||
if (contentString[i] == '<') | |||
{ | |||
contentString = contentString.Substring(0, i); | |||
break; | |||
} | |||
} | |||
} | |||
//add 3 dots | |||
contentString += "..."; | |||
// Console.WriteLine(tagStack.Count); | |||
int count = tagStack.Count; | |||
if (foundObjectTag == true && isObjectTagPopped == false) | |||
{ | |||
return getShortContentString(maxLength + 200, content); | |||
} | |||
//add missing tags | |||
for (int i = 0; i < count; i++) | |||
{ | |||
String tag = tagStack.Pop(); | |||
contentString += "</" + tag + ">"; | |||
//Console.WriteLine("added tag " + tag); | |||
} | |||
} | |||
return contentString; | |||
} | |||
</source> | |||
== Kasutajakeskond == | == Kasutajakeskond == |
Latest revision as of 19:55, 4 June 2010
Meeskond "Arved"
- Indrek Ots
- Mait Poska
- Joosep Püüa
- Toomas Talviste
- Madis Vellamäe
Ülesanne
Firma arvehaldussüsteem, kus ühel kasutajal, eeltavalt firmaomanikul, on võimalik end registreerida ja see järel registreerida enda firma süsteemis.
Kasutaja saab lisada enda firmale teisi kasutajad, kellel on õigus luua lisada kliente ja luua arveid. Lisaks sellel saab firmale lisada erinevaid kontakte ja arvenumbreid.
CMS
CMS'i funktsionaalsus:
- On võimalik lisada/eemaldada lehti
- Lehele saab anda asukoha menüüs
- On võimalik lisada esilehele uudiseid
- On võimalik kustutada/muuta olemasolevaid uudiseid
- On võimalik muuta olemasolevaid lehti
- Sitemap faili struktuur on muudetav
Tekstiredaktoriks kasutasime CKEditor'i. CKEditor salvestab sisestatud teksti HTML kujul, säilitades kasutaja poolt sisestatud vormingu. Meie rakenduse esileht näitab uudistest lühemat versiooni ning kui uudisele klikkida, siis on näha terve uudis. Selleks, et seda teostada, ei piisanud lihtsalt CKEditori poolt loodud teksti poolikuks lõikamisest. Tuletame meelde, et CKEditor salvestab teksti HTML kujul. Kui HTML vormingus tekst kuskilt pooleks lõigata, läheb kaduma osa tag'e ja leht ei valideeru enam. Lahenduseks sai loodud järgnev koodijupp, mis loeb sisse tükeldatud HTML stringi ja lisab lõppu puuduvad tagid.
/// <summary>
/// Funktsioon, mis võtab sisse html stringi ja teeb selle lühemaks.
/// Ehk string lõigatakse soovitud koha pealt pooleks. Nii käitudes puuduvad stringist tagid, mis
/// olid stringi teises pooles. Need lisatakse hiljem stringi lõppu, et string oleks ikka korralik
/// html.
/// </summary>
/// <param name="maxLength">Stringi maksimum pikkus. See osa stringist, mis ei mahu
/// maksimum pikkuse sisse, jäetakse välja.
/// </param>
/// <param name="content">String, mida hakatakse töötlema</param>
/// <returns>Töödeldud stirng</returns>
private static String getShortContentString(int maxLength, string content)
{
String contentString = content;
if (contentString.Length > maxLength)
{
contentString = contentString.Substring(0, maxLength);
Stack<String> tagStack = new Stack<string>();
bool isInTag = false;
bool isEndTag = false;
bool isInTagName = false;
bool gotTagName = false;
bool isAttrVal = false;
bool foundObjectTag = false;
bool isObjectTagPopped = false;
String tagBuilder = "";
//prase contentString
for (int i = 0; i < contentString.Length; i++)
{
if (isInTag == false)
{
//tagi algus
if (contentString[i] == '<')
{
isInTag = true;
}
}
else
{
//ollakse tagi sees
if (contentString[i] == '>')
{
if (!isEndTag)
{
if (tagBuilder == "object")
{
foundObjectTag = true;
}
tagStack.Push(tagBuilder);
Console.WriteLine(tagBuilder);
}
else
{
try
{
String s = tagStack.Pop();
if (s == "object")
{
isObjectTagPopped = true;
}
Console.WriteLine("removed " + s);
}
catch (Exception ex)
{
return getShortContentString(maxLength + 200, content);
}
}
tagBuilder = "";
isInTag = false;
isEndTag = false;
gotTagName = false;
isInTagName = false;
}
else if (contentString[i] == '/')
{
//algab lõpetav täg
if (!isAttrVal)
isEndTag = true;
}
else if (contentString[i] == '"')
{
//algab või lõpeb atribuudi väärtus
isAttrVal = !isAttrVal;
}
else
{
if (contentString[i] != ' ' && isInTagName == false && gotTagName == false)
{
tagBuilder += contentString[i];
isInTagName = true;
}
else if (contentString[i] != ' ' && isInTagName == true && gotTagName == false)
{
tagBuilder += contentString[i];
}
else if (contentString[i] == ' ' && isInTagName == true && gotTagName == false)
{
isInTagName = false;
gotTagName = true;
}
}
}
}
Console.WriteLine(isInTag);
if (isInTag)
{
//remove half tag
for (int i = contentString.Length - 1; i > 0; i--)
{
if (contentString[i] == '<')
{
contentString = contentString.Substring(0, i);
break;
}
}
}
//add 3 dots
contentString += "...";
// Console.WriteLine(tagStack.Count);
int count = tagStack.Count;
if (foundObjectTag == true && isObjectTagPopped == false)
{
return getShortContentString(maxLength + 200, content);
}
//add missing tags
for (int i = 0; i < count; i++)
{
String tag = tagStack.Pop();
contentString += "</" + tag + ">";
//Console.WriteLine("added tag " + tag);
}
}
return contentString;
}
Kasutajakeskond
Kasutaja võimalused:
- Registreerida firma
- Sisestada andmed
- Lisada kontaktid
- Määrata arvenumbreid
- Hallata arveid
- Luua uusi arveid
- Kuvada vanu arveid
- Edastada arveid elektrooniliseposti teel