{"id":21909758,"url":"https://github.com/ente/timetrack","last_synced_at":"2025-03-22T07:53:00.988Z","repository":{"id":235159596,"uuid":"790179281","full_name":"Ente/timetrack","owner":"Ente","description":"TimeTrack is a PHP-written time recording tool for small businesses","archived":false,"fork":false,"pushed_at":"2025-03-14T18:50:26.000Z","size":719,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-03-14T19:36:01.655Z","etag":null,"topics":["business-solutions","enterprise","timetracking","worktime","worktracker"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ente.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"timetrack","custom":null}},"created_at":"2024-04-22T12:09:46.000Z","updated_at":"2025-03-14T18:50:30.000Z","dependencies_parsed_at":"2024-04-22T13:29:53.810Z","dependency_job_id":"4cbce56c-9378-4437-86ad-9bbcadbafb54","html_url":"https://github.com/Ente/timetrack","commit_stats":null,"previous_names":["ente/timetrack"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ente%2Ftimetrack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ente%2Ftimetrack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ente%2Ftimetrack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ente%2Ftimetrack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ente","download_url":"https://codeload.github.com/Ente/timetrack/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244924801,"owners_count":20532878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["business-solutions","enterprise","timetracking","worktime","worktracker"],"created_at":"2024-11-28T17:25:58.620Z","updated_at":"2025-03-22T07:53:00.982Z","avatar_url":"https://github.com/Ente.png","language":"PHP","readme":"# TimeTrack - small enterprise time recording\n\nTimeTrack aims to be a easy-to-use time recording software for small enterprises.\nIt's a fork from TimeTrack Oval, v6.2 (license-based model, within cloud \u0026 more features)\n\n## Features\n\n- Time recording for your employees (as well as Vacation and Sickness reporting)\n- Email notifications\n- Platform-wide notifications\n- customizable API\n- Logging\n- EN/DE/NL language support\n- Maintenance mode\n- Easy and fast installation\n- LDAP Authentication\n\nThat's not even all of it, you can also generate timesheets (PDF) to export, user creation menu, an \"easymode\" to make it even easier to track your time and a mobile-friendly UI.\nAdditional functionality can be unlocked with TimeTrack Oval\n\n## Installation\n\n### Requirements\n\n- at least PHP 8.2 (`curl|gd|gmp|intl|mbstring|mysqli|openssl|xsl|gettext|dom|ldap`)\n- composer (to install dependencies; phpmailer: for sending emails via smtp, parsedown: markdown parser for the `CHANGELOG.md`, simple-router: does the API routing, yaml: for reading plugin yaml files, ldaptools: for LDAP authentication, dompdf: for PDF generation)\n- Apache2.4 with enabled rewrite mod (optional)\n\nThis software has been tested on Debian 11/12, XAMPP, PHP internal server (e.g. `php -S 0.0.0.0:80`).\n\n### Install dependencies and TimeTrack\n\nSimply install the software by following these steps:\n\n- Install php and requirements: `sudo apt update \u0026\u0026 sudo apt install php8.2 php8.2-curl php8.2-gd php8.2-gmp php8.2-intl php8.2-mbstring php8.2-mysqli php8.2-pgsql php8.2-xsl php8.2-gettext php8.2-dom php8.2-ldap composer git mariadb-server apache2 -y` and enable the apache rewrite mod `a2enmod rewrite \u0026\u0026 service apache2 restart`. If you do not want to use apache2 you can skip this step.\n- Git clone timetrack to e.g. `/var/www`: `cd /var/www \u0026\u0026 git clone https://github.com/Ente/timetrack.git \u0026\u0026 cd timetrack`\n- Install requirements for composer `composer install`\n- Create a new database, e.g. with the name `ab` and create a dedicated user, login (`mysql -u root -p`) then e.g. `timetool`: `CREATE DATABASE ab;` and `CREATE USER 'timetool'@'localhost' IDENTIFIED BY 'yourpassword';` and `GRANT ALL PRIVILEGES ON ab.* TO 'timetool'@'localhost';` don't forget to `FLUSH PRIVILEGES;`!\n- Import the `setup/sql.sql` into your database, e.g. `mysql -u timetool -p ab \u003c /full/path/to/sql.sql`\n- To create your first user, run the `setup/usercreate.php` file, e.g. `php ./usercreate.php admin yourpassword email@admin.com` - `usercreate.php [USERNAME] [PASSWORD] [EMAIL]`\n- Run the statement printed by the `usercreate.php` inside your database (`mysql -u root -p` and `use ab;` then the statement).\n- Configure `app.json` (see below - required changes: `base_url`, `db_user`, `db_password`, `smtp` section and any other if your installation is different) then `mv api/v1/inc/app.json.sample app.json \u0026\u0026 cd /var/www/timetrack`\n- Start webserver e.g. `service apache2 stop \u0026\u0026 php -S 0.0.0.0:80` or using apache2 (then you have to configure the `sites-available` conf yourself)\n\n### Configure app.json\n\nIn step 2, you need to configure the `app.json.sample` within the `api/v1/inc` folder:\n\n- `app_name`: The name of your application, e.g. `ACME Inc. TimeRecording`\n- `base_url`: The Base URL (can also be an IP) of your application, without ending trailing slash and the protocol, e.g. `acme.inc` or `10.10.10.2` (URLs will be built with the http:// protocol, we recommend adding a redirect to https:// if you use an certificate.)\n- `support_email`: An email displayed to users in case of help, e.g. `support@acme.inc`\n- `debug`: (deprecated, but may still unlock certain functionality)\n- `auto_update`: (not yet implemented)\n- `db_*`: Set the connection details for your mysql instance\n- `app`: If set to true, users will be able to use the TimeTrack mobile application\n\n#### **SMTP section**\n\n- `host`: FQDN of your mail server\n- `username`: Username for the mailbox you want to send emails from\n- `password`: Self explaining\n- `port`: Specify a custom port or change the port if you do not want to use encryption\n- `usessl`: Specify if you want to use STARTTLS (false) after initial communication or use SSL (true)\n\nIf you plan to use this system with a Gmail-Account, please be aware that you are not able to use your usual password. You would have to create a seperate `App Password`, you should note down.\nYou can do this following this link: \u003chttps://myaccount.google.com/u/0/apppasswords\u003e or by navigating from \u003chttps://accounts.google.com\u003e to `Security` \u003e `2-Factor Authentication` \u003e `App Passwords`. If you do not see this option on screen, use the link.\n\n#### **Plugins** (Read more at `/api/v1/classes/plugins/docs`)\n\n- `plugins`: Specify if you want to enable or disable plugins (default: true)\n- `path`: Plugins path (default: `/api/v1/classes/plugins/plugins`)\n- `data`: Data path for plugins, relative from the `path` variable (default: `data`)\n- `testing`: Specify if the testing mode is enabled or not. If enabled, plugins which are not bundled within an phar archive are working aswell (e.g. just the source code within the plugins folder).\n\n#### **LDAP**\n\nLDAP authentication works with OpenLDAP and Active Directory.\n\n- `ldap`: Specify if you want to enable (true) or disable (false) LDAP functionality (default: false)\n- `ldap_user`: Serviceaccount to be used by timetrack (e.g. `sa-timetrack`)\n- `ldap_password`: Base64 encoded LDAP user password\n- `ldap_host`: FQDN of your LDAP server (e.g. `dc.example.local`)\n- `ldap_ip`: IP address of your LDAP server (e.g. `1.1.1.1`)\n- `ldap_domain`: The domain your LDAP server controls (e.g. `example.local`)\n- `ldap_basedn`: Base DN for your domain (e.g. `dc=example,dc=local`)\n- `ldap_group`: Group membership required by LDAP users to be able to authenticate (e.g. `Domain Users`, (new group) `TimeTrack Users`)\n- `saf`: Specify if you only have one LDAP server (true) or another one as fallback (false)\n- `saf_*`: If `saf` is set to `false`, please specify the corresponding values to the `saf_*` configuration\n- `create_user`: If set to `true` it creates an user account automatically if the desired account is authenticated and within specified group. If set to `false` login simply fails, even if authenticated.\n\n#### **Export**\n\n##### **PDF**\n\n- `css`: Full path to the CSS file used for the PDF export (default: `api/v1/class/exports/modules/PDFExportModule/css/index.css`) - **optional value**\n\nIf done correctly, you should now be able to access the application via http://BASE_URL/ - redirects to http://BASE_URL/suite/\n\n**Please delete the whole `/setup/` folder after installation**\n\nAfter configuring, please rename the `app.json.sample` to `app.json` (`mv app.json.sample app.json`)\n\n## Maintenance Mode\n\nTo enable the maintenance mode, simply rename the `api/inc/.MAINTENANCE` to `MAINTENANCE` (without the dot) to enable the functionality. No one will be able to access the application, aswell as administrators.\nDisabling is done by renaming the file again.\n\n## Permissions\n\nTimeTrack only differenciates between two user groups:\n\n- `Admin`: This group allows to change application settings, add notifications entries, manage users, manage worktime, sickness and vacation reports\n- `User`: If in this group, you only have access to the elemental functions, like viewing notifications entries, add worktime/vacation/sickness\n\n## Logging\n\nLogs can be found inside the `./data/logs` path, they are named in the following scheme: log-{YEAR}-{MONTH}-{DAY}.log. Log files created do not get deleted automatically.\nAnother useful source, while expieriencing errors is the `/var/log/apache2/errors.log` file, containing the errors created by PHP.\n\n## Language\n\nTimeTrack supports German, English and Dutch. Users currently can't actively switch between any of them, instead TimeTrack uses the locale provided by the browser.\n\n## LDAP\n\nTimeTrack allows you to use your existing LDAP server to authenticate your users against or create users automatically.\nWe use the users Username and the \"Email\" field from your LDAP to create the user within TimeTrack. A special setting `create_user` allows already existing users within the AD to register their account on their own.\nAlso at any time you can login with locally created accounts. However, if the LDAP user but not the local user account exists, login will be denied.\nAlready existing local accounts will get their authentication overwritten if an LDAP user is created with the same username afterwards.\n\nIn order to create accounts automatically if `create_user` is `true` make sure to set the user's email address! Otherwise login fails.\n\nIf above mentioned setting is set to `false` you have to create a user on your own locally and then let the user login with their LDAP credentials. The credentials you have entered will become usable if you disable LDAP or rename the account on your LDAP server.\n\n## Export\n\nThe `ExportModule` allows you to export your data in any format as long as you have a `ExportModule` defined for it.\nTimeTrack ships the `PDFExportModule` and `CSVExportModule` which allows you to export your data in PDF/CSV format through your browser/file.\n\nYou can define your own `ExporModules` by creating a new class in `api/v1/class/exports/modules/MyExportExportModule/MyExportExportModule.em.arbeit.inc.php` and implementing the `ExportModuleInterface` interface found in `api/v1/class/exports/modules/ExportModuleInterface.em.arbeit.inc.php`.\n\nYou can then use your new `MyExportExportModule` the following:\n\n```php\n\u003c?php\nrequire_once 'path/to/arbeitszeit.inc.php';\nuse Arbeitszeit\\Arbeitszeit;\n\n$arbeit = new Arbeitszeit();\n\n$data = $arbeit-\u003eget_all_user_worktime(\"username\");\n\n$arbeit-\u003eexportModule()-\u003eexport([\"module\" =\u003e \"MyExportExportModule\", \"data\" =\u003e $data]);\n// OR\n$arbeit-\u003eexportModule()-\u003egetExportModule(\"MyExportExportModule\")-\u003eexport($data);\n\n```\n\nAs there is currently no Export Area in the UI you have to create the GUI elements on your own.\nYou can specify your own CSS file within the `app.json` `exports -\u003e pdf -\u003e css` setting (full path) - the default is `api/v1/class/exports/modules/PDFExportModule/css/index.css`\n\n## QR codes\n\nYou can use the plugin `QRClock` to generate QR codes for yourself to either clock in or out. The QR code generated can be saved for later use, e.g. print it out.\nCurrently you do have to login before you can use the QR code. This will be reworked to bypass current authentication flow as there is a token embedded in the QR code. Therefore you should be careful with the QR code.\n\nTo use this feature, please download and place the `phpqrcode` folder into the `api/v1/class/plugins/plugins/qrclock/src` folder. You can download the `phpqrcode` library from \u003chttps://sourceforge.net/projects/phpqrcode/\u003e.\nWhen you have done this, you just have to enable the plugin by setting `enabled` within the `plugin.yml` to `true`.\n\nThe link to `phpqrcode` also contains a wiki if you want to modify the plugin.\n\n## CodeClock Plugin\n\nThis plugin allows you to clock in or out using a PIN to authenticate. The plugin is disabled by default and must be enabled in the `plugin.yml`.\nYou can access the plugin by navigating to `Plugins` -\u003e `[codeclock] View PIN`. Admins can reset PINs through the `Plugins` -\u003e `[codeclock] Admin View` page. You must have once accessed the plugin to let it generate the PINs.\n\nTo login with the PIN navigate to http://BASE_URL/api/v1/toil/code and enter your PIN.\n\n## Updates\n\nTimeTrack has to be updated in two ways: database and application.\n\n### Application\n\nIf downloaded from GitHub you can simply pull the latest release e.g. `git pull`\nIf downloaded any other way, just make sure to copy and paste the new files into TimeTrack's root directory.\n\n### Database\n\nYou can update the database by downloading the `setup/upgrade.php` file into your local `setup` directory.\nFrom here on just edit the `$missingUpdate` variable to the desired version as specified.\n\nPlease be aware that you are not able to skip an database update. You have to update one by one, e.g. from 1 -\u003e 2, 2 -\u003e 3, ...\n","funding_links":["https://buymeacoffee.com/timetrack"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fente%2Ftimetrack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fente%2Ftimetrack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fente%2Ftimetrack/lists"}