{"id":15063309,"url":"https://github.com/sokil/tasktrackerbundle","last_synced_at":"2025-10-04T22:32:08.322Z","repository":{"id":57055181,"uuid":"66402849","full_name":"sokil/TaskTrackerBundle","owner":"sokil","description":"Task tracker bundle","archived":true,"fork":false,"pushed_at":"2017-07-05T06:54:44.000Z","size":192,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-19T07:42:20.672Z","etag":null,"topics":["spa","symfony","symfony-bundle","task-tracker"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sokil.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-23T20:59:26.000Z","updated_at":"2023-03-16T12:03:22.000Z","dependencies_parsed_at":"2022-08-24T04:11:41.408Z","dependency_job_id":null,"html_url":"https://github.com/sokil/TaskTrackerBundle","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sokil%2FTaskTrackerBundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sokil%2FTaskTrackerBundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sokil%2FTaskTrackerBundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sokil%2FTaskTrackerBundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sokil","download_url":"https://codeload.github.com/sokil/TaskTrackerBundle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235321068,"owners_count":18971238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["spa","symfony","symfony-bundle","task-tracker"],"created_at":"2024-09-24T23:54:49.514Z","updated_at":"2025-10-04T22:32:02.979Z","avatar_url":"https://github.com/sokil.png","language":"PHP","readme":"# TaskStockBundle\n\n[![Total Downloads](http://img.shields.io/packagist/dt/sokil/task-stock-bundle.svg)](https://packagist.org/packages/sokil/task-stock-bundle)\n[![Daily Downloads](https://poser.pugx.org/sokil/task-stock-bundle/d/daily)](https://packagist.org/packages/sokil/task-stock-bundle)\n\nTask tracker bundle\n\n* [Installation](#installation)\n* [Configuration](#configuration)\n    * [Basic bundle configuration](#basic-bundle-configuration)\n    * [Configuring SPA](#configuring-spa)\n    * [Configuring file storage](#configuring-file-storage)\n    * [Configuring task states](#configuring-task-states)\n\n## Installation\n\nAdd dependency to composer:\n```\ncomposer.phar reequire sokil/task-stock-bundle\n```\n\n## Configuration\n\nThis bundle depends from other bundles, which also require configuration. If you yet not using it, configure them:\n* [FrontendBundle](https://github.com/sokil/FrontendBundle/blob/master/README.md#installation)\n* [FileStorageBundle](https://github.com/sokil/FileStorageBundle/blob/master/README.md#installation)\n* [NotificationBundle](https://github.com/sokil/NotificationBundle/blob/master/README.md#installation)\n* [UserBundle](https://github.com/sokil/UserBundle/blob/master/README.md#installation)\n\n### Basic bundle configuration\n\n1) Add bundle to AppKernel:\n```php\n\u003c?php\n\nclass AppKernel extends Kernel\n{\n    public function registerBundles()\n    {\n        $bundles = array(\n            new Sokil\\TaskStockBundle\\TaskStockBundle(),\n        );\n    }\n}\n```\n\n2) Define required parameters in `./app/config/parameters.yml.dist`:\n```yaml\n# email server parameters\nnotification.from_email.address: ~\nnotification.from_email.sender_name: ~\n```\n\n3) Add roles to role hierarchy in file `./app/config/security.yml`:\n```yaml\nsecurity:\n    role_hierarchy:\n        ROLE_TASK_VIEWER:           [ROLE_USER]\n        ROLE_TASK_MANAGER:          [ROLE_TASK_VIEWER]\n        ROLE_TASK_PROJECT_VIEWER:   [ROLE_USER]\n        ROLE_TASK_PROJECT_MANAGER:  [ROLE_TASK_PROJECT_VIEWER]\n```\n\n4) Register routing in `./app/console/routing.yml`:\n```yaml\ntask_stock:\n    resource: \"@TaskStockBundle/Resources/config/routing.yml\"\n```\n\n5) Bundle uses assetic so you need to register it in assetic config and do some configuration:\n```yaml\nassetic:\n    bundles:\n        - TaskStockBundle\n    variables:\n        locale: [uk, en, de. fr]\n        env: [dev,prod]\n```\n\nParamater `varailbes` passes some valiables to assets, tham will be used to build path to assets.\n\n### Configuring SPA\n\nThis bundle uses [FrontendBundle](https://github.com/sokil/FrontendBundle) for building frontend, so configure SPA, and add some dependencies to it:\n\n```twig\n{% import \"@FrontendBundle/Resources/views/macro.html.twig\" as frontend %}\n{% import \"@TaskStockBundle/Resources/views/Spa/macro.html.twig\" as taskSpa %}\n\n{{ frontend.commonCssResources() }}\n{{ frontend.commonJsResources() }}\n{{ frontend.spaJsResources() }}\n\n{{ taskSpa.cssResources() }}\n{{ taskSpa.jsResources() }}\n\n\u003cscript type=\"text/javascript\"\u003e\n    (function() {\n        // app options\n        var options = {{ applicationData|json_encode|raw }};\n        // router\n        options.router = new Marionette.AppRouter();\n        var taskStockRouter = new TaskStockRouter();\n        options.router.processAppRoutes(taskStockRouter, taskStockRouter.routes);\n        // container\n        options.container = new Container(_.extend(\n            {},\n            TaskStockServiceDefinition\n        ));\n        // requirejs\n        options.requireJs = [\n            TaskStockRequireJsConfig\n        ];\n        // start app\n        window.app = new Application(options);\n        window.app.start();\n    })();\n\u003c/script\u003e\n```\n\n### Configuring file storage\n\nThis bundle uses [FileStorageBundle](https://github.com/sokil/FileStorageBundle) to handle file uploads.\n\nYou need to configure some filesystem to handle uploads, for example `task_stock.attachments`. \nAdd to your `./app/config/config.yml`:\n\n```yaml\nknp_gaufrette:\n    factories:\n        - \"%kernel.root_dir%/../vendor/sokil/file-storage-bundle/src/Resources/config/adapter_factories.xml\"\n    adapters:\n        task_stock.attachments:\n            internal:\n                pathStrategy:\n                    name: chunkpath\n                    options:\n                        chunksNumber: 2\n                        chunkSize: 3\n                        preserveExtension: false\n                        baseDir: \"%kernel.root_dir%/files/task_attach\"\n    filesystems:\n        task_stock.attachments:\n            adapter: task_stock.attachments\n```\n\nThen add this filesystem to bundle's config at `./app/config/config.yml`:\n\n```yaml\ntask_stock:\n   attachments_filesystem: \"task_stock.attachments\"\n```\n\n### Configuring task states\n\nTask belongs to some category: `Bug`, `Enhancement`, `Feature`, `Design`, etc. Different categories of tasks may have different state flows. Bug may have states `New`, `In Progres`, `Test`, `Resolved`, and `Design` may have states `New`, `Prototyping`, `Drawing`, `Markup`, `Resolved`. This groups of states called `Schema`. Task with category `Design` may be related to `Drawing schema`, and tasks `Bug`, `Feature` may be relared to `Development` schema.\n\nAdd schema configuration to your `./app/config/config.yaml`:\n\n```yaml\ntaskStock:\n   stateConfig:\n      - id: 0\n        name: Development\n        states:\n          new:\n            label: task_status_new\n            initial: true\n            transitions:\n              to_in_progress:\n                resultingState: in_progress\n                label: task_transiotion_open\n                icon: glyphicon glyphicon-play\n              to_rejected:\n                resultingState: rejected\n                label: task_transiotion_reject\n                icon: glyphicon glyphicon-ban-circle\n          in_progress:\n            label: task_status_in_progress\n            transitions:\n              to_resolved:\n                resultingState: resolved\n                   label: task_transiotion_resolve\n                   icon: glyphicon glyphicon-ok\n                 to_rejected:\n                   resultingState: rejected\n                   label: task_transiotion_reject\n                   icon: glyphicon glyphicon-ban-circle\n             rejected:\n               label: task_status_rejected\n               transitions:\n                 to_in_progress:\n                   resultingState: in_progress\n                   label: task_transiotion_reopen\n                   icon: glyphicon glyphicon-repeat\n             resolved:\n               label: task_status_resolved\n               transitions:\n                 to_in_progress:\n                   resultingState: in_progress\n                   label: task_transiotion_reopen\n                   icon: glyphicon glyphicon-repeat\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsokil%2Ftasktrackerbundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsokil%2Ftasktrackerbundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsokil%2Ftasktrackerbundle/lists"}