Zergling, hast du Urlaub? :P
Ankündigung
Einklappen
Keine Ankündigung bisher.
Arbeitszeitrechner
Einklappen
Neue Werbung 2019
Einklappen
X
-
Für die Statistik würde ich (einen Teil) des eZComponent-Framworks empfehlen. Es bietet schöne Graphenfunktionen (das nur zusätzlich).
Das struktogramm sollte eine person übernehmen, denke ich. Aber Zergling hat ja schon einen erheblichen Teil abgeliefert. Ich finde, dass der Zeitaufwand nicht zu groß ist, weil jeder frei arbeiten kann, jederzeit sein zeug abgeben kann und eben nur einen kleineren Teil schreibt. Die idee ist also wirklich umsetzbar!
Kommentar
-
mich reizt das auch total, vor allen dingen mal zu sehen wie die proffs das machen ^^
zumal hätt ich auch verwendung dafür
wenn mir jemand mal ne (kleine) vorlage gibt wie das auszusehen hat könnt ich sogar mit helfen
wer noch[FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
— The best things in life aren't things[/FONT]
Kommentar
-
ich hatte mal die idee eine 2 tabellen zu erstellen in der einen stehen die projekte und in der anderen die zeiten die erste ist egal was drin steht hauptsache sie hat nen id feld die 2. tabelle hatte ich mir so gedacht
id | projekt | von | bis
wo 'projekt' die id aus der tabelle 1 verbindet um die daten zu bekommen 'von' und 'bis' sind unix_timestamps wobei dann "bis-von" gerechnet wird dann hat man ja nur noch die sec die "gearbeitet wurde"
diese hatte ich dann durch diese funktion gejagt wobei $diff die Differenz von 'von' und 'bis' ist.
PHP-Code:function zeitberechnung($diff)
{
$zeit["stunden"] = 0;
$zeit["minuten"] = 0;
$zeit["sekunden"] = 0;
$zeit["stunden"] = $diff/3600;
$zeit["stunden"]=floor($zeit["stunden"]);
$zeit["minuten"]=($diff-($zeit["stunden"]*3600))/60;
$zeit["minuten"]=floor($zeit["minuten"]);
$zeit["sekunden"]=$diff-$zeit["stunden"]*3600-$zeit["minuten"]*60;
return $zeit;
}
?>
ich hatte mir gesacht das man einfach alle differenzen von allen datensätzen wo projekt = aktuelles projekt ist addiert dann duch diese Funktion jagt und dann kann man ja scho $zeit["stunden"]*$preis oder so etwas machen naja^^ so ging es in meinem kopp weiter bis ich gemerkt hab das ich mal wieder kein bock hab weiterzucoden xD
naja ich habe mir gedacht vllt. könnt ihr ja etwas mit meinem kram anfangen ich würde es nur löschen^^
und bitte keine kommentare zu meinem code ja ich weiß ich mache viele fehler xD^^
Kommentar
-
Dann mal los. Ich schlage vor die Template- (.html) und Skript-Dateien (.php) werden für die selbe Seite jeweils von der selben Person gemacht, es sei denn jemand hat Lust die Variablen-Benennung für alle Seiten festzulegen.
Aufgaben:
Templates/Skripte
Klassen:
Project, Work, DataHandler, AnalyseWork, parseDsn
Wer nimmt was?
Gesamtübersicht:
Voraussetzung
- Projekt-Dummy herunterladen (zB als vhost: http://www.phpfriend.de/forum/ftopic60557.html) - wer nur eine Klasse schreibt brauch das natürlich nicht
- Änderungen an den vorhandenen Projekt-Dummy Dateien bitte melden, Verzeichnisse & Dateien können selbständig angelegt werden
- ab PHP 5.1.x
- Apache mit aktiviertem Allow-Override und ModRewrite
Templates
Startseite
Formular:
- Projekt-Auswahl (<select>)
- von-Feld (<select> Kombination)
- bis-Feld (<select> Kombination),
- Start-Button (schreibt aktuelle Uhrzeit in von-Feld, JavaScript),
- Stop-Button (schreibt aktuelle Uhrzeit in von-Feld, JavaScript, wenn Start-Button nicht gedrückt wurde: Popup-Meldung; schickt Formular ab),
-Formular-Abschicken-Button
Weitere Links:
-Projekt hinzufügen,
-Projekt entfernen
-Auswertung
URI:
/work/add
Dateien:
private/templates/work/add.html
private/modules/work/add.php
Popup-Meldung
Kann per Parameter einen Text übergeben bekommen, OK-Button schließt das Fenster, keine Aktion
URI:
/popup/message/#message-text#
Dateien:
Private/templates/system/popup.html
Private/modules/system/popup.php
Projekt hinzufügen
Formular:
- Projekt-Name-Feld (<input>)
- Stundenlohn (<input>)
- Formular-Abschicken-Button
Weitere Links
- Zurück zur Startseite
URI:
/project/add
Dateien:
Private/templates/project/add.html
Private/modules/project/add.php
Projekt entfernen
Formular:
- Projekt-Auswahl (<select>)
- Formular-Abschicken-Button
Weitere Links
- Zurück zur Startseite
URI:
/project/remove/id-#xy#
Dateien:
Private/templates/project/remove.html
Private/modules/project/remove.php
Eintragungen (Work) auflisten
Liste der letzten 25 Eintragungen
Formular:
- Löschen Button pro Eintragung
URI:
/work/list
Dateien:
Private/templates/project/list.html
Private/modules/project/list.php
Eintragung löschen
keine Darstellung, lediglich Annahme der ID und Rückleitung auf Liste zurück
URI:
/work/remove/id-#xy#
Dateien:
Private/templates/project/remove.html
Private/modules/project/remove.php
Auswertung
Formular:
- Projekt-Auswahl (<select>) + Option „alle“
- Von-Feld (<select> oder <input> Kombination)
- Bis-Feld (<select> oder <input> Kombination)
- Formular-Abschicken-Button
Auswertung:
- ohne Request leer
- sonst Auflistung projektweise, Spalten: Projekt, Zeitraum (minimales von-Datum, maximales von-Datum), Stunden, Stundenlohn, Gesamtbetrag
- letzte Zeile: Gesamtauswertung des Requests
URI:
/work/analyse
Dateien:
Private/templates/work/analyse.html
Private/modules/work/analyse.php
Information zu Templates
In allen Templates (abgesehen vom Popup) sind zu Beginn {include file=“system/head.html“} und am Ende {include file=“system/foot.html“} einzufügen.
Die PHP-Skript Dateien müssen kein Template selbst instanzieren. Ihnen steht das Smarty-Objekt $oTpl zur Verfügung.
JavaScript und CSS
Der Einfachheit halber schreibt ihr benötigtes JavaScript und CSS in eine eigene Datei, die exakt eurem Forennamen entspricht (+ Endung).
Alle CSS- und JS-Dateien werden vor ihrer Darstellung durch PHP geparsed. Falls benötigt könnt ihr also auch PHP-Code einbinden.
Mittels $oTpl->assign(„body“, „#body-id#“) könnt ihr eurem Template eine ID zuweisen, über die ihr dann euer CSS kaskadiert um euch nicht in die Quere zu kommen.
(body#meine-body-id div.xy { background : red } o.ä.)
Formular-Elemente müssen nicht gestylt werden, bzw. Sind in der „form.css“ zu stylen.
PHP-Klassen:
Project
Work
DataHandler
AnalyseWork
PHP-Funktionen:
parseDsn
Bindende Interfaces:
Keine nicht-abgesprochene Änderung erlaubt
PHP-Code:<?php
interface iProject
{
public function __construct($iProjectId = 0);
/**
* @return integer project id
*/
public function getProjectId();
/**
* @return string project name
*/
public function getName();
/**
* @return float money per hour
*/
public function getTimeRate();
/**
* @param string project name
* @param float money per hour for these project
* @return integer new project id or 0 (error)
*/
public function set($sName, $fTimeRate);
}
interface iWork
{
public function __construct($iWorkId = 0);
/**
* @param integer project id
* @param string start, datetime (0000-00-00 00:00:00)
* @param string end, datetime (see above)
*/
public function set($iProjectId, $sStartTime, $sEndTime);
public function getWorkId();
public function getProjectId();
public function getStartTime();
public function getEndTime();
/**
* calculates the timespan between start and end in minutes
* @return integer minutes
*/
public function getTimespan();
}
interface iDataHandler
{
/**
* @param constant type of data handling (csv|database)
* @param string dsn (csv:filename|mysql:dsn-string [mysql://username:password@server/database)])
*/
public function __construct($cDataHandling, $sDSN = null);
/**
* @param object instance of Work-class
* @return bool success
*/
public function addWork($oWork);
/**
* @param integer work id
* @return bool success
*/
public function removeWork($iWorkId);
/**
* @param array list of project ids (or array(0) for all)
* @param string start
* @param string end
* @return array array of Work-objects
*/
public function getWork($aProjectIds, $sStartTime, $sEndTime);
/**
* @param object instance of Project-class
* @return bool success
*/
public function addProject($oProject);
/**
* @param integer project id
* @return bool success
*/
public function removeProject($iProjectId);
/**
* @return array array of Project-objects
*/
public function getProjects();
}
interface iAnalyseWork
{
/**
* the analysis subjects to these Work-objects
*/
public function __construct($aWorkObjects);
/**
* @return string project summarize
*/
public function summarizeProjects();
/**
* @return string first date or datetime (as you like), 0000-00-00[ 00:00:00]
*/
public function getStart();
/**
* @return string last date or datetime
*/
public function getEnd();
/**
* summarize all minutes
* @return integer total minutes
*/
public function getMinutes();
/**
* @return array index:min -> lowest time rate, index:max -> highest time rate, index:avg -> average time rate
*/
public function getTimeRates();
/**
* @return float total sum (hours * time rate per project)
*/
public function getAmount();
}
/**
* parses a dsn string to its single parts
* @param string dsn string
* @return array array keys: db (is static, "mysql"), username, password, hostname, database
*/
function parseDsn($sDsn);
?>
Bei dieser Klasse liegt eigentlich die gesamte Arbeit. Möglicherweise können wir die Klasse nochmal aufteilen in private Methoden für mysql- und csv-Speicherung. Was meint ihr?
Bevor wir richtig anfangen:
Habe ich etwas vergessen, ist etwas falsch?
Zeitplan
- Donnerstag Abend sollten alle Baustellen vergeben sein
- Bis Samstag Mittag Rückmeldung ob bis Sonntag Mittag der Code fertig ist
- Sonntag Mittag, code hier posten oder Dateien zippen und an mich schicken (Email per PM, ich stelle die Dateien dann für alle mit Name/Datum online auf meinen Server)
- Bis Sonntag Abend Auswertung der Einzelteile, Versuch zu mergen (wenn alles klappt: Projekt-Ende)
- Bis Dienstag Abend Bugfixing möglich
- Mittwoch (14. März) Projektende, Download über unser Tutorial möglich
Zeitplan OK? Ich denke er bietet Platz genug.
Kommentar
-
boah! so viel aufwand! waaaahnsinn, ich freu mich jetzt schon
hab grad die strucktur runtergeladen .. ich komm ausm staunen nicht mehr raus! hab bis jetzt noch nie so ein gut durchdachtes projekt angefasst. also ich seh hier einen absoluten lerneffekt, einfach klasse!Habe ich etwas vergessen, ist etwas falsch?Zeitplan OK?
Ich denke er bietet Platz genug.Wer nimmt was?
ich muss aber gestehen das ich auch nicht wirklich ahnung davon habe wie man effektiv zusammenarbeit und schnitstellen zur verfügung stellt. habe bis jetzt immer alles allein erledigt, durch meine kaum vorhandene planung sind solche also eher per zufall entstanden. letztendlich hat sich soagr die verzeichnisstrucktur im nachhinein ergeben ich könnte die templates machen, ist allerdings auch mein erster "echter" versuch mit smarty. wie gesagt ich lass mir auch was zuweisen.
vll bin ich euch auch eher ein klotz am bein, dann guck ich einfach mal nur zu und lerne
wär nett wenn du mal eine beispiel datei posten könntest (nur was ganz kleines) damit ich mir überhaupt vorstellen kann wie ich das zu machen habe :wink:
bin beeindruckt das du dich darauf eingelassen hast leute aufzunehmen die tatsächlich zum ersten mal einen vhost einrichten.
ich glaub ich bin der einzige ^^[FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
— The best things in life aren't things[/FONT]
Kommentar
-
Naja das Projekt ist recht klein, aber es lohnt sich selbst hierfür zuerst die Klassen und ihre Schnittstellen zu definieren.
Das lustige ist, die Programmierung an sich ist dann absolut kein Problem mehr - auch für dich nicht, höchstens weil du meine Planung nicht nachvollziehen kannst, das ist dann aber Erfahrungssache oder mein Planungsfehler.
Zeit in die Plaung zu stecken lohnt sich. Das Projekt ist meiner Meinung nach jetzt schon so gut wie fertig. Die paar Klassen und Templates sind in 2 Stunden gemacht.
Wenn du etwas lernst freut mich das, ein Klotz am Bein ist keiner der sich hier freiwillig engagiert!
Dann weis ich dir einfach mal die Work- und AnalyseWork-Klasse zu. Hast du das Interface verstanden?
http://de.php.net/interfaces
Ich bin mir nicht sicher, ob man in Interfaces überhaupt den Konstruktor definieren darf, notfalls den aus dem Interface entfernen.
Deine Klasse muss also so beginnen:
PHP-Code:<?php
class Work implements iWork
{
}
?>
Zu den Templates, ich mache hier vielleicht gleich mal
Projekt löschen
private/templates/project/remove.html
Code:{include file="head.html"} <form action="{$form.action}" method="{$form.method}"> <select name="{$form.element.project}"> {foreach from=$projects item=project} <option value="{$project.value}">{$project.text}</option> {foreachelse} <option value="0">- es gibt keine Projekte -</option> {/foreach} </select> <input type="submit" value="löschen" /> </form> {include file="foot.html"}
PHP-Code:<?php
$aForm = array(
'action' => _PATH_PROJECT . '/project/remove' /* die Konstante bezieht sich auf das gesamte Projekt, der Pfad auf das Modul, zufällige/unglückliche Namensgleichheit */,
'method' => 'post',
'elements' => array('project' => 'project_id'));
$oTpl->assign('form', $aForm);
$oData = new DataHandler(DATAHANDLER_CSV, 'myjobs.csv');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$oData->removeProject((int) $_POST[$aForm['elements']['project']]);
}
// hier hätten wir schon den ersten Konzept-Fehler, die Daten liegen nicht optimal vor, ich muss sie umwandeln:
$aProjects = array();
foreach ($oData->getProjects() as $oProject) {
$aProjects[] = array('value' => $oProject->getId(), 'text' => $oProject->getName());
}
$oTpl->assign('projects', $aProjects);
?>
Zugegebenermaßen fehlen noch Status-Meldungen, die könnte man eventuell über eine Message-Klasse laufen lassen, die diese dann -wie auch immer- anzeigt.
Aber das wird vorerst zu kompliziert.
Kommentar
-
ist (bedingt durch extremen schlafmangel) schon etwas spät
bis morgen abend habe ich die zugewiesene baustelle (gemäß zeitplan) bestimmt verstanden. nehme die aufgabe gerne entgegen.
tausend dank für die ausführlich antwort!
sry, ich kanns mir nicht verkneifen -> ^^[FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
— The best things in life aren't things[/FONT]
Kommentar
-
Ach nochwas: Das Wort "module" ist in dem Zusammenhang etwas aus der Luft gegriffen. Modul-Verwaltung sieht anders aus.
Update der Projekt-Dummies (lauffähig auch wenn nicht im DocRoot liegend) inklusive "Projekt löschen" Templates und Klassen-Dummies.
http://www.zuckermaeusken.de/files/htdocs-v0.1.zip
Kommentar
-
Habs gerade nur kurz überflogen. Alle achtung, da ist ja schon einiges passiert, Zergling!
Was mir noch aufgefallen ist, dass es noch eine (kleine) Exception klasse geben sollte. Alles andere sieht auf den ersten Blick gut aus. Interfaces sind hier auf sehr gut geeignet.
Morgen vormittag hab ich wieder mehr Zeit und werde mich umfangreicher einbringen.
Gute Nacht!
Kommentar
Kommentar