├── .drone.yml ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .npmrc ├── .openshift ├── action_hooks │ └── pre_start_php └── markers │ └── use_composer ├── .php-cs-fixer.php ├── Documentation ├── Applications │ ├── Activity.md │ ├── Debug.md │ ├── GitHub.md │ ├── Groups.md │ ├── Projects.md │ ├── Support.md │ ├── System.md │ ├── Text.md │ ├── Tracker.md │ └── Users.md ├── Dependency-Injection.md ├── Development │ ├── Asset-Management.md │ ├── CLI-application.md │ ├── Database-Migrations.md │ ├── Dependencies.md │ ├── Directory-Structure.md │ ├── Graphics.md │ ├── Openshift.md │ └── Virtual-Test-Server.md ├── Internationalisation │ ├── Crowdin.md │ ├── Languages.md │ └── Localisation.md ├── Overview.md ├── Users │ ├── Access-Control.md │ └── GitHub-Authentication.md ├── avatars.md ├── pagination.md └── session.md ├── LICENSE ├── README.md ├── SECURITY.md ├── Vagrantfile ├── assets ├── images │ └── markitup │ │ └── skins │ │ └── tracker │ │ ├── bg-container.png │ │ ├── handle.png │ │ ├── menu.png │ │ └── submenu.png ├── js │ ├── color-select.js │ ├── jtracker-tmpl.js │ ├── jtracker.js │ ├── support │ │ └── documentation-index.js │ ├── text │ │ ├── article-edit.js │ │ └── articles-index.js │ └── uploader-img.js └── scss │ ├── jtracker-rtl.scss │ ├── jtracker.scss │ └── markitup.scss ├── bin └── jtracker ├── build.xml ├── build ├── .gitignore ├── phpmd.xml └── puppet │ ├── files │ ├── apache │ │ └── jissues.conf │ ├── etc │ │ ├── environment │ │ └── suryphp.list │ └── php │ │ ├── php.ini │ │ └── xdebug.ini │ └── manifests │ └── default.pp ├── cache └── .gitignore ├── cli └── completions │ ├── Custom_jtracker.xml │ ├── jtracker.fish │ └── tpl_jtracker.fish ├── composer.json ├── composer.lock ├── credits.json ├── etc ├── config.dist.json ├── config.openshift.json ├── config.travis.json ├── config.vagrant.json ├── migrations │ ├── 20160611001.sql │ ├── 20160612001.sql │ ├── 20160612002.sql │ ├── 20170723001.sql │ ├── 20180218001.sql │ └── 20200310001.sql └── mysql.sql ├── logs └── .gitignore ├── package-lock.json ├── package.json ├── phpunit.xml ├── renovate.json ├── ruleset.xml ├── src ├── App │ ├── Activity │ │ ├── ActivityApp.php │ │ ├── Controller │ │ │ ├── AbstractBaseController.php │ │ │ ├── ActivitySnapshotController.php │ │ │ ├── Ajax │ │ │ │ ├── ActivitySnapshot.php │ │ │ │ ├── ProjectActivity.php │ │ │ │ ├── TotalActivity.php │ │ │ │ └── UserActivity.php │ │ │ ├── ProjectActivityController.php │ │ │ ├── TotalActivityController.php │ │ │ └── UserActivityController.php │ │ ├── Model │ │ │ ├── ProjectactivityModel.php │ │ │ ├── SnapshotModel.php │ │ │ ├── TotaluseractivityModel.php │ │ │ └── UseractivityModel.php │ │ ├── View │ │ │ └── DefaultHtmlView.php │ │ └── routes.json │ ├── Debug │ │ ├── Controller │ │ │ └── Debug.php │ │ ├── Database │ │ │ └── DatabaseDebugger.php │ │ ├── DebugApp.php │ │ ├── Format │ │ │ └── Html │ │ │ │ ├── LinkFormat.php │ │ │ │ ├── SqlFormat.php │ │ │ │ └── TableFormat.php │ │ ├── Handler │ │ │ └── ProductionHandler.php │ │ ├── Model │ │ │ └── DefaultModel.php │ │ ├── Renderer │ │ │ └── Html.php │ │ └── TrackerDebugger.php │ ├── GitHub │ │ ├── Controller │ │ │ ├── Ajax │ │ │ │ ├── Hooks │ │ │ │ │ ├── Add.php │ │ │ │ │ ├── GetList.php │ │ │ │ │ └── Modify.php │ │ │ │ ├── Labels │ │ │ │ │ ├── Add.php │ │ │ │ │ ├── Delete.php │ │ │ │ │ └── GetList.php │ │ │ │ ├── Markdown │ │ │ │ │ └── Preview.php │ │ │ │ └── Milestones │ │ │ │ │ ├── Base.php │ │ │ │ │ ├── Delete.php │ │ │ │ │ ├── GetList.php │ │ │ │ │ └── Save.php │ │ │ ├── Hooks.php │ │ │ ├── Labels.php │ │ │ ├── Milestones.php │ │ │ └── Stats.php │ │ ├── GitHubApp.php │ │ ├── Model │ │ │ └── DefaultModel.php │ │ ├── View │ │ │ └── Stats │ │ │ │ └── StatsHtmlView.php │ │ └── routes.json │ ├── Groups │ │ ├── Controller │ │ │ ├── Group.php │ │ │ ├── Group │ │ │ │ ├── Add.php │ │ │ │ ├── Delete.php │ │ │ │ └── Save.php │ │ │ └── Groups.php │ │ ├── GroupsApp.php │ │ ├── Model │ │ │ ├── DefaultModel.php │ │ │ ├── GroupModel.php │ │ │ └── GroupsModel.php │ │ ├── Table │ │ │ └── GroupsTable.php │ │ ├── View │ │ │ ├── Group │ │ │ │ └── GroupHtmlView.php │ │ │ └── Groups │ │ │ │ └── GroupsHtmlView.php │ │ └── routes.json │ ├── Projects │ │ ├── Controller │ │ │ ├── Project.php │ │ │ ├── Project │ │ │ │ ├── Add.php │ │ │ │ ├── Delete.php │ │ │ │ ├── Edit.php │ │ │ │ └── Save.php │ │ │ └── Projects.php │ │ ├── Model │ │ │ ├── ProjectModel.php │ │ │ └── ProjectsModel.php │ │ ├── ProjectAwareTrait.php │ │ ├── ProjectsApp.php │ │ ├── Table │ │ │ ├── LabelsTable.php │ │ │ ├── MilestonesTable.php │ │ │ └── ProjectsTable.php │ │ ├── TrackerProject.php │ │ ├── View │ │ │ ├── Project │ │ │ │ └── ProjectHtmlView.php │ │ │ └── Projects │ │ │ │ └── ProjectsHtmlView.php │ │ └── routes.json │ ├── Support │ │ ├── Controller │ │ │ ├── Ajax │ │ │ │ └── Documentation │ │ │ │ │ └── Show.php │ │ │ ├── Documentation.php │ │ │ ├── Filetree.php │ │ │ └── Icons │ │ │ │ └── ViewCssIconsController.php │ │ ├── Model │ │ │ ├── DefaultModel.php │ │ │ └── IconsModel.php │ │ ├── SupportApp.php │ │ └── routes.json │ ├── System │ │ ├── Controller │ │ │ └── WrongCmsController.php │ │ ├── SystemApp.php │ │ └── routes.json │ ├── Text │ │ ├── Controller │ │ │ ├── CreateArticleController.php │ │ │ ├── DeleteArticleController.php │ │ │ ├── EditArticleController.php │ │ │ ├── ListArticlesController.php │ │ │ ├── SaveArticleController.php │ │ │ └── ViewArticleController.php │ │ ├── Model │ │ │ └── ArticlesModel.php │ │ ├── Table │ │ │ └── ArticlesTable.php │ │ ├── TextApp.php │ │ └── routes.json │ ├── Tracker │ │ ├── Controller │ │ │ ├── AbstractHookController.php │ │ │ ├── Category │ │ │ │ ├── Add.php │ │ │ │ ├── Delete.php │ │ │ │ ├── Edit.php │ │ │ │ ├── Listing.php │ │ │ │ └── Save.php │ │ │ ├── Comment │ │ │ │ └── Ajax │ │ │ │ │ └── Submit.php │ │ │ ├── DefaultController.php │ │ │ ├── Fetch │ │ │ │ └── Ajax │ │ │ │ │ ├── Issues.php │ │ │ │ │ └── Users.php │ │ │ ├── Hooks │ │ │ │ ├── Listeners │ │ │ │ │ ├── AbstractListener.php │ │ │ │ │ ├── JoomlacmsCommentsListener.php │ │ │ │ │ ├── JoomlacmsIssuesListener.php │ │ │ │ │ ├── JoomlacmsPullsListener.php │ │ │ │ │ ├── JoomlacmsTestsListener.php │ │ │ │ │ ├── TestsItemsListener.php │ │ │ │ │ └── TestsTestsListener.php │ │ │ │ ├── ReceiveCommentsHook.php │ │ │ │ ├── ReceiveIssuesHook.php │ │ │ │ ├── ReceivePullReviewHook.php │ │ │ │ └── ReceivePullsHook.php │ │ │ ├── Issue │ │ │ │ ├── Add.php │ │ │ │ ├── Ajax │ │ │ │ │ ├── Info.php │ │ │ │ │ ├── Listing.php │ │ │ │ │ └── Vote.php │ │ │ │ ├── Edit.php │ │ │ │ ├── Item.php │ │ │ │ ├── Listing.php │ │ │ │ ├── Random.php │ │ │ │ ├── Save.php │ │ │ │ └── Submit.php │ │ │ ├── TestResult │ │ │ │ └── Ajax │ │ │ │ │ ├── Alter.php │ │ │ │ │ └── Submit.php │ │ │ └── Upload │ │ │ │ └── Ajax │ │ │ │ ├── Delete.php │ │ │ │ └── Put.php │ │ ├── Exception │ │ │ └── ValidationException.php │ │ ├── Model │ │ │ ├── ActivityModel.php │ │ │ ├── CategoriesModel.php │ │ │ ├── CategoryModel.php │ │ │ ├── DefaultModel.php │ │ │ ├── IssueModel.php │ │ │ └── IssuesModel.php │ │ ├── Table │ │ │ ├── ActivitiesTable.php │ │ │ ├── CategoryTable.php │ │ │ ├── IssueCategoryMappingTable.php │ │ │ ├── IssuesTable.php │ │ │ ├── ReviewsTable.php │ │ │ └── StatusTable.php │ │ ├── TrackerApp.php │ │ ├── Twig │ │ │ ├── IssueExtension.php │ │ │ ├── MilestoneExtension.php │ │ │ ├── RelationExtension.php │ │ │ └── StatusExtension.php │ │ ├── View │ │ │ ├── Categories │ │ │ │ └── CategoriesHtmlView.php │ │ │ ├── Category │ │ │ │ └── CategoryHtmlView.php │ │ │ ├── Issue │ │ │ │ └── IssueHtmlView.php │ │ │ └── Issues │ │ │ │ └── IssuesHtmlView.php │ │ ├── routes.json │ │ └── tpl │ │ │ └── new-issue-template.md │ └── Users │ │ ├── Controller │ │ ├── Ajax │ │ │ ├── Assign.php │ │ │ ├── Listing.php │ │ │ └── Search.php │ │ ├── Login.php │ │ ├── Logout.php │ │ ├── User.php │ │ └── User │ │ │ ├── Edit.php │ │ │ ├── Refresh.php │ │ │ └── Save.php │ │ ├── Model │ │ ├── DefaultModel.php │ │ └── UserModel.php │ │ ├── Renderer │ │ └── AvatarsExtension.php │ │ ├── UsersApp.php │ │ ├── View │ │ └── User │ │ │ └── UserHtmlView.php │ │ └── routes.json └── JTracker │ ├── Application │ ├── AppInterface.php │ ├── Application.php │ └── ConsoleApplication.php │ ├── Authentication │ ├── Database │ │ └── TableUsers.php │ ├── Exception │ │ └── AuthenticationException.php │ ├── GitHub │ │ ├── GitHubLoginHelper.php │ │ └── GitHubUser.php │ ├── Strategy │ │ └── GitHubAuthenticationStrategy.php │ └── User.php │ ├── Command │ ├── Clear │ │ ├── Allcache.php │ │ ├── Cache.php │ │ └── Twig.php │ ├── Database │ │ ├── Migrate.php │ │ └── Status.php │ ├── Get │ │ ├── Avatars.php │ │ ├── Composertags.php │ │ ├── Get.php │ │ ├── Project.php │ │ ├── Project │ │ │ ├── Comments.php │ │ │ ├── Events.php │ │ │ ├── Issues.php │ │ │ ├── Labels.php │ │ │ └── Milestones.php │ │ └── Users.php │ ├── Install │ │ └── Install.php │ ├── Make │ │ ├── Autocomplete.php │ │ ├── Composergraph.php │ │ ├── Dbcomments.php │ │ ├── Depfile.php │ │ ├── Docu.php │ │ ├── Repoinfo.php │ │ └── tpl │ │ │ └── dependencies.twig │ ├── Test │ │ ├── Checkstyle.php │ │ ├── Hook.php │ │ ├── Phpunit.php │ │ ├── Run.php │ │ ├── Test.php │ │ └── data │ │ │ └── cms-pull.json │ ├── TrackerCommand.php │ └── Update │ │ ├── Pulls.php │ │ ├── Server.php │ │ └── Update.php │ ├── Controller │ ├── AbstractAjaxController.php │ ├── AbstractTrackerController.php │ ├── AbstractTrackerListController.php │ ├── AjaxResponse.php │ ├── Concerns │ │ └── HasLists.php │ ├── TrackerControllerInterface.php │ └── TrackerControllerResolver.php │ ├── Database │ ├── AbstractDatabaseTable.php │ └── Migrations.php │ ├── DiffRenderer │ └── Html │ │ └── Inline.php │ ├── EventListener │ ├── AddDebugOutputToResponseListener.php │ └── ErrorSubscriber.php │ ├── Github │ ├── DataType │ │ ├── Commit.php │ │ ├── Commit │ │ │ ├── CombinedStatus.php │ │ │ └── Status.php │ │ ├── Issues │ │ │ └── Comment.php │ │ └── JTracker │ │ │ └── Issues │ │ │ └── Comment.php │ ├── Exception │ │ └── GithubException.php │ ├── Github.php │ ├── GithubFactory.php │ ├── GithubObject.php │ ├── Package.php │ └── Package │ │ ├── Issues.php │ │ ├── Issues │ │ ├── Comments.php │ │ └── Events.php │ │ ├── Markdown.php │ │ ├── Repositories.php │ │ └── Repositories │ │ └── Statuses.php │ ├── Helper │ └── GitHubHelper.php │ ├── Http │ └── CurlTransport.php │ ├── Kernel │ ├── AbstractKernel.php │ ├── ConsoleKernel.php │ └── WebKernel.php │ ├── Model │ ├── AbstractTrackerDatabaseModel.php │ ├── AbstractTrackerListModel.php │ ├── ListfulModelInterface.php │ └── TrackerDefaultModel.php │ ├── Pagination │ └── TrackerPagination.php │ ├── Service │ ├── AuthenticationProvider.php │ ├── CacheProvider.php │ ├── CliApplicationProvider.php │ ├── DatabaseProvider.php │ ├── DispatcherProvider.php │ ├── GitHubProvider.php │ ├── HttpProvider.php │ ├── LoggerProvider.php │ ├── MonologProvider.php │ ├── RendererProvider.php │ └── WebApplicationProvider.php │ ├── Twig │ ├── AssetsExtension.php │ ├── CdnExtension.php │ ├── FlashExtension.php │ ├── PhpExtension.php │ └── Service │ │ ├── CdnRenderer.php │ │ └── FlashMessageRetriever.php │ ├── Upload │ └── File.php │ └── View │ ├── AbstractTrackerHtmlView.php │ ├── BaseHtmlView.php │ ├── Renderer │ ├── ApplicationContext.php │ ├── ContrastHelper.php │ ├── DebugPathPackage.php │ └── TrackerExtension.php │ └── TrackerDefaultView.php ├── templates ├── activity │ ├── projectactivity.index.twig │ ├── snapshot.index.twig │ ├── totaluseractivity.index.twig │ └── useractivity.index.twig ├── debug │ ├── debug.index.twig │ ├── logfields.twig │ ├── logs.index.twig │ └── monologs.index.twig ├── diff.twig ├── editor.twig ├── exception.twig ├── fields.twig ├── github │ ├── hooks.index.twig │ ├── labels.index.twig │ ├── milestones.index.twig │ └── stats.index.twig ├── groups │ ├── group.edit.twig │ └── groups.index.twig ├── index.twig ├── projects │ ├── project.add.twig │ ├── project.edit.twig │ ├── project.index.twig │ └── projects.index.twig ├── support │ ├── documentation.index.twig │ └── icons.index.twig ├── testcontainer.twig ├── text │ ├── article.edit.twig │ ├── article.show.twig │ └── articles.index.twig ├── tracker │ ├── categories.index.twig │ ├── category.add.twig │ ├── category.edit.twig │ ├── issue.add.twig │ ├── issue.edit.twig │ ├── issue.index.twig │ ├── issues.index.twig │ ├── tpl │ │ ├── activities.twig │ │ └── filters.twig │ └── tracker.filters.twig ├── trackerMenu.twig ├── uploader.full.twig └── users │ ├── user.edit.twig │ └── user.index.twig ├── tests ├── bootstrap.php └── tracker │ ├── Hooks │ └── Listeners │ │ └── JoomlaCmsPullsListenerCheckFilesAndAssignCategoryTest.php │ ├── Mocks │ └── JoomlaCmsPullsListenerMock.php │ └── User │ └── GitHubUserTest.php ├── webpack.mix.js └── www ├── .htaccess ├── .well-known └── security.txt ├── favicon.ico ├── images └── avatars │ ├── .gitignore │ └── user-default.png ├── index.php ├── media ├── css │ ├── code.css │ ├── diff.css │ ├── file-tree │ │ ├── images │ │ │ ├── directory.png │ │ │ ├── folder_open.png │ │ │ ├── md.png │ │ │ └── spinner.gif │ │ └── jqueryFileTree.css │ ├── fontawesome.min.css │ ├── jtracker-rtl.css │ ├── jtracker.css │ ├── markitup │ │ ├── sets │ │ │ └── markdown │ │ │ │ ├── images │ │ │ │ ├── bold.png │ │ │ │ ├── clean.png │ │ │ │ ├── code.png │ │ │ │ ├── h1.png │ │ │ │ ├── h2.png │ │ │ │ ├── h3.png │ │ │ │ ├── h4.png │ │ │ │ ├── h5.png │ │ │ │ ├── h6.png │ │ │ │ ├── image.png │ │ │ │ ├── italic.png │ │ │ │ ├── link.png │ │ │ │ ├── list-bullet.png │ │ │ │ ├── list-numeric.png │ │ │ │ ├── picture.png │ │ │ │ ├── preview.png │ │ │ │ ├── quotes.png │ │ │ │ └── stroke.png │ │ │ │ ├── set.js │ │ │ │ └── style.css │ │ └── skins │ │ │ └── tracker │ │ │ └── style.css │ ├── pagination │ │ ├── A_green.css │ │ ├── A_red.css │ │ ├── A_yellow.css │ │ ├── B_black.css │ │ ├── B_blue.css │ │ ├── B_red.css │ │ ├── C_green.css │ │ ├── C_red.css │ │ ├── C_yellow.css │ │ ├── grey.css │ │ ├── pagination.css │ │ └── red.css │ ├── switch.css │ ├── template-rtl.css │ ├── template-rtl.min.css │ ├── template.css │ ├── template.min.css │ └── vendor │ │ ├── blueimp-file-upload.css │ │ ├── bootstrap-select.css │ │ ├── bootstrap-switch.css │ │ ├── datepicker.css │ │ ├── jquery.atwho.css │ │ └── octicons.css ├── fonts │ └── vendor │ │ └── octicons │ │ └── build │ │ ├── octicons.eot │ │ ├── octicons.svg │ │ ├── octicons.ttf │ │ ├── octicons.woff │ │ └── octicons.woff2 ├── images │ ├── ajax-loader.gif │ ├── apple-touch-icon-114-precomposed.png │ ├── apple-touch-icon-144-precomposed.png │ ├── apple-touch-icon-57-precomposed.png │ ├── apple-touch-icon-72-precomposed.png │ ├── bg-container.png │ ├── handle.png │ ├── menu.png │ └── submenu.png ├── img │ ├── 1x1.png │ ├── loading.gif │ └── progressbar.gif ├── js │ ├── color-select.js │ ├── color-select.js.LICENSE.txt │ ├── file-tree │ │ └── jqueryFileTree.js │ ├── jtracker-tmpl.js │ ├── jtracker-tmpl.js.LICENSE.txt │ ├── jtracker.js │ ├── support │ │ ├── documentation-index.js │ │ └── documentation-index.js.LICENSE.txt │ ├── text │ │ ├── article-edit.js │ │ └── articles-index.js │ ├── uploader-img.js │ ├── uploader-img.js.LICENSE.txt │ ├── validation │ │ └── jtracker-rules.js │ └── vendor │ │ ├── blueimp-canvas-to-blob.js │ │ ├── blueimp-file-upload.js │ │ ├── blueimp-load-image.js │ │ ├── blueimp-tmpl.js │ │ ├── bootstrap-select.js │ │ ├── bootstrap-switch.js │ │ ├── bootstrap.min.js │ │ ├── bootstrap.min.js.map │ │ ├── chart.js │ │ ├── chart.js.map │ │ ├── d3.js │ │ ├── datepicker.js │ │ ├── datepicker │ │ └── locales │ │ │ └── en-GB.js │ │ ├── jquery-simple-color.js │ │ ├── jquery-textrange.js │ │ ├── jquery-validation.js │ │ ├── jquery.atwho.js │ │ ├── jquery.caret.js │ │ ├── jquery.js │ │ ├── skipto.min.js │ │ ├── skipto.min.js.map │ │ └── twbs-pagination.js ├── markitup │ ├── jquery.markitup.js │ ├── sets │ │ └── default │ │ │ ├── images │ │ │ ├── bold.png │ │ │ ├── clean.png │ │ │ ├── image.png │ │ │ ├── italic.png │ │ │ ├── link.png │ │ │ ├── list-bullet.png │ │ │ ├── list-numeric.png │ │ │ ├── picture.png │ │ │ ├── preview.png │ │ │ └── stroke.png │ │ │ ├── set.js │ │ │ └── style.css │ ├── skins │ │ ├── markitup │ │ │ ├── images │ │ │ │ ├── bg-container.png │ │ │ │ ├── bg-editor-bbcode.png │ │ │ │ ├── bg-editor-dotclear.png │ │ │ │ ├── bg-editor-html.png │ │ │ │ ├── bg-editor-json.png │ │ │ │ ├── bg-editor-markdown.png │ │ │ │ ├── bg-editor-textile.png │ │ │ │ ├── bg-editor-wiki.png │ │ │ │ ├── bg-editor-xml.png │ │ │ │ ├── bg-editor.png │ │ │ │ ├── handle.png │ │ │ │ ├── menu.png │ │ │ │ └── submenu.png │ │ │ └── style.css │ │ └── simple │ │ │ ├── images │ │ │ ├── handle.png │ │ │ ├── menu.png │ │ │ └── submenu.png │ │ │ └── style.css │ └── templates │ │ ├── preview.css │ │ └── preview.html ├── mix-manifest.json └── webfonts │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.ttf │ └── fa-solid-900.woff2 └── robots.txt /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | This repository is for the Joomla! Issue Tracker application. If your issue pertains to the Joomla! CMS, please report your issue at https://github.com/joomla/joomla-cms/issues/new 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | > If you are submitting an issue for the Joomla! CMS, please submit it at https://github.com/joomla/joomla-cms/issues/new instead. You may remove this line from the issue template. 2 | 3 | #### Steps to reproduce the issue 4 | 5 | 6 | 7 | #### Expected result 8 | 9 | 10 | 11 | #### Actual result 12 | 13 | 14 | 15 | #### System information (as much as possible) 16 | 17 | 18 | 19 | #### Additional comments 20 | 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Pull Request for Issue # . 2 | 3 | #### Summary of Changes 4 | 5 | #### Testing Instructions 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE based files and folders # 2 | .buildpath 3 | .project 4 | .settings 5 | .idea 6 | 7 | # Files and folders that should not be pushed to the repo # 8 | /etc/config.json 9 | .vagrant/* 10 | 11 | # Apple Files # 12 | .DS_Store 13 | 14 | # COMPOSER Files # 15 | vendor/* 16 | composer.phar 17 | 18 | # Node / Grunt Contribs # 19 | /node_modules 20 | 21 | # Bower Components # 22 | /bower_components/ 23 | /www/media/css/temp.css 24 | 25 | # Build/Test related files # 26 | cache.properties 27 | build/api/* 28 | build/logs/* 29 | current_SHA 30 | /sha.txt 31 | /.php_cs.cache 32 | /.phpunit.result.cache 33 | .php-cs-fixer.cache 34 | 35 | # Ignore uploads # 36 | www/uploads/* 37 | 38 | # Only track security.txt from .well-known directory 39 | /www/.well-known/* 40 | !/www/.well-known/security.txt 41 | 42 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict = true 2 | 3 | -------------------------------------------------------------------------------- /.openshift/action_hooks/pre_start_php: -------------------------------------------------------------------------------- 1 | export JTRACKER_ENVIRONMENT="openshift" 2 | -------------------------------------------------------------------------------- /.openshift/markers/use_composer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/.openshift/markers/use_composer -------------------------------------------------------------------------------- /Documentation/Applications/Activity.md: -------------------------------------------------------------------------------- 1 | ## Activity Application 2 | 3 | ### Purpose 4 | 5 | Displays activity charts related to tracker activity for supported projects. 6 | 7 | ### Functionality 8 | 9 | * Web pages displaying different types of activity charts 10 | * AJAX handlers for dynamic chart updates 11 | 12 | ### Formatted Dates 13 | 14 | Some charts use localised date strings based on PHP's `ext/intl`. Below are the references for the currently supported languages: 15 | 16 | #### User Activity Chart 17 | 18 | These formats are used in the title when a custom date range is used: 19 | 20 | Language Code | Format 21 | ------------- | ------------- 22 | ca-ES | d MMMM 'de' y 23 | da-DK | d. MMMM y 24 | de-DE | d. MMMM y 25 | en-GB | d MMMM y 26 | es-CO | d 'de' MMMM 'de' y 27 | es-ES | d 'de' MMMM 'de' y 28 | et-EE | d. MMMM y 29 | fr-CA | d MMMM y 30 | fr-FR | d MMMM y 31 | hu-HU | y. MMMM d. 32 | id-ID | d MMMM y 33 | it-IT | d MMMM y 34 | lv-LV | y. 'gada' d. MMMM 35 | nb-NO | d. MMMM y 36 | nl-BE | d MMMM y 37 | nl-NL | d MMMM y 38 | pl-PL | d MMMM y 39 | pt-BR | d 'de' MMMM 'de' y 40 | pt-PT | d 'de' MMMM 'de' y 41 | ro-RO | d MMMM y 42 | ru-RU | d MMMM y 'г'. 43 | sl-SI | dd. MMMM y 44 | zh-CN | y年M月d日 45 | -------------------------------------------------------------------------------- /Documentation/Applications/Debug.md: -------------------------------------------------------------------------------- 1 | ## Debug Application 2 | 3 | ### Purpose 4 | 5 | Debug and profile the application, manage log files. 6 | 7 | ### Functionality 8 | 9 | * A dedicated class for debugging, profiling and logging. 10 | * Database logging to a log file to log queries even during redirects. 11 | * Exception rendering including clickable file links using the xdebug protocol. 12 | 13 | #### Log files 14 | 15 | To activate or deactivate logging use the `debug.logging` option in `etc/config.json`. 16 | 17 | Supported log events: 18 | * application 19 | * cron jobs 20 | * database queries 21 | * GitHub issues 22 | * GitHub comments 23 | * GitHub pull requests 24 | * PHP error log 25 | 26 | The supported "events" are written to separate log files. 27 | Unsupported events go to the `error.log`. 28 | -------------------------------------------------------------------------------- /Documentation/Applications/GitHub.md: -------------------------------------------------------------------------------- 1 | ## GitHub Application 2 | 3 | ### Purpose 4 | 5 | Provides an interface for displaying and managing data connected to GitHub 6 | 7 | ### Functionality 8 | 9 | * **Stats** Displays repository statistics. 10 | * **Hooks** Enables management of web hooks to a repository 11 | * **Labels** Enables management of labels for a repository's issues and pulls 12 | * **Markdown** Provides an AJAX interface to parse input text from GitHub Flavored Markdown to HTML 13 | -------------------------------------------------------------------------------- /Documentation/Applications/Groups.md: -------------------------------------------------------------------------------- 1 | ## Groups Application 2 | 3 | ### Purpose 4 | 5 | Provides the abililty to manage user groups within site projects 6 | 7 | ### Functionality 8 | 9 | * **Management** Enables administrators to manage user groups and ACL for projects 10 | -------------------------------------------------------------------------------- /Documentation/Applications/Projects.md: -------------------------------------------------------------------------------- 1 | ## Projects Application 2 | 3 | ### Purpose 4 | 5 | Provides the abililty to manage projects within the site 6 | 7 | ### Functionality 8 | 9 | * **Management** Enables administrators to manage site projects 10 | -------------------------------------------------------------------------------- /Documentation/Applications/Support.md: -------------------------------------------------------------------------------- 1 | ## Support Application 2 | 3 | ### Purpose 4 | 5 | Provides miscellaneous functionality for the site 6 | 7 | ### Functionality 8 | 9 | * **Markdown Preview** Displays various Markdown inputs with their HTML outputs 10 | * **Icons** Displays the available icons 11 | * **Documentation** Displays the site documentation 12 | -------------------------------------------------------------------------------- /Documentation/Applications/System.md: -------------------------------------------------------------------------------- 1 | ## System Application 2 | 3 | ### Purpose 4 | 5 | Various system tasks 6 | 7 | ### Functionality 8 | 9 | * **Config editor** (Currently using simple text fields where you can fill in the values). 10 | * **PHP Info** Provides data on the PHP configuration for the site 11 | * **Routes** Displays the active routes for the overall site and each application 12 | -------------------------------------------------------------------------------- /Documentation/Applications/Text.md: -------------------------------------------------------------------------------- 1 | ## Text Application 2 | 3 | ### Purpose 4 | 5 | Provide an easy interface for the creation of text pages. 6 | 7 | ### Functionality 8 | 9 | All text is written in [GitHub Flavored Markdown](http://github.github.com/github-flavored-markdown/). The parsed text is stored to a database table. 10 | 11 | A simple text editor with preview functionality. 12 | -------------------------------------------------------------------------------- /Documentation/Applications/Tracker.md: -------------------------------------------------------------------------------- 1 | ## Tracker Application 2 | 3 | ### Purpose 4 | 5 | Provides the main issue tracking functionality 6 | 7 | ### Functionality 8 | 9 | * **Issue Tracking** The primary issue tracking interfaces to include an item edit view, item display view, and list view 10 | * **Hooks** Web hooks which are processed after events on GitHub 11 | * **Upload** Enables upload functionality of specified file types 12 | -------------------------------------------------------------------------------- /Documentation/Applications/Users.md: -------------------------------------------------------------------------------- 1 | ## Users Application 2 | 3 | ### Purpose 4 | 5 | Provides functionality for site login/logout and managing the user accounts 6 | 7 | ### Functionality 8 | 9 | * **Login/Logout** Interfaces between the user and the GitHub API for login activity 10 | * **Profile** Displays and edits the user profile 11 | -------------------------------------------------------------------------------- /Documentation/Dependency-Injection.md: -------------------------------------------------------------------------------- 1 | ## Dependency Injection 2 | 3 | The issue tracker application makes use of Dependency Injection (DI) and Service Providers. 4 | 5 | The application uses the Joomla! Framework's [DI Container](https://github.com/joomla-framework/di). At present, this provides a hybrid solution which emulates the old `JFactory` functions but helps with a full transition to DI based loading. 6 | 7 | The Container instance is instantiated within the application and several service providers are added for global use in the application. 8 | 9 | To retrieve an object from the container, you must call `$container->get($key, $forceNew)` where $key is the key for the object (app, config, db) and $forceNew instructs the container to create a new instance of the specified object. 10 | 11 | The service provider should contain the logic needed to build the object and provide default instructions to the Container on how it is accessed. Our service providers are set up so that the objects created cannot be overridden by a different object of the same name and will create a shared (reusable) instance of the object. 12 | 13 | ### App Services 14 | 15 | Each app within the application must have a base class that implements the `JTracker\AppInterface` (this could be compared to a Symfony bundle as a high level example). The interface defines a `loadServices` method which receives the global DI container as its single parameter. Apps should use this to add services created within the app to the container or to register additional options to global services. 16 | -------------------------------------------------------------------------------- /Documentation/Development/Asset-Management.md: -------------------------------------------------------------------------------- 1 | ## Asset Management 2 | 3 | The issue tracker uses [NPM](https://www.npmjs.com/) and [Laravel Mix](https://github.com/JeffreyWay/laravel-mix) for managing and compiling its frontend assets. 4 | 5 | ### Default Environment 6 | 7 | The compiled production assets are checked into the repo and used by default. If making changes to any assets, you will need to set up the development environment. 8 | 9 | ### Development Environment 10 | 11 | #### Setup 12 | 13 | Note: Commands here may need to be prefixed with `sudo` depending on your local configuration 14 | 15 | To set up the development environment, you will need to have [Node.js](https://nodejs.org/en/) and NPM installed. With those installed, run the `npm install` command to install all dependencies. 16 | 17 | #### Compiling Assets 18 | 19 | If making changes to the assets (updating dependencies or editing the tracker's assets), you will need to recompile the production assets. 20 | 21 | While working locally, you can run the `npm run watch` command which will watch for changes and recompile as needed. Note that this will create unminified assets to make debugging issues easier. 22 | 23 | When ready to commit your changes, you must run the `npm run prod` command which will compile and minify the assets. 24 | -------------------------------------------------------------------------------- /Documentation/Development/Graphics.md: -------------------------------------------------------------------------------- 1 | ## Graphics 2 | 3 | * https://developer.github.com/guides/rendering-data-as-graphs/ 4 | 5 | ### D3 ? 6 | From their web site 7 | 8 | * http://d3js.org/ 9 | 10 | > D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation. 11 | 12 | ### Why D3 ? 13 | 14 | * http://blog.visual.ly/why-d3-js-is-so-great-for-data-visualization/ 15 | 16 | ### More on D3 17 | 18 | * Wiki https://github.com/mbostock/d3/wiki 19 | * Tutorials https://github.com/mbostock/d3/wiki/Tutorials 20 | * Gallery https://github.com/mbostock/d3/wiki/Gallery 21 | -------------------------------------------------------------------------------- /Documentation/Development/Openshift.md: -------------------------------------------------------------------------------- 1 | ## Openshift PaaS 2 | 3 | ### WhatIs https://www.openshift.com/ 4 | 5 | Short: The Open Hybrid Cloud Application Platform by Red Hat 6 | 7 | `@todo` more info 8 | 9 | ### Setup 10 | 11 | * Go to https://openshift.redhat.com/app/console/application_types?search=php, create a new application type `PHP, MySQL, and phpMyAdmin`. 12 | * Under "Source code" put `https://github.com/joomla/jissues.git` and the branch `openshift` (`@todo` master?) 13 | * => Create the Application .... 14 | * Look around, then click on "Continue to the application overview page". 15 | 16 | ### Environment Variables 17 | 18 | Several parameters have to be passed as environment variables to make the application aware of the Openshift environment. This is also a security feature. 19 | 20 | Use the rhc client tools to set the environment variables: 21 | 22 | `rhc env set = -a ` 23 | 24 | ``` 25 | JTRACKER_ENVIRONMENT="openshift" 26 | JTRACKER_GITHUB_CLIENT_ID= 27 | JTRACKER_GITHUB_CLIENT_SECRET= 28 | JTRACKER_GITHUB_USERNAME= 29 | JTRACKER_GITHUB_PASSWORD= 30 | ``` 31 | 32 | e.g.: 33 | 34 | `rhc env set JTRACKER_ENVIRONMENT=openshift -a trackertest` 35 | 36 | ### Installation 37 | 38 | * Open your terminal and SSH into the application. 39 | * `cd app-root/repo/bin` 40 | * `./jtracker install` 41 | 42 | Done. 43 | -------------------------------------------------------------------------------- /Documentation/Internationalisation/Crowdin.md: -------------------------------------------------------------------------------- 1 | ## Translations via Crowdin [![Crowdin](https://d322cqt584bo4o.cloudfront.net/joomla-official-sites/localized.svg)](https://crowdin.com/project/joomla-official-sites) 2 | 3 | The Issue Tracker proudly welcomes translations contributed via [Crowdin](https://crowdin.com/). The project can be found at [https://crowdin.com/project/joomla-official-sites](https://crowdin.com/project/joomla-official-sites). 4 | 5 | #### Crowdin Guidelines 6 | 7 | Log on to [Crowdin's Help Center] (https://support.crowdin.com/) to find useful information and resources for Translators as well as for Developers. 8 | You can't find the answer to your question? Please contact [Marc-Antoine Thevenet] (https://crowdin.com/mail/compose/MAT978). 9 | 10 | #### Adding languages 11 | 12 | If your language is not yet available on Crowdin, please contact [Marc-Antoine Thevenet] (https://crowdin.com/mail/compose/MAT978) or [Michael Babker] (https://crowdin.com/mail/compose/mbabker) on Crowdin so that they can set it up. 13 | And if your language is already 100% translated, don't hesitate to improve or comment the translations or you can simply vote for your favourite translation. 14 | 15 | #### Crowdin: Other Official Joomla! Projects 16 | Other official resources are available for translation on Crowdin. Just have a look [here] (https://crowdin.com/projects/Joomla) and help us with the localisation of Joomla. 17 | -------------------------------------------------------------------------------- /Documentation/Internationalisation/Languages.md: -------------------------------------------------------------------------------- 1 | ## Supported languages 2 | 3 | A list of supported languages is stored in the `LanguageHelper` class. 4 | 5 | To add a new language, add the following to the array of `$languages`: 6 | 7 | ``` 8 | '{code}' => [ 9 | 'iso' => '{ISO-Code}', 10 | 'name' => '{Language name}', 11 | 'display' => '{Language display name}' 12 | ], 13 | ``` 14 | 15 | * `{code}` The language code - e.g. `en-GB` - See: [languagecodes](https://chronoplexsoftware.com/myfamilytree/localisation/languagecodes.htm) 16 | * `{ISO-Code}` The ISO code - e.g. `uk` loosely following the [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) standard. 17 | * `{Language name}` The language name - e.g. `English` - usually in English. 18 | * `{Language display name}` The text to display - e.g. `British English` - Should be in "native" characters. - See: [languagecodes](https://chronoplexsoftware.com/myfamilytree/localisation/languagecodes.htm) 19 | 20 | ## Update language selector flag images 21 | 22 | * Download the icon pack from http://forum.tsgk.com/viewtopic.php?t=4921 and store it "somewhere" 23 | * Issue the command `make languageflags` using the following parameters: 24 | * The path where the flag images are stored ("somewhere"). 25 | * `--imagefile` (optional) path to store the result image. 26 | * `--cssfile` (optional) path to store the result CSS file. 27 | -------------------------------------------------------------------------------- /Documentation/Overview.md: -------------------------------------------------------------------------------- 1 | ## Documentation 2 | 3 | The developer documentation is written in markdown syntax in plain text documents, managed in a git repository and ready for your contribution: 4 | 5 | https://github.com/joomla/jissues/tree/master/Documentation 6 | 7 | To parse and display the documentation on a live site, the markdown sources can be uploaded to the server. 8 | Then the CLI script is executed with the `make docu` option, which will send requests to GitHub's markdown parser. 9 | The resulting HTML is then stored to the database. 10 | 11 | It is also possible to perform these operations locally and then synchronize the remote database. 12 | -------------------------------------------------------------------------------- /Documentation/Users/Access-Control.md: -------------------------------------------------------------------------------- 1 | ## Access Control (ACL) 2 | 3 | ACL is limited and very specific: 4 | 5 | * Only **Projects** are tracked. 6 | * There are only 5 "hard wired" **Actions**:
`view`, `create`, `edit`, `editown` and `manage`. 7 | * It is based on **groups** a user automatically belongs to or can be assigned to.
8 | For every project two **system groups** are created by default:
`Public` and `User`. 9 | 10 | The special **admin user** role that is assigned using the `etc/config.json` file is granted global access. 11 | 12 | Following is an example setup for a security tracker with non public access and two additionally created custom groups: 13 | 14 | ![acl-projects-groups](https://cloud.githubusercontent.com/assets/33978/2562602/c5722320-b855-11e3-9157-640c8ec68bce.png) 15 | 16 | Note that if you have `Edit` permissions, you have automatically `Editown` permissions. 17 | 18 | Currently the items that are editable with `edit own` permissions are hard coded. You can only edit the title and description of an item (not the status, priority etc.). 19 | If we (re)implement custom fields, those should receive a property `canEditOwn` o be controlled separately. 20 | 21 | ---- 22 | 23 | However, this is a very first step... lots of optimization and testing required here. 24 | -------------------------------------------------------------------------------- /Documentation/Users/GitHub-Authentication.md: -------------------------------------------------------------------------------- 1 | ## GitHub Authentication 2 | 3 | GitHub limits requests to its API to 60 per hour for unauthenticated requests, and to 5000 per hour for requests using either basic authentication or oAuth. 4 | 5 | For the initial import of issues and issue comments to the database we need to authenticate with GitHub to avoid to exceed the rate limit. 6 | 7 | To use your GitHub credentials from the CLI script, edit the `etc/config.json` file and fill in your GitHub username and password, answer "yes" to the question if you wish to authenticate, or pass the `--auth` option. 8 | 9 | This will add the possibility to authenticate a user with their GitHub account using oAuth authentication. 10 | 11 | #### oAuth login 12 | In order to test the login feature in your local environment you will need to create an application `key` and `secret` for your (local) JTrackerApplication instance: 13 | 14 | * Sail to your account on GitHub ⇒ "Edit your Profile". 15 | * Go to "Applications" - "Developer applications" and "Register new application" 16 | * Fill in some name and some main URL. Those will be presented to the user when authorizing the application. 17 | * Fill in a domain for callback URL. This **must match** the domain the application is running. This may be `http://localhost` or a virtual host. 18 | * Hit "Save" and copy the client_id and client_secret. 19 | * Edit `etc/config.json` and fill in the `client_id` and `client_secret`. 20 | * Install as usual. 21 | * Sail to your localhost's JTracker installation and click on "Login with GitHub" 22 | * On the first attempt you will be redirected to GitHub where you have to confirm the access by your application. 23 | -------------------------------------------------------------------------------- /Documentation/avatars.md: -------------------------------------------------------------------------------- 1 | ## Avatar support 2 | 3 | On the first log in, the application tries to fetch the users avatar and store it locally. 4 | 5 | The command `get avatars` will fetch the avatars for the users that appear in the `#__activities` table. 6 | 7 | ```sh 8 | 9 | $ bin/jtracker get avatars 10 | ------------------------------------------------------------ 11 | Joomla! Tracker CLI Application 12 | 1.0.0-beta 13 | ------------------------------------------------------------ 14 | ------------------------------------------------------------ 15 | Retrieve Avatars 16 | ------------------------------------------------------------ 17 | 18 | ``` 19 | 20 | Note: This and all remote HTTP requests **requires cURL.** 21 | -------------------------------------------------------------------------------- /Documentation/pagination.md: -------------------------------------------------------------------------------- 1 | ## Pagination 2 | 3 | I searched the web for "PHP pagination MySQL" or similar, and this came up on the first page: 4 | http://www.awcore.com/dev/1/3/Create-Awesome-PHPMYSQL-Pagination_en 5 | 6 | I liked the way the author solved "the problem", the code looked acceptable... so I "forked" and Joomla!'d it :) 7 | The CSS was somewhat conflicting (for me), so I took one of the beautiful styles from the author, and now it looks like this: 8 | 9 | ![Pagination](https://f.cloud.github.com/assets/33978/550842/960024f0-c31b-11e2-971c-c7d870320600.png) 10 | 11 | For now it only generates "plain links" adding a `&page=n` parameter to the current URL. 12 | When we implement the search functionality, this must be revised. 13 | I can also imagine a JavaScript (AJAX) based solution using this. 14 | 15 | **Note**: The license on this is very unclear. Seems that is provided as a "snippet". Maybe our legal department should have a look at this ;) 16 | -------------------------------------------------------------------------------- /Documentation/session.md: -------------------------------------------------------------------------------- 1 | ## Session management 2 | Is provided by the [session subsystem from the Symfony2 HttpFoundation Component](http://symfony.com/doc/master/components/http_foundation/sessions.html) 3 | 4 | The new possibilities are still to explore.... 5 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 5 | VAGRANTFILE_API_VERSION = "2" 6 | 7 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 8 | 9 | # Every Vagrant virtual environment requires a box to build off of. 10 | config.vm.box = "jissues-debian-jessie64-v2" 11 | 12 | # The url from where the 'config.vm.box' box will be fetched if it 13 | # doesn't already exist on the user's system. 14 | config.vm.box_url = "https://atlas.hashicorp.com/debian/boxes/contrib-jessie64/versions/8.8.0/providers/virtualbox.box" 15 | 16 | # Create a forwarded port mapping which allows access to a specific port 17 | # within the machine from a port on the host machine. In the example below, 18 | # accessing "localhost:8080" will access port 80 on the guest machine. 19 | config.vm.network :forwarded_port, guest: 80, host: 2345 20 | 21 | # Provider-specific configuration so you can fine-tune various 22 | # backing providers for Vagrant. These expose provider-specific options. 23 | # Example for VirtualBox: 24 | # 25 | config.vm.provider :virtualbox do |vb| 26 | # # Don't boot with headless mode 27 | vb.gui = false 28 | # 29 | # # Use VBoxManage to customize the VM. For example to change memory: 30 | # vb.customize ["modifyvm", :id, "--memory", "1024"] 31 | end 32 | # 33 | # View the documentation for the provider you're using for more 34 | # information on available options. 35 | 36 | config.vm.provision "shell", inline: "apt-get install --yes puppet" 37 | config.vm.provision :puppet do |puppet| 38 | puppet.manifests_path = "build/puppet/manifests" 39 | # puppet.manifest_file = "site.pp" 40 | end 41 | 42 | end 43 | -------------------------------------------------------------------------------- /assets/images/markitup/skins/tracker/bg-container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/assets/images/markitup/skins/tracker/bg-container.png -------------------------------------------------------------------------------- /assets/images/markitup/skins/tracker/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/assets/images/markitup/skins/tracker/handle.png -------------------------------------------------------------------------------- /assets/images/markitup/skins/tracker/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/assets/images/markitup/skins/tracker/menu.png -------------------------------------------------------------------------------- /assets/images/markitup/skins/tracker/submenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/assets/images/markitup/skins/tracker/submenu.png -------------------------------------------------------------------------------- /assets/js/color-select.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | 6 | $(document).ready(function() { 7 | $('.color_select').simpleColor({ 8 | colors: [ 9 | 'e11d21', 'eb6420', 'fbca04', '009800', '006b75', '207de5', '0052cc', '5319e7', 10 | 'f7c6c7', 'fad8c7', 'fef2c0', 'bfe5bf', 'bfdadc', 'c7def8', 'bfd4f2', 'd4c5f9' 11 | ], 12 | cellWidth: 25, 13 | cellHeight: 25, 14 | cellMargin: 0, 15 | columns: 8, 16 | displayCSS: { 'width': '25px', 'height': '25px' }, 17 | chooserCSS: { 'left': '25px', 'border': '0' }, 18 | onSelect: function(hex, element) { 19 | $('#' + element.attr('id') + '_display').val(hex); 20 | } 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /assets/js/jtracker-tmpl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | 6 | /** 7 | * Setup custom tags for the JS template engine. 8 | * @type {RegExp} 9 | */ 10 | tmpl.regexp = /([\s'\\])(?![^%]*%\])|(?:\[%(=|#)([\s\S]+?)%\])|(\[%)|(%\])/g; 11 | -------------------------------------------------------------------------------- /assets/js/text/article-edit.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | 6 | ;(function (window, $) { 7 | 'use strict'; 8 | 9 | $(function () { 10 | $('#save-article').click(function (e) { 11 | e.preventDefault(); 12 | $('#editForm').submit(); 13 | }); 14 | 15 | $('#text').markItUp(myMarkdownSettings); 16 | 17 | $('a[data-toggle="tab"]').on('shown', function (e) { 18 | if ($(e.target).attr('href') === '#preview') { 19 | JTracker.preview('#text', '#preview'); 20 | } 21 | }); 22 | }); 23 | })(window, jQuery); 24 | -------------------------------------------------------------------------------- /assets/js/text/articles-index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | 6 | const deleteArticleLinks = document.querySelectorAll('.delete-article'); 7 | 8 | deleteArticleLinks.forEach((article) => { 9 | article.addEventListener('click', (e) => { 10 | e.preventDefault(); 11 | 12 | let formClass = '.delete-article-' + article.dataset.id + '-form'; 13 | document.getElementById(formClass).submit(); 14 | }) 15 | }); 16 | -------------------------------------------------------------------------------- /assets/scss/jtracker-rtl.scss: -------------------------------------------------------------------------------- 1 | .subnav li.pull-right { 2 | float: left; 3 | } 4 | 5 | ul.trackerPagination li { 6 | float: right !important; 7 | } 8 | 9 | .example-markdown, 10 | .example-rendered { 11 | direction: ltr; 12 | } 13 | -------------------------------------------------------------------------------- /bin/jtracker: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | run(); 39 | } 40 | catch (\Exception $e) 41 | { 42 | $trace = $e->getTraceAsString(); 43 | 44 | echo "\n\n" 45 | . 'ERROR: ' . $e->getMessage() 46 | . "\n\n" 47 | . 'Call stack:' . "\n" 48 | . str_replace(JPATH_ROOT, 'JPATH_ROOT', $e->getTraceAsString()); 49 | 50 | exit($e->getCode() ? : 255); 51 | } 52 | })(); 53 | -------------------------------------------------------------------------------- /build/.gitignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | -------------------------------------------------------------------------------- /build/phpmd.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | Custom rule set for the Joomla Tracker project. 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 1 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /build/puppet/files/apache/jissues.conf: -------------------------------------------------------------------------------- 1 | 2 | 3 | DocumentRoot /var/www/jissues 4 | 5 | 6 | Options Indexes FollowSymLinks MultiViews 7 | AllowOverride All 8 | Order allow,deny 9 | allow from all 10 | 11 | 12 | SetEnv JTRACKER_ENVIRONMENT vagrant 13 | 14 | ServerAdmin webmaster@localhost 15 | 16 | -------------------------------------------------------------------------------- /build/puppet/files/etc/environment: -------------------------------------------------------------------------------- 1 | export JTRACKER_ENVIRONMENT=vagrant 2 | -------------------------------------------------------------------------------- /build/puppet/files/etc/suryphp.list: -------------------------------------------------------------------------------- 1 | deb https://packages.sury.org/php jessie main -------------------------------------------------------------------------------- /build/puppet/files/php/php.ini: -------------------------------------------------------------------------------- 1 | display_errors = On 2 | error_reporting = -1 3 | error_log = /vagrant/logs/vagrant-php-error.log 4 | output_buffering = Off -------------------------------------------------------------------------------- /build/puppet/files/php/xdebug.ini: -------------------------------------------------------------------------------- 1 | xdebug.remote_enable = 1 2 | xdebug.profiler_enable_trigger = 1 3 | xdebug.remote_port = 9000 4 | xdebug.remote_connect_back = 1 5 | xdebug.file_link_format = xdebug://%f@%l 6 | xdebug.cli_color = 1 -------------------------------------------------------------------------------- /cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /cli/completions/tpl_jtracker.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # Part of the Joomla! Tracker application. 4 | # @copyright Copyright (C) 2016 Open Source Matters, Inc. All rights reserved. 5 | # @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License Version 2 or Later 6 | 7 | function __fish_jtracker_needs_command 8 | set cmd (commandline -opc) 9 | if [ (count $cmd) -eq 1 -a $cmd[1] = 'jtracker' ] 10 | return 0 11 | end 12 | return 1 13 | end 14 | 15 | function __fish_jtracker_using_command 16 | set cmd (commandline -opc) 17 | if [ (count $cmd) -gt 1 ] 18 | if [ $argv[1] = $cmd[2] ] 19 | return 0 20 | end 21 | end 22 | return 1 23 | end 24 | 25 | function __fish_jtracker_using_action 26 | set cmd (commandline -opc) 27 | if [ (count $cmd) -gt 2 ] 28 | if [ $argv[1] = $cmd[2] -a $argv[2] = $cmd[3] ] 29 | return 0 30 | end 31 | end 32 | return 1 33 | end 34 | -------------------------------------------------------------------------------- /etc/config.dist.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "driver" : "mysqli", 4 | "host" : "", 5 | "user" : "", 6 | "password": "", 7 | "name" : "", 8 | "prefix" : "" 9 | }, 10 | 11 | "github": { 12 | "client_id" : "", 13 | "client_secret": "", 14 | "auth_scope" : "public_repo", 15 | "accounts" : [ 16 | { 17 | "username": "", 18 | "password": "" 19 | } 20 | ] 21 | }, 22 | 23 | "renderer": { 24 | "type" : "twig", 25 | "cache": false 26 | }, 27 | 28 | "system": { 29 | "list_limit" : "20", 30 | "gzip" : "0", 31 | "offset" : "UTC", 32 | "upload_dir" : "uploads", 33 | "use_cdn" : "1", 34 | "remember_me" : "1", 35 | "error_reporting": "0" 36 | }, 37 | 38 | "cache": { 39 | "enabled" : false, 40 | "lifetime": 900, 41 | "adapter" : "file" 42 | }, 43 | 44 | "acl": { 45 | "admin_users": [ 46 | "", "" 47 | ], 48 | "secret" : "not-used-yet" 49 | }, 50 | 51 | "cli-application": { 52 | "colors" : "1", 53 | "progress-bar": "1" 54 | }, 55 | 56 | "debug": { 57 | "system" : "0", 58 | "database": "0", 59 | "hooks" : "0", 60 | "logging" : "0", 61 | "log-path": "", 62 | "template": "0", 63 | "admin" : "1", 64 | "github" : "0" 65 | }, 66 | 67 | "validation": { 68 | "mime_types": [ 69 | "image/png", 70 | "image/jpeg", 71 | "image/gif", 72 | "text/plain" 73 | ], 74 | "file_size" : "1M" 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /etc/config.openshift.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "driver" : "mysqli", 4 | "host" : "$OPENSHIFT_MYSQL_DB_HOST", 5 | "user" : "$OPENSHIFT_MYSQL_DB_USERNAME", 6 | "password": "$OPENSHIFT_MYSQL_DB_PASSWORD", 7 | "name" : "$OPENSHIFT_APP_NAME", 8 | "prefix" : "jooz_" 9 | }, 10 | 11 | "github": { 12 | "client_id" : "$JTRACKER_GITHUB_CLIENT_ID", 13 | "client_secret": "$JTRACKER_GITHUB_CLIENT_SECRET", 14 | "auth_scope" : "public_repo", 15 | "accounts": [ 16 | { 17 | "username": "$JTRACKER_GITHUB_USERNAME", 18 | "password": "$JTRACKER_GITHUB_PASSWORD" 19 | } 20 | ] 21 | }, 22 | 23 | "renderer": { 24 | "type" : "twig", 25 | "cache": false 26 | }, 27 | 28 | "system": { 29 | "list_limit" : "20", 30 | "gzip" : "0", 31 | "offset" : "UTC", 32 | "upload_dir" : "uploads", 33 | "use_cdn" : "1", 34 | "remember_me" : "1", 35 | "error_reporting": "32767" 36 | }, 37 | 38 | "cache": { 39 | "enabled" : false, 40 | "lifetime": 900, 41 | "adapter" : "file" 42 | }, 43 | 44 | "acl": { 45 | "admin_users": [ 46 | "", "" 47 | ], 48 | "secret" : "not-used-yet" 49 | }, 50 | 51 | "cli-application": { 52 | "colors" : "1", 53 | "progress-bar": "1" 54 | }, 55 | 56 | "debug": { 57 | "system" : "1", 58 | "database": "0", 59 | "hooks" : "0", 60 | "logging" : "0", 61 | "log-path": "$OPENSHIFT_LOG_DIR", 62 | "template": "0", 63 | "admin" : "1" 64 | }, 65 | 66 | "validation": { 67 | "mime_types": [ 68 | "image/png", "image/jpeg", "image/gif" 69 | ], 70 | "file_size" : "1M" 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /etc/config.travis.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "driver" : "mysqli", 4 | "host" : "localhost", 5 | "user" : "root", 6 | "password": "", 7 | "name" : "jtracker", 8 | "prefix" : "jtr_" 9 | }, 10 | 11 | "github": { 12 | "username" : "", 13 | "password" : "", 14 | "client_id" : "", 15 | "client_secret": "" 16 | }, 17 | 18 | "renderer": { 19 | "type" : "twig", 20 | "cache": false 21 | }, 22 | 23 | "system": { 24 | "list_limit" : "20", 25 | "gzip" : "0", 26 | "offset" : "UTC", 27 | "upload_dir" : "uploads", 28 | "use_cdn" : "1", 29 | "remember_me" : "1", 30 | "error_reporting": "32767" 31 | }, 32 | 33 | "cache": { 34 | "enabled" : false, 35 | "lifetime": 900, 36 | "adapter" : "file" 37 | }, 38 | 39 | "acl": { 40 | "admin_users": [ 41 | "", "" 42 | ], 43 | "secret" : "not-used-yet" 44 | }, 45 | 46 | "cli-application": { 47 | "colors" : "1", 48 | "progress-bar": "0" 49 | }, 50 | 51 | "debug": { 52 | "system" : "1", 53 | "database": "1", 54 | "hooks" : "0", 55 | "logging" : "1", 56 | "log-path": "logs", 57 | "template": "0" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /etc/config.vagrant.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "driver" : "mysqli", 4 | "host" : "localhost", 5 | "user" : "root", 6 | "password": "", 7 | "name" : "jtracker", 8 | "prefix" : "jtr_" 9 | }, 10 | 11 | "github": { 12 | "client_id" : "", 13 | "client_secret": "", 14 | "auth_scope" : "public_repo", 15 | "accounts": [ 16 | { 17 | "username": "", 18 | "password": "" 19 | } 20 | ] 21 | }, 22 | 23 | "renderer": { 24 | "type" : "twig", 25 | "cache": false 26 | }, 27 | 28 | "system": { 29 | "list_limit" : "20", 30 | "gzip" : "0", 31 | "offset" : "UTC", 32 | "upload_dir" : "uploads", 33 | "use_cdn" : "1", 34 | "remember_me" : "1", 35 | "error_reporting": "32767" 36 | }, 37 | 38 | "cache": { 39 | "enabled" : false, 40 | "lifetime": 900, 41 | "adapter" : "file" 42 | }, 43 | 44 | "acl": { 45 | "admin_users": [ 46 | "", "" 47 | ], 48 | "secret" : "not-used-yet" 49 | }, 50 | 51 | "cli-application": { 52 | "colors" : "1", 53 | "progress-bar": "1" 54 | }, 55 | 56 | "debug": { 57 | "system" : "1", 58 | "database": "1", 59 | "hooks" : "0", 60 | "logging" : "1", 61 | "log-path": "/vagrant/logs", 62 | "template": "0" 63 | }, 64 | 65 | "validation": { 66 | "mime_types": [ 67 | "image/png", "image/jpeg", "image/gif" 68 | ], 69 | "file_size" : "1M" 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /etc/migrations/20160611001.sql: -------------------------------------------------------------------------------- 1 | # Stub file to set starting migrations version 2 | -------------------------------------------------------------------------------- /etc/migrations/20160612001.sql: -------------------------------------------------------------------------------- 1 | # Use a VARCHAR field for the migration versions instead of integer 2 | ALTER TABLE `#__migrations` MODIFY `version` varchar(25) NOT NULL COMMENT 'Applied migration versions'; 3 | -------------------------------------------------------------------------------- /etc/migrations/20170723001.sql: -------------------------------------------------------------------------------- 1 | # Table for Pull Request Reviews 2 | 3 | -- 4 | -- Table structure for table `#__issues_reviews` 5 | -- 6 | CREATE TABLE `#__issue_reviews` ( 7 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK', 8 | `issue_id` int(11) unsigned NOT NULL COMMENT 'PK of the issue in issue table', 9 | `project_id` int(11) NOT NULL COMMENT 'The Project id', 10 | `review_id` int(11) unsigned NOT NULL COMMENT 'The GitHub ID of the review', 11 | `review_state` int(11) unsigned NOT NULL COMMENT 'The ', 12 | `reviewed_by` varchar(150) NOT NULL COMMENT 'Reviewed by username', 13 | `review_comment` varchar(500) NULL DEFAULT NULL COMMENT 'The comment associated with the review', 14 | `review_submitted` datetime DEFAULT NULL COMMENT 'Date the review was last updated on.', 15 | `dismissed_by` varchar(150) NULL DEFAULT NULL COMMENT 'Reviewed by username', 16 | `dismissed_comment` varchar(500) NULL DEFAULT NULL COMMENT 'The comment associated with the review', 17 | `dismissed_on` datetime DEFAULT NULL COMMENT 'Date the review was dismissed on.', 18 | PRIMARY KEY (`id`), 19 | KEY `issue_number` (`issue_id`), 20 | KEY `project_id` (`project_id`), 21 | KEY `review_id` (`review_id`), 22 | KEY `issue_project_index`(`issue_id`, `project_id`), 23 | UNIQUE (`review_id`), 24 | CONSTRAINT `#__issue_reviews_iifk` FOREIGN KEY (`issue_id`) REFERENCES `#__issues` (`issue_number`) ON DELETE CASCADE ON UPDATE CASCADE, 25 | CONSTRAINT `#__issue_reviews_pifk` FOREIGN KEY (`project_id`) REFERENCES `#__tracker_projects` (`project_id`) 26 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; 27 | -------------------------------------------------------------------------------- /etc/migrations/20180218001.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `#__issue_reviews` ADD COLUMN `commit_id` varchar(40) NOT NULL COMMENT 'Commit SHA the review is against'; 2 | -------------------------------------------------------------------------------- /etc/migrations/20200310001.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `#__issues` ADD COLUMN `is_draft` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'If the pull request is a draft PR'; 2 | -------------------------------------------------------------------------------- /logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | tests/tracker 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base", 5 | ":preserveSemverRanges", 6 | ":disableMajorUpdates" 7 | ], 8 | "versioning": "semver", 9 | "dependencyDashboard": true, 10 | "lockFileMaintenance": { "enabled": true }, 11 | "composerIgnorePlatformReqs": ["ext-*", "lib-*"], 12 | "rangeStrategy": "update-lockfile", 13 | "constraints": { 14 | "composer": "> 2.3", 15 | "npm": "> 8.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/App/Activity/Controller/AbstractBaseController.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 43 | 44 | $application->getUser()->authorize('view'); 45 | 46 | $this->model->setProject($application->getProject()); 47 | $this->view->setProject($application->getProject()); 48 | 49 | return $this; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/App/Activity/Controller/ActivitySnapshotController.php: -------------------------------------------------------------------------------- 1 | getDb(); 33 | $query = $db->getQuery(true); 34 | 35 | $query->select('a.*') 36 | ->from($db->quoteName('#__issues', 'a')) 37 | ->join('LEFT', '#__status AS s ON a.status = s.id') 38 | ->where('a.project_id = ' . (int) $this->getProject()->project_id) 39 | ->where('s.closed = 0'); 40 | 41 | $db->setQuery($query); 42 | 43 | return $db->getIterator(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/App/Activity/View/DefaultHtmlView.php: -------------------------------------------------------------------------------- 1 | addData('project', $this->getProject()); 33 | 34 | return parent::render(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/App/Activity/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "activity/project/:project_alias" : "App\\Activity\\Controller\\ProjectActivityController", 3 | "activity/project/:project_alias/query" : "App\\Activity\\Controller\\Ajax\\ProjectActivity", 4 | "activity/snapshot/:project_alias" : "App\\Activity\\Controller\\ActivitySnapshotController", 5 | "activity/snapshot/:project_alias/query" : "App\\Activity\\Controller\\Ajax\\ActivitySnapshot", 6 | "activity/total/:project_alias" : "App\\Activity\\Controller\\TotalActivityController", 7 | "activity/total/:project_alias/query" : "App\\Activity\\Controller\\Ajax\\TotalActivity", 8 | "activity/user/:project_alias" : "App\\Activity\\Controller\\UserActivityController", 9 | "activity/user/:project_alias/query" : "App\\Activity\\Controller\\Ajax\\UserActivity" 10 | } 11 | -------------------------------------------------------------------------------- /src/App/Debug/Controller/Debug.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('admin'); 31 | 32 | return parent::execute(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/App/Debug/DebugApp.php: -------------------------------------------------------------------------------- 1 | registerServices($container); 35 | } 36 | 37 | /** 38 | * Registers the services for the app 39 | * 40 | * @param Container $container DI Container to load services into 41 | * 42 | * @return void 43 | * 44 | * @since 1.0 45 | * @throws \RuntimeException 46 | */ 47 | private function registerServices(Container $container) 48 | { 49 | $container->alias('debugger', TrackerDebugger::class) 50 | ->share( 51 | TrackerDebugger::class, 52 | function (Container $container) { 53 | return new TrackerDebugger($container); 54 | }, 55 | true 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/App/Debug/Format/Html/LinkFormat.php: -------------------------------------------------------------------------------- 1 | linkFormat = \ini_get('xdebug.file_link_format'); 36 | } 37 | 38 | /** 39 | * Format a link. 40 | * 41 | * @param string $file The file. 42 | * @param string $line The line number. 43 | * 44 | * @return string 45 | * 46 | * @since 1.0 47 | */ 48 | public function formatLink($file, $line = '') 49 | { 50 | $link = basename($file); 51 | $link .= ($line) ? ':' . $line : ''; 52 | 53 | if ($this->linkFormat) { 54 | $href = $this->linkFormat; 55 | $href = str_replace('%f', $file, $href); 56 | $href = str_replace('%l', $line, $href); 57 | 58 | $html = '' . $link . ''; 59 | } else { 60 | $html = str_replace(JPATH_ROOT, 'JROOT', $file); 61 | } 62 | 63 | return $html; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/App/Debug/Handler/ProductionHandler.php: -------------------------------------------------------------------------------- 1 | getException()->getMessage(); 31 | 32 | return Handler::QUIT; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/App/Debug/Model/DefaultModel.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('admin'); 31 | 32 | $project = $this->getContainer()->get('app')->getProject(); 33 | 34 | /** @var \Joomla\Github\Github $github */ 35 | $github = $this->getContainer()->get('gitHub'); 36 | 37 | $this->response->data = $github->repositories->hooks->getList($project->gh_user, $project->gh_project); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Ajax/Labels/GetList.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('manage'); 31 | 32 | $project = $this->getContainer()->get('app')->getProject(); 33 | 34 | /** @var \Joomla\Github\Github $github */ 35 | $github = $this->getContainer()->get('gitHub'); 36 | 37 | $this->response->data = $github->issues->labels->getList($project->gh_user, $project->gh_project); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Ajax/Markdown/Preview.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->id) { 33 | throw new \Exception('not auth..'); 34 | } 35 | 36 | $text = $this->getContainer()->get('app')->input->get('text', '', 'raw'); 37 | 38 | if (!$text) { 39 | throw new \Exception('Nothing to preview...'); 40 | } 41 | 42 | $project = $this->getContainer()->get('app')->getProject(); 43 | 44 | /** @var \Joomla\Github\Github $github */ 45 | $github = $this->getContainer()->get('gitHub'); 46 | 47 | $this->response->data = $github->markdown->render( 48 | $text, 49 | 'gfm', 50 | $project->gh_user . '/' . $project->gh_project 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Ajax/Milestones/Delete.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 32 | 33 | $application->getUser()->authorize('manage'); 34 | 35 | $milestoneId = $application->input->getUint('milestone_id'); 36 | 37 | $project = $application->getProject(); 38 | 39 | // Look if we have a bot user configured. 40 | if ($project->getGh_Editbot_User() && $project->getGh_Editbot_Pass()) { 41 | $gitHub = GithubFactory::getInstance($application, true, $project->getGh_Editbot_User(), $project->getGh_Editbot_Pass()); 42 | } else { 43 | $gitHub = GithubFactory::getInstance($application); 44 | } 45 | 46 | // Delete the milestone 47 | $gitHub->issues->milestones->delete($project->gh_user, $project->gh_project, $milestoneId); 48 | 49 | // Get the current milestones list. 50 | $this->response->data = $this->getList($project); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Ajax/Milestones/GetList.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('manage'); 29 | 30 | $this->response->data = $this->getList($this->getContainer()->get('app')->getProject()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Hooks.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('admin'); 34 | 35 | $this->view->addData('project', $this->getContainer()->get('app')->getProject()); 36 | 37 | return $this; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Labels.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('manage'); 34 | 35 | $this->view->addData('project', $this->getContainer()->get('app')->getProject()); 36 | 37 | return $this; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/App/GitHub/Controller/Milestones.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('manage'); 34 | 35 | $this->view->addData('project', $this->getContainer()->get('app')->getProject()); 36 | 37 | return $this; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/App/GitHub/Model/DefaultModel.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('manage'); 61 | 62 | $this->view->setProject($this->getContainer()->get('app')->getProject()); 63 | 64 | return $this; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/App/Groups/Controller/Groups.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('manage'); 52 | 53 | $this->model->setProject($this->getContainer()->get('app')->getProject()); 54 | $this->view->setProject($this->getContainer()->get('app')->getProject()); 55 | 56 | return $this; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/App/Groups/Model/DefaultModel.php: -------------------------------------------------------------------------------- 1 | getProject()->project_id; 33 | 34 | $db = $this->getDb(); 35 | $query = $db->getQuery(true) 36 | ->select('a.*') 37 | ->from($db->quoteName((new GroupsTable($db))->getTableName(), 'a')) 38 | ->where($db->quoteName('project_id') . ' = ' . (int) $projectId); 39 | 40 | return $query; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/App/Groups/View/Group/GroupHtmlView.php: -------------------------------------------------------------------------------- 1 | model->getItem() as $property => $value) { 45 | $data[$property] = $value; 46 | } 47 | 48 | // Set the vars to the template. 49 | $this->addData('group', $data); 50 | $this->addData('project', $this->getProject()); 51 | 52 | return parent::render(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/App/Groups/View/Groups/GroupsHtmlView.php: -------------------------------------------------------------------------------- 1 | addData('items', $this->model->getItems()); 42 | $this->addData('project', $this->getProject()); 43 | 44 | return parent::render(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/App/Groups/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "project/:project_alias/groups" : "App\\Groups\\Controller\\Groups", 4 | "project/:project_alias/group/:group_id" : "App\\Groups\\Controller\\Group", 5 | "project/:project_alias/group/:group_id/delete": "App\\Groups\\Controller\\Group\\Delete", 6 | "project/:project_alias/addgroup" : "App\\Groups\\Controller\\Group\\Add", 7 | "project/:project_alias/savegroup" : "App\\Groups\\Controller\\Group\\Save" 8 | } 9 | -------------------------------------------------------------------------------- /src/App/Projects/Controller/Project.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getProject(true); 44 | 45 | parent::initialize(); 46 | 47 | $this->view->setAlias($this->getContainer()->get('app')->input->get('project_alias')); 48 | 49 | return $this; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/App/Projects/Controller/Project/Add.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('admin'); 47 | 48 | return parent::execute(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/App/Projects/Controller/Project/Edit.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getUser()->authorize('admin'); 61 | 62 | $this->view->setAlias($this->getContainer()->get('app')->input->get('project_alias')); 63 | 64 | return $this; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/App/Projects/Controller/Projects.php: -------------------------------------------------------------------------------- 1 | model->setUser($this->getContainer()->get('app')->getUser()); 45 | 46 | return $this; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/App/Projects/ProjectAwareTrait.php: -------------------------------------------------------------------------------- 1 | project) { 38 | return $this->project; 39 | } 40 | 41 | throw new \UnexpectedValueException('Project not set in ' . __CLASS__); 42 | } 43 | 44 | /** 45 | * Set the project. 46 | * 47 | * @param TrackerProject $project The project. 48 | * 49 | * @return $this 50 | * 51 | * @since 1.0 52 | */ 53 | public function setProject(TrackerProject $project) 54 | { 55 | $this->project = $project; 56 | 57 | return $this; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/App/Projects/Table/LabelsTable.php: -------------------------------------------------------------------------------- 1 | addData('projects', $this->model->getItems()); 41 | 42 | return parent::render(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/App/Projects/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "projects" : "App\\Projects\\Controller\\Projects", 3 | "project/add" : "App\\Projects\\Controller\\Project\\Add", 4 | "project/:project_alias" : "App\\Projects\\Controller\\Project", 5 | "project/:project_alias/edit" : "App\\Projects\\Controller\\Project\\Edit", 6 | "project/:project_alias/delete": "App\\Projects\\Controller\\Project\\Delete", 7 | "saveproject" : "App\\Projects\\Controller\\Project\\Save" 8 | } 9 | -------------------------------------------------------------------------------- /src/App/Support/Controller/Ajax/Documentation/Show.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->input; 35 | 36 | $page = $input->get('page'); 37 | $path = $input->getPath('path'); 38 | 39 | $base = $this->getContainer()->get('app')->get('uri')->base->path; 40 | 41 | $this->response->editLink = 'https://github.com/joomla/jissues/edit/master/Documentation/' . ($path ? $path . '/' : '') . $page . '.md'; 42 | $this->response->permaLink = $base . 'documentation/view/?page=' . $page . ($path ? '&path=' . $path : ''); 43 | 44 | $data = (new DefaultModel($this->getContainer()->get('db')))->getItem($page, $path)->text; 45 | 46 | $err = ob_get_clean(); 47 | 48 | if ($err) { 49 | $this->response->error = $err; 50 | } else { 51 | $this->response->data = $data; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/App/Support/Controller/Documentation.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->input; 35 | 36 | $path = $input->getPath('path'); 37 | $page = $input->getCmd('page'); 38 | 39 | if ($page) { 40 | $fullPath = 'page=' . $page . ($path ? '&path=' . $path : ''); 41 | 42 | $this->view->addData('fullPath', $fullPath); 43 | } 44 | 45 | return $this; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/App/Support/Model/DefaultModel.php: -------------------------------------------------------------------------------- 1 | db)) 35 | ->load(['alias' => $alias, 'path' => $path, 'is_file' => 1]); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/App/Support/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "documentation/show": { 3 | "controller": "App\\Support\\Controller\\Ajax\\Documentation\\Show", 4 | "methods": ["GET"] 5 | }, 6 | "documentation/view": { 7 | "controller": "App\\Support\\Controller\\Documentation", 8 | "methods": ["GET"] 9 | }, 10 | "documentation": { 11 | "controller": "App\\Support\\Controller\\Documentation", 12 | "methods": ["GET"] 13 | }, 14 | "filetree": { 15 | "controller": "App\\Support\\Controller\\Filetree", 16 | "methods": ["POST"] 17 | }, 18 | "icons": { 19 | "controller": "App\\Support\\Controller\\Icons\\ViewCssIconsController", 20 | "methods": ["GET"] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/App/System/Controller/WrongCmsController.php: -------------------------------------------------------------------------------- 1 | getApplication()->setResponse( 34 | new TextResponse("This isn't the CMS you're looking for.", 404) 35 | ); 36 | 37 | return true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/App/System/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "administrator": { 3 | "controller": "App\\System\\Controller\\Controller", 4 | "methods": ["*"] 5 | }, 6 | "administrator/*": { 7 | "controller": "App\\System\\Controller\\Controller", 8 | "methods": ["*"] 9 | }, 10 | "wp-admin": { 11 | "controller": "App\\System\\Controller\\Controller", 12 | "methods": ["*"] 13 | }, 14 | "wp-admin/*": { 15 | "controller": "App\\System\\Controller\\Controller", 16 | "methods": ["*"] 17 | }, 18 | "wp-login.php": { 19 | "controller": "App\\System\\Controller\\Controller", 20 | "methods": ["*"] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/App/Text/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "articles": { 3 | "controller": "App\\Text\\Controller\\ListArticlesController", 4 | "methods": ["GET"] 5 | }, 6 | "articles/create": { 7 | "controller": "App\\Text\\Controller\\SaveArticleController", 8 | "methods": ["POST"] 9 | }, 10 | "articles/new": { 11 | "controller": "App\\Text\\Controller\\CreateArticleController", 12 | "methods": ["GET"] 13 | }, 14 | "articles/:id": { 15 | "controller": "App\\Text\\Controller\\SaveArticleController", 16 | "methods": ["POST"] 17 | }, 18 | "articles/:id/delete": { 19 | "controller": "App\\Text\\Controller\\DeleteArticleController", 20 | "methods": ["POST"], 21 | "rules": { 22 | "id": "(\\d+)" 23 | } 24 | }, 25 | "articles/:id/edit": { 26 | "controller": "App\\Text\\Controller\\EditArticleController", 27 | "methods": ["GET"], 28 | "rules": { 29 | "id": "(\\d+)" 30 | } 31 | }, 32 | "page/:alias": { 33 | "controller": "App\\Text\\Controller\\ViewArticleController", 34 | "methods": ["GET"] 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/App/Tracker/Controller/Category/Add.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 57 | $application->getUser()->authorize('manage'); 58 | $this->view->setProject($application->getProject()); 59 | 60 | $item = new \stdClass(); 61 | $this->view->setItem($item); 62 | 63 | return parent::execute(); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/App/Tracker/Controller/Fetch/Ajax/Issues.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 32 | 33 | /** @var \Joomla\Database\DatabaseDriver $db */ 34 | $db = $this->getContainer()->get('db'); 35 | 36 | $issueNumber = $application->input->getInt('q'); 37 | 38 | if ($issueNumber) { 39 | $this->response->data = $db 40 | ->setQuery( 41 | $db->getQuery(true) 42 | ->select($db->quoteName(['i.issue_number', 'i.title'])) 43 | ->from($db->quoteName('#__issues', 'i')) 44 | ->where($db->quoteName('i.project_id') . ' = ' . (int) $application->getProject()->project_id) 45 | ->where($db->quoteName('i.issue_number') . " LIKE '%" . (int) $issueNumber . "%'"), 46 | 0, 47 | 10 48 | ) 49 | ->loadAssocList(); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/App/Tracker/Controller/Fetch/Ajax/Users.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 32 | 33 | /** @var \Joomla\Database\DatabaseDriver $db */ 34 | $db = $this->getContainer()->get('db'); 35 | 36 | $username = $application->input->getCmd('q'); 37 | 38 | if ($username) { 39 | $this->response->data = $db 40 | ->setQuery( 41 | $db->getQuery(true) 42 | ->select($db->quoteName(['username', 'name'])) 43 | ->from($db->quoteName('#__users')) 44 | ->where($db->quoteName('username') . " LIKE '%" . $username . "%'"), 45 | 0, 46 | 10 47 | ) 48 | ->loadAssocList(); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/App/Tracker/Controller/Issue/Ajax/Info.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->input->getUint('id'); 33 | 34 | if (!$id) { 35 | throw new \RuntimeException('No id received.'); 36 | } 37 | 38 | $item = (new IssueModel($this->getContainer()->get('db')))->getItem($id); 39 | 40 | $issue = new \stdClass(); 41 | 42 | // @todo add more info... 43 | $issue->comment_count = 0; 44 | $issue->opened_by = $item->opened_by ?: 'n/a'; 45 | 46 | foreach ($item->activities as $activity) { 47 | switch ($activity->event) { 48 | case 'comment': 49 | $issue->comment_count++; 50 | 51 | break; 52 | 53 | default: 54 | break; 55 | } 56 | } 57 | 58 | $this->response->data = $issue; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/App/Tracker/Controller/Issue/Listing.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app')->getProject(true); 35 | 36 | parent::initialize(); 37 | 38 | return $this; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/App/Tracker/Controller/Upload/Ajax/Delete.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 33 | 34 | $file = $application->input->getCmd('file'); 35 | 36 | if (!empty($file)) { 37 | try { 38 | unlink(JPATH_THEMES . '/' . $application->get('system.upload_dir') . '/' . $application->getProject()->project_id . '/' . $file); 39 | } catch (\Exception $e) { 40 | throw new \RuntimeException($e->getMessage(), $e->getCode(), $e); 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/App/Tracker/Exception/ValidationException.php: -------------------------------------------------------------------------------- 1 | errors = $errors; 37 | 38 | parent::__construct('Validation failure', 3); 39 | } 40 | 41 | /** 42 | * Get validation errors. 43 | * 44 | * @return array|string 45 | * 46 | * @since 1.0 47 | */ 48 | public function getErrors() 49 | { 50 | return $this->errors; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/App/Tracker/Model/CategoriesModel.php: -------------------------------------------------------------------------------- 1 | getDb(); 32 | $query = $db->getQuery(true); 33 | 34 | $projectId = $this->getProject()->project_id; 35 | 36 | $query->select('*') 37 | ->from($db->quoteName('#__issues_categories')) 38 | ->where($db->quoteName('project_id') . '=' . (int) $projectId) 39 | ->order($db->quoteName('title')); 40 | 41 | return $query; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/App/Tracker/Model/DefaultModel.php: -------------------------------------------------------------------------------- 1 | db->setQuery( 51 | $this->db->getQuery(true) 52 | ->select('id') 53 | ->from($this->getTableName()) 54 | ->where('closed = ' . (int) $state) 55 | )->loadColumn(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/App/Tracker/View/Categories/CategoriesHtmlView.php: -------------------------------------------------------------------------------- 1 | addData('items', $this->model->getItems()); 42 | $this->addData('pagination', $this->model->getPagination()); 43 | $this->addData('project', $this->getProject()); 44 | 45 | return parent::render(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/App/Tracker/View/Issues/IssuesHtmlView.php: -------------------------------------------------------------------------------- 1 | setData( 42 | [ 43 | 'state' => $this->model->getState(), 44 | 'project' => $this->getProject(), 45 | ] 46 | ); 47 | 48 | return parent::render(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/App/Tracker/tpl/new-issue-template.md: -------------------------------------------------------------------------------- 1 | #### Steps to reproduce the issue 2 | 3 | 4 | 5 | #### Expected result 6 | 7 | 8 | 9 | #### Actual result 10 | 11 | 12 | 13 | #### System information (as much as possible) 14 | 15 | 16 | 17 | #### Additional comments 18 | 19 | -------------------------------------------------------------------------------- /src/App/Users/Controller/Logout.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 33 | 34 | // Invalidate the session 35 | $application->getSession()->invalidate(); 36 | 37 | $application 38 | // Logout the user. 39 | ->setUser(null) 40 | // Delete the "remember me" cookie 41 | ->setRememberMe(false) 42 | // Redirect to the "home" page 43 | ->redirect(' '); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/App/Users/Model/DefaultModel.php: -------------------------------------------------------------------------------- 1 | model->getItem($this->id); 48 | 49 | $this->addData('item', $item) 50 | ->addData('tz_offset', (new \DateTimeZone($item->params->get('timezone', 'UTC')))->getOffset(new \DateTime()) / 3600); 51 | 52 | return parent::render(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/App/Users/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "login" : "App\\Users\\Controller\\Login", 3 | "logout": "App\\Users\\Controller\\Logout", 4 | 5 | "user/search": "App\\Users\\Controller\\Ajax\\Search", 6 | "user/assign": "App\\Users\\Controller\\Ajax\\Assign", 7 | "users/list" : "App\\Users\\Controller\\Ajax\\Listing", 8 | 9 | "account" : "App\\Users\\Controller\\User", 10 | "account/edit" : "App\\Users\\Controller\\User\\Edit", 11 | "account/save" : "App\\Users\\Controller\\User\\Save", 12 | "account/github-refresh": "App\\Users\\Controller\\User\\Refresh" 13 | } 14 | -------------------------------------------------------------------------------- /src/JTracker/Application/AppInterface.php: -------------------------------------------------------------------------------- 1 | login)) { 50 | throw new \RuntimeException('Missing login'); 51 | } 52 | 53 | foreach ($data as $k => $v) { 54 | if (property_exists($this, $k) && \in_array($k, ['id']) == false) { 55 | $this->$k = $v; 56 | } 57 | } 58 | 59 | $this->username = $data->login; 60 | 61 | return $this; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/JTracker/Command/Make/tpl/dependencies.twig: -------------------------------------------------------------------------------- 1 | ## Dependencies for {{ product.name }} {{ product.version }} 2 | 3 | {{ product.description}} 4 | 5 | * Source URL: {{ product.homepage }} 6 | 7 | ### Core 8 | 9 | * PHP version: {{ dependencies['php-version'] }} 10 | * Database: MySQL 11 | 12 | ### PHP - Production 13 | {% for d in dependencies.php %} 14 | 15 | #### {{ d.packageName }} ({{ d.version }}) 16 | {% if d.description %} 17 | 18 | {{ d.description }} 19 | 20 | {% endif %} 21 | {% if d.installed %} 22 | * Installed: {{ d.installed }} {{ d.sourceRef }} 23 | {% endif %} 24 | {% if d.sourceURL %} 25 | * Source URL: {{ d.sourceURL }} 26 | {% endif %} 27 | {% endfor %} 28 | 29 | ### PHP - Development 30 | 31 | {% for d in dependencies['php-dev'] %} 32 | #### {{ d.packageName }} ({{ d.version }}) 33 | 34 | {{ d.description }} 35 | 36 | * Installed: {{ d.installed }} {{ d.sourceRef }} 37 | * Source URL: {{ d.sourceURL }} 38 | 39 | {% endfor %} 40 | ### JavaScript 41 | 42 | {% for d in dependencies.javascript %} 43 | #### {{ d.packageName }} ({{ d.version }}) 44 | {% if d.description %} 45 | 46 | {{ d.description }} 47 | {% endif %} 48 | 49 | * Installed: {{ d.installed }} 50 | {% if d.sourceURL %} 51 | * Source URL: {{ d.sourceURL }} 52 | {% endif %} 53 | 54 | {% endfor %} 55 | ## Credits 56 | {% for c in dependencies.credits %} 57 | 58 | ### {{ c.group }} 59 | {% for i in c.items %} 60 | 61 | #### {{ i.title }} 62 | {% if i.description %} 63 | 64 | {{ i.description }} 65 | {% endif %} 66 | 67 | * {{ i.homepage }} 68 | {% endfor %} 69 | {% endfor %} 70 | -------------------------------------------------------------------------------- /src/JTracker/Command/Test/Test.php: -------------------------------------------------------------------------------- 1 | exit = (bool) $value; 39 | 40 | return $this; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/JTracker/Command/Update/Update.php: -------------------------------------------------------------------------------- 1 | addOption('project', 'p', InputOption::VALUE_REQUIRED, 'Process the project with the given ID.'); 41 | } 42 | 43 | /** 44 | * Setup the Github object. 45 | * 46 | * @return $this 47 | * 48 | * @since 1.0 49 | * @throws \RuntimeException 50 | */ 51 | protected function setupGitHub() 52 | { 53 | $this->github = $this->getContainer()->get('gitHub'); 54 | 55 | return $this; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/JTracker/Controller/AbstractTrackerListController.php: -------------------------------------------------------------------------------- 1 | getContainer()->get('app'); 37 | 38 | $this->configurePaginationState($application, $this->model); 39 | 40 | return $this; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/JTracker/Controller/AjaxResponse.php: -------------------------------------------------------------------------------- 1 | data = new \stdClass(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/JTracker/Controller/Concerns/HasLists.php: -------------------------------------------------------------------------------- 1 | getUserStateFromRequest('list.limit', 'list_limit', 20, 'uint'); 37 | $page = $app->getInput()->getUint('page'); 38 | 39 | $value = $page ? ($page - 1) * $limit : 0; 40 | $limitStart = ($limit != 0 ? (floor($value / $limit) * $limit) : 0); 41 | 42 | $state = $model->getState(); 43 | $state->set('list.start', $limitStart); 44 | $state->set('list.limit', $limit); 45 | 46 | $model->setPagination( 47 | new TrackerPagination(new Uri($app->get('uri.request'))) 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/JTracker/Controller/TrackerControllerInterface.php: -------------------------------------------------------------------------------- 1 | body; 32 | $code = $response->getStatusCode(); 33 | 34 | $message = $error->message ?? 'Invalid response received from GitHub.'; 35 | 36 | parent::__construct($response, $message, $code); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/JTracker/Model/TrackerDefaultModel.php: -------------------------------------------------------------------------------- 1 | share( 36 | ConsoleApplication::class, 37 | function (Container $container) { 38 | $application = new ConsoleApplication( 39 | null, 40 | null, 41 | $container->get('config'), 42 | ); 43 | 44 | // Inject extra services 45 | $application->setContainer($container); 46 | $application->setDispatcher($container->get(DispatcherInterface::class)); 47 | 48 | return $application; 49 | }, 50 | true 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/JTracker/Service/GitHubProvider.php: -------------------------------------------------------------------------------- 1 | alias('gitHub', Github::class) 38 | ->alias(BaseGithub::class, Github::class) 39 | ->share( 40 | Github::class, 41 | function (Container $container) { 42 | // Call the Github factory's getInstance method and inject the application; it handles the rest of the configuration 43 | return GithubFactory::getInstance($container->get('app')); 44 | }, 45 | true 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/JTracker/Twig/AssetsExtension.php: -------------------------------------------------------------------------------- 1 | ['html']]), 32 | new TwigFunction('cdn_menu', [CdnRenderer::class, 'getCdnMenu'], ['is_safe' => ['html']]), 33 | ]; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/JTracker/Twig/FlashExtension.php: -------------------------------------------------------------------------------- 1 | app = $app; 39 | } 40 | 41 | /** 42 | * Retrieve the flash messages from the message queue and clear it 43 | * 44 | * @return array 45 | * 46 | * @since 1.0 47 | */ 48 | public function getMessages(): array 49 | { 50 | $messages = $this->app->getMessageQueue(); 51 | 52 | $this->app->clearMessageQueue(); 53 | 54 | return $messages; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/JTracker/View/AbstractTrackerHtmlView.php: -------------------------------------------------------------------------------- 1 | model = $model; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/JTracker/View/Renderer/ContrastHelper.php: -------------------------------------------------------------------------------- 1 | = 128 ? 'black' : 'white'; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/JTracker/View/TrackerDefaultView.php: -------------------------------------------------------------------------------- 1 | 9 |

DeBug

10 | 11 | 12 | @todo 13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /templates/debug/logs.index.twig: -------------------------------------------------------------------------------- 1 | {# Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. #} 2 | {# GNU General Public License version 2 or later; see LICENSE.txt #} 3 | 4 | {% extends "index.twig" %} 5 | 6 | {% block content %} 7 | 8 | 11 | 12 | @todo prettifyMe 13 | 14 | {% for entry in log %} 15 | 16 |
{{ entry }}
17 | 18 | {% else %} 19 | 20 |
21 | The log is empty :( 22 |
23 | 24 | {% endfor %} 25 | 26 | {#{ dump(log|raw) }#} 27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /templates/editor.twig: -------------------------------------------------------------------------------- 1 | {# Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. #} 2 | {# GNU General Public License version 2 or later; see LICENSE.txt#} 3 | 4 | 9 | 10 |
11 |
12 | 15 |
16 |
17 |
18 | -------------------------------------------------------------------------------- /templates/exception.twig: -------------------------------------------------------------------------------- 1 | {# Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. #} 2 | {# GNU General Public License version 2 or later; see LICENSE.txt #} 3 | 4 | {% extends "index.twig" %} 5 | 6 | {% block content %} 7 | 11 | 12 | {% if jdebug %} 13 | In: {{ exception.file }} on line {{ exception.line }} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | {% for stack in exception.trace %} 25 | 26 | 27 | 28 | 29 | 30 | {% endfor %} 31 | 32 |
FileLineClass->Method()
{{ stack.file|basename }}{{ stack.line }}{{ stack.class }}{{ stack.type }}{{ stack.function }}()
33 | {% endif %} 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /templates/support/icons.index.twig: -------------------------------------------------------------------------------- 1 | {# Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. #} 2 | {# GNU General Public License version 2 or later; see LICENSE.txt #} 3 | 4 | {% extends "index.twig" %} 5 | 6 | {% block title %}{{ parent() }} | Icons{% endblock %} 7 | 8 | {% block content %} 9 | 10 | 13 | 14 |

Icons

15 | 16 |
17 | {% for icon in icons %} 18 |
19 |
20 |
21 |  {{ icon }} 22 |
23 |
24 |
25 | {% endfor %} 26 |
27 | 28 |

OctIcons

29 | 30 |
31 | {% for icon in octicons %} 32 |
33 |
34 |
35 |  {{ icon }} 36 |
37 |
38 |
39 | {% endfor %} 40 |
41 | 42 | {% endblock %} 43 | -------------------------------------------------------------------------------- /templates/text/article.show.twig: -------------------------------------------------------------------------------- 1 | {% extends 'index.twig' %} 2 | 3 | {%- block title -%} 4 | {{ parent() }}{% if item.title %} | {{ item.title }}{% endif %} 5 | {%- endblock -%} 6 | 7 | {% block content %} 8 | {% if item.title %} 9 | 12 | {% endif %} 13 | 14 | {# Note that using RAW output format here should be safe since the text is the result of a request to GitHub's markdown parser #} 15 | {{ item.text|raw }} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | checkFilesAndAssignCategory($files); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /www/.well-known/security.txt: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | Contact: mailto:security@joomla.org 5 | Encryption: https://developer.joomla.org/security/gpg-keys.html 6 | Acknowledgments: https://developer.joomla.org/security-centre.html 7 | Preferred-Languages: en 8 | Canonical: https://www.joomla.org/.well-known/security.txt 9 | Policy: https://developer.joomla.org/security.html 10 | Hiring: https://volunteers.joomla.org/teams/security-strike-team 11 | -----BEGIN PGP SIGNATURE----- 12 | 13 | iQIzBAEBCgAdFiEEPYFcJjaqsgoey0InllSCd8GEcsgFAl+hoYoACgkQllSCd8GE 14 | csjqSQ//QTcVVJF6xvg4t2H5RZpiV3X6DxEo0UXIGrc5p8OArduDbUFbNSfMkMhI 15 | qdzdd6Gcafw4RlKwG4mjADkFkmThNtKn1fBAw3Jvymd/iJaCqPeBmNJu0TWiMuPO 16 | POlmqhV0Dhu1xzkUNViNn2nFswv4cV3hTStfYpmtdya849nFrw8BTz9Pbe4ghXtG 17 | RrauDX+gpduNfEZa7+SqDDgqQMrHmEAc0bLoAEIhEUpOsBo5yVBN7vxfqQXpox4O 18 | CnbzCfWrBxO62Ki7usS7Cp0UGufBgL8hZVJ2dq6FXObxrHfMcPzrJTXUnGnHZUal 19 | 26Xv+X2AxVaJOv9lSckW6beDQdMN9ummjq7ahHgcMdQsinzT4Cb8TQazuVInZOjU 20 | A2pPHoAJPQ4tTfZeaU83PCaqi5I+osnGVVvaztAIaqd6R5Si+8LavXm2ZhohV9eL 21 | K/skfTycEPbmlo5jIFF0mQsj/FNLWoCD7mm0tsWpN3G8TVOGrNcFXeqGZfHm2bti 22 | 0Kgq1IgTFfCMdEtIcKoR59GOLsPWWrRod23reavEUl/OBxJyBkYnKn5z5zOTqTZj 23 | izjhc2NHjm9+CT2UjVm1Lj2ijNqAqrR0Ju3x9uhKDc/Ygso0ocwXODPKu21akoWh 24 | 2QLgb58afoVqqjIwRRWCPE6s6RYI+OzXej2MHD/nWsmgLZ71sgQ= 25 | =V9SS 26 | -----END PGP SIGNATURE----- 27 | -------------------------------------------------------------------------------- /www/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/favicon.ico -------------------------------------------------------------------------------- /www/images/avatars/.gitignore: -------------------------------------------------------------------------------- 1 | *.png 2 | !user-default.png 3 | -------------------------------------------------------------------------------- /www/images/avatars/user-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/images/avatars/user-default.png -------------------------------------------------------------------------------- /www/index.php: -------------------------------------------------------------------------------- 1 | run(); 37 | } 38 | catch (\Throwable $e) 39 | { 40 | error_log($e); 41 | 42 | if (!headers_sent()) 43 | { 44 | header('HTTP/1.1 500 Internal Server Error', true, 500); 45 | header('Content-Type: text/html; charset=utf-8'); 46 | } 47 | 48 | echo 'Application Error

Application Error

An error occurred while executing the application: ' . $e->getMessage() . '

'; 49 | 50 | exit(1); 51 | } 52 | })(); 53 | -------------------------------------------------------------------------------- /www/media/css/file-tree/images/directory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/file-tree/images/directory.png -------------------------------------------------------------------------------- /www/media/css/file-tree/images/folder_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/file-tree/images/folder_open.png -------------------------------------------------------------------------------- /www/media/css/file-tree/images/md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/file-tree/images/md.png -------------------------------------------------------------------------------- /www/media/css/file-tree/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/file-tree/images/spinner.gif -------------------------------------------------------------------------------- /www/media/css/file-tree/jqueryFileTree.css: -------------------------------------------------------------------------------- 1 | UL.jqueryFileTree { 2 | font-family: Verdana, sans-serif; 3 | font-size: 11px; 4 | line-height: 18px; 5 | padding: 0px; 6 | margin: 0px; 7 | } 8 | 9 | UL.jqueryFileTree LI { 10 | list-style: none; 11 | padding: 0px; 12 | padding-left: 20px; 13 | margin: 0px; 14 | white-space: nowrap; 15 | } 16 | 17 | UL.jqueryFileTree A { 18 | color: #333; 19 | text-decoration: none; 20 | display: block; 21 | padding: 0px 2px; 22 | } 23 | 24 | UL.jqueryFileTree A:hover { 25 | background: #BDF; 26 | } 27 | 28 | /* Core Styles */ 29 | .jqueryFileTree LI.directory { background: url(images/directory.png) left top no-repeat; } 30 | .jqueryFileTree LI.expanded { background: url(images/folder_open.png) left top no-repeat; } 31 | .jqueryFileTree LI.wait { background: url(images/spinner.gif) left top no-repeat; } 32 | 33 | /* File Extensions*/ 34 | .jqueryFileTree LI.ext_md { background: url(images/md.png) left top no-repeat; } 35 | -------------------------------------------------------------------------------- /www/media/css/jtracker-rtl.css: -------------------------------------------------------------------------------- 1 | .subnav li.pull-right{float:left}ul.trackerPagination li{float:right!important}.example-markdown,.example-rendered{direction:ltr} 2 | -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/bold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/bold.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/clean.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/code.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/h1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/h1.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/h2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/h2.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/h3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/h3.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/h4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/h4.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/h5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/h5.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/h6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/h6.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/image.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/italic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/italic.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/link.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/list-bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/list-bullet.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/list-numeric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/list-numeric.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/picture.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/preview.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/quotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/quotes.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/images/stroke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/css/markitup/sets/markdown/images/stroke.png -------------------------------------------------------------------------------- /www/media/css/markitup/sets/markdown/style.css: -------------------------------------------------------------------------------- 1 | /* ------------------------------------------------------------------- 2 | // markItUp! 3 | // By Jay Salvat - http://markitup.jaysalvat.com/ 4 | // ------------------------------------------------------------------*/ 5 | .markItUp .markItUpButton1 a { 6 | background-image:url(images/h1.png); 7 | } 8 | .markItUp .markItUpButton2 a { 9 | background-image:url(images/h2.png); 10 | } 11 | .markItUp .markItUpButton3 a { 12 | background-image:url(images/h3.png); 13 | } 14 | .markItUp .markItUpButton4 a { 15 | background-image:url(images/bold.png); 16 | } 17 | .markItUp .markItUpButton5 a { 18 | background-image:url(images/italic.png); 19 | } 20 | .markItUp .markItUpButton6 a { 21 | background-image:url(images/picture.png); 22 | } 23 | .markItUp .markItUpButton7 a { 24 | background-image:url(images/link.png); 25 | } 26 | -------------------------------------------------------------------------------- /www/media/css/pagination/A_green.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#699613; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | border-radius:3px; 8 | -moz-border-radius:3px; 9 | -webkit-border-radius:3px; 10 | padding:6px 9px 6px 9px; 11 | } 12 | 13 | ul.trackerPagination li a 14 | { 15 | color: #fff; 16 | background:#699613; 17 | background:-moz-linear-gradient(top,#87AB19,#699613); 18 | background:-webkit-gradient(linear,0 0,0 100%,from(#87AB19),to(#699613)); 19 | } 20 | 21 | ul.trackerPagination li a:hover, 22 | ul.trackerPagination li a.current 23 | { 24 | color:#4F7119; 25 | background:#E7F2C7; 26 | } 27 | -------------------------------------------------------------------------------- /www/media/css/pagination/A_red.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#D22020; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | border-radius:3px; 8 | -moz-border-radius:3px; 9 | -webkit-border-radius:3px; 10 | padding:6px 9px 6px 9px; 11 | } 12 | 13 | ul.trackerPagination li a 14 | { 15 | color: #fff; 16 | background:#D22020; 17 | background:-moz-linear-gradient(top,#DB2B2B,#D22020); 18 | background:-webkit-gradient(linear,0 0,0 100%,from(#DB2B2B),to(#D22020)); 19 | } 20 | 21 | ul.trackerPagination li a:hover, 22 | ul.trackerPagination li a.current 23 | { 24 | color:#9F0F0F; 25 | background:#FFE0E0; 26 | } 27 | -------------------------------------------------------------------------------- /www/media/css/pagination/A_yellow.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#C59E08; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | border-radius:3px; 8 | -moz-border-radius:3px; 9 | -webkit-border-radius:3px; 10 | padding:6px 9px 6px 9px; 11 | } 12 | 13 | ul.trackerPagination li a 14 | { 15 | color:#893A00; 16 | background:#FFCB00; 17 | background:-moz-linear-gradient(top,#FFD500,#FFCB00); 18 | background:-webkit-gradient(linear,0 0,0 100%,from(#FFD500),to(#FFCB00)); 19 | } 20 | 21 | ul.trackerPagination li a:hover, 22 | ul.trackerPagination li a.current 23 | { 24 | background:#FFF4BA; 25 | } 26 | -------------------------------------------------------------------------------- /www/media/css/pagination/B_black.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#202020; 3 | } 4 | ul.trackerPagination li a 5 | { 6 | border:solid 1px; 7 | border-radius:3px; 8 | -moz-border-radius:3px; 9 | -webkit-border-radius:3px; 10 | padding:4px 9px 4px 9px; 11 | } 12 | 13 | ul.trackerPagination li 14 | { 15 | padding-bottom:1px; 16 | } 17 | 18 | ul.trackerPagination li a:hover, 19 | ul.trackerPagination li.active a, 20 | ul.trackerPagination li a.current 21 | { 22 | color:#FFFFFF; 23 | box-shadow:0px 1px #EDEDED; 24 | -moz-box-shadow:0px 1px #EDEDED; 25 | -webkit-box-shadow:0px 1px #EDEDED; 26 | text-shadow:0px 1px #3C3C3C; 27 | border-color:#202020; 28 | background:#525252; 29 | background:-moz-linear-gradient(top,#9F9F9F 1px,#6C6C6C 1px,#525252); 30 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#9F9F9F),color-stop(0.02,#6C6C6C),color-stop(1,#525252)); 31 | } 32 | ul.trackerPagination li.disabled a 33 | { 34 | color: #999; 35 | cursor: not-allowed; 36 | background-color: #fff; 37 | } 38 | ul.trackerPagination li a 39 | { 40 | color:#444444; 41 | border-color:#BEBEBE; 42 | background:#FAFAFA; 43 | } 44 | -------------------------------------------------------------------------------- /www/media/css/pagination/B_blue.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#3390CA; 3 | } 4 | ul.trackerPagination li a 5 | { 6 | border:solid 1px; 7 | border-radius:3px; 8 | -moz-border-radius:3px; 9 | -webkit-border-radius:3px; 10 | padding:6px 9px 6px 9px; 11 | } 12 | 13 | ul.trackerPagination li 14 | { 15 | padding-bottom:1px; 16 | } 17 | 18 | ul.trackerPagination li a:hover, 19 | ul.trackerPagination li a.current 20 | { 21 | color:#FFFFFF; 22 | box-shadow:0px 1px #EDEDED; 23 | -moz-box-shadow:0px 1px #EDEDED; 24 | -webkit-box-shadow:0px 1px #EDEDED; 25 | text-shadow:0px 1px #388DBE; 26 | border-color:#3390CA; 27 | background:#58B0E7; 28 | background:-moz-linear-gradient(top,#B4F6FF 1px,#63D0FE 1px,#58B0E7); 29 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#B4F6FF),color-stop(0.02,#63D0FE),color-stop(1,#58B0E7)); 30 | } 31 | ul.trackerPagination li a 32 | { 33 | color:#0A7EC5; 34 | border-color:#8DC5E6; 35 | background:#F8FCFF; 36 | } 37 | -------------------------------------------------------------------------------- /www/media/css/pagination/B_red.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#AD2D2D; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | border:solid 1px; 8 | border-radius:3px; 9 | -moz-border-radius:3px; 10 | -webkit-border-radius:3px; 11 | padding:6px 9px 6px 9px; 12 | } 13 | 14 | ul.trackerPagination li 15 | { 16 | padding-bottom:1px; 17 | } 18 | 19 | ul.trackerPagination li a 20 | { 21 | color:#E92F2F; 22 | border-color:#FFA5A5; 23 | background:#FFF8F8; 24 | } 25 | 26 | ul.trackerPagination li a:hover, 27 | ul.trackerPagination li a.current 28 | { 29 | color:#FFFFFF; 30 | box-shadow:0px 1px #EDEDED; 31 | -moz-box-shadow:0px 1px #EDEDED; 32 | -webkit-box-shadow:0px 1px #EDEDED; 33 | text-shadow:0px 1px #B72E2E; 34 | border-color:#AD2D2D; 35 | background:#E43838; 36 | background:-moz-linear-gradient(top,#FF9B9B 1px,#FE5555 1px,#E43838); 37 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FF9B9B),color-stop(0.02,#FE5555),color-stop(1,#E43838)); 38 | } 39 | 40 | -------------------------------------------------------------------------------- /www/media/css/pagination/C_green.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#478223; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | color:#333333; 8 | text-shadow:0px 1px #F6F6F6; 9 | padding:6px 9px 6px 9px; 10 | border:solid 1px #B6B6B6; 11 | box-shadow:0px 1px #EFEFEF; 12 | -moz-box-shadow:0px 1px #EFEFEF; 13 | -webkit-box-shadow:0px 1px #EFEFEF; 14 | background:#E6E6E6; 15 | background:-moz-linear-gradient(top,#FFFFFF 1px,#F3F3F3 1px,#E6E6E6); 16 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FFFFFF),color-stop(0.02,#F3F3F3),color-stop(1,#E6E6E6)); 17 | } 18 | 19 | ul.trackerPagination li 20 | { 21 | padding-bottom:1px; 22 | } 23 | 24 | ul.trackerPagination li a:hover, 25 | ul.trackerPagination li a.current 26 | { 27 | color:#FFFFFF; 28 | box-shadow:0px 1px #E7E7E7; 29 | -moz-box-shadow:0px 1px #E7E7E7; 30 | -webkit-box-shadow:0px 1px #E7E7E7; 31 | text-shadow:0px 1px #4E802C; 32 | border-color:#478223; 33 | background:#599F2F; 34 | background:-moz-linear-gradient(top,#9FE355 1px,#79BF4A 1px,#599F2F); 35 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#9FE355),color-stop(0.02,#79BF4A),color-stop(1,#599F2F)); 36 | } 37 | -------------------------------------------------------------------------------- /www/media/css/pagination/C_red.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#E43838; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | color:#333333; 8 | text-shadow:0px 1px #F6F6F6; 9 | padding:6px 9px 6px 9px; 10 | border:solid 1px #B6B6B6; 11 | box-shadow:0px 1px #EFEFEF; 12 | -moz-box-shadow:0px 1px #EFEFEF; 13 | -webkit-box-shadow:0px 1px #EFEFEF; 14 | background:#E6E6E6; 15 | background:-moz-linear-gradient(top,#FFFFFF 1px,#F3F3F3 1px,#E6E6E6); 16 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FFFFFF),color-stop(0.02,#F3F3F3),color-stop(1,#E6E6E6)); 17 | } 18 | 19 | ul.trackerPagination li 20 | { 21 | padding-bottom:1px; 22 | } 23 | 24 | ul.trackerPagination li a:hover, 25 | ul.trackerPagination li a.current 26 | { 27 | color:#FFFFFF; 28 | box-shadow:0px 1px #E7E7E7; 29 | -moz-box-shadow:0px 1px #E7E7E7; 30 | -webkit-box-shadow:0px 1px #E7E7E7; 31 | text-shadow:0px 1px #B72E2E; 32 | border-color:#AD2D2D; 33 | background:#E43838; 34 | background:-moz-linear-gradient(top,#FF9B9B 1px,#FE5555 1px,#E43838); 35 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FF9B9B),color-stop(0.02,#FE5555),color-stop(1,#E43838)); 36 | } 37 | -------------------------------------------------------------------------------- /www/media/css/pagination/C_yellow.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#FFA200; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | color:#333333; 8 | text-shadow:0px 1px #F6F6F6; 9 | padding:6px 9px 6px 9px; 10 | border:solid 1px #B6B6B6; 11 | box-shadow:0px 1px #EFEFEF; 12 | -moz-box-shadow:0px 1px #EFEFEF; 13 | -webkit-box-shadow:0px 1px #EFEFEF; 14 | background:#E6E6E6; 15 | background:-moz-linear-gradient(top,#FFFFFF 1px,#F3F3F3 1px,#E6E6E6); 16 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FFFFFF),color-stop(0.02,#F3F3F3),color-stop(1,#E6E6E6)); 17 | } 18 | 19 | ul.trackerPagination li 20 | { 21 | padding-bottom:1px; 22 | } 23 | 24 | ul.trackerPagination li a:hover, 25 | ul.trackerPagination li a.current 26 | { 27 | color:#FFFFFF; 28 | box-shadow:0px 1px #E7E7E7; 29 | -moz-box-shadow:0px 1px #E7E7E7; 30 | -webkit-box-shadow:0px 1px #E7E7E7; 31 | } 32 | 33 | ul.trackerPagination li a:hover, 34 | ul.trackerPagination li a.current 35 | { 36 | color:#893A00; 37 | text-shadow:0px 1px #FFEF42; 38 | border-color:#FFA200; 39 | background:#FFC800; 40 | background:-moz-linear-gradient(top,#FFFFFF 1px,#FFEA01 1px,#FFC800); 41 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FFFFFF),color-stop(0.02,#FFEA01),color-stop(1,#FFC800)); 42 | } 43 | -------------------------------------------------------------------------------- /www/media/css/pagination/grey.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#888888; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | color:#FFFFFF; 8 | border-radius:3px; 9 | -moz-border-radius:3px; 10 | -webkit-border-radius:3px; 11 | } 12 | 13 | ul.trackerPagination li a 14 | { 15 | color:#474747; 16 | border:solid 1px #B6B6B6; 17 | padding:6px 9px 6px 9px; 18 | background:#E6E6E6; 19 | background:-moz-linear-gradient(top,#FFFFFF 1px,#F3F3F3 1px,#E6E6E6); 20 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FFFFFF),color-stop(0.02,#F3F3F3),color-stop(1,#E6E6E6)); 21 | } 22 | 23 | ul.trackerPagination li a:hover, 24 | ul.trackerPagination li a.current 25 | { 26 | background:#FFFFFF; 27 | } 28 | -------------------------------------------------------------------------------- /www/media/css/pagination/pagination.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination{ 2 | margin:0px; 3 | padding:0px; 4 | height:100%; 5 | overflow:hidden; 6 | font:12px 'Tahoma'; 7 | list-style-type:none; 8 | } 9 | 10 | ul.trackerPagination li.details{ 11 | padding:7px 10px 7px 10px; 12 | font-size:14px; 13 | } 14 | 15 | ul.trackerPagination li.dot{padding: 3px 0;} 16 | 17 | ul.trackerPagination li{ 18 | float:left; 19 | margin:0px; 20 | padding:0px; 21 | margin-left:5px; 22 | } 23 | 24 | ul.trackerPagination li:first-child{ 25 | margin-left:0px; 26 | } 27 | 28 | ul.trackerPagination li a{ 29 | color:black; 30 | display:block; 31 | text-decoration:none; 32 | padding:7px 10px 7px 10px; 33 | } 34 | 35 | ul.trackerPagination li a img{ 36 | border:none; 37 | } 38 | -------------------------------------------------------------------------------- /www/media/css/pagination/red.css: -------------------------------------------------------------------------------- 1 | ul.trackerPagination li.details{ 2 | color:#AD2D2D; 3 | } 4 | 5 | ul.trackerPagination li a 6 | { 7 | border:solid 1px; 8 | border-radius:3px; 9 | -moz-border-radius:3px; 10 | -webkit-border-radius:3px; 11 | padding:6px 9px 6px 9px; 12 | } 13 | 14 | ul.trackerPagination li 15 | { 16 | padding-bottom:1px; 17 | } 18 | 19 | ul.trackerPagination li a:hover, 20 | ul.trackerPagination li a.current 21 | { 22 | color:#FFFFFF; 23 | box-shadow:0px 1px #EDEDED; 24 | -moz-box-shadow:0px 1px #EDEDED; 25 | -webkit-box-shadow:0px 1px #EDEDED; 26 | } 27 | 28 | ul.trackerPagination li a 29 | { 30 | color:#E92F2F; 31 | border-color:#FFA5A5; 32 | background:#FFF8F8; 33 | } 34 | 35 | ul.trackerPagination li a:hover, 36 | ul.trackerPagination li a.current 37 | { 38 | text-shadow:0px 1px #B72E2E; 39 | border-color:#AD2D2D; 40 | background:#E43838; 41 | background:-moz-linear-gradient(top,#FF9B9B 1px,#FE5555 1px,#E43838); 42 | background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FF9B9B),color-stop(0.02,#FE5555),color-stop(1,#E43838)); 43 | } 44 | -------------------------------------------------------------------------------- /www/media/css/switch.css: -------------------------------------------------------------------------------- 1 | .switcher-elem input[type=checkbox] { 2 | height: 0; 3 | width: 0; 4 | visibility: hidden; 5 | } 6 | 7 | .switcher-elem label { 8 | cursor: pointer; 9 | text-indent: 3.75rem; 10 | width: 3.125rem; 11 | height: 1.5625rem; 12 | background: var(--bs-gray-600); 13 | display: block; 14 | border-radius: 1.5625rem; 15 | position: relative; 16 | } 17 | 18 | .switcher-elem label:after { 19 | content: ''; 20 | position: absolute; 21 | top: 0.078125rem; 22 | left: 0.078125rem; 23 | width: 1.40625rem; 24 | height: 1.40625rem; 25 | background: var(--bs-white); 26 | border-radius: 1.40625rem; 27 | transition: 0.075s; 28 | } 29 | 30 | .switcher-elem input.switcher:checked + label { 31 | background: var(--bs-success); 32 | } 33 | 34 | .switcher-elem input:checked + label:after { 35 | left: calc(100% - 0.078125rem); 36 | transform: translateX(-100%); 37 | } 38 | 39 | .switcher-elem label:active:after { 40 | width: 32.5px; 41 | } 42 | -------------------------------------------------------------------------------- /www/media/css/vendor/blueimp-file-upload.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.fileinput-button{position:relative;overflow:hidden;display:inline-block}.fileinput-button input{position:absolute;top:0;right:0;margin:0;height:100%;opacity:0;font-size:200px!important;direction:ltr;cursor:pointer}@media screen\9{.fileinput-button input{font-size:150%!important}}.progress-animated .bar,.progress-animated .progress-bar{background:url('../img/progressbar.gif')!important;filter:none}.fileupload-process{float:right;display:none}.files .processing .preview,.fileupload-processing .fileupload-process{display:block;width:32px;height:32px;background:url('../img/loading.gif') center no-repeat;background-size:contain}.files audio,.files video{max-width:300px}.files .name{word-wrap:break-word;overflow-wrap:anywhere;-webkit-hyphens:auto;hyphens:auto}.files button{margin-bottom:5px}.toggle[type=checkbox]{transform:scale(2);margin-left:10px}@media (max-width:767px){.fileupload-buttonbar .btn{margin-bottom:5px}.files .btn span,.files .toggle,.fileupload-buttonbar .delete,.fileupload-buttonbar .toggle{display:none}.files audio,.files video{max-width:80px}}@media (max-width:480px){.files .image td:nth-child(2){display:none}} 2 | -------------------------------------------------------------------------------- /www/media/css/vendor/jquery.atwho.css: -------------------------------------------------------------------------------- 1 | .atwho-view{position:absolute;top:0;left:0;display:none;margin-top:18px;background:#fff;color:#000;border:1px solid #DDD;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,.1);min-width:120px;z-index:11110!important}.atwho-view .atwho-header{padding:5px;margin:5px;cursor:pointer;border-bottom:solid 1px #eaeff1;color:#6f8092;font-size:11px;font-weight:700}.atwho-view .atwho-header .small{color:#6f8092;float:right;padding-top:2px;margin-right:-5px;font-size:12px;font-weight:400}.atwho-view .atwho-header:hover{cursor:default}.atwho-view .cur{background:#36F;color:#fff}.atwho-view .cur small{color:#fff}.atwho-view strong{color:#36F}.atwho-view .cur strong{color:#fff;font:700}.atwho-view ul{list-style:none;padding:0;margin:auto;max-height:200px;overflow-y:auto}.atwho-view ul li{display:block;padding:5px 10px;border-bottom:1px solid #DDD;cursor:pointer}.atwho-view small{font-size:smaller;color:#777;font-weight:400} -------------------------------------------------------------------------------- /www/media/fonts/vendor/octicons/build/octicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/fonts/vendor/octicons/build/octicons.eot -------------------------------------------------------------------------------- /www/media/fonts/vendor/octicons/build/octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/fonts/vendor/octicons/build/octicons.ttf -------------------------------------------------------------------------------- /www/media/fonts/vendor/octicons/build/octicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/fonts/vendor/octicons/build/octicons.woff -------------------------------------------------------------------------------- /www/media/fonts/vendor/octicons/build/octicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/fonts/vendor/octicons/build/octicons.woff2 -------------------------------------------------------------------------------- /www/media/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/ajax-loader.gif -------------------------------------------------------------------------------- /www/media/images/apple-touch-icon-114-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/apple-touch-icon-114-precomposed.png -------------------------------------------------------------------------------- /www/media/images/apple-touch-icon-144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/apple-touch-icon-144-precomposed.png -------------------------------------------------------------------------------- /www/media/images/apple-touch-icon-57-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/apple-touch-icon-57-precomposed.png -------------------------------------------------------------------------------- /www/media/images/apple-touch-icon-72-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/apple-touch-icon-72-precomposed.png -------------------------------------------------------------------------------- /www/media/images/bg-container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/bg-container.png -------------------------------------------------------------------------------- /www/media/images/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/handle.png -------------------------------------------------------------------------------- /www/media/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/menu.png -------------------------------------------------------------------------------- /www/media/images/submenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/images/submenu.png -------------------------------------------------------------------------------- /www/media/img/1x1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/img/1x1.png -------------------------------------------------------------------------------- /www/media/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/img/loading.gif -------------------------------------------------------------------------------- /www/media/img/progressbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/img/progressbar.gif -------------------------------------------------------------------------------- /www/media/js/color-select.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see color-select.js.LICENSE.txt */ 2 | (()=>{var e,r={364:()=>{$(document).ready((function(){$(".color_select").simpleColor({colors:["e11d21","eb6420","fbca04","009800","006b75","207de5","0052cc","5319e7","f7c6c7","fad8c7","fef2c0","bfe5bf","bfdadc","c7def8","bfd4f2","d4c5f9"],cellWidth:25,cellHeight:25,cellMargin:0,columns:8,displayCSS:{width:"25px",height:"25px"},chooserCSS:{left:"25px",border:"0"},onSelect:function(e,r){$("#"+r.attr("id")+"_display").val(e)}})}))},768:()=>{},404:()=>{},883:()=>{},31:()=>{}},o={};function c(e){var l=o[e];if(void 0!==l)return l.exports;var a=o[e]={exports:{}};return r[e](a,a.exports,c),a.exports}c.m=r,e=[],c.O=(r,o,l,a)=>{if(!o){var i=1/0;for(d=0;d=a)&&Object.keys(c.O).every((e=>c.O[e](o[f])))?o.splice(f--,1):(t=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[o,l,a]},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={225:0,869:0,316:0,585:0,234:0};c.O.j=r=>0===e[r];var r=(r,o)=>{var l,a,[i,t,f]=o,n=0;if(i.some((r=>0!==e[r]))){for(l in t)c.o(t,l)&&(c.m[l]=t[l]);if(f)var d=f(c)}for(r&&r(o);nc(364))),c.O(void 0,[869,316,585,234],(()=>c(768))),c.O(void 0,[869,316,585,234],(()=>c(404))),c.O(void 0,[869,316,585,234],(()=>c(883)));var l=c.O(void 0,[869,316,585,234],(()=>c(31)));l=c.O(l)})(); -------------------------------------------------------------------------------- /www/media/js/color-select.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | -------------------------------------------------------------------------------- /www/media/js/jtracker-tmpl.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see jtracker-tmpl.js.LICENSE.txt */ 2 | tmpl.regexp=/([\s'\\])(?![^%]*%\])|(?:\[%(=|#)([\s\S]+?)%\])|(\[%)|(%\])/g; -------------------------------------------------------------------------------- /www/media/js/jtracker-tmpl.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | -------------------------------------------------------------------------------- /www/media/js/support/documentation-index.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see documentation-index.js.LICENSE.txt */ 2 | JTracker=window.JTracker||{},function(o,n,t){"use strict";t.initDocumentation=function(o,e){t.basePath=o,t.baseUrl=e,n("#filetree").fileTree({root:"",script:o+"filetree",multiFolder:!1},(function(o){t.loadDocumentationPage(o)})),t.resizeDocumentationLoadingContainer()},t.loadDocumentationPage=function(o){n.ajax({url:t.basePath+"documentation/show/?"+o,beforeSend:function(){n("#loading").show()},success:function(o){o.error?n("#docs-container").html(tmpl("tplDocuError",o)):n("#docs-container").html(tmpl("tplDocuPage",o))},error:function(){alert("error..")},complete:function(){n("#loading").hide(),t.resizeDocumentationLoadingContainer()}})},t.resizeDocumentationLoadingContainer=function(){var t=n("div.body > div.container"),e=n("#docs-main");n("#loading").css("top",e.position().top-n(o).scrollTop()).css("left",e.position().left).css("width",t.width()).css("height",t.height()).css("display","none")}}(window,jQuery,JTracker); -------------------------------------------------------------------------------- /www/media/js/support/documentation-index.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | -------------------------------------------------------------------------------- /www/media/js/text/article-edit.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"use strict";e((function(){e("#save-article").click((function(t){t.preventDefault(),e("#editForm").submit()})),e("#text").markItUp(myMarkdownSettings),e('a[data-toggle="tab"]').on("shown",(function(t){"#preview"===e(t.target).attr("href")&&JTracker.preview("#text","#preview")}))}))}(window,jQuery); -------------------------------------------------------------------------------- /www/media/js/text/articles-index.js: -------------------------------------------------------------------------------- 1 | document.querySelectorAll(".delete-article").forEach((function(e){e.addEventListener("click",(function(t){t.preventDefault();var c=".delete-article-"+e.dataset.id+"-form";document.getElementById(c).submit()}))})); -------------------------------------------------------------------------------- /www/media/js/uploader-img.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see uploader-img.js.LICENSE.txt */ 2 | $((function(){"use strict";var e=$("#fileupload");e.fileupload({completed:function(e,t){if(t.result.error)$(".upload-error").delay(3e3).fadeOut();else if(t.result.files[0].error)$(".upload-error").delay(3e3).fadeOut();else{var l=$("#"+t.result.files[0].editorId),a=l.textrange("get").start,s=(t.result.files[0].isImage?"!":"")+"["+t.result.files[0].alt+"]",r="("+t.result.files[0].url+")",i=l.val(),p=i.substr(0,a)+s+r+i.substr(a);l.val(p),l.focus()}}}),e.bind("fileuploadsubmit",(function(e,t){if(!$('input[name="editorId"]').val())return $("#select-message").html("First please select an editor to attach the uploads to.").show().delay(3e3).fadeOut(),$("tbody.files").empty(),!1})),e.bind("fileuploaddestroyed",(function(e,t){var l=t.url.substring(t.url.indexOf("=")+1,t.url.length),a=$("#"+t.context.find("button").prop("id")),s=a.val(),r=new RegExp("!?"+RegExp.escape("[")+"[^"+RegExp.escape("]")+"]*"+RegExp.escape("]")+RegExp.escape("(")+"[^"+RegExp.escape("[]")+"]*?"+RegExp.escape(l)+RegExp.escape(")"),"i"),i=s.replace(r,"");a.val(i)})),e.addClass("fileupload-processing"),e.fileupload("option",{url:"/upload/put/",disableImageResize:/Android(?!.*Chrome)|Opera/.test(window.navigator.userAgent),maxFileSize:1e6,acceptFileTypes:/(\.|\/)(gif|jpe?g|png|txt)$/i})})),RegExp.escape=function(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}; -------------------------------------------------------------------------------- /www/media/js/uploader-img.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2013 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | -------------------------------------------------------------------------------- /www/media/js/validation/jtracker-rules.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Copyright (C) 2012 - 2014 Open Source Matters, Inc. All rights reserved. 3 | * @license GNU General Public License version 2 or later; see LICENSE.txt 4 | */ 5 | 6 | $.validator.addClassRules({ 7 | validateTitle: { 8 | required: true, 9 | maxlength: 255 10 | }, 11 | validateBuild: { 12 | required: true, 13 | maxlength: 40 14 | }, 15 | validateDescription: { 16 | required: true 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /www/media/js/vendor/blueimp-canvas-to-blob.js: -------------------------------------------------------------------------------- 1 | !function(t){"use strict";var a=t.HTMLCanvasElement&&t.HTMLCanvasElement.prototype,l=t.Blob&&function(){try{return Boolean(new Blob)}catch(t){return!1}}(),u=l&&t.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(t){return!1}}(),c=t.BlobBuilder||t.WebKitBlobBuilder||t.MozBlobBuilder||t.MSBlobBuilder,b=/^data:((.*?)(;charset=.*?)?)(;base64)?,/,r=(l||c)&&t.atob&&t.ArrayBuffer&&t.Uint8Array&&function(t){var e,o,n,a,r,i=t.match(b);if(!i)throw new Error("invalid data URI");for(e=i[2]?i[1]:"text/plain"+(i[3]||";charset=US-ASCII"),n=!!i[4],i=t.slice(i[0].length),o=(n?atob:decodeURIComponent)(i),n=new ArrayBuffer(o.length),a=new Uint8Array(n),r=0;r&"'\x00]/g,r.encMap={"<":"<",">":">","&":"&",'"':""","'":"'"},r.encode=function(e){return(null==e?"":""+e).replace(r.encReg,function(e){return r.encMap[e]||""})},r.arg="o",r.helper=",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}","function"==typeof define&&define.amd?define(function(){return r}):"object"==typeof module&&module.exports?module.exports=r:e.tmpl=r}(this); 2 | //# sourceMappingURL=tmpl.min.js.map -------------------------------------------------------------------------------- /www/media/js/vendor/datepicker/locales/en-GB.js: -------------------------------------------------------------------------------- 1 | /** 2 | * British English translation for bootstrap-datepicker 3 | * Xavier Dutreilh 4 | */ 5 | (function () { 6 | Datepicker.locales['en-GB'] = { 7 | days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 8 | daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 9 | daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], 10 | months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], 12 | today: "Today", 13 | monthsTitle: "Months", 14 | clear: "Clear", 15 | weekStart: 1, 16 | format: "dd/mm/yyyy" 17 | }; 18 | }()); 19 | -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/bold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/bold.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/clean.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/image.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/italic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/italic.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/link.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/list-bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/list-bullet.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/list-numeric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/list-numeric.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/picture.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/preview.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/images/stroke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/sets/default/images/stroke.png -------------------------------------------------------------------------------- /www/media/markitup/sets/default/style.css: -------------------------------------------------------------------------------- 1 | /* ------------------------------------------------------------------- 2 | // markItUp! 3 | // By Jay Salvat - http://markitup.jaysalvat.com/ 4 | // ------------------------------------------------------------------*/ 5 | .markItUp .markItUpButton1 a { 6 | background-image:url(images/bold.png); 7 | } 8 | .markItUp .markItUpButton2 a { 9 | background-image:url(images/italic.png); 10 | } 11 | .markItUp .markItUpButton3 a { 12 | background-image:url(images/stroke.png); 13 | } 14 | 15 | .markItUp .markItUpButton4 a { 16 | background-image:url(images/list-bullet.png); 17 | } 18 | .markItUp .markItUpButton5 a { 19 | background-image:url(images/list-numeric.png); 20 | } 21 | 22 | .markItUp .markItUpButton6 a { 23 | background-image:url(images/picture.png); 24 | } 25 | .markItUp .markItUpButton7 a { 26 | background-image:url(images/link.png); 27 | } 28 | 29 | .markItUp .markItUpButton8 a { 30 | background-image:url(images/clean.png); 31 | } 32 | .markItUp .preview a { 33 | background-image:url(images/preview.png); 34 | } 35 | -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-container.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-bbcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-bbcode.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-dotclear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-dotclear.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-html.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-json.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-markdown.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-textile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-textile.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-wiki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-wiki.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor-xml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor-xml.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/bg-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/bg-editor.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/handle.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/menu.png -------------------------------------------------------------------------------- /www/media/markitup/skins/markitup/images/submenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/markitup/images/submenu.png -------------------------------------------------------------------------------- /www/media/markitup/skins/simple/images/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/simple/images/handle.png -------------------------------------------------------------------------------- /www/media/markitup/skins/simple/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/simple/images/menu.png -------------------------------------------------------------------------------- /www/media/markitup/skins/simple/images/submenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/markitup/skins/simple/images/submenu.png -------------------------------------------------------------------------------- /www/media/markitup/templates/preview.css: -------------------------------------------------------------------------------- 1 | /* preview style examples */ 2 | body { 3 | background-color:#EFEFEF; 4 | font:70% Verdana, Arial, Helvetica, sans-serif; 5 | } -------------------------------------------------------------------------------- /www/media/markitup/templates/preview.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | markItUp! preview template 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /www/media/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /www/media/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /www/media/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /www/media/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /www/media/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /www/media/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joomla/jissues/c8132f29ab03ae12b234f0822fdd1440a2a544e1/www/media/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /www/robots.txt: -------------------------------------------------------------------------------- 1 | ### 2 | # For domain: http://issues.joomla.org 3 | ### 4 | 5 | User-agent: * 6 | --------------------------------------------------------------------------------