PHPackages                             mobly/hour-bank - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mobly/hour-bank

ActiveProject[Utility &amp; Helpers](/categories/utility)

mobly/hour-bank
===============

Parses hour bank e-mail and post on slack to a development team

20PHP

Since May 20Pushed 8y ago4 watchersCompare

[ Source](https://github.com/mobly/hour-bank)[ Packagist](https://packagist.org/packages/mobly/hour-bank)[ RSS](/packages/mobly-hour-bank/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependenciesVersions (2)Used By (0)

Mobly - Hour Bank
=================

[](#mobly---hour-bank)

Description
-----------

[](#description)

Parses hour bank e-mail and post on slack to a development team

Setup (For the Balance script)
------------------------------

[](#setup-for-the-balance-script)

#### Application Configuration Files

[](#application-configuration-files)

1. Duplicate `./configuration/local.php.template` to `./configuration/local.php`
2. Change the **team** to an array containing the names of the team member's
3. Change the Slack **channel** that the hours need to be published
4. Change the **slackEndpoint** with the **Webhook URL** of a **Incoming WebHooks** created in Slack (see above)

#### Slack Incoming WebHook

[](#slack-incoming-webhook)

1. Access **Integrations** in your tem Slack website `https://[your team].slack.com/services`
2. Search for **Incoming WebHooks** then click **Add**
3. Select the **Post to Channel** that the hours need to be published (will be the default channel for the hook)
4. Copy the **Webhook URL** generated to **slackEndpoint** into `./configuration/local.php`

#### Google Developers Console

[](#google-developers-console)

1. Create a project in the \[Google Developers Console\](developer console)
2. Enable Gmail API in **APIs &amp; Auth** &gt; **APIs** &gt; **Google Apps APIs** &gt; **Gmail API** &gt; **Enable API**
3. Create a credential in **APIs &amp; Auth** &gt; **Credentials** &gt; **Add credentials** &gt; **OAuth 2.0 client ID**
4. Download the JSON credential.
5. Once downloaded, create the (default) path `./data/credential/` and move it there.

> - It shoud look like this (as defined in the application.php): `./data/credential/client_secret.json`
> - The credential JSON file should never be committed with your source code, and should be stored securely.

Setup
-----

[](#setup)

```
composer dump-autoload -o
```

Run
---

[](#run)

#### Balance

[](#balance)

Generate balance report

```
php src/balance.php
```

#### Log

[](#log)

Manage time logging

```
php src/log.php
```

#### Log - Persist into Google Form

[](#log---persist-into-google-form)

Call selenium tests to persist data into the Google Form

```
vendor/bin/phpunit
```

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/6b9c783202330e92887cae84087c608019196c59088e135568b149f4b81db046?d=identicon)[bycosta](/maintainers/bycosta)

---

Top Contributors

[![bycosta](https://avatars.githubusercontent.com/u/724830?v=4)](https://github.com/bycosta "bycosta (1 commits)")

### Embed Badge

![Health badge](/badges/mobly-hour-bank/health.svg)

```
[![Health](https://phpackages.com/badges/mobly-hour-bank/health.svg)](https://phpackages.com/packages/mobly-hour-bank)
```

###  Alternatives

[eventsauce/eventsauce

A pragmatic event sourcing library for PHP with a focus on developer experience.

8662.2M57](/packages/eventsauce-eventsauce)[wamania/php-stemmer

Native PHP Stemmer

1464.5M42](/packages/wamania-php-stemmer)[ether/simplemap

A beautifully simple Map field type for Craft CMS

134353.8k](/packages/ether-simplemap)[marcusball/case-helper

Easily convert between camelCase, PascalCase, kebab-case, snake\_case, SCREAMING\_SNAKE\_CASE, Train-Case, and string case!

2152.5k3](/packages/marcusball-case-helper)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
