├── .editorconfig ├── .gitignore ├── .htaccess ├── 2fa.php ├── CONTRIBUTING.md ├── README.md ├── WEB-INF ├── config.php.dist ├── lib │ ├── Auth.class.php │ ├── I18n.class.php │ ├── PieChartEx.class.php │ ├── auth │ │ ├── Auth_db.class.php │ │ └── Auth_ldap.class.php │ ├── common.lib.php │ ├── form │ │ ├── ActionErrors.class.php │ │ ├── ActionForm.class.php │ │ ├── Calendar.class.php │ │ ├── Checkbox.class.php │ │ ├── CheckboxCellRenderer.class.php │ │ ├── CheckboxGroup.class.php │ │ ├── Combobox.class.php │ │ ├── DateField.class.php │ │ ├── DefaultCellRenderer.class.php │ │ ├── FloatField.class.php │ │ ├── Form.class.php │ │ ├── FormElement.class.php │ │ ├── Hidden.class.php │ │ ├── MultipleSelectCombobox.class.php │ │ ├── PasswordField.class.php │ │ ├── Submit.class.php │ │ ├── Table.class.php │ │ ├── TableColumn.class.php │ │ ├── TextArea.class.php │ │ ├── TextField.class.php │ │ └── UploadFile.class.php │ ├── html │ │ └── HttpRequest.class.php │ ├── libchart │ │ ├── classes │ │ │ ├── libchart.php │ │ │ ├── model │ │ │ │ ├── DataSet.php │ │ │ │ ├── Point.php │ │ │ │ ├── XYDataSet.php │ │ │ │ └── XYSeriesDataSet.php │ │ │ └── view │ │ │ │ ├── axis │ │ │ │ ├── Axis.php │ │ │ │ └── Bound.php │ │ │ │ ├── caption │ │ │ │ └── Caption.php │ │ │ │ ├── chart │ │ │ │ ├── BarChart.php │ │ │ │ ├── Chart.php │ │ │ │ ├── HorizontalBarChart.php │ │ │ │ ├── LineChart.php │ │ │ │ ├── PieChart.php │ │ │ │ └── VerticalBarChart.php │ │ │ │ ├── color │ │ │ │ ├── Color.php │ │ │ │ ├── ColorSet.php │ │ │ │ └── Palette.php │ │ │ │ ├── plot │ │ │ │ └── Plot.php │ │ │ │ ├── primitive │ │ │ │ ├── Padding.php │ │ │ │ ├── Primitive.php │ │ │ │ └── Rectangle.php │ │ │ │ └── text │ │ │ │ └── Text.php │ │ └── fonts │ │ │ ├── DejaVuSansCondensed-Bold.ttf │ │ │ └── DejaVuSansCondensed.ttf │ ├── mail │ │ └── Mailer.class.php │ ├── pear │ │ ├── INSTALL │ │ ├── LICENSE │ │ ├── MDB2.php │ │ ├── MDB2 │ │ │ ├── Date.php │ │ │ ├── Driver │ │ │ │ ├── Datatype │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── mysql.php │ │ │ │ │ └── mysqli.php │ │ │ │ ├── Function │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── mysql.php │ │ │ │ │ └── mysqli.php │ │ │ │ ├── Manager │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── mysql.php │ │ │ │ │ └── mysqli.php │ │ │ │ ├── Native │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── mysql.php │ │ │ │ │ └── mysqli.php │ │ │ │ ├── Reverse │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── mysql.php │ │ │ │ │ └── mysqli.php │ │ │ │ ├── mysql.php │ │ │ │ └── mysqli.php │ │ │ ├── Extended.php │ │ │ ├── Iterator.php │ │ │ └── LOB.php │ │ ├── Mail.php │ │ ├── Mail │ │ │ ├── RFC822.php │ │ │ ├── mail.php │ │ │ ├── mock.php │ │ │ ├── null.php │ │ │ ├── sendmail.php │ │ │ ├── smtp.php │ │ │ └── smtpmx.php │ │ ├── Net │ │ │ ├── SMTP.php │ │ │ └── Socket.php │ │ ├── OS │ │ │ └── Guess.php │ │ ├── PEAR.php │ │ ├── PEAR │ │ │ ├── Autoloader.php │ │ │ ├── Builder.php │ │ │ ├── ChannelFile.php │ │ │ ├── ChannelFile │ │ │ │ └── Parser.php │ │ │ ├── Command.php │ │ │ ├── Command │ │ │ │ ├── Auth.php │ │ │ │ ├── Auth.xml │ │ │ │ ├── Build.php │ │ │ │ ├── Build.xml │ │ │ │ ├── Channels.php │ │ │ │ ├── Channels.xml │ │ │ │ ├── Common.php │ │ │ │ ├── Config.php │ │ │ │ ├── Config.xml │ │ │ │ ├── Install.php │ │ │ │ ├── Install.xml │ │ │ │ ├── Mirror.php │ │ │ │ ├── Mirror.xml │ │ │ │ ├── Package.php │ │ │ │ ├── Package.xml │ │ │ │ ├── Pickle.php │ │ │ │ ├── Pickle.xml │ │ │ │ ├── Registry.php │ │ │ │ ├── Registry.xml │ │ │ │ ├── Remote.php │ │ │ │ ├── Remote.xml │ │ │ │ ├── Test.php │ │ │ │ └── Test.xml │ │ │ ├── Common.php │ │ │ ├── Config.php │ │ │ ├── Dependency2.php │ │ │ ├── DependencyDB.php │ │ │ ├── Downloader.php │ │ │ ├── Downloader │ │ │ │ └── Package.php │ │ │ ├── ErrorStack.php │ │ │ ├── Exception.php │ │ │ ├── Frontend.php │ │ │ ├── Frontend │ │ │ │ └── CLI.php │ │ │ ├── Installer.php │ │ │ ├── Installer │ │ │ │ ├── Role.php │ │ │ │ └── Role │ │ │ │ │ ├── Cfg.php │ │ │ │ │ ├── Cfg.xml │ │ │ │ │ ├── Common.php │ │ │ │ │ ├── Data.php │ │ │ │ │ ├── Data.xml │ │ │ │ │ ├── Doc.php │ │ │ │ │ ├── Doc.xml │ │ │ │ │ ├── Ext.php │ │ │ │ │ ├── Ext.xml │ │ │ │ │ ├── Man.php │ │ │ │ │ ├── Man.xml │ │ │ │ │ ├── Php.php │ │ │ │ │ ├── Php.xml │ │ │ │ │ ├── Script.php │ │ │ │ │ ├── Script.xml │ │ │ │ │ ├── Src.php │ │ │ │ │ ├── Src.xml │ │ │ │ │ ├── Test.php │ │ │ │ │ ├── Test.xml │ │ │ │ │ ├── Www.php │ │ │ │ │ └── Www.xml │ │ │ ├── PackageFile.php │ │ │ ├── PackageFile │ │ │ │ ├── Generator │ │ │ │ │ ├── v1.php │ │ │ │ │ └── v2.php │ │ │ │ ├── Parser │ │ │ │ │ ├── v1.php │ │ │ │ │ └── v2.php │ │ │ │ ├── v1.php │ │ │ │ ├── v2.php │ │ │ │ └── v2 │ │ │ │ │ ├── Validator.php │ │ │ │ │ └── rw.php │ │ │ ├── Packager.php │ │ │ ├── REST.php │ │ │ ├── REST │ │ │ │ ├── 10.php │ │ │ │ ├── 11.php │ │ │ │ └── 13.php │ │ │ ├── Registry.php │ │ │ ├── RunTest.php │ │ │ ├── Task │ │ │ │ ├── Common.php │ │ │ │ ├── Postinstallscript.php │ │ │ │ ├── Postinstallscript │ │ │ │ │ └── rw.php │ │ │ │ ├── Replace.php │ │ │ │ ├── Replace │ │ │ │ │ └── rw.php │ │ │ │ ├── Unixeol.php │ │ │ │ ├── Unixeol │ │ │ │ │ └── rw.php │ │ │ │ ├── Windowseol.php │ │ │ │ └── Windowseol │ │ │ │ │ └── rw.php │ │ │ ├── Validate.php │ │ │ ├── Validator │ │ │ │ └── PECL.php │ │ │ └── XMLParser.php │ │ ├── README.rst │ │ ├── System.php │ │ ├── package.dtd │ │ ├── readme_pear_integration.txt │ │ ├── scripts │ │ │ ├── pear.bat │ │ │ ├── pear.sh │ │ │ ├── pearcmd.php │ │ │ ├── peardev.bat │ │ │ ├── peardev.sh │ │ │ ├── pecl.bat │ │ │ ├── pecl.sh │ │ │ └── peclcmd.php │ │ └── template.spec │ ├── smarty │ │ ├── Autoloader.php │ │ ├── Smarty.class.php │ │ ├── bootstrap.php │ │ ├── debug.tpl │ │ ├── functions.php │ │ ├── plugins │ │ │ ├── block.textformat.php │ │ │ ├── function.counter.php │ │ │ ├── function.cycle.php │ │ │ ├── function.fetch.php │ │ │ ├── function.html_checkboxes.php │ │ │ ├── function.html_image.php │ │ │ ├── function.html_options.php │ │ │ ├── function.html_radios.php │ │ │ ├── function.html_select_date.php │ │ │ ├── function.html_select_time.php │ │ │ ├── function.html_table.php │ │ │ ├── function.mailto.php │ │ │ ├── function.math.php │ │ │ ├── modifier.capitalize.php │ │ │ ├── modifier.count.php │ │ │ ├── modifier.date_format.php │ │ │ ├── modifier.debug_print_var.php │ │ │ ├── modifier.escape.php │ │ │ ├── modifier.explode.php │ │ │ ├── modifier.mb_wordwrap.php │ │ │ ├── modifier.number_format.php │ │ │ ├── modifier.regex_replace.php │ │ │ ├── modifier.replace.php │ │ │ ├── modifier.spacify.php │ │ │ ├── modifier.truncate.php │ │ │ ├── modifiercompiler.cat.php │ │ │ ├── modifiercompiler.count_characters.php │ │ │ ├── modifiercompiler.count_paragraphs.php │ │ │ ├── modifiercompiler.count_sentences.php │ │ │ ├── modifiercompiler.count_words.php │ │ │ ├── modifiercompiler.default.php │ │ │ ├── modifiercompiler.escape.php │ │ │ ├── modifiercompiler.from_charset.php │ │ │ ├── modifiercompiler.indent.php │ │ │ ├── modifiercompiler.lower.php │ │ │ ├── modifiercompiler.nl2br.php │ │ │ ├── modifiercompiler.noprint.php │ │ │ ├── modifiercompiler.round.php │ │ │ ├── modifiercompiler.str_repeat.php │ │ │ ├── modifiercompiler.string_format.php │ │ │ ├── modifiercompiler.strip.php │ │ │ ├── modifiercompiler.strip_tags.php │ │ │ ├── modifiercompiler.strlen.php │ │ │ ├── modifiercompiler.to_charset.php │ │ │ ├── modifiercompiler.unescape.php │ │ │ ├── modifiercompiler.upper.php │ │ │ ├── modifiercompiler.wordwrap.php │ │ │ ├── outputfilter.trimwhitespace.php │ │ │ ├── shared.escape_special_chars.php │ │ │ ├── shared.literal_compiler_param.php │ │ │ ├── shared.make_timestamp.php │ │ │ ├── shared.mb_str_replace.php │ │ │ ├── shared.mb_unicode.php │ │ │ └── variablefilter.htmlspecialchars.php │ │ └── sysplugins │ │ │ ├── smarty_cacheresource.php │ │ │ ├── smarty_cacheresource_custom.php │ │ │ ├── smarty_cacheresource_keyvaluestore.php │ │ │ ├── smarty_data.php │ │ │ ├── smarty_internal_block.php │ │ │ ├── smarty_internal_cacheresource_file.php │ │ │ ├── smarty_internal_compile_append.php │ │ │ ├── smarty_internal_compile_assign.php │ │ │ ├── smarty_internal_compile_block.php │ │ │ ├── smarty_internal_compile_block_child.php │ │ │ ├── smarty_internal_compile_block_parent.php │ │ │ ├── smarty_internal_compile_break.php │ │ │ ├── smarty_internal_compile_call.php │ │ │ ├── smarty_internal_compile_capture.php │ │ │ ├── smarty_internal_compile_child.php │ │ │ ├── smarty_internal_compile_config_load.php │ │ │ ├── smarty_internal_compile_continue.php │ │ │ ├── smarty_internal_compile_debug.php │ │ │ ├── smarty_internal_compile_eval.php │ │ │ ├── smarty_internal_compile_extends.php │ │ │ ├── smarty_internal_compile_for.php │ │ │ ├── smarty_internal_compile_foreach.php │ │ │ ├── smarty_internal_compile_function.php │ │ │ ├── smarty_internal_compile_if.php │ │ │ ├── smarty_internal_compile_include.php │ │ │ ├── smarty_internal_compile_insert.php │ │ │ ├── smarty_internal_compile_ldelim.php │ │ │ ├── smarty_internal_compile_make_nocache.php │ │ │ ├── smarty_internal_compile_nocache.php │ │ │ ├── smarty_internal_compile_parent.php │ │ │ ├── smarty_internal_compile_private_block_plugin.php │ │ │ ├── smarty_internal_compile_private_foreachsection.php │ │ │ ├── smarty_internal_compile_private_function_plugin.php │ │ │ ├── smarty_internal_compile_private_modifier.php │ │ │ ├── smarty_internal_compile_private_object_block_function.php │ │ │ ├── smarty_internal_compile_private_object_function.php │ │ │ ├── smarty_internal_compile_private_print_expression.php │ │ │ ├── smarty_internal_compile_private_registered_block.php │ │ │ ├── smarty_internal_compile_private_registered_function.php │ │ │ ├── smarty_internal_compile_private_special_variable.php │ │ │ ├── smarty_internal_compile_rdelim.php │ │ │ ├── smarty_internal_compile_section.php │ │ │ ├── smarty_internal_compile_setfilter.php │ │ │ ├── smarty_internal_compile_shared_inheritance.php │ │ │ ├── smarty_internal_compile_while.php │ │ │ ├── smarty_internal_compilebase.php │ │ │ ├── smarty_internal_config_file_compiler.php │ │ │ ├── smarty_internal_configfilelexer.php │ │ │ ├── smarty_internal_configfileparser.php │ │ │ ├── smarty_internal_data.php │ │ │ ├── smarty_internal_debug.php │ │ │ ├── smarty_internal_errorhandler.php │ │ │ ├── smarty_internal_extension_handler.php │ │ │ ├── smarty_internal_method_addautoloadfilters.php │ │ │ ├── smarty_internal_method_adddefaultmodifiers.php │ │ │ ├── smarty_internal_method_append.php │ │ │ ├── smarty_internal_method_appendbyref.php │ │ │ ├── smarty_internal_method_assignbyref.php │ │ │ ├── smarty_internal_method_assignglobal.php │ │ │ ├── smarty_internal_method_clearallassign.php │ │ │ ├── smarty_internal_method_clearallcache.php │ │ │ ├── smarty_internal_method_clearassign.php │ │ │ ├── smarty_internal_method_clearcache.php │ │ │ ├── smarty_internal_method_clearcompiledtemplate.php │ │ │ ├── smarty_internal_method_clearconfig.php │ │ │ ├── smarty_internal_method_compileallconfig.php │ │ │ ├── smarty_internal_method_compilealltemplates.php │ │ │ ├── smarty_internal_method_configload.php │ │ │ ├── smarty_internal_method_createdata.php │ │ │ ├── smarty_internal_method_getautoloadfilters.php │ │ │ ├── smarty_internal_method_getconfigvariable.php │ │ │ ├── smarty_internal_method_getconfigvars.php │ │ │ ├── smarty_internal_method_getdebugtemplate.php │ │ │ ├── smarty_internal_method_getdefaultmodifiers.php │ │ │ ├── smarty_internal_method_getglobal.php │ │ │ ├── smarty_internal_method_getregisteredobject.php │ │ │ ├── smarty_internal_method_getstreamvariable.php │ │ │ ├── smarty_internal_method_gettags.php │ │ │ ├── smarty_internal_method_gettemplatevars.php │ │ │ ├── smarty_internal_method_literals.php │ │ │ ├── smarty_internal_method_loadfilter.php │ │ │ ├── smarty_internal_method_loadplugin.php │ │ │ ├── smarty_internal_method_mustcompile.php │ │ │ ├── smarty_internal_method_registercacheresource.php │ │ │ ├── smarty_internal_method_registerclass.php │ │ │ ├── smarty_internal_method_registerdefaultconfighandler.php │ │ │ ├── smarty_internal_method_registerdefaultpluginhandler.php │ │ │ ├── smarty_internal_method_registerdefaulttemplatehandler.php │ │ │ ├── smarty_internal_method_registerfilter.php │ │ │ ├── smarty_internal_method_registerobject.php │ │ │ ├── smarty_internal_method_registerplugin.php │ │ │ ├── smarty_internal_method_registerresource.php │ │ │ ├── smarty_internal_method_setautoloadfilters.php │ │ │ ├── smarty_internal_method_setdebugtemplate.php │ │ │ ├── smarty_internal_method_setdefaultmodifiers.php │ │ │ ├── smarty_internal_method_unloadfilter.php │ │ │ ├── smarty_internal_method_unregistercacheresource.php │ │ │ ├── smarty_internal_method_unregisterfilter.php │ │ │ ├── smarty_internal_method_unregisterobject.php │ │ │ ├── smarty_internal_method_unregisterplugin.php │ │ │ ├── smarty_internal_method_unregisterresource.php │ │ │ ├── smarty_internal_nocache_insert.php │ │ │ ├── smarty_internal_parsetree.php │ │ │ ├── smarty_internal_parsetree_code.php │ │ │ ├── smarty_internal_parsetree_dq.php │ │ │ ├── smarty_internal_parsetree_dqcontent.php │ │ │ ├── smarty_internal_parsetree_tag.php │ │ │ ├── smarty_internal_parsetree_template.php │ │ │ ├── smarty_internal_parsetree_text.php │ │ │ ├── smarty_internal_resource_eval.php │ │ │ ├── smarty_internal_resource_extends.php │ │ │ ├── smarty_internal_resource_file.php │ │ │ ├── smarty_internal_resource_php.php │ │ │ ├── smarty_internal_resource_stream.php │ │ │ ├── smarty_internal_resource_string.php │ │ │ ├── smarty_internal_runtime_cachemodify.php │ │ │ ├── smarty_internal_runtime_cacheresourcefile.php │ │ │ ├── smarty_internal_runtime_capture.php │ │ │ ├── smarty_internal_runtime_codeframe.php │ │ │ ├── smarty_internal_runtime_filterhandler.php │ │ │ ├── smarty_internal_runtime_foreach.php │ │ │ ├── smarty_internal_runtime_getincludepath.php │ │ │ ├── smarty_internal_runtime_inheritance.php │ │ │ ├── smarty_internal_runtime_make_nocache.php │ │ │ ├── smarty_internal_runtime_tplfunction.php │ │ │ ├── smarty_internal_runtime_updatecache.php │ │ │ ├── smarty_internal_runtime_updatescope.php │ │ │ ├── smarty_internal_runtime_writefile.php │ │ │ ├── smarty_internal_smartytemplatecompiler.php │ │ │ ├── smarty_internal_template.php │ │ │ ├── smarty_internal_templatebase.php │ │ │ ├── smarty_internal_templatecompilerbase.php │ │ │ ├── smarty_internal_templatelexer.php │ │ │ ├── smarty_internal_templateparser.php │ │ │ ├── smarty_internal_testinstall.php │ │ │ ├── smarty_internal_undefined.php │ │ │ ├── smarty_resource.php │ │ │ ├── smarty_resource_custom.php │ │ │ ├── smarty_resource_recompiled.php │ │ │ ├── smarty_resource_uncompiled.php │ │ │ ├── smarty_security.php │ │ │ ├── smarty_template_cached.php │ │ │ ├── smarty_template_compiled.php │ │ │ ├── smarty_template_config.php │ │ │ ├── smarty_template_resource_base.php │ │ │ ├── smarty_template_source.php │ │ │ ├── smarty_undefined_variable.php │ │ │ ├── smarty_variable.php │ │ │ ├── smartycompilerexception.php │ │ │ └── smartyexception.php │ ├── tdcron │ │ ├── class.tdcron.entry.php │ │ └── class.tdcron.php │ ├── ttAdmin.class.php │ ├── ttBehalfUser.class.php │ ├── ttChartHelper.class.php │ ├── ttClientHelper.class.php │ ├── ttConfigHelper.class.php │ ├── ttCronJobHelper.class.php │ ├── ttDate.class.php │ ├── ttDebugTracer.class.php │ ├── ttExpenseHelper.class.php │ ├── ttFavReportHelper.class.php │ ├── ttFileHelper.class.php │ ├── ttGroup.class.php │ ├── ttGroupExportHelper.class.php │ ├── ttGroupHelper.class.php │ ├── ttInvoiceHelper.class.php │ ├── ttNotificationHelper.class.php │ ├── ttOrgExportHelper.class.php │ ├── ttOrgHelper.class.php │ ├── ttOrgImportHelper.class.php │ ├── ttPeriod.class.php │ ├── ttPredefinedExpenseHelper.class.php │ ├── ttProjectHelper.class.php │ ├── ttRegistrator.class.php │ ├── ttReportHelper.class.php │ ├── ttRoleHelper.class.php │ ├── ttTaskHelper.class.php │ ├── ttTeamHelper.class.php │ ├── ttTemplateHelper.class.php │ ├── ttTimeHelper.class.php │ ├── ttTimesheetHelper.class.php │ ├── ttUser.class.php │ ├── ttUserConfig.class.php │ ├── ttUserHelper.class.php │ └── ttWeekViewHelper.class.php ├── resources │ ├── ca.lang.php │ ├── cs.lang.php │ ├── da.lang.php │ ├── de.lang.php │ ├── en.lang.php │ ├── es.lang.php │ ├── et.lang.php │ ├── fa.lang.php │ ├── fi.lang.php │ ├── fr.lang.php │ ├── gr.lang.php │ ├── he.lang.php │ ├── hu.lang.php │ ├── it.lang.php │ ├── ja.lang.php │ ├── ko.lang.php │ ├── nl.lang.php │ ├── no.lang.php │ ├── pl.lang.php │ ├── pt-br.lang.php │ ├── pt.lang.php │ ├── ro.lang.php │ ├── ru.lang.php │ ├── sk.lang.php │ ├── sl.lang.php │ ├── sr.lang.php │ ├── sv.lang.php │ ├── tr.lang.php │ ├── zh-cn.lang.php │ └── zh-tw.lang.php ├── templates │ ├── 2fa.tpl │ ├── access_denied.tpl │ ├── admin_group_add.tpl │ ├── admin_group_delete.tpl │ ├── admin_group_edit.tpl │ ├── admin_groups.tpl │ ├── admin_options.tpl │ ├── cf_custom_field_add.tpl │ ├── cf_custom_field_delete.tpl │ ├── cf_custom_field_edit.tpl │ ├── cf_custom_fields.tpl │ ├── cf_dropdown_option_add.tpl │ ├── cf_dropdown_option_delete.tpl │ ├── cf_dropdown_option_edit.tpl │ ├── cf_dropdown_options.tpl │ ├── charts.tpl │ ├── client_add.tpl │ ├── client_delete.tpl │ ├── client_edit.tpl │ ├── clients.tpl │ ├── datetime_format_preview.tpl │ ├── display_options.tpl │ ├── entity_files.tpl │ ├── expense_delete.tpl │ ├── expense_edit.tpl │ ├── expenses.tpl │ ├── export.tpl │ ├── file_delete.tpl │ ├── file_download.tpl │ ├── file_edit.tpl │ ├── footer.tpl │ ├── group_add.tpl │ ├── group_advanced_edit.tpl │ ├── group_delete.tpl │ ├── group_edit.tpl │ ├── groups.tpl │ ├── header.tpl │ ├── import.tpl │ ├── index.tpl │ ├── invoice_add.tpl │ ├── invoice_delete.tpl │ ├── invoice_view.tpl │ ├── invoices.tpl │ ├── locking.tpl │ ├── login.db.tpl │ ├── login.ldap.tpl │ ├── login.tpl │ ├── mail.tpl │ ├── notification_add.tpl │ ├── notification_delete.tpl │ ├── notification_edit.tpl │ ├── notifications.tpl │ ├── password_change.tpl │ ├── password_reset.tpl │ ├── plugins.tpl │ ├── predefined_expense_add.tpl │ ├── predefined_expense_delete.tpl │ ├── predefined_expense_edit.tpl │ ├── predefined_expenses.tpl │ ├── profile_edit.tpl │ ├── project_add.tpl │ ├── project_delete.tpl │ ├── project_edit.tpl │ ├── projects.tpl │ ├── puncher.tpl │ ├── puncher_conf.tpl │ ├── quotas.tpl │ ├── register.tpl │ ├── report.tpl │ ├── reports.tpl │ ├── role_add.tpl │ ├── role_delete.tpl │ ├── role_edit.tpl │ ├── roles.tpl │ ├── site_map.tpl │ ├── success.tpl │ ├── swap_roles.tpl │ ├── task_add.tpl │ ├── task_delete.tpl │ ├── task_edit.tpl │ ├── tasks.tpl │ ├── template_add.tpl │ ├── template_delete.tpl │ ├── template_edit.tpl │ ├── templates.tpl │ ├── time.tpl │ ├── time_delete.tpl │ ├── time_edit.tpl │ ├── time_script.tpl │ ├── timesheet_add.tpl │ ├── timesheet_delete.tpl │ ├── timesheet_edit.tpl │ ├── timesheet_view.tpl │ ├── timesheets.tpl │ ├── user_add.tpl │ ├── user_delete.tpl │ ├── user_edit.tpl │ ├── users.tpl │ ├── week.tpl │ ├── week_view.tpl │ └── work_units.tpl └── templates_c │ └── keepme ├── access_denied.php ├── admin_group_add.php ├── admin_group_delete.php ├── admin_group_edit.php ├── admin_groups.php ├── admin_options.php ├── cf_custom_field_add.php ├── cf_custom_field_delete.php ├── cf_custom_field_edit.php ├── cf_custom_fields.php ├── cf_dropdown_option_add.php ├── cf_dropdown_option_delete.php ├── cf_dropdown_option_edit.php ├── cf_dropdown_options.php ├── charts.php ├── client_add.php ├── client_delete.php ├── client_edit.php ├── clients.php ├── cron.php ├── custom_css.php ├── dbinstall.php ├── default.css ├── display_options.php ├── docker-compose.yml ├── dockerfile-db ├── dockerfile-tt ├── expense_delete.php ├── expense_edit.php ├── expense_files.php ├── expenses.php ├── export.php ├── favicon.ico ├── feature_disabled.php ├── file_delete.php ├── file_download.php ├── file_edit.php ├── group_add.php ├── group_advanced_edit.php ├── group_delete.php ├── group_edit.php ├── groups.php ├── img ├── 1x1.gif ├── calendar.gif ├── icon-delete.png ├── icon-edit.png ├── icon-file.png ├── icon-files.png ├── icon-now.png ├── icon-question-mark.png ├── logo.png ├── subm_bg.gif └── top_bg.gif ├── import.php ├── index.php ├── initialize.php ├── invoice_add.php ├── invoice_delete.php ├── invoice_send.php ├── invoice_view.php ├── invoices.php ├── js ├── strftime.js └── strptime.js ├── license.txt ├── locking.php ├── login.php ├── logout.php ├── mysql.sql ├── notification_add.php ├── notification_delete.php ├── notification_edit.php ├── notifications.php ├── password_change.php ├── password_reset.php ├── plugins.php ├── plugins ├── CustomFields.class.php └── MonthlyQuota.class.php ├── predefined_expense_add.php ├── predefined_expense_delete.php ├── predefined_expense_edit.php ├── predefined_expenses.php ├── profile_edit.php ├── project_add.php ├── project_delete.php ├── project_edit.php ├── project_files.php ├── projects.php ├── puncher.php ├── puncher_conf.php ├── quotas.php ├── readme.txt ├── register.php ├── report.php ├── report_send.php ├── reports.php ├── role_add.php ├── role_delete.php ├── role_edit.php ├── roles.php ├── rtl.css ├── site_map.php ├── success.php ├── swap_roles.php ├── task_add.php ├── task_delete.php ├── task_edit.php ├── tasks.php ├── template_add.php ├── template_delete.php ├── template_edit.php ├── templates.php ├── time.php ├── time_delete.php ├── time_edit.php ├── time_files.php ├── timesheet_add.php ├── timesheet_delete.php ├── timesheet_edit.php ├── timesheet_files.php ├── timesheet_view.php ├── timesheets.php ├── tofile.php ├── topdf.php ├── user_add.php ├── user_delete.php ├── user_edit.php ├── users.php ├── week.php ├── week_view.php └── work_units.php /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | trim_trailing_whitespace = false 11 | insert_new_final_line = false 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | WEB-INF/templates_c/*.* 3 | WEB-INF/templates_c/import_* 4 | WEB-INF/templates_c/tt* 5 | WEB-INF/lib/tcpdf/ 6 | nbproject/ 7 | upload/ 8 | .vscode/ 9 | Thumbs.db 10 | *.DS_Store 11 | *~ 12 | .idea/ 13 | api/ 14 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | AddDefaultCharset utf-8 2 | 3 | # Restrict access to Time Tracker only from certain IPs. 4 | # 5 | # See https://www.anuko.com/time-tracker/faq/restrict-access-by-ip.htm for help. 6 | # For this to work make sure AllowOverride is set to All in web server config file. 7 | # Uncomment 3 lines below and set your IP accordingly. 8 | # 9 | # Order Deny,Allow 10 | # Deny from all 11 | # Allow from 127.0.0.1 12 | # 13 | # An example for an entire subnet 192.168.1.0 - 192.168.1.255. 14 | # Order Deny,Allow 15 | # Deny from all 16 | # Allow from 192.168.1 17 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Resources 2 | 3 | * [docs](https://www.anuko.com/time-tracker/features.htm) - detailed documentation about this project (needs updating). 4 | * [forum](https://www.anuko.com/forum/viewforum.php?f=4) - general discussion. 5 | 6 | 7 | # Reporting Bugs 8 | 9 | * GitHub users: create a [new issue](https://github.com/anuko/timetracker/issues) here. 10 | * Forum users: post a [new topic](https://www.anuko.com/forum/viewforum.php?f=4) here. 11 | * Or, send us a [message](https://www.anuko.com/contact.htm). 12 | 13 | 14 | # Reporting Security Issues 15 | 16 | * Use the [contact form](https://www.anuko.com/contact.htm) to report a vulnerability. 17 | * Or send an encrypted email to security_at_anuko_dot_com. Public key to be published soon. 18 | 19 | 20 | # Setting up a Dev Environment 21 | 22 | Docker users: install both docker and docker-compose, then run a dev instance: 23 | ```bash 24 | docker-compose up 25 | ``` 26 | Navigate to: http://localhost:8080 to use Time Tracker. Default credentials for initial login are: 27 | ``` 28 | usr: admin 29 | psw: secret 30 | ``` 31 | 32 | Without docker, perform a manual install of a web server, php, database server, and Time Tracker. Full installation and setup guide can be found [here](https://www.anuko.com/time-tracker/install-guide/index.htm). 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Anuko Time Tracker 2 | 3 | ## About 4 | Anuko [Time Tracker](https://www.anuko.com/time-tracker/index.htm) is an open source, web-based time tracking application written in PHP. It allows you to track the time that employees or colleagues spend working on projects and tasks. It needs a web server such as Apache, IIS, etc. to run on, and a database to keep the data in, such as MySQL. 5 | 6 | ## Terminal Illness of the Owner 7 | December 28, 2023: Nik Okuntseff, the owner and lead software developer at Anuko, developed a terminal illness. Anuko, the company behind Time Tracker, will cease to exist at soon. 8 | 9 | ## Free Hosting 10 | [Anuko](https://www.anuko.com) provides [free hosting](https://www.anuko.com/time-tracker/free-hosting/index.htm) of Time Tracker to individuals and small groups up to 5 users. To start using Time Tracker immediately, create a group at https://timetracker.anuko.com 11 | 12 | ## Resources 13 | * Project home page: https://www.anuko.com/time-tracker/index.htm 14 | * Forum: https://www.anuko.com/forum/viewforum.php?f=4 15 | * Info for developers: https://www.anuko.com/time-tracker/info-for-developers.htm 16 | * How to contribute: https://www.anuko.com/time-tracker/contribute.htm 17 | -------------------------------------------------------------------------------- /WEB-INF/lib/PieChartEx.class.php: -------------------------------------------------------------------------------- 1 | computePercent(); 24 | 25 | if ($hideLabel) { 26 | $this->plot->setGraphPadding(new Padding(0)); 27 | $this->plot->setTitleHeight(0); 28 | } 29 | $this->computeLayout(!$hideLabel); 30 | 31 | $this->createImage(); 32 | 33 | if (!isset($options['hideLogo']) || $options['hideLogo'] == false) 34 | $this->plot->printLogo(); 35 | if (!isset($options['hideTitle']) || $options['hideTitle'] == false) 36 | $this->plot->printTitle(); 37 | if (!isset($options['hidePie']) || $options['hidePie'] == false) 38 | $this->printPie(); 39 | if (!$hideLabel) 40 | $this->printLabel(); 41 | 42 | /*if(isset($options['fileName'])) 43 | imagepng($this->img, $options['fileName']); 44 | else 45 | imagepng($this->img); */ 46 | $this->plot->render($options['fileName']); 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /WEB-INF/lib/form/PasswordField.class.php: -------------------------------------------------------------------------------- 1 | class = 'PasswordField'; 12 | $this->css_class = 'password-field'; 13 | $this->name = $name; 14 | } 15 | 16 | function getHtml() { 17 | if ($this->id == '') $this->id = $this->name; 18 | 19 | $html = "\n\tcss_class\""; 21 | $html.= ' id="'.$this->id.'"'; 22 | $html.= ' name="'.$this->name.'"'; 23 | 24 | if ($this->size != '') 25 | $html.= ' size="'.$this->size.'"'; 26 | 27 | if ($this->style != '') 28 | $html.= ' style="'.$this->style.'"'; 29 | 30 | if ($this->max_length != '') 31 | $html.= ' maxlength="'.$this->max_length.'"'; 32 | 33 | if ($this->on_change != '') 34 | $html.= ' onchange="'.$this->on_change.'"'; 35 | 36 | $html.= ' value="'.htmlspecialchars($this->getValue()).'"'; 37 | $html.= '>'; 38 | return $html; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /WEB-INF/lib/libchart/classes/libchart.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | require_once 'model/Point.php'; 21 | require_once 'model/DataSet.php'; 22 | require_once 'model/XYDataSet.php'; 23 | require_once 'model/XYSeriesDataSet.php'; 24 | 25 | require_once 'view/primitive/Padding.php'; 26 | require_once 'view/primitive/Rectangle.php'; 27 | require_once 'view/primitive/Primitive.php'; 28 | require_once 'view/text/Text.php'; 29 | require_once 'view/color/Color.php'; 30 | require_once 'view/color/ColorSet.php'; 31 | require_once 'view/color/Palette.php'; 32 | require_once 'view/axis/Bound.php'; 33 | require_once 'view/axis/Axis.php'; 34 | require_once 'view/plot/Plot.php'; 35 | require_once 'view/caption/Caption.php'; 36 | require_once 'view/chart/Chart.php'; 37 | require_once 'view/chart/BarChart.php'; 38 | require_once 'view/chart/VerticalBarChart.php'; 39 | require_once 'view/chart/HorizontalBarChart.php'; 40 | require_once 'view/chart/LineChart.php'; 41 | require_once 'view/chart/PieChart.php'; 42 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/libchart/classes/model/DataSet.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Superclass of all data sets. 22 | * 23 | * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) 24 | * Created on 10 may 2007 25 | */ 26 | abstract class DataSet { 27 | } 28 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/libchart/classes/model/Point.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Point of coordinates (X,Y). 22 | * The value of X isn't really of interest, but X is used as a label to display on the horizontal axis. 23 | * 24 | * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) 25 | */ 26 | class Point { 27 | private $x; 28 | private $y; 29 | 30 | /** 31 | * Creates a new sampling point of coordinates (x, y) 32 | * 33 | * @param integer x coordinate (label) 34 | * @param integer y coordinate (value) 35 | */ 36 | public function __construct($x, $y) { 37 | $this->x = $x; 38 | $this->y = $y; 39 | } 40 | 41 | /** 42 | * Gets the x coordinate (label). 43 | * 44 | * @return integer x coordinate (label) 45 | */ 46 | public function getX() { 47 | return $this->x; 48 | } 49 | 50 | /** 51 | * Gets the y coordinate (value). 52 | * 53 | * @return integer y coordinate (value) 54 | */ 55 | public function getY() { 56 | return $this->y; 57 | } 58 | } 59 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/libchart/classes/model/XYDataSet.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Set of data in the form of (x, y) items. 22 | * 23 | * @author Jean-Marc Trémeaux (jm.tremeaux at gmail.com) 24 | * Created on 10 may 2007 25 | */ 26 | class XYDataSet extends DataSet { 27 | private $pointList; 28 | 29 | /** 30 | * Constructor of XYDataSet. 31 | * 32 | */ 33 | public function __construct() { 34 | $this->pointList = array(); 35 | } 36 | 37 | /** 38 | * Add a new point to the dataset. 39 | * 40 | * @param Point Point to add to the dataset 41 | */ 42 | 43 | public function addPoint($point) { 44 | array_push($this->pointList, $point); 45 | } 46 | 47 | /** 48 | * Getter of pointList. 49 | * 50 | * @return List of points. 51 | */ 52 | public function getPointList() { 53 | return $this->pointList; 54 | } 55 | } 56 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/libchart/fonts/DejaVuSansCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/WEB-INF/lib/libchart/fonts/DejaVuSansCondensed-Bold.ttf -------------------------------------------------------------------------------- /WEB-INF/lib/libchart/fonts/DejaVuSansCondensed.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/WEB-INF/lib/libchart/fonts/DejaVuSansCondensed.ttf -------------------------------------------------------------------------------- /WEB-INF/lib/pear/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 1997-2009, 2 | Stig Bakken , 3 | Gregory Beaver , 4 | Helgi Þormar Þorbjörnsson , 5 | Tomas V.V.Cox , 6 | Martin Jansen . 7 | All rights reserved. 8 | 9 | Redistribution and use in source and binary forms, with or without 10 | modification, are permitted provided that the following conditions are met: 11 | 12 | * Redistributions of source code must retain the above copyright notice, 13 | this list of conditions and the following disclaimer. 14 | * Redistributions in binary form must reproduce the above copyright 15 | notice, this list of conditions and the following disclaimer in the 16 | documentation and/or other materials provided with the distribution. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Command/Auth.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Connects and authenticates to remote server [Deprecated in favor of channel-login] 4 | doLogin 5 | li 6 | 7 | <channel name> 8 | WARNING: This function is deprecated in favor of using channel-login 9 | 10 | Log in to a remote channel server. If <channel name> is not supplied, 11 | the default channel is used. To use remote functions in the installer 12 | that require any kind of privileges, you need to log in first. The 13 | username and password you enter here will be stored in your per-user 14 | PEAR configuration (~/.pearrc on Unix-like systems). After logging 15 | in, your username and password will be sent along in subsequent 16 | operations on the remote server. 17 | 18 | 19 | Logs out from the remote server [Deprecated in favor of channel-logout] 20 | doLogout 21 | lo 22 | 23 | 24 | WARNING: This function is deprecated in favor of using channel-logout 25 | 26 | Logs out from the remote server. This command does not actually 27 | connect to the remote server, it only deletes the stored username and 28 | password from your user configuration. 29 | 30 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Command/Build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Build an Extension From C Source 4 | doBuild 5 | b 6 | 7 | [package.xml] 8 | Builds one or more extensions contained in a package. 9 | 10 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Command/Mirror.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Downloads each available package from the default channel 4 | doDownloadAll 5 | da 6 | 7 | 8 | c 9 | specify a channel other than the default channel 10 | CHAN 11 | 12 | 13 | 14 | Requests a list of available packages from the default channel ({config default_channel}) 15 | and downloads them to current working directory. Note: only 16 | packages within preferred_state ({config preferred_state}) will be downloaded 17 | 18 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Command/Pickle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Build PECL Package 4 | doPackage 5 | pi 6 | 7 | 8 | Z 9 | Do not gzip the package file 10 | 11 | 12 | n 13 | Print the name of the packaged file. 14 | 15 | 16 | [descfile] 17 | Creates a PECL package from its package2.xml file. 18 | 19 | An automatic conversion will be made to a package.xml 1.0 and written out to 20 | disk in the current directory as "package.xml". Note that 21 | only simple package.xml 2.0 will be converted. package.xml 2.0 with: 22 | 23 | - dependency types other than required/optional PECL package/ext/php/pearinstaller 24 | - more than one extsrcrelease or zendextsrcrelease 25 | - zendextbinrelease, extbinrelease, phprelease, or bundle release type 26 | - dependency groups 27 | - ignore tags in release filelist 28 | - tasks other than replace 29 | - custom roles 30 | 31 | will cause pickle to fail, and output an error message. If your package2.xml 32 | uses any of these features, you are best off using PEAR_PackageFileManager to 33 | generate both package.xml. 34 | 35 | 36 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Command/Test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Run Regression Tests 4 | doRunTests 5 | rt 6 | 7 | 8 | r 9 | Run tests in child directories, recursively. 4 dirs deep maximum 10 | 11 | 12 | i 13 | actual string of settings to pass to php in format " -d setting=blah" 14 | SETTINGS 15 | 16 | 17 | l 18 | Log test runs/results as they are run 19 | 20 | 21 | q 22 | Only display detail for failed tests 23 | 24 | 25 | s 26 | Display simple output for all tests 27 | 28 | 29 | p 30 | Treat parameters as installed packages from which to run tests 31 | 32 | 33 | u 34 | Search parameters for AllTests.php, and use that to run phpunit-based tests 35 | If none is found, all .phpt tests will be tried instead. 36 | 37 | 38 | t 39 | Output run-tests.log in TAP-compliant format 40 | 41 | 42 | c 43 | CGI php executable (needed for tests with POST/GET section) 44 | PHPCGI 45 | 46 | 47 | x 48 | Generate a code coverage report (requires Xdebug 2.0.0+) 49 | 50 | 51 | [testfile|dir ...] 52 | Run regression tests with PHP's regression testing script (run-tests.php). 53 | 54 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Cfg.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | cfg_dir 9 | 10 | 1 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Data.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Data extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Data.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | data_dir 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Doc.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Doc extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Doc.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | doc_dir 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Ext.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Ext extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Ext.xml: -------------------------------------------------------------------------------- 1 | 2 | extbin 3 | zendextbin 4 | 1 5 | ext_dir 6 | 1 7 | 8 | 9 | 10 | 1 11 | 12 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Man.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 2011 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @version SVN: $Id: $ 13 | * @link http://pear.php.net/package/PEAR 14 | * @since File available since Release 1.10.0 15 | */ 16 | 17 | /** 18 | * @category pear 19 | * @package PEAR 20 | * @author Hannes Magnusson 21 | * @copyright 2011 The Authors 22 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 23 | * @version Release: 1.10.1 24 | * @link http://pear.php.net/package/PEAR 25 | * @since Class available since Release 1.10.0 26 | */ 27 | class PEAR_Installer_Role_Man extends PEAR_Installer_Role_Common {} 28 | ?> 29 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Man.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | man_dir 9 | 1 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Php.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Php extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Php.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | php_dir 9 | 1 10 | 11 | 1 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Script.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Script extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Script.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | bin_dir 9 | 1 10 | 11 | 12 | 1 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Src.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Src extends PEAR_Installer_Role_Common 27 | { 28 | function setup(&$installer, $pkg, $atts, $file) 29 | { 30 | $installer->source_files++; 31 | } 32 | } 33 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Src.xml: -------------------------------------------------------------------------------- 1 | 2 | extsrc 3 | zendextsrc 4 | 1 5 | temp_dir 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Test.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a1 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 1997-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.4.0a1 25 | */ 26 | class PEAR_Installer_Role_Test extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Test.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | test_dir 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Www.php: -------------------------------------------------------------------------------- 1 | 10 | * @copyright 2007-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.7.0 14 | */ 15 | 16 | /** 17 | * @category pear 18 | * @package PEAR 19 | * @author Greg Beaver 20 | * @copyright 2007-2009 The Authors 21 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 22 | * @version Release: 1.10.1 23 | * @link http://pear.php.net/package/PEAR 24 | * @since Class available since Release 1.7.0 25 | */ 26 | class PEAR_Installer_Role_Www extends PEAR_Installer_Role_Common {} 27 | ?> -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Installer/Role/Www.xml: -------------------------------------------------------------------------------- 1 | 2 | php 3 | extsrc 4 | extbin 5 | zendextsrc 6 | zendextbin 7 | 1 8 | www_dir 9 | 1 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Task/Replace/rw.php: -------------------------------------------------------------------------------- 1 | - read/write version 4 | * 5 | * PHP versions 4 and 5 6 | * 7 | * @category pear 8 | * @package PEAR 9 | * @author Greg Beaver 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a10 14 | */ 15 | /** 16 | * Base class 17 | */ 18 | require_once 'PEAR/Task/Replace.php'; 19 | /** 20 | * Abstracts the replace task xml. 21 | * @category pear 22 | * @package PEAR 23 | * @author Greg Beaver 24 | * @copyright 1997-2009 The Authors 25 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 26 | * @version Release: 1.10.1 27 | * @link http://pear.php.net/package/PEAR 28 | * @since Class available since Release 1.4.0a10 29 | */ 30 | class PEAR_Task_Replace_rw extends PEAR_Task_Replace 31 | { 32 | public function __construct(&$pkg, &$config, &$logger, $fileXml) 33 | { 34 | parent::__construct($config, $logger, PEAR_TASK_PACKAGE); 35 | $this->_contents = $fileXml; 36 | $this->_pkg = &$pkg; 37 | $this->_params = array(); 38 | } 39 | 40 | public function validate() 41 | { 42 | return $this->validateXml($this->_pkg, $this->_params, $this->config, $this->_contents); 43 | } 44 | 45 | public function setInfo($from, $to, $type) 46 | { 47 | $this->_params = array('attribs' => array('from' => $from, 'to' => $to, 'type' => $type)); 48 | } 49 | 50 | public function getName() 51 | { 52 | return 'replace'; 53 | } 54 | 55 | public function getXml() 56 | { 57 | return $this->_params; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Task/Unixeol/rw.php: -------------------------------------------------------------------------------- 1 | - read/write version 4 | * 5 | * PHP versions 4 and 5 6 | * 7 | * @category pear 8 | * @package PEAR 9 | * @author Greg Beaver 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a10 14 | */ 15 | /** 16 | * Base class 17 | */ 18 | require_once 'PEAR/Task/Unixeol.php'; 19 | /** 20 | * Abstracts the unixeol task xml. 21 | * @category pear 22 | * @package PEAR 23 | * @author Greg Beaver 24 | * @copyright 1997-2009 The Authors 25 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 26 | * @version Release: 1.10.1 27 | * @link http://pear.php.net/package/PEAR 28 | * @since Class available since Release 1.4.0a10 29 | */ 30 | class PEAR_Task_Unixeol_rw extends PEAR_Task_Unixeol 31 | { 32 | function __construct(&$pkg, &$config, &$logger, $fileXml) 33 | { 34 | parent::__construct($config, $logger, PEAR_TASK_PACKAGE); 35 | $this->_contents = $fileXml; 36 | $this->_pkg = &$pkg; 37 | $this->_params = array(); 38 | } 39 | 40 | public function validate() 41 | { 42 | return true; 43 | } 44 | 45 | public function getName() 46 | { 47 | return 'unixeol'; 48 | } 49 | 50 | public function getXml() 51 | { 52 | return ''; 53 | } 54 | } 55 | ?> 56 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/PEAR/Task/Windowseol/rw.php: -------------------------------------------------------------------------------- 1 | - read/write version 4 | * 5 | * PHP versions 4 and 5 6 | * 7 | * @category pear 8 | * @package PEAR 9 | * @author Greg Beaver 10 | * @copyright 1997-2009 The Authors 11 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 12 | * @link http://pear.php.net/package/PEAR 13 | * @since File available since Release 1.4.0a10 14 | */ 15 | /** 16 | * Base class 17 | */ 18 | require_once 'PEAR/Task/Windowseol.php'; 19 | /** 20 | * Abstracts the windowseol task xml. 21 | * 22 | * @category pear 23 | * @package PEAR 24 | * @author Greg Beaver 25 | * @copyright 1997-2009 The Authors 26 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 27 | * @version Release: 1.10.1 28 | * @link http://pear.php.net/package/PEAR 29 | * @since Class available since Release 1.4.0a10 30 | */ 31 | class PEAR_Task_Windowseol_rw extends PEAR_Task_Windowseol 32 | { 33 | function __construct(&$pkg, &$config, &$logger, $fileXml) 34 | { 35 | parent::__construct($config, $logger, PEAR_TASK_PACKAGE); 36 | $this->_contents = $fileXml; 37 | $this->_pkg = &$pkg; 38 | $this->_params = array(); 39 | } 40 | 41 | public function validate() 42 | { 43 | return true; 44 | } 45 | 46 | public function getName() 47 | { 48 | return 'windowseol'; 49 | } 50 | 51 | public function getXml() 52 | { 53 | return ''; 54 | } 55 | } 56 | ?> 57 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/scripts/pear.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # first find which PHP binary to use 4 | if test "x$PHP_PEAR_PHP_BIN" != "x"; then 5 | PHP="$PHP_PEAR_PHP_BIN" 6 | else 7 | if test "@php_bin@" = '@'php_bin'@'; then 8 | PHP=php 9 | else 10 | PHP="@php_bin@" 11 | fi 12 | fi 13 | 14 | # then look for the right pear include dir 15 | if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then 16 | INCDIR=$PHP_PEAR_INSTALL_DIR 17 | INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR" 18 | else 19 | if test "@php_dir@" = '@'php_dir'@'; then 20 | INCDIR=`dirname $0` 21 | INCARG="" 22 | else 23 | INCDIR="@php_dir@" 24 | INCARG="-d include_path=@php_dir@" 25 | fi 26 | fi 27 | 28 | exec $PHP -C -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" $INCDIR/pearcmd.php "$@" 29 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/scripts/peardev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # first find which PHP binary to use 4 | if test "x$PHP_PEAR_PHP_BIN" != "x"; then 5 | PHP="$PHP_PEAR_PHP_BIN" 6 | else 7 | if test "@php_bin@" = '@'php_bin'@'; then 8 | PHP=php 9 | else 10 | PHP="@php_bin@" 11 | fi 12 | fi 13 | 14 | # then look for the right pear include dir 15 | if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then 16 | INCDIR=$PHP_PEAR_INSTALL_DIR 17 | INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR" 18 | else 19 | if test "@php_dir@" = '@'php_dir'@'; then 20 | INCDIR=`dirname $0` 21 | INCARG="" 22 | else 23 | INCDIR="@php_dir@" 24 | INCARG="-d include_path=@php_dir@" 25 | fi 26 | fi 27 | 28 | exec $PHP -d date.timezone=UTC -d memory_limit="-1" -C -q $INCARG -d output_buffering=1 -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d variables_order=EGPCS -d auto_append_file="" $INCDIR/pearcmd.php "$@" 29 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/scripts/pecl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # first find which PHP binary to use 4 | if test "x$PHP_PEAR_PHP_BIN" != "x"; then 5 | PHP="$PHP_PEAR_PHP_BIN" 6 | else 7 | if test "@php_bin@" = '@'php_bin'@'; then 8 | PHP=php 9 | else 10 | PHP="@php_bin@" 11 | fi 12 | fi 13 | 14 | # then look for the right pear include dir 15 | if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then 16 | INCDIR=$PHP_PEAR_INSTALL_DIR 17 | INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR" 18 | else 19 | if test "@php_dir@" = '@'php_dir'@'; then 20 | INCDIR=`dirname $0` 21 | INCARG="" 22 | else 23 | INCDIR="@php_dir@" 24 | INCARG="-d include_path=@php_dir@" 25 | fi 26 | fi 27 | 28 | exec $PHP -C -n -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@" 29 | -------------------------------------------------------------------------------- /WEB-INF/lib/pear/scripts/peclcmd.php: -------------------------------------------------------------------------------- 1 | 12 | * @author Tomas V.V.Cox 13 | * @copyright 1997-2009 The Authors 14 | * @license http://opensource.org/licenses/bsd-license.php New BSD License 15 | * @link http://pear.php.net/package/PEAR 16 | */ 17 | 18 | /** 19 | * @nodep Gtk 20 | */ 21 | //the space is needed for windows include paths with trailing backslash 22 | // http://pear.php.net/bugs/bug.php?id=19482 23 | if ('@include_path@ ' != '@'.'include_path'.'@ ') { 24 | ini_set('include_path', trim('@include_path@ '). PATH_SEPARATOR . get_include_path()); 25 | $raw = false; 26 | } else { 27 | // this is a raw, uninstalled pear, either a cvs checkout, or php distro 28 | $raw = true; 29 | } 30 | define('PEAR_RUNTYPE', 'pecl'); 31 | require_once 'pearcmd.php'; 32 | /* 33 | * Local variables: 34 | * tab-width: 4 35 | * c-basic-offset: 4 36 | * indent-tabs-mode: nil 37 | * mode: php 38 | * End: 39 | */ 40 | // vim600:syn=php 41 | 42 | ?> 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/bootstrap.php: -------------------------------------------------------------------------------- 1 | 6 | * 7 | * For the full copyright and license information, please view the LICENSE 8 | * file that was distributed with this source code. 9 | */ 10 | /** 11 | * Load and register Smarty Autoloader 12 | */ 13 | if (!class_exists('Smarty_Autoloader')) { 14 | include __DIR__ . '/Autoloader.php'; 15 | } 16 | Smarty_Autoloader::register(true); 17 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/functions.php: -------------------------------------------------------------------------------- 1 | Prior to PHP 8.0.0, if the parameter was neither an array nor an object that implements the Countable interface, 27 | * > 1 would be returned, unless value was null, in which case 0 would be returned. 28 | */ 29 | 30 | if ($arrayOrObject instanceof Countable || is_array($arrayOrObject)) { 31 | return count($arrayOrObject, (int) $mode); 32 | } elseif ($arrayOrObject === null) { 33 | return 0; 34 | } 35 | return 1; 36 | } 37 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifier.explode.php: -------------------------------------------------------------------------------- 1 | =8.1 24 | return explode($separator, $string ?? '', $limit ?? PHP_INT_MAX); 25 | } 26 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifier.number_format.php: -------------------------------------------------------------------------------- 1 | =8.1 25 | return number_format($num ?? 0.0, $decimals, $decimal_separator, $thousands_separator); 26 | } 27 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifier.replace.php: -------------------------------------------------------------------------------- 1 | 16 | * @author Uwe Tews 17 | * 18 | * @param string $string input string 19 | * @param string $search text to search for 20 | * @param string $replace replacement text 21 | * 22 | * @return string 23 | */ 24 | function smarty_modifier_replace($string, $search, $replace) 25 | { 26 | static $is_loaded = false; 27 | if (Smarty::$_MBSTRING) { 28 | if (!$is_loaded) { 29 | if (!is_callable('smarty_mb_str_replace')) { 30 | include_once SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php'; 31 | } 32 | $is_loaded = true; 33 | } 34 | return smarty_mb_str_replace($search, $replace, $string); 35 | } 36 | return str_replace($search, $replace, $string); 37 | } 38 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifier.spacify.php: -------------------------------------------------------------------------------- 1 | 16 | * 17 | * @param string $string input string 18 | * @param string $spacify_char string to insert between characters. 19 | * 20 | * @return string 21 | */ 22 | function smarty_modifier_spacify($string, $spacify_char = ' ') 23 | { 24 | // well… what about charsets besides latin and UTF-8? 25 | return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY)); 26 | } 27 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifiercompiler.cat.php: -------------------------------------------------------------------------------- 1 | 16 | * @author Uwe Tews 17 | * 18 | * @param array $params parameters 19 | * 20 | * @return string with compiled code 21 | */ 22 | function smarty_modifiercompiler_lower($params) 23 | { 24 | if (Smarty::$_MBSTRING) { 25 | return 'mb_strtolower(' . $params[ 0 ] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')'; 26 | } 27 | // no MBString fallback 28 | return 'strtolower(' . $params[ 0 ] . ')'; 29 | } 30 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifiercompiler.nl2br.php: -------------------------------------------------------------------------------- 1 | ]*?>!', ' ', {$params[0]} ?: '')"; 25 | } else { 26 | return 'strip_tags((string) ' . $params[ 0 ] . ')'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifiercompiler.strlen.php: -------------------------------------------------------------------------------- 1 | template->_checkPlugins( 24 | array( 25 | array( 26 | 'function' => 'smarty_literal_compiler_param', 27 | 'file' => SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php' 28 | ) 29 | ) 30 | ); 31 | 32 | $esc_type = smarty_literal_compiler_param($params, 1, 'html'); 33 | 34 | if (!isset($params[ 2 ])) { 35 | $params[ 2 ] = '\'' . addslashes(Smarty::$_CHARSET) . '\''; 36 | } 37 | 38 | switch ($esc_type) { 39 | case 'entity': 40 | case 'htmlall': 41 | if (Smarty::$_MBSTRING) { 42 | return 'html_entity_decode(mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 2 ] . ', \'UTF-8\'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')'; 43 | } 44 | return 'html_entity_decode(' . $params[ 0 ] . ', ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')'; 45 | case 'html': 46 | return 'htmlspecialchars_decode(' . $params[ 0 ] . ', ENT_QUOTES)'; 47 | case 'url': 48 | return 'rawurldecode(' . $params[ 0 ] . ')'; 49 | default: 50 | return $params[ 0 ]; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/modifiercompiler.upper.php: -------------------------------------------------------------------------------- 1 | getPlugin('mb_wordwrap', 'modifier'); 37 | } 38 | return $function . '(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')'; 39 | } 40 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/shared.escape_special_chars.php: -------------------------------------------------------------------------------- 1 | 15 | * 16 | * @param string $string text that should by escaped 17 | * 18 | * @return string 19 | */ 20 | function smarty_function_escape_special_chars($string) 21 | { 22 | if (!is_array($string)) { 23 | $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false); 24 | } 25 | return $string; 26 | } 27 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/shared.literal_compiler_param.php: -------------------------------------------------------------------------------- 1 | 13 | * 14 | * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime() 15 | * 16 | * @return int 17 | */ 18 | function smarty_make_timestamp($string) 19 | { 20 | if (empty($string)) { 21 | // use "now": 22 | return time(); 23 | } elseif ($string instanceof DateTime 24 | || (interface_exists('DateTimeInterface', false) && $string instanceof DateTimeInterface) 25 | ) { 26 | return (int)$string->format('U'); // PHP 5.2 BC 27 | } elseif (strlen($string) === 14 && ctype_digit($string)) { 28 | // it is mysql timestamp format of YYYYMMDDHHMMSS? 29 | return mktime( 30 | substr($string, 8, 2), 31 | substr($string, 10, 2), 32 | substr($string, 12, 2), 33 | substr($string, 4, 2), 34 | substr($string, 6, 2), 35 | substr($string, 0, 4) 36 | ); 37 | } elseif (is_numeric($string)) { 38 | // it is a numeric string, we handle it as timestamp 39 | return (int)$string; 40 | } else { 41 | // strtotime should handle it 42 | $time = strtotime($string); 43 | if ($time === -1 || $time === false) { 44 | // strtotime() was not able to parse $string, use "now": 45 | return time(); 46 | } 47 | return $time; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/plugins/shared.mb_unicode.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_Compile_Child 17 | { 18 | /** 19 | * Tag name 20 | * 21 | * @var string 22 | */ 23 | public $tag = 'block_child'; 24 | } 25 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_compile_block_parent.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compile_Child 17 | { 18 | /** 19 | * Tag name 20 | * 21 | * @var string 22 | */ 23 | public $tag = 'block_parent'; 24 | 25 | /** 26 | * Block type 27 | * 28 | * @var string 29 | */ 30 | public $blockType = 'Parent'; 31 | } 32 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_compile_continue.php: -------------------------------------------------------------------------------- 1 | getAttributes($compiler, $args); 32 | // compile always as nocache 33 | $compiler->tag_nocache = true; 34 | // display debug template 35 | $_output = 36 | "display_debug(\$_smarty_tpl);\n"; 37 | $_output .= "unset(\$_smarty_debug);\n?>"; 38 | return $_output; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_compile_ldelim.php: -------------------------------------------------------------------------------- 1 | getAttributes($compiler, $args); 32 | if ($_attr[ 'nocache' ] === true) { 33 | $compiler->trigger_template_error('nocache option not allowed', null, true); 34 | } 35 | return $compiler->smarty->left_delimiter; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_compile_parent.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | class Smarty_Internal_Compile_Parent extends Smarty_Internal_Compile_Child 17 | { 18 | /** 19 | * Tag name 20 | * 21 | * @var string 22 | */ 23 | public $tag = 'parent'; 24 | 25 | /** 26 | * Block type 27 | * 28 | * @var string 29 | */ 30 | public $blockType = 'Parent'; 31 | } 32 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php: -------------------------------------------------------------------------------- 1 | $_value) { 33 | if (is_int($_key)) { 34 | $_paramsArray[] = "$_key=>$_value"; 35 | } else { 36 | $_paramsArray[] = "'$_key'=>$_value"; 37 | } 38 | } 39 | $callback = array("\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]", "->{$method}"); 40 | return array($callback, $_paramsArray, "array(\$_block_plugin{$this->nesting}, '{$method}')"); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_compile_rdelim.php: -------------------------------------------------------------------------------- 1 | smarty->right_delimiter; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_adddefaultmodifiers.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | if (is_array($modifiers)) { 36 | $smarty->default_modifiers = array_merge($smarty->default_modifiers, $modifiers); 37 | } else { 38 | $smarty->default_modifiers[] = $modifiers; 39 | } 40 | return $obj; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_assignbyref.php: -------------------------------------------------------------------------------- 1 | tpl_vars[ $tpl_var ] = new Smarty_Variable(null, $nocache); 29 | $data->tpl_vars[ $tpl_var ]->value = &$value; 30 | if ($data->_isTplObj() && $data->scope) { 31 | $data->ext->_updateScope->_updateScope($data, $tpl_var); 32 | } 33 | } 34 | return $data; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_assignglobal.php: -------------------------------------------------------------------------------- 1 | _isTplObj()) { 38 | $ptr->tpl_vars[ $varName ] = clone Smarty::$global_tpl_vars[ $varName ]; 39 | $ptr = $ptr->parent; 40 | } 41 | } 42 | return $data; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_clearallassign.php: -------------------------------------------------------------------------------- 1 | tpl_vars = array(); 34 | return $data; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_clearallcache.php: -------------------------------------------------------------------------------- 1 | _clearTemplateCache(); 37 | // load cache resource and call clearAll 38 | $_cache_resource = Smarty_CacheResource::load($smarty, $type); 39 | return $_cache_resource->clearAll($smarty, $exp_time); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_clearassign.php: -------------------------------------------------------------------------------- 1 | tpl_vars[ $curr_var ]); 37 | } 38 | } else { 39 | unset($data->tpl_vars[ $tpl_var ]); 40 | } 41 | return $data; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_clearcache.php: -------------------------------------------------------------------------------- 1 | _clearTemplateCache(); 46 | // load cache resource and call clear 47 | $_cache_resource = Smarty_CacheResource::load($smarty, $type); 48 | return $_cache_resource->clear($smarty, $template_name, $cache_id, $compile_id, $exp_time); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_clearconfig.php: -------------------------------------------------------------------------------- 1 | config_vars[ $name ]); 36 | } else { 37 | $data->config_vars = array(); 38 | } 39 | return $data; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_compileallconfig.php: -------------------------------------------------------------------------------- 1 | compileAll($smarty, $extension, $force_compile, $time_limit, $max_errors, true); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_createdata.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 38 | $dataObj = new Smarty_Data($parent, $smarty, $name); 39 | if ($smarty->debugging) { 40 | Smarty_Internal_Debug::register_data($dataObj); 41 | } 42 | return $dataObj; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getautoloadfilters.php: -------------------------------------------------------------------------------- 1 | array( 'filter1', 'filter2', … ) ) or array( 'filter1', 'filter2', …) if $type 25 | * was specified 26 | * @throws \SmartyException 27 | */ 28 | public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, $type = null) 29 | { 30 | $smarty = $obj->_getSmartyObj(); 31 | if ($type !== null) { 32 | $this->_checkFilterType($type); 33 | return isset($smarty->autoload_filters[ $type ]) ? $smarty->autoload_filters[ $type ] : array(); 34 | } 35 | return $smarty->autoload_filters; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getconfigvariable.php: -------------------------------------------------------------------------------- 1 | ext->configLoad->_getConfigVariable($data, $varName, $errorEnable); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getdebugtemplate.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 33 | return $smarty->debug_tpl; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getdefaultmodifiers.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 33 | return $smarty->default_modifiers; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getglobal.php: -------------------------------------------------------------------------------- 1 | value; 36 | } else { 37 | return ''; 38 | } 39 | } else { 40 | $_result = array(); 41 | foreach (Smarty::$global_tpl_vars as $key => $var) { 42 | $_result[ $key ] = $var->value; 43 | } 44 | return $_result; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getregisteredobject.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 36 | if (!isset($smarty->registered_objects[ $object_name ])) { 37 | throw new SmartyException("'$object_name' is not a registered object"); 38 | } 39 | if (!is_object($smarty->registered_objects[ $object_name ][ 0 ])) { 40 | throw new SmartyException("registered '$object_name' is not an object"); 41 | } 42 | return $smarty->registered_objects[ $object_name ][ 0 ]; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_getstreamvariable.php: -------------------------------------------------------------------------------- 1 | smarty) ? $data->smarty : $data; 44 | if ($smarty->error_unassigned) { 45 | throw new SmartyException('Undefined stream variable "' . $variable . '"'); 46 | } else { 47 | return null; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_registercacheresource.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 39 | $smarty->registered_cache_resources[ $name ] = $resource_handler; 40 | return $obj; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_registerclass.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 38 | // test if exists 39 | if (!class_exists($class_impl)) { 40 | throw new SmartyException("Undefined class '$class_impl' in register template class"); 41 | } 42 | // register the class 43 | $smarty->registered_classes[ $class_name ] = $class_impl; 44 | return $obj; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_registerdefaultconfighandler.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | if (is_callable($callback)) { 36 | $smarty->default_config_handler_func = $callback; 37 | } else { 38 | throw new SmartyException('Default config handler not callable'); 39 | } 40 | return $obj; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 36 | if (is_callable($callback)) { 37 | $smarty->default_plugin_handler_func = $callback; 38 | } else { 39 | throw new SmartyException("Default plugin handler '$callback' not callable"); 40 | } 41 | return $obj; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_registerresource.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 36 | $smarty->registered_resources[ $name ] = $resource_handler; 37 | return $obj; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_setdebugtemplate.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | if (!is_readable($tpl_name)) { 36 | throw new SmartyException("Unknown file '{$tpl_name}'"); 37 | } 38 | $smarty->debug_tpl = $tpl_name; 39 | return $obj; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_setdefaultmodifiers.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | $smarty->default_modifiers = (array)$modifiers; 36 | return $obj; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_unloadfilter.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 31 | $this->_checkFilterType($type); 32 | if (isset($smarty->registered_filters[ $type ])) { 33 | $_filter_name = "smarty_{$type}filter_{$name}"; 34 | if (isset($smarty->registered_filters[ $type ][ $_filter_name ])) { 35 | unset($smarty->registered_filters[ $type ][ $_filter_name ]); 36 | if (empty($smarty->registered_filters[ $type ])) { 37 | unset($smarty->registered_filters[ $type ]); 38 | } 39 | } 40 | } 41 | return $obj; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_unregistercacheresource.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | if (isset($smarty->registered_cache_resources[ $name ])) { 36 | unset($smarty->registered_cache_resources[ $name ]); 37 | } 38 | return $obj; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_unregisterfilter.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 31 | $this->_checkFilterType($type); 32 | if (isset($smarty->registered_filters[ $type ])) { 33 | $name = is_string($callback) ? $callback : $this->_getFilterName($callback); 34 | if (isset($smarty->registered_filters[ $type ][ $name ])) { 35 | unset($smarty->registered_filters[ $type ][ $name ]); 36 | if (empty($smarty->registered_filters[ $type ])) { 37 | unset($smarty->registered_filters[ $type ]); 38 | } 39 | } 40 | } 41 | return $obj; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_unregisterobject.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | if (isset($smarty->registered_objects[ $object_name ])) { 36 | unset($smarty->registered_objects[ $object_name ]); 37 | } 38 | return $obj; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_unregisterplugin.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 36 | if (isset($smarty->registered_plugins[ $type ][ $name ])) { 37 | unset($smarty->registered_plugins[ $type ][ $name ]); 38 | } 39 | return $obj; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_method_unregisterresource.php: -------------------------------------------------------------------------------- 1 | _getSmartyObj(); 35 | if (isset($smarty->registered_resources[ $type ])) { 36 | unset($smarty->registered_resources[ $type ]); 37 | } 38 | return $obj; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_parsetree.php: -------------------------------------------------------------------------------- 1 | data = null; 48 | $this->subtrees = null; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_parsetree_code.php: -------------------------------------------------------------------------------- 1 | data = $data; 29 | } 30 | 31 | /** 32 | * Return buffer content in parentheses 33 | * 34 | * @param \Smarty_Internal_Templateparser $parser 35 | * 36 | * @return string content 37 | */ 38 | public function to_smarty_php(Smarty_Internal_Templateparser $parser) 39 | { 40 | return sprintf('(%s)', $this->data); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_parsetree_dqcontent.php: -------------------------------------------------------------------------------- 1 | data = $data; 29 | } 30 | 31 | /** 32 | * Return content as double quoted string 33 | * 34 | * @param \Smarty_Internal_Templateparser $parser 35 | * 36 | * @return string doubled quoted string 37 | */ 38 | public function to_smarty_php(Smarty_Internal_Templateparser $parser) 39 | { 40 | return '"' . $this->data . '"'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_internal_parsetree_text.php: -------------------------------------------------------------------------------- 1 | data = $data; 35 | $this->toBeStripped = $toBeStripped; 36 | } 37 | 38 | /** 39 | * Wether this section should be stripped on output to smarty php 40 | * @return bool 41 | */ 42 | public function isToBeStripped() { 43 | return $this->toBeStripped; 44 | } 45 | 46 | /** 47 | * Return buffer content 48 | * 49 | * @param \Smarty_Internal_Templateparser $parser 50 | * 51 | * @return string text 52 | */ 53 | public function to_smarty_php(Smarty_Internal_Templateparser $parser) 54 | { 55 | return $this->data; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_resource_uncompiled.php: -------------------------------------------------------------------------------- 1 | filepath = $_template->source->filepath; 42 | $compiled->timestamp = $_template->source->timestamp; 43 | $compiled->exists = $_template->source->exists; 44 | if ($_template->smarty->merge_compiled_includes || $_template->source->handler->checkTimestamps()) { 45 | $compiled->file_dependency[ $_template->source->uid ] = 46 | array($compiled->filepath, $compiled->timestamp, $_template->source->type,); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smarty_undefined_variable.php: -------------------------------------------------------------------------------- 1 | value = $value; 36 | $this->nocache = $nocache; 37 | } 38 | 39 | /** 40 | * <> String conversion 41 | * 42 | * @return string 43 | */ 44 | public function __toString() 45 | { 46 | return (string)$this->value; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /WEB-INF/lib/smarty/sysplugins/smartyexception.php: -------------------------------------------------------------------------------- 1 | Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- '; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /WEB-INF/lib/tdcron/class.tdcron.entry.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/WEB-INF/lib/tdcron/class.tdcron.entry.php -------------------------------------------------------------------------------- /WEB-INF/templates/2fa.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 |
{$i18n.form.2fa.hint}
5 | {$forms.twoFactorAuthForm.open} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
{$forms.twoFactorAuthForm.login.control}
{$forms.twoFactorAuthForm.password.control}
{$forms.twoFactorAuthForm.auth_code.control}
{$forms.twoFactorAuthForm.btn_login.control}
29 | {$forms.twoFactorAuthForm.close} 30 | 31 | -------------------------------------------------------------------------------- /WEB-INF/templates/access_denied.tpl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /WEB-INF/templates/admin_group_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.groupForm.open} 5 |
{$group_to_delete|escape}
6 |
{$forms.groupForm.btn_delete.control} {$forms.groupForm.btn_cancel.control}
7 | {$forms.groupForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/admin_groups.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | 7 | 8 |
{$i18n.form.groups.hint}
9 | {if $groups} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | {foreach $groups as $group} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {/foreach} 29 |
{$i18n.label.id}{$i18n.label.thing_name}{$i18n.label.date}{$i18n.label.language}
{$group.id}{$group.name|escape}{$group.date}{$group.lang}{$i18n.label.edit}{$i18n.label.delete}
30 | {/if} 31 |
32 |
33 |  {$i18n.label.or}  34 | 35 |
36 |
37 | -------------------------------------------------------------------------------- /WEB-INF/templates/cf_custom_field_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.fieldDeleteForm.open} 5 |
{$field|escape}
6 |
{$forms.fieldDeleteForm.btn_delete.control} {$forms.fieldDeleteForm.btn_cancel.control}
7 | {$forms.fieldDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/cf_custom_fields.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.customFieldsForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {if isset($custom_fields)} 15 | {foreach $custom_fields as $field} 16 | 17 | 18 | {if CustomFields::ENTITY_TIME == $field['entity_type']} 19 | 20 | {elseif CustomFields::ENTITY_USER == $field['entity_type']} 21 | 22 | {elseif CustomFields::ENTITY_PROJECT == $field['entity_type']} 23 | 24 | {else} 25 | 26 | {/if} 27 | {if CustomFields::TYPE_TEXT == $field['type']} 28 | 29 | 30 | {elseif CustomFields::TYPE_DROPDOWN == $field['type']} 31 | 32 | 33 | {/if} 34 | 35 | 36 | 37 | {/foreach} 38 | {/if} 39 |
{$i18n.label.thing_name}{$i18n.label.entity}{$i18n.label.type}{$i18n.menu.options}
{$field['label']|escape}{$i18n.entity.time}{$i18n.entity.user}{$i18n.entity.project}{$i18n.label.type_text}{$i18n.label.type_dropdown}{$i18n.label.configure}{$i18n.label.edit}{$i18n.label.delete}
40 |
{$forms.customFieldsForm.btn_add.control}
41 | {$forms.customFieldsForm.close} 42 | -------------------------------------------------------------------------------- /WEB-INF/templates/cf_dropdown_option_add.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.optionAddForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
{$forms.optionAddForm.name.control}
{$i18n.label.required_fields}
15 |
{$forms.optionAddForm.btn_add.control}
16 | {$forms.optionAddForm.close} 17 | -------------------------------------------------------------------------------- /WEB-INF/templates/cf_dropdown_option_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.optionDeleteForm.open} 5 |
{$option|escape}
6 |
{$forms.optionDeleteForm.btn_delete.control} {$forms.optionDeleteForm.btn_cancel.control}
7 | {$forms.optionDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/cf_dropdown_option_edit.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.optionEditForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
{$forms.optionEditForm.name.control}
{$i18n.label.required_fields}
15 |
{$forms.optionEditForm.btn_save.control}
16 | {$forms.optionEditForm.close} 17 | -------------------------------------------------------------------------------- /WEB-INF/templates/cf_dropdown_options.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {if isset($options)} 15 | {foreach $options as $key=>$val} 16 | 17 | 18 | 19 | 20 | 21 | {/foreach} 22 | {/if} 23 |
{$i18n.label.thing_name}
{$val|escape}{$i18n.label.edit}{$i18n.label.delete}
24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /WEB-INF/templates/client_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.clientDeleteForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
{$i18n.form.client.client_to_delete}:
{$i18n.form.client.client_to_delete}:
{$client_to_delete|escape}
{$i18n.form.client.client_entries}:
{$i18n.form.client.client_entries}:{$forms.clientDeleteForm.delete_client_entries.control}
18 |
{$forms.clientDeleteForm.btn_delete.control} {$forms.clientDeleteForm.btn_cancel.control}
19 | {$forms.clientDeleteForm.close} 20 | -------------------------------------------------------------------------------- /WEB-INF/templates/datetime_format_preview.tpl: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /WEB-INF/templates/expense_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.expenseItemForm.open} 5 | 6 | 7 | {if $user->isPluginEnabled('cl')} 8 | 9 | {/if} 10 | {if $show_project} 11 | 12 | {/if} 13 | 14 | 15 | 16 | 17 | {if $user->isPluginEnabled('cl')} 18 | 19 | {/if} 20 | {if $show_project} 21 | 22 | {/if} 23 | 24 | 25 | 26 |
{$i18n.label.client}{$i18n.label.project}{$i18n.label.item}{$i18n.label.cost}
{$expense_item.client_name|escape}{$expense_item.project_name|escape}{$expense_item.name|escape}{$expense_item.cost}
27 |
{$forms.expenseItemForm.delete_button.control} {$forms.expenseItemForm.cancel_button.control}
28 | {$forms.expenseItemForm.close} 29 | -------------------------------------------------------------------------------- /WEB-INF/templates/export.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 |
{$i18n.form.export.hint}
5 | 6 | {$forms.exportForm.open} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
{$forms.exportForm.compression.control}
15 |
{$forms.exportForm.btn_submit.control}
16 | {$forms.exportForm.close} 17 | -------------------------------------------------------------------------------- /WEB-INF/templates/file_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.fileDeleteForm.open} 5 |
{$file_to_delete|escape}
6 |
{$forms.fileDeleteForm.btn_delete.control} {$forms.fileDeleteForm.btn_cancel.control}
7 | {$forms.fileDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/file_download.tpl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /WEB-INF/templates/file_edit.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.fileForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
{$forms.fileForm.file_name.control}
{$forms.fileForm.description.control}
{$i18n.label.required_fields}
21 |
{$forms.fileForm.btn_save.control}
22 | {$forms.fileForm.close} 23 | -------------------------------------------------------------------------------- /WEB-INF/templates/footer.tpl: -------------------------------------------------------------------------------- 1 | {* page-content *} 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/group_add.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.groupForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
{$forms.groupForm.group_name.control}
{$forms.groupForm.description.control}
{$i18n.label.required_fields}
21 |
{$forms.groupForm.btn_add.control}
22 | {$forms.groupForm.close} 23 | -------------------------------------------------------------------------------- /WEB-INF/templates/group_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.groupForm.open} 5 |
{$i18n.form.group_delete.hint}
6 |
{$group_to_delete|escape}
7 |
{$forms.groupForm.btn_delete.control} {$forms.groupForm.btn_cancel.control}
8 | {$forms.groupForm.close} 9 | -------------------------------------------------------------------------------- /WEB-INF/templates/groups.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | 7 | 8 | {$forms.subgroupsForm.open} 9 | {if isset($group_dropdown) && $group_dropdown} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
{$forms.subgroupsForm.group.control}
18 | {/if} 19 | 20 |
21 | 22 | {if $subgroups} 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {foreach $subgroups as $subgroup} 31 | 32 | 33 | 34 | 35 | 36 | 37 | {/foreach} 38 |
{$i18n.label.thing_name}{{$i18n.label.description}}
{$subgroup.name|escape}{$subgroup.description|escape}{$i18n.label.edit}{$i18n.label.delete}
39 | {/if} 40 | {$forms.subgroupsForm.close} 41 |
42 |
43 | 44 |
45 |
46 | -------------------------------------------------------------------------------- /WEB-INF/templates/import.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 |
{$i18n.form.import.hint}
5 | {$forms.importForm.open} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
{$forms.importForm.xmlfile.control}
14 |
{$forms.importForm.btn_submit.control}
15 | {$forms.importForm.open} 16 | -------------------------------------------------------------------------------- /WEB-INF/templates/index.tpl: -------------------------------------------------------------------------------- 1 | {include file="header.tpl"} 2 | 3 | {if $content_page_name}{include file="$content_page_name"}{/if} 4 | 5 | {include file="footer.tpl"} 6 | -------------------------------------------------------------------------------- /WEB-INF/templates/invoice_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | 14 | 15 | {$forms.invoiceDeleteForm.open} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 30 | 31 | 32 |
{$i18n.form.invoice.invoice_to_delete}:
{$i18n.form.invoice.invoice_to_delete}:{$invoice_to_delete|escape}
{$forms.invoiceDeleteForm.delete_invoice_entries.control} 27 | {$i18n.label.what_is_it} 28 | {$i18n.label.what_is_it} 29 |
33 |
{$forms.invoiceDeleteForm.btn_delete.control} {$forms.invoiceDeleteForm.btn_cancel.control}
34 | {$forms.invoiceDeleteForm.close} 35 | -------------------------------------------------------------------------------- /WEB-INF/templates/locking.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.lockingForm.open} 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 |
{$forms.lockingForm.lock_spec.control} 10 | {$i18n.label.what_is_it} 11 | {$i18n.label.what_is_it} 12 |
16 |
{$forms.lockingForm.btn_save.control}
17 | {$forms.lockingForm.close} 18 | -------------------------------------------------------------------------------- /WEB-INF/templates/login.db.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
{$forms.loginForm.login.control}
{$forms.loginForm.password.control}
{$i18n.form.login.forgot_password}
{$forms.loginForm.btn_login.control}
24 | -------------------------------------------------------------------------------- /WEB-INF/templates/login.ldap.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {if $show_hint} 5 |
{$i18n.label.ldap_hint}
6 | {/if} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
{$forms.loginForm.login.control}@{$Auth_ldap_params.default_domain}
{$forms.loginForm.password.control}
{$i18n.form.login.forgot_password}
{$forms.loginForm.btn_login.control}
27 | -------------------------------------------------------------------------------- /WEB-INF/templates/login.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | 10 | 11 | {$forms.loginForm.open} 12 | {include file="login.`$smarty.const.AUTH_MODULE`.tpl"} 13 | {$forms.loginForm.close} 14 | 15 | {if !empty($about_text)} 16 |
{$about_text}
17 | {/if} 18 | -------------------------------------------------------------------------------- /WEB-INF/templates/notification_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.notificationDeleteForm.open} 5 |
{$notification_to_delete|escape}
6 |
{$forms.notificationDeleteForm.btn_delete.control} {$forms.notificationDeleteForm.btn_cancel.control}
7 | {$forms.notificationDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/notifications.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.notificationsForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {if $notifications} 15 | {foreach $notifications as $notification} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | {/foreach} 25 | {/if} 26 |
{$i18n.label.thing_name}{$i18n.label.schedule}{$i18n.label.email}{$i18n.label.condition}
{$notification['name']|escape}{$notification['cron_spec']|escape}{$notification['email']|escape}{$notification['report_condition']|escape}{$i18n.label.edit}{$i18n.label.delete}
27 |
{$forms.notificationsForm.btn_add.control}
28 | {$forms.notificationsForm.close} 29 | -------------------------------------------------------------------------------- /WEB-INF/templates/password_change.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.newPasswordForm.open} 5 |
{$i18n.form.change_password.tip}
6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
{$forms.newPasswordForm.password1.control}
{$forms.newPasswordForm.password2.control}
{$i18n.label.required_fields}
{$forms.newPasswordForm.btn_save.control}
25 | {$forms.newPasswordForm.close} 26 | -------------------------------------------------------------------------------- /WEB-INF/templates/password_reset.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.resetPasswordForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
{$forms.resetPasswordForm.login.control}
{$forms.resetPasswordForm.btn_submit.control}
16 | {$forms.resetPasswordForm.close} 17 | -------------------------------------------------------------------------------- /WEB-INF/templates/predefined_expense_add.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.predefinedExpenseForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
{$forms.predefinedExpenseForm.name.control}
{$forms.predefinedExpenseForm.cost.control} {$user->getCurrency()|escape}
{$i18n.label.required_fields}
20 |
{$forms.predefinedExpenseForm.btn_add.control}
21 | {$forms.predefinedExpenseForm.close} 22 | -------------------------------------------------------------------------------- /WEB-INF/templates/predefined_expense_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.predefinedExpenseDeleteForm.open} 5 |
{$predefined_expense_to_delete|escape}
6 |
{$forms.predefinedExpenseDeleteForm.btn_delete.control} {$forms.predefinedExpenseDeleteForm.btn_cancel.control}
7 | {$forms.predefinedExpenseDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/predefined_expense_edit.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.predefinedExpenseForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
{$forms.predefinedExpenseForm.name.control}
{$forms.predefinedExpenseForm.cost.control} {$user->getCurrency()|escape}
{$i18n.label.required_fields}
20 |
{$forms.predefinedExpenseForm.btn_submit.control}
21 | {$forms.predefinedExpenseForm.close} 22 | -------------------------------------------------------------------------------- /WEB-INF/templates/predefined_expenses.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.predefinedExpensesForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {if $predefined_expenses} 13 | {foreach $predefined_expenses as $predefined_expense} 14 | 15 | 16 | 17 | 18 | 19 | 20 | {/foreach} 21 | {/if} 22 |
{$i18n.label.thing_name}{$i18n.label.cost}
{$predefined_expense['name']|escape}{$predefined_expense['cost']|escape}{$i18n.label.edit}{$i18n.label.delete}
23 |
{$forms.predefinedExpensesForm.btn_add.control}
24 | {$forms.predefinedExpensesForm.close} 25 | -------------------------------------------------------------------------------- /WEB-INF/templates/project_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.projectDeleteForm.open} 5 |
{$project_to_delete|escape}
6 |
{$forms.projectDeleteForm.btn_delete.control} {$forms.projectDeleteForm.btn_cancel.control}
7 | {$forms.projectDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/puncher_conf.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.puncherConfigForm.open} 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 |
{$forms.puncherConfigForm.puncher_menu.control} 10 | {$i18n.label.what_is_it} 11 | {$i18n.label.what_is_it} 12 |
16 |
{$forms.puncherConfigForm.btn_save.control}
17 | {$forms.puncherConfigForm.close} 18 | -------------------------------------------------------------------------------- /WEB-INF/templates/role_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.roleDeleteForm.open} 5 |
{$role_to_delete|escape}
6 |
{$forms.roleDeleteForm.btn_delete.control} {$forms.roleDeleteForm.btn_cancel.control}
7 | {$forms.roleDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/success.tpl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /WEB-INF/templates/swap_roles.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 |
{$i18n.form.swap.hint}
5 | {$forms.swapForm.open} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
{$forms.swapForm.swap_with.control}
14 |
{$forms.swapForm.btn_submit.control} {$forms.swapForm.btn_cancel.control}
15 | {$forms.swapForm.close} 16 | -------------------------------------------------------------------------------- /WEB-INF/templates/task_add.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.taskForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {if $show_projects} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {/if} 27 | 28 | 29 | 30 | 31 | 32 | 33 |
{$forms.taskForm.name.control}
{$forms.taskForm.description.control}
{$i18n.label.projects}:
{$i18n.label.projects}:{$forms.taskForm.projects.control}
{$i18n.label.required_fields}
{$forms.taskForm.btn_submit.control}
34 | {$forms.taskForm.close} 35 | -------------------------------------------------------------------------------- /WEB-INF/templates/task_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.taskDeleteForm.open} 5 |
{$task_to_delete|escape}
6 |
{$forms.taskDeleteForm.btn_delete.control} {$forms.taskDeleteForm.btn_cancel.control}
7 | {$forms.taskDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/template_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.templateDeleteForm.open} 5 |
{$template_to_delete|escape}
6 |
{$forms.templateDeleteForm.btn_delete.control} {$forms.templateDeleteForm.btn_cancel.control}
7 | {$forms.templateDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/time_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.timeRecordForm.open} 5 | 6 | 7 | {if $show_project} 8 | 9 | {/if} 10 | {if $show_task} 11 | 12 | {/if} 13 | {if $show_start} 14 | 15 | 16 | {/if} 17 | {if $show_duration} 18 | 19 | {/if} 20 | 21 | 22 | 23 | {if $show_project} 24 | 25 | {/if} 26 | {if $show_task} 27 | 28 | {/if} 29 | {if $show_start} 30 | 31 | 32 | {/if} 33 | {if $show_duration} 34 | 35 | {/if} 36 | 37 | 38 |
{$i18n.label.project}{$i18n.label.task}{$i18n.label.start}{$i18n.label.finish}{$i18n.label.duration}{$i18n.label.note}
{$time_rec.project_name|escape}{$time_rec.task_name|escape}{if $time_rec.start}{$time_rec.start}{else} {/if}{if $time_rec.finish<>$time_rec.start}{$time_rec.finish}{else} {/if}{if ($time_rec.duration == '0:00' && $time_rec.start <> '')}{$i18n.form.time.uncompleted}{else}{$time_rec.duration}{/if}{if $time_rec.comment}{$time_rec.comment|escape}{else} {/if}
39 |
{$forms.timeRecordForm.delete_button.control} {$forms.timeRecordForm.cancel_button.control}
40 | {$forms.timeRecordForm.close} 41 | -------------------------------------------------------------------------------- /WEB-INF/templates/timesheet_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.timesheetDeleteForm.open} 5 |
{$timesheet_to_delete|escape}
6 |
{$forms.timesheetDeleteForm.btn_delete.control} {$forms.timesheetDeleteForm.btn_cancel.control}
7 | {$forms.timesheetDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates/timesheet_edit.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.timesheetForm.open} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
{$forms.timesheetForm.timesheet_name.control}
{$forms.timesheetForm.comment.control}
{$forms.timesheetForm.status.control}
{$i18n.label.required_fields}
27 |
{$forms.timesheetForm.btn_save.control} {if $can_delete}{$forms.timesheetForm.btn_delete.control}{/if}
28 | {$forms.timesheetForm.close} 29 | -------------------------------------------------------------------------------- /WEB-INF/templates/user_delete.tpl: -------------------------------------------------------------------------------- 1 | {* Copyright (c) Anuko International Ltd. https://www.anuko.com 2 | License: See license.txt *} 3 | 4 | {$forms.userDeleteForm.open} 5 |
{$user_to_delete|escape}
6 |
{$forms.userDeleteForm.btn_delete.control} {$forms.userDeleteForm.btn_cancel.control}
7 | {$forms.userDeleteForm.close} 8 | -------------------------------------------------------------------------------- /WEB-INF/templates_c/keepme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/WEB-INF/templates_c/keepme -------------------------------------------------------------------------------- /access_denied.php: -------------------------------------------------------------------------------- 1 | add($i18n->get('error.access_denied')); 8 | if ($auth->isAuthenticated()) $smarty->assign('authenticated', true); // Used in header.tpl for menu display. 9 | 10 | $smarty->assign('title', $i18n->get('label.error')); 11 | $smarty->assign('content_page_name', 'access_denied.tpl'); 12 | $smarty->display('index.tpl'); 13 | -------------------------------------------------------------------------------- /admin_group_delete.php: -------------------------------------------------------------------------------- 1 | getParameter('id'); 15 | $group_name = ttAdmin::getGroupName($group_id); 16 | if (!($group_id && $group_name != null)) { 17 | header('Location: access_denied.php'); 18 | exit(); 19 | } 20 | // End of access checks. 21 | 22 | $form = new Form('groupForm'); 23 | $form->addInput(array('type'=>'hidden','name'=>'id','value'=>$group_id)); 24 | $form->addInput(array('type'=>'submit','name'=>'btn_delete','value'=>$i18n->get('label.delete'))); 25 | $form->addInput(array('type'=>'submit','name'=>'btn_cancel','value'=>$i18n->get('button.cancel'))); 26 | 27 | if ($request->isPost()) { 28 | if ($request->getParameter('btn_delete')) { 29 | if (ttAdmin::markGroupDeleted($group_id)) { 30 | header('Location: admin_groups.php'); 31 | exit(); 32 | } else 33 | $err->add($i18n->get('error.db')); 34 | } 35 | 36 | if ($request->getParameter('btn_cancel')) { 37 | header('Location: admin_groups.php'); 38 | exit(); 39 | } 40 | } // isPost 41 | 42 | $smarty->assign('group_to_delete', $group_name); 43 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 44 | $smarty->assign('title', $i18n->get('title.delete_group')); 45 | $smarty->assign('content_page_name', 'admin_group_delete.tpl'); 46 | $smarty->display('index.tpl'); 47 | -------------------------------------------------------------------------------- /admin_groups.php: -------------------------------------------------------------------------------- 1 | assign('groups', ttOrgHelper::getOrgs()); 16 | $smarty->assign('title', $i18n->get('title.groups')); 17 | $smarty->assign('content_page_name', 'admin_groups.tpl'); 18 | $smarty->display('index.tpl'); 19 | -------------------------------------------------------------------------------- /cf_custom_fields.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('cf')) { 15 | header('Location: feature_disabled.php'); 16 | exit(); 17 | } 18 | // End of access checks. 19 | 20 | $form = new Form('customFieldsForm'); 21 | 22 | if ($request->isPost()) { 23 | if ($request->getParameter('btn_add')) { 24 | // The Add button clicked. Redirect to cf_custom_field_add.php page. 25 | header('Location: cf_custom_field_add.php'); 26 | exit(); 27 | } 28 | } else { 29 | $form->addInput(array('type'=>'submit','name'=>'btn_add','value'=>$i18n->get('button.add'))); 30 | 31 | $fields = CustomFields::getFields(); 32 | } 33 | 34 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 35 | $smarty->assign('custom_fields', $fields); 36 | $smarty->assign('title', $i18n->get('title.cf_custom_fields')); 37 | $smarty->assign('content_page_name', 'cf_custom_fields.tpl'); 38 | $smarty->display('index.tpl'); 39 | -------------------------------------------------------------------------------- /cf_dropdown_options.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('cf')) { 15 | header('Location: feature_disabled.php'); 16 | exit(); 17 | } 18 | $field_id = (int)$request->getParameter('field_id'); 19 | $field = CustomFields::getField($field_id); 20 | if (!$field) { 21 | header('Location: access_denied.php'); 22 | exit(); 23 | } 24 | // End of access checks. 25 | 26 | $options = CustomFields::getOptions($field_id); 27 | 28 | $smarty->assign('field_id', $field_id); 29 | $smarty->assign('options', $options); 30 | $smarty->assign('title', $i18n->get('title.cf_dropdown_options')); 31 | $smarty->assign('content_page_name', 'cf_dropdown_options.tpl'); 32 | $smarty->display('index.tpl'); 33 | -------------------------------------------------------------------------------- /clients.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('cl')) { 16 | header('Location: feature_disabled.php'); 17 | exit(); 18 | } 19 | // End of access checks. 20 | 21 | if($user->can('manage_clients')) { 22 | $active_clients = ttGroupHelper::getActiveClients(true); 23 | $inactive_clients = ttGroupHelper::getInactiveClients(true); 24 | } else 25 | $active_clients = $user->getAssignedClients(); 26 | 27 | $smarty->assign('active_clients', $active_clients); 28 | $smarty->assign('inactive_clients', $inactive_clients); 29 | $smarty->assign('title', $i18n->get('title.clients')); 30 | $smarty->assign('content_page_name', 'clients.tpl'); 31 | $smarty->display('index.tpl'); 32 | -------------------------------------------------------------------------------- /custom_css.php: -------------------------------------------------------------------------------- 1 | getCustomCss(); 11 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | # This file is for development work. Not suitable for production. 2 | version: '3.7' 3 | 4 | services: 5 | # anuko_tt is a web application built as per dockerfile specification. 6 | anuko_tt: 7 | build: 8 | context: . 9 | dockerfile: dockerfile-tt 10 | image: anuko_timetracker:dev 11 | container_name: anuko-timetracker 12 | # Use localhost:8080 to connect to timetracker via browser. 13 | ports: 14 | - "8080:80" 15 | 16 | # anuko_db is a mariadb instance to which timetracker connects. 17 | # Connect parameters are also specified in timetracker dockerfile after 18 | # creation of its configuration file. Specifically, we replace 19 | # user name, password, service name (aka resolvable to IP server name 20 | # where mariadb runs), and database name there from the defaults. 21 | # These two sets of credentials must match for a successful connect. 22 | anuko_db: 23 | build: 24 | context: . 25 | dockerfile: dockerfile-db 26 | image: "anuko_database:dev" 27 | container_name: anuko-database 28 | environment: 29 | MYSQL_RANDOM_ROOT_PASSWORD: "yes" 30 | MYSQL_DATABASE: timetracker 31 | MYSQL_USER: anuko_user 32 | MYSQL_PASSWORD: anuko_pw 33 | volumes: 34 | - anuko_db:/var/lib/mysql 35 | 36 | volumes: 37 | anuko_db: -------------------------------------------------------------------------------- /dockerfile-db: -------------------------------------------------------------------------------- 1 | # This file is for development work. Not suitable for production. 2 | FROM mariadb:latest 3 | 4 | # Copy database creation script. 5 | COPY mysql.sql /docker-entrypoint-initdb.d/ 6 | -------------------------------------------------------------------------------- /dockerfile-tt: -------------------------------------------------------------------------------- 1 | # This file is for development work. Not suitable for production. 2 | FROM php:7.2-apache 3 | 4 | # Use the default production configuration. 5 | RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" 6 | 7 | # Override with custom settings. 8 | # COPY config/php_tt.ini $PHP_INI_DIR/conf.d/ 9 | 10 | # Install mysqli extension. 11 | RUN docker-php-ext-install mysqli 12 | 13 | # Install gd extension. 14 | RUN apt-get update && apt-get install libpng-dev libfreetype6-dev -y \ 15 | && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ \ 16 | && docker-php-ext-install gd 17 | 18 | # Install ldap extension. 19 | RUN apt-get install libldap2-dev -y \ 20 | && docker-php-ext-install ldap 21 | # TODO: check if ldap works, as the above is missing this step: 22 | # && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \ 23 | 24 | # Cleanup. The intention was to keep image size down. 25 | # RUN rm -rf /var/lib/apt/lists/* 26 | # 27 | # The above does not work. Files are removed, but 28 | # image files (zipped or not) are not getting smaller. Why? 29 | 30 | # Copy application source code to /var/www/html/. 31 | COPY . /var/www/html/ 32 | # Create configuration file. 33 | RUN cp /var/www/html/WEB-INF/config.php.dist /var/www/html/WEB-INF/config.php 34 | # Replace DSN value to something connectable to a Docker container running mariadb. 35 | RUN sed -i "s|mysqli://root:no@localhost/dbname|mysqli://anuko_user:anuko_pw@anuko_db/timetracker|g" /var/www/html/WEB-INF/config.php 36 | # Note that db is defined as anuko_db/timetracker where anuko_db is service name and timetracker is db name. 37 | # See docker-compose.yml for details. 38 | 39 | RUN chown -R www-data /var/www/html/ 40 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/favicon.ico -------------------------------------------------------------------------------- /feature_disabled.php: -------------------------------------------------------------------------------- 1 | add($i18n->get('error.feature_disabled')); 8 | if ($auth->isAuthenticated()) $smarty->assign('authenticated', true); // Used in header.tpl for menu display. 9 | 10 | $smarty->assign('title', $i18n->get('label.error')); 11 | $smarty->assign('content_page_name', 'access_denied.tpl'); 12 | $smarty->display('index.tpl'); 13 | -------------------------------------------------------------------------------- /groups.php: -------------------------------------------------------------------------------- 1 | isPost()) { 15 | $group_id = $request->getParameter('group'); 16 | if (!ttValidInteger($group_id)) { 17 | header('Location: access_denied.php'); // Protection against sql injection. 18 | exit(); 19 | } 20 | if (!$user->isGroupValid($group_id)) { 21 | header('Location: access_denied.php'); // Wrong group id in post. 22 | exit(); 23 | } 24 | } 25 | // End of access checks. 26 | 27 | if ($request->isPost()) { 28 | $group_id = (int)$request->getParameter('group'); 29 | $user->setOnBehalfGroup($group_id); 30 | } else { 31 | $group_id = $user->getGroup(); 32 | } 33 | 34 | $form = new Form('subgroupsForm'); 35 | $groups = $user->getGroupsForDropdown(); 36 | if (count($groups) > 1) { 37 | $form->addInput(array('type'=>'combobox', 38 | 'onchange'=>'this.form.submit();', 39 | 'name'=>'group', 40 | 'value'=>$group_id, 41 | 'data'=>$groups, 42 | 'datakeys'=>array('id','name'))); 43 | $smarty->assign('group_dropdown', 1); 44 | } 45 | 46 | $smarty->assign('subgroups', $user->getSubgroups($group_id)); 47 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 48 | $smarty->assign('title', $i18n->get('label.subgroups')); 49 | $smarty->assign('content_page_name', 'groups.tpl'); 50 | $smarty->display('index.tpl'); 51 | -------------------------------------------------------------------------------- /img/1x1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/1x1.gif -------------------------------------------------------------------------------- /img/calendar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/calendar.gif -------------------------------------------------------------------------------- /img/icon-delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/icon-delete.png -------------------------------------------------------------------------------- /img/icon-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/icon-edit.png -------------------------------------------------------------------------------- /img/icon-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/icon-file.png -------------------------------------------------------------------------------- /img/icon-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/icon-files.png -------------------------------------------------------------------------------- /img/icon-now.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/icon-now.png -------------------------------------------------------------------------------- /img/icon-question-mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/icon-question-mark.png -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/logo.png -------------------------------------------------------------------------------- /img/subm_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/subm_bg.gif -------------------------------------------------------------------------------- /img/top_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anuko/timetracker/b6711df7ae7c0c0034d6673365d26a0933faac5c/img/top_bg.gif -------------------------------------------------------------------------------- /import.php: -------------------------------------------------------------------------------- 1 | addInput(array('type'=>'upload','name'=>'xmlfile','value'=>'browse','maxsize'=>67108864)); // 64 MB file upload limit. 17 | // Note: for the above limit to work make sure to set upload_max_filesize and post_max_size in php.ini to at least 64M. 18 | $form->addInput(array('type'=>'submit','name'=>'btn_submit','value'=>$i18n->get('button.import'))); 19 | 20 | if ($request->isPost()) { 21 | $importHelper = new ttOrgImportHelper($err); 22 | $importHelper->importXml(); 23 | if ($err->no()) $msg->add($i18n->get('form.import.success')); 24 | } // isPost 25 | 26 | $smarty->assign('forms', array($form->getName()=>$form->toArray()) ); 27 | $smarty->assign('title', $i18n->get('title.import')); 28 | $smarty->assign('content_page_name', 'import.tpl'); 29 | $smarty->display('index.tpl'); 30 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | isAuthenticated()) { 9 | if ($user->can('administer_site')) { 10 | header('Location: admin_groups.php'); 11 | exit(); 12 | } elseif ($user->isClient()) { 13 | header('Location: reports.php'); 14 | exit(); 15 | } 16 | } 17 | // html below redirects to time.php for today in browser timezone. 18 | ?> 19 | 20 | 21 | 22 | 25 | 28 | 29 | -------------------------------------------------------------------------------- /locking.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('lk')) { 14 | header('Location: feature_disabled.php'); 15 | exit(); 16 | } 17 | 18 | $cl_lock_spec = $request->isPost() ? $request->getParameter('lock_spec') : $user->getLockSpec(); 19 | 20 | $form = new Form('lockingForm'); 21 | $form->addInput(array('type'=>'text','maxlength'=>'100','name'=>'lock_spec','style'=>'width: 250px;','value'=>$cl_lock_spec)); 22 | $form->addInput(array('type'=>'submit','name'=>'btn_save','value'=>$i18n->get('button.save'))); 23 | 24 | if ($request->isPost()) { 25 | // Validate user input. 26 | if (!ttValidCronSpec($cl_lock_spec)) $err->add($i18n->get('error.field'), $i18n->get('label.schedule')); 27 | 28 | if ($err->no()) { 29 | if ($user->updateGroup(array('lock_spec' => $cl_lock_spec))) { 30 | header('Location: group_edit.php'); 31 | exit(); 32 | } else { 33 | $err->add($i18n->get('error.db')); 34 | } 35 | } 36 | } // isPost 37 | 38 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 39 | $smarty->assign('title', $i18n->get('title.locking')); 40 | $smarty->assign('content_page_name', 'locking.tpl'); 41 | $smarty->display('index.tpl'); 42 | -------------------------------------------------------------------------------- /logout.php: -------------------------------------------------------------------------------- 1 | doLogout(); 7 | session_unset(); 8 | 9 | header('Location: login.php'); 10 | -------------------------------------------------------------------------------- /notifications.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('no')) { 15 | header('Location: feature_disabled.php'); 16 | exit(); 17 | } 18 | if (!$user->exists()) { 19 | header('Location: access_denied.php'); // No users in subgroup. 20 | exit(); 21 | } 22 | // End of access checks. 23 | 24 | // TODO: extend and re-design notifications. 25 | // Currently they only work with fav reports, which are bound to users. 26 | 27 | $form = new Form('notificationsForm'); 28 | 29 | if ($request->isPost()) { 30 | if ($request->getParameter('btn_add')) { 31 | // The Add button clicked. Redirect to notification_add.php page. 32 | header('Location: notification_add.php'); 33 | exit(); 34 | } 35 | } else { 36 | $form->addInput(array('type'=>'submit','name'=>'btn_add','value'=>$i18n->get('button.add'))); 37 | $notifications = ttGroupHelper::getNotifications(); 38 | } 39 | 40 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 41 | $smarty->assign('notifications', $notifications); 42 | $smarty->assign('title', $i18n->get('title.notifications')); 43 | $smarty->assign('content_page_name', 'notifications.tpl'); 44 | $smarty->display('index.tpl'); 45 | -------------------------------------------------------------------------------- /predefined_expenses.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('ex')) { 15 | header('Location: feature_disabled.php'); 16 | exit(); 17 | } 18 | // End of access checks. 19 | 20 | $form = new Form('predefinedExpensesForm'); 21 | 22 | if ($request->isPost()) { 23 | if ($request->getParameter('btn_add')) { 24 | // The Add button clicked. Redirect to predefined_expense_add.php page. 25 | header('Location: predefined_expense_add.php'); 26 | exit(); 27 | } 28 | } else { 29 | $form->addInput(array('type'=>'submit','name'=>'btn_add','value'=>$i18n->get('button.add'))); 30 | $predefinedExpenses = ttGroupHelper::getPredefinedExpenses(); 31 | } 32 | 33 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 34 | $smarty->assign('predefined_expenses', $predefinedExpenses); 35 | $smarty->assign('title', $i18n->get('title.predefined_expenses')); 36 | $smarty->assign('content_page_name', 'predefined_expenses.tpl'); 37 | $smarty->display('index.tpl'); 38 | -------------------------------------------------------------------------------- /projects.php: -------------------------------------------------------------------------------- 1 | getTrackingMode() && MODE_PROJECTS_AND_TASKS != $user->getTrackingMode()) { 14 | header('Location: feature_disabled.php'); 15 | exit(); 16 | } 17 | // End of access checks. 18 | 19 | $showFiles = $user->isPluginEnabled('at'); 20 | 21 | if($user->can('manage_projects')) { 22 | $active_projects = ttGroupHelper::getActiveProjects($showFiles); 23 | $inactive_projects = ttGroupHelper::getInactiveProjects($showFiles); 24 | } else { 25 | $options['include_files'] = $showFiles; 26 | $active_projects = $user->getAssignedProjects($options); 27 | } 28 | 29 | $smarty->assign('active_projects', $active_projects); 30 | $smarty->assign('inactive_projects', $inactive_projects); 31 | $smarty->assign('show_files', $showFiles); 32 | $smarty->assign('title', $i18n->get('title.projects')); 33 | $smarty->assign('content_page_name', 'projects.tpl'); 34 | $smarty->display('index.tpl'); 35 | -------------------------------------------------------------------------------- /puncher_conf.php: -------------------------------------------------------------------------------- 1 | getConfigHelper(); 15 | 16 | if ($request->isPost()) { 17 | $cl_puncher_menu = (bool)$request->getParameter('puncher_menu'); 18 | } else { 19 | $cl_puncher_menu = $config->getDefinedValue('puncher_menu'); 20 | } 21 | 22 | $form = new Form('puncherConfigForm'); 23 | $form->addInput(array('type'=>'checkbox','name'=>'puncher_menu','value'=>$cl_puncher_menu)); 24 | $form->addInput(array('type'=>'submit','name'=>'btn_save','value'=>$i18n->get('button.save'))); 25 | 26 | if ($request->isPost()){ 27 | // Update config. 28 | $config->setDefinedValue('puncher_menu', $cl_puncher_menu); 29 | if (!$user->updateGroup(array('config' => $config->getConfig()))) { 30 | $err->add($i18n->get('error.db')); 31 | } 32 | } 33 | 34 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 35 | $smarty->assign('title', $i18n->get('title.puncher')); 36 | $smarty->assign('content_page_name', 'puncher_conf.tpl'); 37 | $smarty->display('index.tpl'); 38 | -------------------------------------------------------------------------------- /role_delete.php: -------------------------------------------------------------------------------- 1 | getParameter('id'); 15 | $role = ttRoleHelper::get($cl_role_id); 16 | if (!$role) { 17 | header('Location: access_denied.php'); 18 | exit(); 19 | } 20 | // End of access checks. 21 | 22 | $role_to_delete = $role['name']; 23 | 24 | $form = new Form('roleDeleteForm'); 25 | $form->addInput(array('type'=>'hidden','name'=>'id','value'=>$cl_role_id)); 26 | $form->addInput(array('type'=>'submit','name'=>'btn_delete','value'=>$i18n->get('label.delete'))); 27 | $form->addInput(array('type'=>'submit','name'=>'btn_cancel','value'=>$i18n->get('button.cancel'))); 28 | 29 | if ($request->isPost()) { 30 | if ($request->getParameter('btn_delete')) { 31 | if(ttRoleHelper::get($cl_role_id)) { 32 | if (ttRoleHelper::delete($cl_role_id)) { 33 | header('Location: roles.php'); 34 | exit(); 35 | } else 36 | $err->add($i18n->get('error.db')); 37 | } else 38 | $err->add($i18n->get('error.db')); 39 | } elseif ($request->getParameter('btn_cancel')) { 40 | header('Location: roles.php'); 41 | exit(); 42 | } 43 | } // isPost 44 | 45 | $smarty->assign('role_to_delete', $role_to_delete); 46 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 47 | $smarty->assign('onload', 'onLoad="document.taskDeleteForm.btn_cancel.focus()"'); 48 | $smarty->assign('title', $i18n->get('title.delete_role')); 49 | $smarty->assign('content_page_name', 'role_delete.tpl'); 50 | $smarty->display('index.tpl'); 51 | -------------------------------------------------------------------------------- /roles.php: -------------------------------------------------------------------------------- 1 | assign('active_roles', ttTeamHelper::getActiveRolesForUser()); 18 | $smarty->assign('inactive_roles', ttTeamHelper::getInactiveRolesForUser()); 19 | $smarty->assign('title', $i18n->get('title.roles')); 20 | $smarty->assign('content_page_name', 'roles.tpl'); 21 | $smarty->display('index.tpl'); 22 | -------------------------------------------------------------------------------- /rtl.css: -------------------------------------------------------------------------------- 1 | /* css definitions for rtl languages */ 2 | 3 | html { 4 | direction: rtl; 5 | } 6 | 7 | .large-screen-label { 8 | text-align: left; 9 | } 10 | 11 | .small-screen-label { 12 | text-align: right; 13 | } 14 | 15 | .td-with-input { 16 | text-align: right; 17 | } 18 | 19 | .checkbox-label { 20 | float: right; 21 | } 22 | 23 | .day-totals-col1 { 24 | text-align: right; 25 | } 26 | 27 | .day-totals-col2 { 28 | text-align: left; 29 | } 30 | 31 | .text-cell { 32 | text-align: right; 33 | } 34 | 35 | .number-cell { 36 | text-align: left; 37 | } 38 | 39 | .time-cell { 40 | text-align: left; 41 | } 42 | 43 | .money-value-cell { 44 | text-align: left; 45 | } 46 | 47 | .note-header-cell { 48 | text-align: left; 49 | } 50 | 51 | .label-cell { 52 | text-align: left; 53 | } 54 | 55 | th.invoice-label { 56 | text-align: left; 57 | } 58 | -------------------------------------------------------------------------------- /site_map.php: -------------------------------------------------------------------------------- 1 | isAuthenticated(); // This call assigns 'authenticated' to smarty. 14 | 15 | $smarty->assign('content_page_name', 'site_map.tpl'); 16 | $smarty->display('index.tpl'); 17 | -------------------------------------------------------------------------------- /success.php: -------------------------------------------------------------------------------- 1 | add($i18n->get('msg.success')); 8 | if ($auth->isAuthenticated()) $smarty->assign('authenticated', true); // Used in header.tpl for menu display. 9 | 10 | $smarty->assign('title', $i18n->get('title.success')); 11 | $smarty->assign('content_page_name', 'success.tpl'); 12 | $smarty->display('index.tpl'); 13 | -------------------------------------------------------------------------------- /swap_roles.php: -------------------------------------------------------------------------------- 1 | isPost()) { 20 | $user_id = (int)$request->getParameter('swap_with'); 21 | $user_details = $user->getUserDetails($user_id); 22 | if (!$user_details) { 23 | header('Location: access_denied.php'); 24 | exit(); 25 | } 26 | } 27 | // End of access checks. 28 | 29 | $form = new Form('swapForm'); 30 | $form->addInput(array('type'=>'combobox','name'=>'swap_with','data'=>$users_for_swap,'datakeys'=>array('id','name'))); 31 | $form->addInput(array('type'=>'submit','name'=>'btn_submit','value'=>$i18n->get('button.submit'))); 32 | $form->addInput(array('type'=>'submit','name'=>'btn_cancel','value'=>$i18n->get('button.cancel'))); 33 | 34 | if ($request->isPost()) { 35 | if ($request->getParameter('btn_submit')) { 36 | if (ttTeamHelper::swapRolesWith($user_id)) { 37 | header('Location: users.php'); 38 | exit(); 39 | } else 40 | $err->add($i18n->get('error.db')); 41 | } 42 | 43 | if ($request->getParameter('btn_cancel')) { 44 | header('Location: users.php'); 45 | exit(); 46 | } 47 | } 48 | 49 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 50 | $smarty->assign('onload', 'onLoad="document.swapForm.btn_cancel.focus()"'); 51 | $smarty->assign('title', $i18n->get('title.swap_roles')); 52 | $smarty->assign('content_page_name', 'swap_roles.tpl'); 53 | $smarty->display('index.tpl'); 54 | -------------------------------------------------------------------------------- /template_delete.php: -------------------------------------------------------------------------------- 1 | isPluginEnabled('tp')) { 15 | header('Location: feature_disabled.php'); 16 | exit(); 17 | } 18 | $cl_template_id = (int)$request->getParameter('id'); 19 | $template = ttTemplateHelper::get($cl_template_id); 20 | if (!$template) { 21 | header('Location: access_denied.php'); 22 | exit(); 23 | } 24 | // End of access checks. 25 | 26 | $template_to_delete = $template['name']; 27 | 28 | $form = new Form('templateDeleteForm'); 29 | $form->addInput(array('type'=>'hidden','name'=>'id','value'=>$cl_template_id)); 30 | $form->addInput(array('type'=>'submit','name'=>'btn_delete','value'=>$i18n->get('label.delete'))); 31 | $form->addInput(array('type'=>'submit','name'=>'btn_cancel','value'=>$i18n->get('button.cancel'))); 32 | 33 | if ($request->isPost()) { 34 | if ($request->getParameter('btn_delete')) { 35 | if (ttTemplateHelper::delete($cl_template_id)) { 36 | header('Location: templates.php'); 37 | exit(); 38 | } else 39 | $err->add($i18n->get('error.db')); 40 | } elseif ($request->getParameter('btn_cancel')) { 41 | header('Location: templates.php'); 42 | exit(); 43 | } 44 | } // isPost 45 | 46 | $smarty->assign('template_to_delete', $template_to_delete); 47 | $smarty->assign('forms', array($form->getName()=>$form->toArray())); 48 | $smarty->assign('onload', 'onLoad="document.templateDeleteForm.btn_cancel.focus()"'); 49 | $smarty->assign('title', $i18n->get('title.delete_template')); 50 | $smarty->assign('content_page_name', 'template_delete.tpl'); 51 | $smarty->display('index.tpl'); 52 | --------------------------------------------------------------------------------