Download the PHP package emeefe/subscriptions without Composer

On this page you can find all versions of the php package emeefe/subscriptions. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package subscriptions

Emeefe Subscriptions

Instalación

  1. Instalar el paquete vía composer:

  2. Publicar recursos (migraciones y archivo de configuración):

  3. Configurar

El archivo de configuración emeefe.subscriptions permite definir los nombres de las tablas a usar/crear antes de ejecutar migraciones o después en caso de renombrarlas, además permite especificar los modelos que serán usados. Por default la configuración es la siguiente:

  1. Ejecutar migraciones

Subscriptions

Tipos de plan (PlanType)

Un tipo de plan engloba un conjunto de caracteristicas permitidas, puede usarse para separar multiples tipos de planes como planes para Empresa, para Usuarios, de almacenamiento, etc.

Características de plan (PlanFeature)

Las caracteristicas de plan, como su nombre lo dice, permiten definir características, permisos, etc que puede tener un tipo de plan.

Planes (Plan)

Un plan pertenece a un tipo de plan y este puede tener asociados los límites de las características del tipo de plan(a través de relaciones), siempre y cuando sean carcateristicas contables(limit).

Periodos de plan (PlanPeriod)

Un periodo de plan indica el tiempo que dura un ciclo, los usuarios o instancias se suscriben directamente al periodo y no al plan dado que los periodos pueden variar en tiempo.

Subscripción (PlanSubscription)

Una subscripción es una relación creada entre un usuario u otra instancia con un plan a través de un periodo, la suscripción obtiene informacion actual del plan y del periodo y la mantiene en la suscripción, parecido a crear una copia, para evitar efectos colaterales cuando cambian datos del plan, precios, etc. pudiendo definir el comportamiento cuando ocurren estas situaciones a través de la escucha de eventos.

Cuando se crea una suscripción, esta se vuelve independiente del plan y del periodo aunque es posible obtener las relaciones a dichos modelos para obtener información actualizada u otras acciones necesarias.



Creación de tipo de plan

La creación de un tipo de plan se realiza a través de su modelo PlanType de la siguiente manera:

Creación de features

Para crear features de pla se realiza a través de su modelo PlanFeature de la siguiente manera:

Es importante notar que la propiedad code se define como una abreviatura ya que esta podrá ser usada para realizar consultas de manera mas sencilla y descriptiva.

El modelo PlanFeature ofrece dos constntes para definir el tipo, estas son:

La propiedad metadata tiene un cast a array por lo que se pueden manejar directamente asignaciones de arrays y estos se guardarán con formato JSON.

Asignar features a un tipo de plan

La asignación de features a un tipo de plan se realiza utilizando el método attachFeature de la siguiente manera:

que no es mas que un alias a

Verificación y obtenciónde features desde el tipo de plan

El tipo de plan permite verificar si hay features ligados a él así como obtenerlos

Creación de un plan

Una vez que tenemos el tipo de plan y sus features asociados, podemos crear un nuevo plan dentro del tipo de plan, esto se realiza usando su modelo Plan de la siguiente manera:

La propiedad code puede repetirse en los planes siempre y cuando sea de distinto tipo, esto se realiza internamente en el evento saving del modelo. En caso de que ya exista el código dentro del tipo se lanzará la excepción Emeefe\Subscriptions\RepeatedCodeException

Para indicar que un plan es el plan default dentro del tipo de plan se asigna la propiedad is_default a true, si esto sucede y ya hay un plan default dentro del tipo de plan entonces el antiguo plan default ya no será default definiendo su propiedad is_default a false. Esto funciona gracias al evento saving del modelo.

Por default un plan se crea visible a menos que se especifique en su campo is_visible como false, se aplica un scope global para devolver solo los planes visibles, en la sección del modelo se explica esto.

Asignación y obtención de límites de features del tipo limit

Para asignar los límites que tendrá un feture del tipo limit en un plan determinado se hace a través del modelo Plan de la siguiente manera:

Solo se permite asignar límites a las características del tipo limit, ver más casos en documentación del modelo.

Si no se hace la asignación de límite a un feature del tipo limit y se trata de obtener su límite entonces se devolverá un 0.

Crear periodos de plan

Para crear un periodo de plan se debe utilizar el builder PeriodBuilder devuelto por el método period de la clase Subscriptions en lugar de usar directamente el modelo PlanPeriod para evitar incongruencias.

El método builder tiene la siguiente estructura: period(string $displayName, string $code, Plan $plan)

Donde

Los métodos del PeriodBuilder disponibles y sus acciones default son:

setPrice(float $price)

Define el precio del periodo

Si no se llama este método o se ejecuta con un valor menor a 0 entoces se definirá el precio a 0

setCurrency(string $currency)

Define la moneda a usar con el periodo

Si no se llama este método se definirá la moneda a MXN

setTrialDays(int $trialDays)

Define los días de prueba que tendrá el periodo.

Si no se llama a este método o se ejecuta con un valor menor a 0 entonces se definirá a 0

setRecurringPeriod(int $count, string $unit)

Define como recurrente el periodo asignando una unidad y cantidad de unidades.

Si no se llama a este método o al método setLimitedNonRecurringPeriod se definirá como ilimitado no recurrente.

setLimitedNonRecurringPeriod(int $count, string $unit)

Define como no recurrente el periodo y asignan la unidad y cantidad de unidades que tendrá su único ciclo.

Si no se llama a este método o al método setRecurringPeriod se definirá como ilimitado no recurrente.

setHidden()

Define el periodo de plan como oculto. Si no se llama a este método entonces el periodo de plan se definirá como visible.

setToleranceDays(int $toleranceDays)

Define los días de tolerancia que se tendrán para renovar una vez terminado el periodo.

Si no se llama a este método o se ejecuta con un valor menor a 0 entonces se definirá a 0

setDefault()

Define el periodo como el periodo default, solo puede haber un periodo default en un mismo plan por lo que si ya existia un periodo default será remplazado como default por el actual.

create()

Termina la construcción del periodo creando una nueva instancia en base de datos, esto devuleve una instancia de PlanPeriod.

Importante: Si no se llama a ninguno de los métodos setRecurringPeriod y setLimitedNonRecurringPeriod entonces la suscripción será ilimitada ignorando el periodo de prueba y los días de tolerancia.

Ejemplo de uso

Suscribir modelos

Como se mencionó anteriormente se utilizan relaciones polimórficas para que cualquier modelo pueda suscribirse a periodos y sea mas sencillo y limpio su uso. Para esto se utiliza el trait CanSubscribe de la siguiente manera:

Hecho esto se creará una suscripción ligada al modelo, en este caso usuario, al plan y al periodo.

La estructura de la función es la siguiente:

subscribeTo(PlanPeriod $period, int $periodCount = 1)

Para la suscripción a periodos mensuales se usan las isguientes reglas especiales:

Verificar suscripción

Se puede verificar la suscripción de un modelo a un tipo de plan por medio del método hasSubscription($planTypeOrType) donde $planTypeOrType es una instancia del tipo de modelo o el string definido en la propiedad type del tipo de plan.

Obtener suscripción

Para obtener la suscripción actual se usa el método currentSubscription($planTypeOrType), la suscripción actual es la última suscripción creada sobre el modelo que se suscribe, aunque la suscripción esté cancelada será devuelta por este método.

Renovar suscripción

Cuando una suscripción es recurrente esta puede ser renovada por un numero entero de periodos. Una suscripción no recurrente no puede ser renovada.

Cancelar suscripción

Una suscripción puede ser cancelada usando el método cancel() de la suscripción.

Actualizar suscripción

Actualiza de una suscripción válida a una nueva cambiando de periodo ya sea del mismo plan o de otro plan por medio del método updateSubscriptionTo del trait CanSubscribe.

Una actualización de suscripción no es más que una cancelación de la suscripción válida actual y una asignación a una nueva, cuando la actualización se ejecuta de la manera aquí explicada no se lanza el evento CancelSubscription sino el evento UpdatedSubscription.

IMPORTANTE: Otro punto a tomar en cuenta es que al cambiar de plan se sincronizan los features de límite a la nueva suscripción definiendo el consumo en la nueva suscripción como el mínimo entre el consumo de la antigua suscripción y el límite de la nueva suscripción, si se desea realizar alguna acción extra en la lógica de la aplicación se deberá ejecutar en un Listener del evento UpdatedSubscription.

Modelos

PlanType

Métodos

hasFeature(string $featureCode)

Verifica si el tipo de plan contiene el feature con el código $featureCode y devuelve un boolean dependiendo el caso. Si el $featureCode no existe o no esta asociado al tipo devuelve false.

attachFeature(PlanFeature $planFeature)

Asigna una instancia de PlanFeature al tipo de plan y regresa la instancia de PlanType para encadenar varias asignaciones de features. En caso de mandar un feature que ya está ligado ignora la asignación sin devolver errores.

getFeatureByCode(string $featureCode)

Obtiene una instancia de PlanFeature a través de un código pasado en $featureCode, en caso de no existir una relción con el tipo de plan devuelve null.

Relaciones

features

Obtiene la colección de PlanFeatures relacionados al tipo de plan.

plans

Obtiene la colección de Plan relacionados al tipo de plan.

subscriptions

Obtiene la colección de PlanSubscription relacionados al tipo de plan.


PlanFeature

Scopes

scopeLimitType($query)

Filtra features por tipo limit

scopeFeatureType($query)

Filtra features por tipo feature


Plan

El modelo de plan aplica un scope global para devolver siempre los planes visibles, esto se puede desactivar usando el scope withHiddens explicado más abajo.

Métodos

assignFeatureLimitByCode(int $limit, string $featureCode)

Asigna un feature del tipo limit al plan así como su límite, en el caso de aún no tener límite asignado entonces lo asigna y para el caso en que ya ha sido definido un límite lo actualiza.

Devuelve:

assignUnlimitFeatureByCode(string $featureCode)

Asigna un feature del tipo feature al plan.

Devuelve:

getFeatureLimitByCode($featureCode)

Obtiene el límite de un feature del tipo limit a partir de su código

Devuelve:

hasFeature(string $featureCode)

Verifica si el tipo del plan tiene un feature asociado.

Devuelve:

setAsDefault()

Define el plan como default dentro del tipo plan, si ya existia un plan que era el default entonces se reasigna esta característica actualizando el nuevo y quitando la característica al antiguo default.

Devuelve bool

setAsVisible()

Define el plan como visible

Devuelve bool

setAsHidden()

Define el plan como oculto

Devuelve bool

Relaciones

type

Obtiene la el tipo de plan al que se encuentra asociado el plan.

features

Obtiene la colección de features asociados al plan a través de su tipo

Scopes

scopeByType($query, string $type)

Obtiene planes según la clave de su tipo.

scopeVisible($query)

Filtra planes visibles

scopewithHiddens($query)

Permite obtener también los planes ocultos

scopeHidden($query)

Filtra planes ocultos, es necesario llamar antes a scopewithHiddens($query) para obtenerlos


PlanPeriod

El modelo de PlanPeriod aplica un scope global para devolver siempre los periodos visibles, esto se puede desactivar usando el scope withHiddens explicado más abajo.

Métodos

isRecurring()

Checa si el periodo es recurrente

Devuelve bool

isLimitedNonRecurring()

Checa si el periodo es no recurrente limitado

Devuelve bool

isUnlimitedNonRecurring()

Checa si el periodo es no recurrente ilimitado

Devuelve bool

isVisible()

Checa si el el periodo es visible

Devuelve bool

isHidden()

Checa si el periodo está oculto

isDefault

Checa si el periodo es el periodo default dentro del tipo de plan

Devuelve bool

isFree()

Checa si el periodo es gratuito, en otras palabras, su precio es 0

Devuelve bool

hasTrial()

Checa si el periodo tiene periodo de prueba

Devuelve bool

setAsDefault()

Define el periodo como default dentro del plan, si ya existia un periodo que era el default entonces se reasigna esta característica actualizando el nuevo y quitando la característica al antiguo default.

Devuelve bool

setAsVisible()

Define el periodo como visible

Devuelve bool

setAsHidden()

Define el periodo como oculto

Devuelve bool

Relaciones

plan

Devuelve el plan asociado

subscriptions

Devuelve las suscripciones asociadas

Scopes

scopeVisible($query)

Filtra periodos visibles

scopewithHiddens($query)

Permite obtener también los periodos ocultos

scopeHidden($query)

Filtra periodos ocultos, es necesario llamar antes a scopewithHiddens($query) para obtenerlos


PlanSubscription

Métodos

isOnTrial()

Checa si la suscripción se encuentra en periodo de prueba.

Devuelve:

isActive()

Checa si la suscripción se encuentra en periodo normal.

Devuelve:

isValid()

Checa si la suscripción es válida.

Devuelve:

isExpiredWithTolerance()

Checa si la suscripción ha llegado a su fecha de expiración pero se encuentra en el periodo de tolerancia, muy útil para verificar pagos.

Devuelve:

isFullExpired()

Checa si la suscripción ha expirado y no se encuentra dentro de un periodo de tolerancia, muy útil para verificar pagos.

Devuelve:

isCancelled()

Checa si la sucripción está cancelada

Devuelve:

isUnlimited()

Checa si la sucripción es ilimitada

Devuelve:

isLimited()

Checa si la sucripción es limitada

Devuelve:

remainingTrialDays()

Devuelve la cantidad de días de prueba restantes

Devuelve:

renew(int $periods = 1)

Renueva la suscripción solo si es recurrente y no está cancelada

Devuelve:

cancel(string $reason = null)

Cancela la suscripción solo si no está cancelada. Si se cancela una suscripción ilimitada entonces define su fecha de expiración a la fecha en que se cancela.

Devuelve bool

hasFeature(string $featureCode)

Checa si la suscripción tiene un feature a partir de su código.

Devuelve bool

consumeFeature(string $featureCode, int $units = 1)

Consume una unidad de las unidades disponibles en la suscripción de un feature siempre y cuando la suscripción no esté cancelada.

Devuelve bool

unconsumeFeature(string $featureCode, int $units = 1)

Desconsume una unidad de las unidades consumidas en la suscripción de un feature siempre y cuando la suscripción no esté cancelada.

Devuelve bool

getUnitsOf(string $featureCode)

Devuelve el total de un feature limitado relacionado a la suscripción

Devuelve int o null

getUsageOf(string $featureCode)

Devuelve el uso de un feature relacionado a la suscripción

Devuelve int o null

getRemainingOf(string $featureCode)

Devuelve el uso restante de un feature relacionado a la suscripción

Devuelve int o null

Relaciones

period

Devuelve el periodo relacionado

subscriber

Devuelve el modelo suscriptor asociado por la relación polimórfica

plan_type

Devuelve el tipo de plan asociado

Scopes

scopeByType($query, PlanType $planType)

Filtra suscripciones por su tipo de plan

scopeCanceled($query)

Filtra suscripciones canceladas

scopeFree($query)

Filtra suscripciones gratuitas donde su campo price es 0

recurring($query)

Filtra suscripciones recurrentes

Eventos

Este paquete ofrece eventos que son lanzados en las diversas circunstancias más importantes o que nos permiten adaptar las suscripciones a la mayoria de casos posibles.

Emeefe\Subscriptions\Events\FeatureLimitChangeOnPlan Se lanza cuando se actualiza el límite de un feature en un plan, tanto para la primera vez que se asigna límite como también cuando se actualiza.

Emeefe\Subscriptions\Events\PlanPeriodChange Se lanza cuando un periodo de plan es actualizado en alguno de los campos price, currency, trial_days, period_unit, period_count, is_recurring, is_visible o tolerance_days.

Emeefe\Subscriptions\Events\NewFeatureOnPlan Se lanza cuando un feature es asignado a un plan

Emeefe\Subscriptions\Events\NewSubscription Se lanza cuando un modelo se suscribe a un plan por medio de un periodo

Emeefe\Subscriptions\Events\RenewSubscription Se lanza cuando una suscripción es renovada/extendida

Emeefe\Subscriptions\Events\CancelSubscription Se lanza cuando una subscripción es cancelada, usando el método cancel. Cuando es una cancelación por actualización de plan usando el método updateSubscriptionTo del trait CanSubscribe no se hace la llamada a este evento y se define su motivo de cancelación a PlanSubscription::CANCEL_REASON_UPDATE_SUBSCRIPTION

Emeefe\Subscriptions\Events\FeatureConsumed Se lanza cuando un feature de la suscripción es consumido

Emeefe\Subscriptions\Events\FeatureUnconsumed Se lanza cuando un feature de la suscripción es "desconsumido"

Emeefe\Subscriptions\Events\FeatureRemovedFromPlan Se lanza cuando un feature es eliminado del plan

Emeefe\Subscriptions\Events\UpdatedSubscription Se lanza cuando se actualiza suscripción usando el método updateSubscriptionTo del trait CanSubscribe


All versions of subscriptions with dependencies

PHP Build Version
Package Version
Requires php Version >=7.0.0
laravel/framework Version ~5.8|~6.0|~7.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package emeefe/subscriptions contains the following files

Loading the files please wait ....