Compare commits
78 Commits
Author | SHA1 | Date | |
---|---|---|---|
9c1ee3e88a | |||
e3528344af | |||
0ccc84e2ff | |||
e0730d3bf6 | |||
ddeb02de74 | |||
e003be492c | |||
fb7b5027c2 | |||
7a902d454a | |||
bd716ae7ef | |||
e074d3b5ce | |||
f1a054c0e7 | |||
e037d29935 | |||
b60803ef7b | |||
aceda7bae2 | |||
111aa4a3de | |||
9742991690 | |||
2c1903508c | |||
384c403ae4 | |||
6e0bcc0ae2 | |||
3ad9ae8b8f | |||
5e36ede2ac | |||
cb355feaf4 | |||
9b1f111251 | |||
4cead46ac4 | |||
25c632065a | |||
ea1edebc05 | |||
498c75dfcf | |||
f39a877db2 | |||
7afbb131ce | |||
6bba258fec | |||
1cf259a54d | |||
d113d7b91b | |||
2f90f9359c | |||
b1d9b672ab | |||
d9b2e51f8c | |||
2caaa1a1e3 | |||
1b3cb2bfdd | |||
5a6ef33c5b | |||
7eb5a2473c | |||
34d14ed95d | |||
d31b0b6c0c | |||
f3f91f492f | |||
bd0febd92c | |||
b294af2e7d | |||
82fd08cf57 | |||
5dc3f97f15 | |||
cca07258d6 | |||
f61bb46073 | |||
8b522f44d9 | |||
63b1bac955 | |||
3c610acb31 | |||
cfd9b33b30 | |||
952d26f1f8 | |||
b0ad2ddffc | |||
7534aed01d | |||
28198e9b9e | |||
3953df845c | |||
30e37dcfde | |||
bc9e5495d7 | |||
4d47f8292f | |||
a1ff74f157 | |||
dc1217e6d1 | |||
f2e4df6ecb | |||
a197f503a9 | |||
79ab3164a6 | |||
290a51dd5a | |||
de008d5907 | |||
5b5599575b | |||
3497de7c28 | |||
e0efef54e9 | |||
655708cfa3 | |||
1a79b92b07 | |||
ea2b2ea4c4 | |||
b02771762d | |||
0ae4e4f80d | |||
829384a56b | |||
0cd5660141 | |||
082196378b |
47
README.md
@ -1,14 +1,15 @@
|
||||
# Component Builder (2.2.3)
|
||||
# Joomla Component Builder (JCB)
|
||||
[](https://github.com/vdm-io/Joomla-Component-Builder/releases) [](https://github.com/vdm-io/Joomla-Component-Builder/releases)
|
||||
|
||||
This is a [Joomla 3.x](http://www.joomla.org/) component.
|
||||
|
||||

|
||||

|
||||
|
||||
The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanced, truly able to build extremely complex components in a fraction of the time.
|
||||
|
||||
Whether you're a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.2.3) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.5.0) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
|
||||
@ -70,18 +71,21 @@ Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
+ You can dynamically add internal help structures to all component.
|
||||
+ There is no limitations on how big or how much you want to build (server limitation only).
|
||||
+ This is a complete factory kind of component that functions like a deployment hub.
|
||||
+ Export any component completely mapped in JCB and import into another JCB.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# Get Access to Video Tutorials
|
||||
|
||||
> **You can purchase more demo content for Component Builder including access to training & help video tutorials:**
|
||||
> **You can purchase more [demo content](http://vdm.bz/jcb-packages) for Component Builder including access to training & help video tutorials:**
|
||||
|
||||
+ Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component)
|
||||
+ Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component)
|
||||
+ Help View Integration*
|
||||
+ Training & Help Videos* tutorials in the component included.
|
||||
+ *Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demo.zip) _(free)_
|
||||
+ *Advance Demo Component* get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demoAdvanced.zip) _([buy key](http://vdm.bz/get-advance-demo-key))_
|
||||
+ *Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_sermondistributor.zip) _([buy key](http://vdm.bz/get-sermon-distributor-key))_
|
||||
+ *Location Data* see the build on [github](https://github.com/vdm-io/Joomla-Location-Data) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_locationData.zip) _([buy key](http://vdm.bz/get-location-data-key))_
|
||||
+ *Help View Integration*
|
||||
+ *Training & Help Videos* tutorials in the component included.
|
||||
|
||||
[**GET ACCESS NOW!**](https://www.vdm.io/joomla-component-builder#get)
|
||||
[**GET ACCESS NOW!**](http://vdm.bz/component-builder)
|
||||
|
||||
# gitHub Support
|
||||
|
||||
@ -100,23 +104,24 @@ Component Builder is mapped as a component in itself on my local development env
|
||||
|
||||
# Build Details
|
||||
|
||||
+ *Company*: [Vast Development Method](https://www.vdm.io/joomla-component-builder)
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:info@vdm.io)
|
||||
+ *Name*: [Component Builder](https://www.vdm.io/joomla-component-builder)
|
||||
+ *Company*: [Vast Development Method](http://vdm.bz/component-builder)
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](http://vdm.bz/component-builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 22nd November, 2016
|
||||
+ *Version*: 2.2.3
|
||||
+ *Last Build*: 21st August, 2017
|
||||
+ *Version*: 2.5.0
|
||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
+ *Line count*: **86456**
|
||||
+ *File count*: **540**
|
||||
+ *Folder count*: **99**
|
||||
+ *Line count*: **111648**
|
||||
+ *File count*: **663**
|
||||
+ *Folder count*: **117**
|
||||
|
||||
> This **component** was build with a Joomla [Automated Component Builder](https://www.vdm.io/joomla-component-builder).
|
||||
> This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
|
||||
## Donations
|
||||
|
||||
If you want to support this project, please consider donating:
|
||||
* PayPal: pay@vdm.io
|
||||
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
|
||||
Come on buy me a coffee :)
|
||||
* PayPal: [paypal.me/payvdm](https://www.paypal.me/payvdm)
|
||||
* Bitcoin: 1FLxiT6wyxgZ3boeviLkYJ1DRpp41uzpxa
|
||||
* Ethereum: 0x243392daa3c9c8bc841fcacf7c7f72541cb16823
|
@ -1,14 +1,15 @@
|
||||
# Component Builder (2.2.3)
|
||||
# Joomla Component Builder (JCB)
|
||||
[](https://github.com/vdm-io/Joomla-Component-Builder/releases) [](https://github.com/vdm-io/Joomla-Component-Builder/releases)
|
||||
|
||||
This is a [Joomla 3.x](http://www.joomla.org/) component.
|
||||
|
||||

|
||||

|
||||
|
||||
The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanced, truly able to build extremely complex components in a fraction of the time.
|
||||
|
||||
Whether you're a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.2.3) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.5.0) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
|
||||
@ -70,18 +71,21 @@ Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
+ You can dynamically add internal help structures to all component.
|
||||
+ There is no limitations on how big or how much you want to build (server limitation only).
|
||||
+ This is a complete factory kind of component that functions like a deployment hub.
|
||||
+ Export any component completely mapped in JCB and import into another JCB.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# Get Access to Video Tutorials
|
||||
|
||||
> **You can purchase more demo content for Component Builder including access to training & help video tutorials:**
|
||||
> **You can purchase more [demo content](http://vdm.bz/jcb-packages) for Component Builder including access to training & help video tutorials:**
|
||||
|
||||
+ Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component)
|
||||
+ Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component)
|
||||
+ Help View Integration*
|
||||
+ Training & Help Videos* tutorials in the component included.
|
||||
+ *Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demo.zip) _(free)_
|
||||
+ *Advance Demo Component* get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demoAdvanced.zip) _([buy key](http://vdm.bz/get-advance-demo-key))_
|
||||
+ *Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_sermondistributor.zip) _([buy key](http://vdm.bz/get-sermon-distributor-key))_
|
||||
+ *Location Data* see the build on [github](https://github.com/vdm-io/Joomla-Location-Data) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_locationData.zip) _([buy key](http://vdm.bz/get-location-data-key))_
|
||||
+ *Help View Integration*
|
||||
+ *Training & Help Videos* tutorials in the component included.
|
||||
|
||||
[**GET ACCESS NOW!**](https://www.vdm.io/joomla-component-builder#get)
|
||||
[**GET ACCESS NOW!**](http://vdm.bz/component-builder)
|
||||
|
||||
# gitHub Support
|
||||
|
||||
@ -100,23 +104,24 @@ Component Builder is mapped as a component in itself on my local development env
|
||||
|
||||
# Build Details
|
||||
|
||||
+ *Company*: [Vast Development Method](https://www.vdm.io/joomla-component-builder)
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:info@vdm.io)
|
||||
+ *Name*: [Component Builder](https://www.vdm.io/joomla-component-builder)
|
||||
+ *Company*: [Vast Development Method](http://vdm.bz/component-builder)
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](http://vdm.bz/component-builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 22nd November, 2016
|
||||
+ *Version*: 2.2.3
|
||||
+ *Last Build*: 21st August, 2017
|
||||
+ *Version*: 2.5.0
|
||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
+ *Line count*: **86456**
|
||||
+ *File count*: **540**
|
||||
+ *Folder count*: **99**
|
||||
+ *Line count*: **111648**
|
||||
+ *File count*: **663**
|
||||
+ *Folder count*: **117**
|
||||
|
||||
> This **component** was build with a Joomla [Automated Component Builder](https://www.vdm.io/joomla-component-builder).
|
||||
> This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
|
||||
## Donations
|
||||
|
||||
If you want to support this project, please consider donating:
|
||||
* PayPal: pay@vdm.io
|
||||
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
|
||||
Come on buy me a coffee :)
|
||||
* PayPal: [paypal.me/payvdm](https://www.paypal.me/payvdm)
|
||||
* Bitcoin: 1FLxiT6wyxgZ3boeviLkYJ1DRpp41uzpxa
|
||||
* Ethereum: 0x243392daa3c9c8bc841fcacf7c7f72541cb16823
|
@ -23,6 +23,10 @@
|
||||
<action name="admin_view.export" title="COM_COMPONENTBUILDER_ADMIN_VIEWS_EXPORT" description="COM_COMPONENTBUILDER_ADMIN_VIEWS_EXPORT_DESC" />
|
||||
<action name="admin_view.import" title="COM_COMPONENTBUILDER_ADMIN_VIEWS_IMPORT" description="COM_COMPONENTBUILDER_ADMIN_VIEWS_IMPORT_DESC" />
|
||||
<action name="admin_view.submenu" title="COM_COMPONENTBUILDER_ADMIN_VIEWS_SUBMENU" description="COM_COMPONENTBUILDER_ADMIN_VIEWS_SUBMENU_DESC" />
|
||||
<action name="compiler.access" title="COM_COMPONENTBUILDER_COMPILER_ACCESS" description="COM_COMPONENTBUILDER_COMPILER_ACCESS_DESC" />
|
||||
<action name="compiler.clear_tmp" title="COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS_DESC" />
|
||||
<action name="compiler.dashboard_list" title="COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST" description="COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST_DESC" />
|
||||
<action name="compiler.submenu" title="COM_COMPONENTBUILDER_COMPILER_SUBMENU" description="COM_COMPONENTBUILDER_COMPILER_SUBMENU_DESC" />
|
||||
<action name="custom_admin_view.access" title="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_ACCESS" description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_ACCESS_DESC" />
|
||||
<action name="custom_admin_view.batch" title="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_BATCH_USE" description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_BATCH_USE_DESC" />
|
||||
<action name="custom_admin_view.dashboard_add" title="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_DASHBOARD_ADD" description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_DASHBOARD_ADD_DESC" />
|
||||
@ -31,6 +35,20 @@
|
||||
<action name="custom_admin_view.export" title="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EXPORT" description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_EXPORT_DESC" />
|
||||
<action name="custom_admin_view.import" title="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_IMPORT" description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_IMPORT_DESC" />
|
||||
<action name="custom_admin_view.submenu" title="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_SUBMENU" description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEWS_SUBMENU_DESC" />
|
||||
<action name="custom_code.access" title="COM_COMPONENTBUILDER_CUSTOM_CODES_ACCESS" description="COM_COMPONENTBUILDER_CUSTOM_CODES_ACCESS_DESC" />
|
||||
<action name="custom_code.batch" title="COM_COMPONENTBUILDER_CUSTOM_CODES_BATCH_USE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_BATCH_USE_DESC" />
|
||||
<action name="custom_code.create" title="COM_COMPONENTBUILDER_CUSTOM_CODES_CREATE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_CREATE_DESC" />
|
||||
<action name="custom_code.dashboard_list" title="COM_COMPONENTBUILDER_CUSTOM_CODES_DASHBOARD_LIST" description="COM_COMPONENTBUILDER_CUSTOM_CODES_DASHBOARD_LIST_DESC" />
|
||||
<action name="custom_code.delete" title="COM_COMPONENTBUILDER_CUSTOM_CODES_DELETE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_DELETE_DESC" />
|
||||
<action name="custom_code.edit" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_DESC" />
|
||||
<action name="custom_code.edit.created_by" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_BY" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_BY_DESC" />
|
||||
<action name="custom_code.edit.created" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_DATE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_DATE_DESC" />
|
||||
<action name="custom_code.edit.own" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_OWN" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_OWN_DESC" />
|
||||
<action name="custom_code.edit.state" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_STATE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_STATE_DESC" />
|
||||
<action name="custom_code.version" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION_DESC" />
|
||||
<action name="custom_code.export" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EXPORT" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EXPORT_DESC" />
|
||||
<action name="custom_code.import" title="COM_COMPONENTBUILDER_CUSTOM_CODES_IMPORT" description="COM_COMPONENTBUILDER_CUSTOM_CODES_IMPORT_DESC" />
|
||||
<action name="custom_code.submenu" title="COM_COMPONENTBUILDER_CUSTOM_CODES_SUBMENU" description="COM_COMPONENTBUILDER_CUSTOM_CODES_SUBMENU_DESC" />
|
||||
<action name="dynamic_get.access" title="COM_COMPONENTBUILDER_DYNAMIC_GETS_ACCESS" description="COM_COMPONENTBUILDER_DYNAMIC_GETS_ACCESS_DESC" />
|
||||
<action name="dynamic_get.batch" title="COM_COMPONENTBUILDER_DYNAMIC_GETS_BATCH_USE" description="COM_COMPONENTBUILDER_DYNAMIC_GETS_BATCH_USE_DESC" />
|
||||
<action name="dynamic_get.create" title="COM_COMPONENTBUILDER_DYNAMIC_GETS_CREATE" description="COM_COMPONENTBUILDER_DYNAMIC_GETS_CREATE_DESC" />
|
||||
@ -83,6 +101,42 @@
|
||||
<action name="help_document.export" title="COM_COMPONENTBUILDER_HELP_DOCUMENTS_EXPORT" description="COM_COMPONENTBUILDER_HELP_DOCUMENTS_EXPORT_DESC" />
|
||||
<action name="help_document.import" title="COM_COMPONENTBUILDER_HELP_DOCUMENTS_IMPORT" description="COM_COMPONENTBUILDER_HELP_DOCUMENTS_IMPORT_DESC" />
|
||||
<action name="help_document.submenu" title="COM_COMPONENTBUILDER_HELP_DOCUMENTS_SUBMENU" description="COM_COMPONENTBUILDER_HELP_DOCUMENTS_SUBMENU_DESC" />
|
||||
<action name="joomla_component.backup" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BACKUP_BUTTON_ACCESS_DESC" />
|
||||
<action name="joomla_component.export_components" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_COMPONENTS_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_COMPONENTS_BUTTON_ACCESS_DESC" />
|
||||
<action name="joomla_component.import_components" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_COMPONENTS_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_COMPONENTS_BUTTON_ACCESS_DESC" />
|
||||
<action name="joomla_component.access" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_ACCESS" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_ACCESS_DESC" />
|
||||
<action name="joomla_component.batch" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_BATCH_USE" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_BATCH_USE_DESC" />
|
||||
<action name="joomla_component.dashboard_add" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_DASHBOARD_ADD" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_DASHBOARD_ADD_DESC" />
|
||||
<action name="joomla_component.dashboard_list" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_DASHBOARD_LIST" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_DASHBOARD_LIST_DESC" />
|
||||
<action name="joomla_component.edit.add_license" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_ADD_LICENSE" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_ADD_LICENSE_DESC" />
|
||||
<action name="joomla_component.edit.license_type" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_LICENSE_TYPE" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_LICENSE_TYPE_DESC" />
|
||||
<action name="joomla_component.version" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_VERSION" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_VERSION_DESC" />
|
||||
<action name="joomla_component.export" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EXPORT" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EXPORT_DESC" />
|
||||
<action name="joomla_component.import" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_IMPORT" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_IMPORT_DESC" />
|
||||
<action name="joomla_component.submenu" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_SUBMENU" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_SUBMENU_DESC" />
|
||||
<action name="language_translation.access" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_ACCESS" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_ACCESS_DESC" />
|
||||
<action name="language_translation.batch" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_BATCH_USE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_BATCH_USE_DESC" />
|
||||
<action name="language_translation.create" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_CREATE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_CREATE_DESC" />
|
||||
<action name="language_translation.dashboard_list" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_DASHBOARD_LIST" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_DASHBOARD_LIST_DESC" />
|
||||
<action name="language_translation.delete" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_DELETE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_DELETE_DESC" />
|
||||
<action name="language_translation.edit" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_DESC" />
|
||||
<action name="language_translation.edit.own" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_OWN" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_OWN_DESC" />
|
||||
<action name="language_translation.edit.state" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_STATE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_STATE_DESC" />
|
||||
<action name="language_translation.version" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION_DESC" />
|
||||
<action name="language_translation.export" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EXPORT" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EXPORT_DESC" />
|
||||
<action name="language_translation.import" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_IMPORT" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_IMPORT_DESC" />
|
||||
<action name="language_translation.submenu" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_SUBMENU" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_SUBMENU_DESC" />
|
||||
<action name="language.access" title="COM_COMPONENTBUILDER_LANGUAGES_ACCESS" description="COM_COMPONENTBUILDER_LANGUAGES_ACCESS_DESC" />
|
||||
<action name="language.batch" title="COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE" description="COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE_DESC" />
|
||||
<action name="language.create" title="COM_COMPONENTBUILDER_LANGUAGES_CREATE" description="COM_COMPONENTBUILDER_LANGUAGES_CREATE_DESC" />
|
||||
<action name="language.delete" title="COM_COMPONENTBUILDER_LANGUAGES_DELETE" description="COM_COMPONENTBUILDER_LANGUAGES_DELETE_DESC" />
|
||||
<action name="language.edit" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_DESC" />
|
||||
<action name="language.edit.own" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT_OWN" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_OWN_DESC" />
|
||||
<action name="language.edit.state" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE_DESC" />
|
||||
<action name="language.version" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION_DESC" />
|
||||
<action name="language.export" title="COM_COMPONENTBUILDER_LANGUAGES_EXPORT" description="COM_COMPONENTBUILDER_LANGUAGES_EXPORT_DESC" />
|
||||
<action name="language.import" title="COM_COMPONENTBUILDER_LANGUAGES_IMPORT" description="COM_COMPONENTBUILDER_LANGUAGES_IMPORT_DESC" />
|
||||
<action name="language.submenu" title="COM_COMPONENTBUILDER_LANGUAGES_SUBMENU" description="COM_COMPONENTBUILDER_LANGUAGES_SUBMENU_DESC" />
|
||||
<action name="layout.access" title="COM_COMPONENTBUILDER_LAYOUTS_ACCESS" description="COM_COMPONENTBUILDER_LAYOUTS_ACCESS_DESC" />
|
||||
<action name="layout.batch" title="COM_COMPONENTBUILDER_LAYOUTS_BATCH_USE" description="COM_COMPONENTBUILDER_LAYOUTS_BATCH_USE_DESC" />
|
||||
<action name="layout.dashboard_add" title="COM_COMPONENTBUILDER_LAYOUTS_DASHBOARD_ADD" description="COM_COMPONENTBUILDER_LAYOUTS_DASHBOARD_ADD_DESC" />
|
||||
@ -116,6 +170,11 @@
|
||||
<action name="template.import" title="COM_COMPONENTBUILDER_TEMPLATES_IMPORT" description="COM_COMPONENTBUILDER_TEMPLATES_IMPORT_DESC" />
|
||||
<action name="template.submenu" title="COM_COMPONENTBUILDER_TEMPLATES_SUBMENU" description="COM_COMPONENTBUILDER_TEMPLATES_SUBMENU_DESC" />
|
||||
</section>
|
||||
<section name="joomla_component">
|
||||
<action name="joomla_component.edit.add_license" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_ADD_LICENSE" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_ADD_LICENSE_DESC" />
|
||||
<action name="joomla_component.edit.license_type" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_LICENSE_TYPE" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_LICENSE_TYPE_DESC" />
|
||||
<action name="joomla_component.version" title="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_VERSION" description="COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_EDIT_VERSION_DESC" />
|
||||
</section>
|
||||
<section name="admin_view">
|
||||
<action name="core.edit" title="COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT" description="COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_DESC" />
|
||||
<action name="core.edit.state" title="COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_STATE" description="COM_COMPONENTBUILDER_ADMIN_VIEWS_EDIT_STATE_DESC" />
|
||||
@ -170,6 +229,17 @@
|
||||
<action name="dynamic_get.access" title="COM_COMPONENTBUILDER_DYNAMIC_GETS_ACCESS" description="COM_COMPONENTBUILDER_DYNAMIC_GETS_ACCESS_DESC" />
|
||||
<action name="dynamic_get.version" title="COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_VERSION" description="COM_COMPONENTBUILDER_DYNAMIC_GETS_EDIT_VERSION_DESC" />
|
||||
</section>
|
||||
<section name="custom_code">
|
||||
<action name="custom_code.edit" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_DESC" />
|
||||
<action name="custom_code.edit.own" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_OWN" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_OWN_DESC" />
|
||||
<action name="custom_code.edit.state" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_STATE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_STATE_DESC" />
|
||||
<action name="custom_code.edit.created_by" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_BY" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_BY_DESC" />
|
||||
<action name="custom_code.edit.created" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_DATE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_CREATED_DATE_DESC" />
|
||||
<action name="custom_code.create" title="COM_COMPONENTBUILDER_CUSTOM_CODES_CREATE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_CREATE_DESC" />
|
||||
<action name="custom_code.delete" title="COM_COMPONENTBUILDER_CUSTOM_CODES_DELETE" description="COM_COMPONENTBUILDER_CUSTOM_CODES_DELETE_DESC" />
|
||||
<action name="custom_code.access" title="COM_COMPONENTBUILDER_CUSTOM_CODES_ACCESS" description="COM_COMPONENTBUILDER_CUSTOM_CODES_ACCESS_DESC" />
|
||||
<action name="custom_code.version" title="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION" description="COM_COMPONENTBUILDER_CUSTOM_CODES_EDIT_VERSION_DESC" />
|
||||
</section>
|
||||
<section name="snippet">
|
||||
<action name="core.edit" title="COM_COMPONENTBUILDER_SNIPPETS_EDIT" description="COM_COMPONENTBUILDER_SNIPPETS_EDIT_DESC" />
|
||||
<action name="core.edit.state" title="COM_COMPONENTBUILDER_SNIPPETS_EDIT_STATE" description="COM_COMPONENTBUILDER_SNIPPETS_EDIT_STATE_DESC" />
|
||||
@ -197,6 +267,24 @@
|
||||
<action name="fieldtype.access" title="COM_COMPONENTBUILDER_FIELDTYPES_ACCESS" description="COM_COMPONENTBUILDER_FIELDTYPES_ACCESS_DESC" />
|
||||
<action name="fieldtype.version" title="COM_COMPONENTBUILDER_FIELDTYPES_EDIT_VERSION" description="COM_COMPONENTBUILDER_FIELDTYPES_EDIT_VERSION_DESC" />
|
||||
</section>
|
||||
<section name="language_translation">
|
||||
<action name="language_translation.edit" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_DESC" />
|
||||
<action name="language_translation.edit.own" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_OWN" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_OWN_DESC" />
|
||||
<action name="language_translation.edit.state" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_STATE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_STATE_DESC" />
|
||||
<action name="language_translation.create" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_CREATE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_CREATE_DESC" />
|
||||
<action name="language_translation.delete" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_DELETE" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_DELETE_DESC" />
|
||||
<action name="language_translation.access" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_ACCESS" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_ACCESS_DESC" />
|
||||
<action name="language_translation.version" title="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION" description="COM_COMPONENTBUILDER_LANGUAGE_TRANSLATIONS_EDIT_VERSION_DESC" />
|
||||
</section>
|
||||
<section name="language">
|
||||
<action name="language.edit" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_DESC" />
|
||||
<action name="language.edit.own" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT_OWN" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_OWN_DESC" />
|
||||
<action name="language.edit.state" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE_DESC" />
|
||||
<action name="language.create" title="COM_COMPONENTBUILDER_LANGUAGES_CREATE" description="COM_COMPONENTBUILDER_LANGUAGES_CREATE_DESC" />
|
||||
<action name="language.delete" title="COM_COMPONENTBUILDER_LANGUAGES_DELETE" description="COM_COMPONENTBUILDER_LANGUAGES_DELETE_DESC" />
|
||||
<action name="language.access" title="COM_COMPONENTBUILDER_LANGUAGES_ACCESS" description="COM_COMPONENTBUILDER_LANGUAGES_ACCESS_DESC" />
|
||||
<action name="language.version" title="COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION" description="COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION_DESC" />
|
||||
</section>
|
||||
<section name="help_document">
|
||||
<action name="help_document.edit" title="COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT" description="COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_DESC" />
|
||||
<action name="help_document.edit.own" title="COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_OWN" description="COM_COMPONENTBUILDER_HELP_DOCUMENTS_EDIT_OWN_DESC" />
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version 2.5.0
|
||||
@build 21st August, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version @update number 111 of this MVC
|
||||
@build 17th July, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version @update number 111 of this MVC
|
||||
@build 17th July, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
27
admin/assets/css/compiler.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 53 of this MVC
|
||||
@build 5th August, 2017
|
||||
@created 1st February, 2017
|
||||
@package Component Builder
|
||||
@subpackage compiler.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 22 of this MVC
|
||||
@build 17th July, 2017
|
||||
@created 13th August, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_admin_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 22 of this MVC
|
||||
@build 17th July, 2017
|
||||
@created 13th August, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_admin_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
27
admin/assets/css/custom_code.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 82 of this MVC
|
||||
@build 26th April, 2017
|
||||
@created 11th October, 2016
|
||||
@package Component Builder
|
||||
@subpackage custom_code.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
27
admin/assets/css/custom_codes.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 82 of this MVC
|
||||
@build 26th April, 2017
|
||||
@created 11th October, 2016
|
||||
@package Component Builder
|
||||
@subpackage custom_codes.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version 2.5.0
|
||||
@build 21st August, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dashboard.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 84 of this MVC
|
||||
@build 4th May, 2017
|
||||
@created 21st May, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_get.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 84 of this MVC
|
||||
@build 4th May, 2017
|
||||
@created 21st May, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_gets.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version @update number 38 of this MVC
|
||||
@build 28th May, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage field.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version @update number 38 of this MVC
|
||||
@build 28th May, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fields.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version @update number 13 of this MVC
|
||||
@build 13th June, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtype.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@version @update number 13 of this MVC
|
||||
@build 13th June, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtypes.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 6 of this MVC
|
||||
@build 18th October, 2016
|
||||
@created 4th March, 2016
|
||||
@package Component Builder
|
||||
@subpackage help_document.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 6 of this MVC
|
||||
@build 18th October, 2016
|
||||
@created 4th March, 2016
|
||||
@package Component Builder
|
||||
@subpackage help_documents.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
27
admin/assets/css/joomla_component.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 355 of this MVC
|
||||
@build 21st August, 2017
|
||||
@created 6th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage joomla_component.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
27
admin/assets/css/joomla_components.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 355 of this MVC
|
||||
@build 21st August, 2017
|
||||
@created 6th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage joomla_components.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 3 of this MVC
|
||||
@build 3rd April, 2017
|
||||
@created 3rd April, 2017
|
||||
@package Component Builder
|
||||
@subpackage components.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@subpackage language.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
27
admin/assets/css/language_translation.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 39 of this MVC
|
||||
@build 7th April, 2017
|
||||
@created 3rd April, 2017
|
||||
@package Component Builder
|
||||
@subpackage language_translation.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
27
admin/assets/css/language_translations.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 39 of this MVC
|
||||
@build 7th April, 2017
|
||||
@created 3rd April, 2017
|
||||
@package Component Builder
|
||||
@subpackage language_translations.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
27
admin/assets/css/languages.css
Normal file
@ -0,0 +1,27 @@
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version @update number 3 of this MVC
|
||||
@build 3rd April, 2017
|
||||
@created 3rd April, 2017
|
||||
@package Component Builder
|
||||
@subpackage languages.css
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 77 of this MVC
|
||||
@build 30th May, 2017
|
||||
@created 18th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage layout.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 77 of this MVC
|
||||
@build 30th May, 2017
|
||||
@created 18th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage layouts.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 51 of this MVC
|
||||
@build 17th July, 2017
|
||||
@created 29th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 51 of this MVC
|
||||
@build 17th July, 2017
|
||||
@created 29th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 16 of this MVC
|
||||
@build 20th October, 2016
|
||||
@created 19th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage snippet.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 16 of this MVC
|
||||
@build 20th October, 2016
|
||||
@created 19th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage snippets.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 40 of this MVC
|
||||
@build 1st April, 2017
|
||||
@created 26th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage template.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.2.3
|
||||
@build 22nd November, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 40 of this MVC
|
||||
@build 1st April, 2017
|
||||
@created 26th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage templates.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@author Llewellyn van der Merwe <http://vdm.bz/component-builder>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB |
BIN
admin/assets/images/icons/custom_codes.png
Normal file
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
BIN
admin/assets/images/icons/language_translations.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
admin/assets/images/vdm-component.jpg
Normal file
After Width: | Height: | Size: 52 KiB |
@ -52,7 +52,10 @@ class ###Component###View###Component### extends JViewLegacy
|
||||
// Assign data to the view
|
||||
$this->icons = $this->get('Icons');
|
||||
$this->contributors = ###Component###Helper::getContributors();###DASH_GET_CUSTOM_DATA###
|
||||
|
||||
|
||||
// get the manifest details of the component
|
||||
$this->manifest = ###Component###Helper::manifest();
|
||||
|
||||
// Set the toolbar
|
||||
$this->addToolBar();
|
||||
|
||||
@ -87,15 +90,19 @@ class ###Component###View###Component### extends JViewLegacy
|
||||
/**
|
||||
* Method to set up the document properties
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setDocument()
|
||||
{
|
||||
$document = JFactory::getDocument();
|
||||
|
||||
|
||||
// add dashboard style sheets
|
||||
$document->addStyleSheet(JURI::root() . "administrator/components/com_###component###/assets/css/dashboard.css");
|
||||
|
||||
|
||||
// set page title
|
||||
$document->setTitle(JText::_('COM_###COMPONENT###_DASHBOARD'));
|
||||
|
||||
// add manifest to page JavaScript
|
||||
$document->addScriptDeclaration("var manifest = jQuery.parseJSON('" . json_encode($this->manifest) . "');", "text/javascript");
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ defined('_JEXEC') or die('Restricted access');
|
||||
* ###Component### component helper.
|
||||
*/
|
||||
abstract class ###Component###Helper
|
||||
{###ADMIN_GLOBAL_EVENT_HELPER### ###CUSTOM_HELPER_SCRIPT###
|
||||
{###ADMIN_GLOBAL_EVENT_HELPER### ###CUSTOM_HELPER_SCRIPT### ###BOTH_CUSTOM_HELPER_SCRIPT###
|
||||
/**
|
||||
* Load the Component xml manifest.
|
||||
**/
|
||||
@ -146,13 +146,25 @@ abstract class ###Component###Helper
|
||||
|
||||
if (self::checkArray($where))
|
||||
{
|
||||
// prep main <-- why? well if $main='' is empty then $table can be categories or users
|
||||
if (self::checkString($main))
|
||||
{
|
||||
$main = '_'.ltrim($main, '_');
|
||||
}
|
||||
// Get a db connection.
|
||||
$db = JFactory::getDbo();
|
||||
// Create a new query object.
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query->select($db->quoteName(array($what)));
|
||||
$query->from($db->quoteName('#__'.$main.'_'.$table));
|
||||
if (empty($table))
|
||||
{
|
||||
$query->from($db->quoteName('#__'.$main));
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->from($db->quoteName('#_'.$main.'_'.$table));
|
||||
}
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' (' . implode(',',$where) . ')');
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@ -265,7 +277,7 @@ abstract class ###Component###Helper
|
||||
{
|
||||
// The record has been set. Check the record permissions.
|
||||
$permission = $user->authorise($action->name, 'com_###component###.'.$view.'.' . (int) $record->id);
|
||||
if (!$permission && !is_null($permission))
|
||||
if (!$permission) // TODO removed && !is_null($permission)
|
||||
{
|
||||
if ($action->name == 'core.edit' || $action->name == $view.'.edit')
|
||||
{
|
||||
@ -435,12 +447,20 @@ abstract class ###Component###Helper
|
||||
**/
|
||||
public static function getModel($name, $path = JPATH_COMPONENT_ADMINISTRATOR, $component = '###component###')
|
||||
{
|
||||
// load some joomla helpers
|
||||
JLoader::import('joomla.application.component.model');
|
||||
// load the model file
|
||||
JLoader::import( $name, $path . '/models' );
|
||||
// return instance
|
||||
return JModelLegacy::getInstance( $name, $component.'Model' );
|
||||
JModelLegacy::addIncludePath( $path . '/models' );
|
||||
// get instance
|
||||
$model = JModelLegacy::getInstance( $name, $component.'Model' );
|
||||
// if model not found
|
||||
if ($model == false)
|
||||
{
|
||||
// build class name
|
||||
$class = $prefix.$name;
|
||||
// initilize the model
|
||||
new $class();
|
||||
$model = JModelLegacy::getInstance($name, $prefix);
|
||||
}
|
||||
return $model;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -600,10 +620,22 @@ abstract class ###Component###Helper
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function checkArray($array)
|
||||
public static function checkArray($array, $removeEmptyString = false)
|
||||
{
|
||||
if (isset($array) && is_array($array) && count($array) > 0)
|
||||
{
|
||||
// also make sure the empty strings are removed
|
||||
if ($removeEmptyString)
|
||||
{
|
||||
foreach ($array as $key => $string)
|
||||
{
|
||||
if (empty($string))
|
||||
{
|
||||
unset($array[$key]);
|
||||
}
|
||||
}
|
||||
return self::checkArray($array, false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -635,10 +667,16 @@ abstract class ###Component###Helper
|
||||
return false;
|
||||
}
|
||||
|
||||
// typo sorry!
|
||||
public static function sorten($string, $length = 40, $addTip = true)
|
||||
{
|
||||
return self::shorten($string, $length, $addTip);
|
||||
}
|
||||
|
||||
public static function shorten($string, $length = 40, $addTip = true)
|
||||
{
|
||||
if (self::checkString($string))
|
||||
{
|
||||
{
|
||||
$initial = strlen($string);
|
||||
$words = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE);
|
||||
$words_count = count($words);
|
||||
@ -658,7 +696,7 @@ abstract class ###Component###Helper
|
||||
$final = strlen($newString);
|
||||
if ($initial != $final && $addTip)
|
||||
{
|
||||
$title = self::sorten($string, 400 , false);
|
||||
$title = self::shorten($string, 400 , false);
|
||||
return '<span class="hasTip" title="'.$title.'" style="cursor:help">'.trim($newString).'...</span>';
|
||||
}
|
||||
elseif ($initial != $final && !$addTip)
|
||||
@ -669,57 +707,87 @@ abstract class ###Component###Helper
|
||||
return $string;
|
||||
}
|
||||
|
||||
public static function safeString($string, $type = 'L', $spacer = '_')
|
||||
public static function safeString($string, $type = 'L', $spacer = '_', $replaceNumbers = true)
|
||||
{
|
||||
// remove all numbers and replace with english text version (works well only up to a thousand)
|
||||
$string = self::replaceNumbers($string);
|
||||
|
||||
if ($replaceNumbers === true)
|
||||
{
|
||||
// remove all numbers and replace with english text version (works well only up to millions)
|
||||
$string = self::replaceNumbers($string);
|
||||
}
|
||||
// 0nly continue if we have a string
|
||||
if (self::checkString($string))
|
||||
{
|
||||
// remove all other characters
|
||||
$string = trim($string);
|
||||
$string = preg_replace('/'.$spacer.'+/', ' ', $string);
|
||||
$string = preg_replace('/\s+/', ' ', $string);
|
||||
$string = preg_replace("/[^A-Za-z ]/", '', $string);
|
||||
// return a string with all first letter of each word uppercase(no undersocre)
|
||||
if ($type == 'W')
|
||||
{
|
||||
return ucwords(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'w')
|
||||
{
|
||||
return strtolower($string);
|
||||
}
|
||||
elseif ($type == 'Ww')
|
||||
{
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'WW')
|
||||
{
|
||||
return strtoupper($string);
|
||||
}
|
||||
elseif ($type == 'U')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return all upper
|
||||
return strtoupper($string);
|
||||
}
|
||||
elseif ($type == 'F')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return with first caracter to upper
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'L')
|
||||
// create file name without the extention that is safe
|
||||
if ($type === 'filename')
|
||||
{
|
||||
// make sure VDM is not in the string
|
||||
$string = str_replace('VDM', 'vDm', $string);
|
||||
// Remove anything which isn't a word, whitespace, number
|
||||
// or any of the following caracters -_()
|
||||
// If you don't need to handle multi-byte characters
|
||||
// you can use preg_replace rather than mb_ereg_replace
|
||||
// Thanks @Łukasz Rysiak!
|
||||
// $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
|
||||
$string = preg_replace("([^\w\s\d\-_\(\)])", '', $string);
|
||||
// http://stackoverflow.com/a/2021729/1429677
|
||||
return preg_replace('/\s+/', ' ', $string);
|
||||
}
|
||||
// remove all other characters
|
||||
$string = trim($string);
|
||||
$string = preg_replace('/'.$spacer.'+/', ' ', $string);
|
||||
$string = preg_replace('/\s+/', ' ', $string);
|
||||
$string = preg_replace("/[^A-Za-z ]/", '', $string);
|
||||
// select final adaptations
|
||||
if ($type === 'L' || $type === 'strtolower')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// default is to return lower
|
||||
return strtolower($string);
|
||||
}
|
||||
|
||||
elseif ($type === 'W')
|
||||
{
|
||||
// return a string with all first letter of each word uppercase(no undersocre)
|
||||
return ucwords(strtolower($string));
|
||||
}
|
||||
elseif ($type === 'w' || $type === 'word')
|
||||
{
|
||||
// return a string with all lowercase(no undersocre)
|
||||
return strtolower($string);
|
||||
}
|
||||
elseif ($type === 'Ww' || $type === 'Word')
|
||||
{
|
||||
// return a string with first letter of the first word uppercase and all the rest lowercase(no undersocre)
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type === 'WW' || $type === 'WORD')
|
||||
{
|
||||
// return a string with all the uppercase(no undersocre)
|
||||
return strtoupper($string);
|
||||
}
|
||||
elseif ($type === 'U' || $type === 'strtoupper')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return all upper
|
||||
return strtoupper($string);
|
||||
}
|
||||
elseif ($type === 'F' || $type === 'ucfirst')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return with first caracter to upper
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type === 'cA' || $type === 'cAmel' || $type === 'camelcase')
|
||||
{
|
||||
// convert all words to first letter uppercase
|
||||
$string = ucwords(strtolower($string));
|
||||
// remove white space
|
||||
$string = preg_replace('/\s+/', '', $string);
|
||||
// now return first letter lowercase
|
||||
return lcfirst($string);
|
||||
}
|
||||
// return string
|
||||
return $string;
|
||||
}
|
||||
@ -727,15 +795,15 @@ abstract class ###Component###Helper
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function htmlEscape($var, $charset = 'UTF-8', $sorten = false, $length = 40)
|
||||
public static function htmlEscape($var, $charset = 'UTF-8', $shorten = false, $length = 40)
|
||||
{
|
||||
if (self::checkString($var))
|
||||
{
|
||||
$filter = new JFilterInput();
|
||||
$string = $filter->clean(html_entity_decode(htmlentities($var, ENT_COMPAT, $charset)), 'HTML');
|
||||
if ($sorten)
|
||||
if ($shorten)
|
||||
{
|
||||
return self::sorten($string,$length);
|
||||
return self::shorten($string,$length);
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
35
admin/compiler/joomla_3/Helper_category.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
/**
|
||||
* ###Component### Component Category Tree
|
||||
*/
|
||||
###CATEGORY_CLASS_TREES###
|
50
admin/compiler/joomla_3/Helper_category_view.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
/**
|
||||
* ###Component### ###View### Component Category Tree
|
||||
*/
|
||||
class ###Component######Views###Categories extends JCategories
|
||||
{
|
||||
/**
|
||||
* Class constructor
|
||||
*
|
||||
* @param array $options Array of options
|
||||
*
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
$options['table'] = '#__###component###_###view###';
|
||||
$options['extension'] = 'com_###component###.###views###';
|
||||
|
||||
parent::__construct($options);
|
||||
}
|
||||
}
|
@ -114,6 +114,8 @@ abstract class ###Component###Email
|
||||
$sendmail = $globalConf->get('sendmail');
|
||||
$mailfrom = $globalConf->get('mailfrom');
|
||||
$fromname = $globalConf->get('fromname');
|
||||
$replyto = $globalConf->get('replyto');
|
||||
$replytoname = $globalConf->get('replytoname');
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -126,15 +128,15 @@ abstract class ###Component###Email
|
||||
$sendmail = $conf->get('sendmail');
|
||||
$mailfrom = $conf->get('mailfrom');
|
||||
$fromname = $conf->get('fromname');
|
||||
$mailreply = $conf->get('mailreply');
|
||||
$replyname = $conf->get('replyname');
|
||||
$replyto = $conf->get('replyto');
|
||||
$replytoname = $conf->get('replytoname');
|
||||
}
|
||||
|
||||
// set the global reply-to
|
||||
if ($mailreply && $fromname)
|
||||
{
|
||||
$mail->ClearReplyTos();
|
||||
$mail->addReplyTo( array( $mailreply, $replyname ) );
|
||||
}
|
||||
// set the global reply-to if found
|
||||
if ($replyto && $replytoname)
|
||||
{
|
||||
$mail->ClearReplyTos();
|
||||
$mail->addReplyTo( array( $replyto, $replytoname ) );
|
||||
}
|
||||
|
||||
// Set global sender
|
||||
@ -276,4 +278,74 @@ abstract class ###Component###Email
|
||||
|
||||
return $sendmail;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set html text (in a row) and subject (as title) to a email table.
|
||||
* do not use <p> instead use <br />
|
||||
* in your html that you pass to this method
|
||||
* since it is a table row it does not
|
||||
* work well with paragraphs
|
||||
*
|
||||
* @return string on success
|
||||
*
|
||||
*/
|
||||
public static function setTableBody($html, $subject)
|
||||
{
|
||||
$body = array();
|
||||
$body[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
|
||||
$body[] = "<html xmlns=\"http://www.w3.org/1999/xhtml\">";
|
||||
$body[] = "<head>";
|
||||
$body[] = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
|
||||
$body[] = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>";
|
||||
$body[] = "<title>".$subject."</title>";
|
||||
$body[] = "<style type=\"text/css\">";
|
||||
$body[] = "#outlook a {padding:0;}";
|
||||
$body[] = ".ExternalClass {width:100%;}";
|
||||
$body[] = ".ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} ";
|
||||
$body[] = "p {margin: 0; padding: 0; font-size: 0px; line-height: 0px;} ";
|
||||
$body[] = "table td {border-collapse: collapse;}";
|
||||
$body[] = "table {border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; }";
|
||||
$body[] = "img {display: block; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}";
|
||||
$body[] = "a img {border: none;}";
|
||||
$body[] = "a {text-decoration: none; color: #000001;}";
|
||||
$body[] = "a.phone {text-decoration: none; color: #000001 !important; pointer-events: auto; cursor: default;}";
|
||||
$body[] = "span {font-size: 13px; line-height: 17px; font-family: monospace; color: #000001;}";
|
||||
$body[] = "</style>";
|
||||
$body[] = "<!--[if gte mso 9]>";
|
||||
$body[] = "<style>";
|
||||
$body[] = "/* Target Outlook 2007 and 2010 */";
|
||||
$body[] = "</style>";
|
||||
$body[] = "<![endif]-->";
|
||||
$body[] = "</head>";
|
||||
$body[] = "<body style=\"width:100%; margin:0; padding:0; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;\">";
|
||||
$body[] = "\n<!-- body wrapper -->";
|
||||
$body[] = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"margin:0; padding:0; width:100%; line-height: 100% !important;\">";
|
||||
$body[] = "<tr>";
|
||||
$body[] = "<td valign=\"top\">";
|
||||
$body[] = "<!-- edge wrapper -->";
|
||||
$body[] = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"center\" width=\"800\" >";
|
||||
$body[] = "<tr>";
|
||||
$body[] = "<td valign=\"top\">";
|
||||
$body[] = "<!-- content wrapper -->";
|
||||
$body[] = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" align=\"center\" width=\"780\">";
|
||||
$body[] = "<tr>";
|
||||
$body[] = "<td valign=\"top\" style=\"vertical-align: top;\">";
|
||||
$body[] = $html;
|
||||
$body[] = "</td>";
|
||||
$body[] = "</tr>";
|
||||
$body[] = "</table>";
|
||||
$body[] = "<!-- / content wrapper -->";
|
||||
$body[] = "</td>";
|
||||
$body[] = "</tr>";
|
||||
$body[] = "</table>";
|
||||
$body[] = "<!-- / edge wrapper -->";
|
||||
$body[] = "</td>";
|
||||
$body[] = "</tr>";
|
||||
$body[] = "</table>";
|
||||
$body[] = "<!-- / page wrapper -->";
|
||||
$body[] = "</body>";
|
||||
$body[] = "</html>";
|
||||
|
||||
return implode("\n", $body);
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ defined('_JEXEC') or die('Restricted access');
|
||||
* ###Component### component helper
|
||||
*/
|
||||
abstract class ###Component###Helper
|
||||
{###SITE_GLOBAL_EVENT_HELPER### ###SITE_CUSTOM_HELPER_SCRIPT###
|
||||
{###SITE_GLOBAL_EVENT_HELPER### ###SITE_CUSTOM_HELPER_SCRIPT### ###BOTH_CUSTOM_HELPER_SCRIPT###
|
||||
|
||||
public static function jsonToString($value, $sperator = ", ", $table = null)
|
||||
{
|
||||
@ -118,12 +118,23 @@ abstract class ###Component###Helper
|
||||
**/
|
||||
public static function getModel($name, $path = JPATH_COMPONENT_SITE, $component = '###component###')
|
||||
{
|
||||
// load some joomla helpers
|
||||
JLoader::import('joomla.application.component.model');
|
||||
// full path
|
||||
$fullPath = $path . '/models';
|
||||
// load the model file
|
||||
JLoader::import( $name, $path . '/models' );
|
||||
// return instance
|
||||
return JModelLegacy::getInstance( $name, $component.'Model' );
|
||||
JModelLegacy::addIncludePath($fullPath);
|
||||
// get instance
|
||||
$model = JModelLegacy::getInstance( $name, $component.'Model' );
|
||||
// if model not found
|
||||
if ($model == false)
|
||||
{
|
||||
require_once $fullPath.'/'.strtolower($name).'.php';
|
||||
// build class name
|
||||
$class = $prefix.$name;
|
||||
// initialize the model
|
||||
new $class();
|
||||
$model = JModelLegacy::getInstance($name, $prefix);
|
||||
}
|
||||
return $model;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -320,13 +331,25 @@ abstract class ###Component###Helper
|
||||
|
||||
if (self::checkArray($where))
|
||||
{
|
||||
// prep main <-- why? well if $main='' is empty then $table can be categories or users
|
||||
if (self::checkString($main))
|
||||
{
|
||||
$main = '_'.ltrim($main, '_');
|
||||
}
|
||||
// Get a db connection.
|
||||
$db = JFactory::getDbo();
|
||||
// Create a new query object.
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query->select($db->quoteName(array($what)));
|
||||
$query->from($db->quoteName('#__'.$main.'_'.$table));
|
||||
if (empty($table))
|
||||
{
|
||||
$query->from($db->quoteName('#__'.$main));
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->from($db->quoteName('#_'.$main.'_'.$table));
|
||||
}
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' (' . implode(',',$where) . ')');
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@ -408,7 +431,7 @@ abstract class ###Component###Helper
|
||||
{
|
||||
// The record has been set. Check the record permissions.
|
||||
$permission = $user->authorise($action->name, 'com_###component###.'.$view.'.' . (int) $record->id);
|
||||
if (!$permission && !is_null($permission))
|
||||
if (!$permission) // TODO removed && !is_null($permission)
|
||||
{
|
||||
if ($action->name == 'core.edit' || $action->name == $view.'.edit')
|
||||
{
|
||||
@ -592,10 +615,22 @@ abstract class ###Component###Helper
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function checkArray($array)
|
||||
public static function checkArray($array, $removeEmptyString = false)
|
||||
{
|
||||
if (isset($array) && is_array($array) && count($array) > 0)
|
||||
{
|
||||
// also make sure the empty strings are removed
|
||||
if ($removeEmptyString)
|
||||
{
|
||||
foreach ($array as $key => $string)
|
||||
{
|
||||
if (empty($string))
|
||||
{
|
||||
unset($array[$key]);
|
||||
}
|
||||
}
|
||||
return self::checkArray($array, false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -627,7 +662,13 @@ abstract class ###Component###Helper
|
||||
return false;
|
||||
}
|
||||
|
||||
// typo sorry!
|
||||
public static function sorten($string, $length = 40, $addTip = true)
|
||||
{
|
||||
return self::shorten($string, $length, $addTip);
|
||||
}
|
||||
|
||||
public static function shorten($string, $length = 40, $addTip = true)
|
||||
{
|
||||
if (self::checkString($string))
|
||||
{
|
||||
@ -650,7 +691,7 @@ abstract class ###Component###Helper
|
||||
$final = strlen($newString);
|
||||
if ($initial != $final && $addTip)
|
||||
{
|
||||
$title = self::sorten($string, 400 , false);
|
||||
$title = self::shorten($string, 400 , false);
|
||||
return '<span class="hasTip" title="'.$title.'" style="cursor:help">'.trim($newString).'...</span>';
|
||||
}
|
||||
elseif ($initial != $final && !$addTip)
|
||||
@ -661,73 +702,103 @@ abstract class ###Component###Helper
|
||||
return $string;
|
||||
}
|
||||
|
||||
public static function safeString($string, $type = 'L', $spacer = '_')
|
||||
public static function safeString($string, $type = 'L', $spacer = '_', $replaceNumbers = true)
|
||||
{
|
||||
// remove all numbers and replace with english text version (works well only up to a thousand)
|
||||
$string = self::replaceNumbers($string);
|
||||
|
||||
if (self::checkString($string))
|
||||
if ($replaceNumbers === true)
|
||||
{
|
||||
// remove all numbers and replace with english text version (works well only up to millions)
|
||||
$string = self::replaceNumbers($string);
|
||||
}
|
||||
// 0nly continue if we have a string
|
||||
if (self::checkString($string))
|
||||
{
|
||||
// create file name without the extention that is safe
|
||||
if ($type === 'filename')
|
||||
{
|
||||
// make sure VDM is not in the string
|
||||
$string = str_replace('VDM', 'vDm', $string);
|
||||
// Remove anything which isn't a word, whitespace, number
|
||||
// or any of the following caracters -_()
|
||||
// If you don't need to handle multi-byte characters
|
||||
// you can use preg_replace rather than mb_ereg_replace
|
||||
// Thanks @Łukasz Rysiak!
|
||||
// $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
|
||||
$string = preg_replace("([^\w\s\d\-_\(\)])", '', $string);
|
||||
// http://stackoverflow.com/a/2021729/1429677
|
||||
return preg_replace('/\s+/', ' ', $string);
|
||||
}
|
||||
// remove all other characters
|
||||
$string = trim($string);
|
||||
$string = preg_replace('/'.$spacer.'+/', ' ', $string);
|
||||
$string = preg_replace('/\s+/', ' ', $string);
|
||||
$string = preg_replace("/[^A-Za-z ]/", '', $string);
|
||||
// return a string with all first letter of each word uppercase(no undersocre)
|
||||
if ($type == 'W')
|
||||
{
|
||||
return ucwords(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'w')
|
||||
{
|
||||
return strtolower($string);
|
||||
}
|
||||
elseif ($type == 'Ww')
|
||||
{
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'WW')
|
||||
{
|
||||
return strtoupper($string);
|
||||
}
|
||||
elseif ($type == 'U')
|
||||
// select final adaptations
|
||||
if ($type === 'L' || $type === 'strtolower')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// default is to return lower
|
||||
return strtolower($string);
|
||||
}
|
||||
elseif ($type === 'W')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return all upper
|
||||
return strtoupper($string);
|
||||
// return a string with all first letter of each word uppercase(no undersocre)
|
||||
return ucwords(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'F')
|
||||
elseif ($type === 'w' || $type === 'word')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return with first caracter to upper
|
||||
// return a string with all lowercase(no undersocre)
|
||||
return strtolower($string);
|
||||
}
|
||||
elseif ($type === 'Ww' || $type === 'Word')
|
||||
{
|
||||
// return a string with first letter of the first word uppercase and all the rest lowercase(no undersocre)
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type == 'L')
|
||||
elseif ($type === 'WW' || $type === 'WORD')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// default is to return lower
|
||||
return strtolower($string);
|
||||
// return a string with all the uppercase(no undersocre)
|
||||
return strtoupper($string);
|
||||
}
|
||||
|
||||
// return string
|
||||
return $string;
|
||||
}
|
||||
// not a string
|
||||
return '';
|
||||
elseif ($type === 'U' || $type === 'strtoupper')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return all upper
|
||||
return strtoupper($string);
|
||||
}
|
||||
elseif ($type === 'F' || $type === 'ucfirst')
|
||||
{
|
||||
// replace white space with underscore
|
||||
$string = preg_replace('/\s+/', $spacer, $string);
|
||||
// return with first caracter to upper
|
||||
return ucfirst(strtolower($string));
|
||||
}
|
||||
elseif ($type === 'cA' || $type === 'cAmel' || $type === 'camelcase')
|
||||
{
|
||||
// convert all words to first letter uppercase
|
||||
$string = ucwords(strtolower($string));
|
||||
// remove white space
|
||||
$string = preg_replace('/\s+/', '', $string);
|
||||
// now return first letter lowercase
|
||||
return lcfirst($string);
|
||||
}
|
||||
// return string
|
||||
return $string;
|
||||
}
|
||||
// not a string
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function htmlEscape($var, $charset = 'UTF-8', $sorten = false, $length = 40)
|
||||
public static function htmlEscape($var, $charset = 'UTF-8', $shorten = false, $length = 40)
|
||||
{
|
||||
if (self::checkString($var))
|
||||
{
|
||||
$filter = new JFilterInput();
|
||||
$string = $filter->clean(html_entity_decode(htmlentities($var, ENT_COMPAT, $charset)), 'HTML');
|
||||
if ($sorten)
|
||||
if ($shorten)
|
||||
{
|
||||
return self::sorten($string,$length);
|
||||
return self::shorten($string,$length);
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
@ -47,5 +47,5 @@ class ###Component###Controller###Views### extends JControllerAdmin
|
||||
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
|
||||
|
||||
return $model;
|
||||
}###CONTROLLEREXIMPORTMETHOD### ###CUSTOM_ADMIN_DYNAMIC_BUTTONS_CONTROLLER###
|
||||
}###CONTROLLEREXIMPORTMETHOD### ###CUSTOM_ADMIN_DYNAMIC_BUTTONS_CONTROLLER### ###ADMIN_CUSTOM_BUTTONS_CONTROLLER_LIST###
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ class ###Component###Model###View### extends JModelAdmin
|
||||
* @since 1.6
|
||||
*/
|
||||
protected function prepareTable($table)
|
||||
{
|
||||
{###LICENSE_TABLE_LOCKED_CHECK###
|
||||
$date = JFactory::getDate();
|
||||
$user = JFactory::getUser();
|
||||
|
||||
|
@ -67,7 +67,7 @@ class ###Component###Model###View### extends JModelAdmin
|
||||
public function getTable($type = '###view###', $prefix = '###Component###Table', $config = array())
|
||||
{
|
||||
return JTable::getInstance($type, $prefix, $config);
|
||||
}
|
||||
}###ADMIN_CUSTOM_BUTTONS_METHOD###
|
||||
|
||||
/**
|
||||
* Method to get a single record.
|
||||
@ -181,7 +181,7 @@ class ###Component###Model###View### extends JModelAdmin
|
||||
* @since 1.6
|
||||
*/
|
||||
protected function prepareTable($table)
|
||||
{
|
||||
{###LICENSE_TABLE_LOCKED_CHECK###
|
||||
$date = JFactory::getDate();
|
||||
$user = JFactory::getUser();
|
||||
|
||||
@ -248,6 +248,45 @@ class ###Component###Model###View### extends JModelAdmin
|
||||
|
||||
return $data;
|
||||
}###VALIDATIONFIX### ###UNIQUEFIELDS###
|
||||
|
||||
/**
|
||||
* Method to delete one or more records.
|
||||
*
|
||||
* @param array &$pks An array of record primary keys.
|
||||
*
|
||||
* @return boolean True if successful, false if an error occurs.
|
||||
*
|
||||
* @since 12.2
|
||||
*/
|
||||
public function delete(&$pks)
|
||||
{###JMODELADMIN_BEFORE_DELETE###
|
||||
if (!parent::delete($pks))
|
||||
{
|
||||
return false;
|
||||
}###JMODELADMIN_AFTER_DELETE###
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to change the published state of one or more records.
|
||||
*
|
||||
* @param array &$pks A list of the primary keys to change.
|
||||
* @param integer $value The value of the published state.
|
||||
*
|
||||
* @return boolean True on success.
|
||||
*
|
||||
* @since 12.2
|
||||
*/
|
||||
public function publish(&$pks, $value = 1)
|
||||
{###JMODELADMIN_BEFORE_PUBLISH###
|
||||
if (!parent::publish($pks, $value))
|
||||
{
|
||||
return false;
|
||||
}###JMODELADMIN_AFTER_PUBLISH###
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to perform batch operations on an item or a set of items.
|
||||
|
@ -99,7 +99,7 @@ class ###Component###Model###SView### extends JModelItem
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
$app->enqueueMessage(JText::_('Not authorised!'), 'error');
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
// redirect away if not a correct to cPanel/default view
|
||||
$app->redirect('index.php?option=com_###component###');
|
||||
return false;
|
||||
}
|
||||
|
@ -95,16 +95,7 @@ class ###Component###Model###SView### extends JModelItem
|
||||
*/
|
||||
public function getItem($pk = null)
|
||||
{
|
||||
$this->user = JFactory::getUser();
|
||||
// check if this user has permission to access item
|
||||
if (!$this->user->authorise('site.###sview###.access', 'com_###component###'))
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
$app->enqueueMessage(JText::_('Not authorised!'), 'error');
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
$app->redirect(JRoute::_('index.php?option=com_###component###&view=###SITE_DEFAULT_VIEW###'));
|
||||
return false;
|
||||
}
|
||||
$this->user = JFactory::getUser();###USER_PERMISSION_CHECK_ACCESS###
|
||||
$this->userId = $this->user->get('id');
|
||||
$this->guest = $this->user->get('guest');
|
||||
$this->groups = $this->user->get('groups');
|
||||
|
@ -34,6 +34,11 @@ defined('_JEXEC') or die('Restricted access');
|
||||
*/
|
||||
class ###Component###ModelImport extends JModelLegacy
|
||||
{
|
||||
// set uploading values
|
||||
protected $use_streams = false;
|
||||
protected $allow_unsafe = false;
|
||||
protected $safeFileOptions = array();
|
||||
|
||||
/**
|
||||
* @var object JTable object
|
||||
*/
|
||||
@ -75,10 +80,6 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
// Recall the 'Import from Directory' path.
|
||||
$path = $app->getUserStateFromRequest($this->_context . '.import_directory', 'import_directory', $app->get('tmp_path'));
|
||||
$this->setState('import.directory', $path);
|
||||
// set uploading values
|
||||
$this->use_streams = false;
|
||||
$this->allow_unsafe = false;
|
||||
$this->safeFileOptions = array();
|
||||
parent::populateState();
|
||||
}
|
||||
|
||||
@ -285,21 +286,16 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
}
|
||||
|
||||
// check the extention
|
||||
switch(strtolower(pathinfo($p_dir, PATHINFO_EXTENSION))){
|
||||
case 'xls':
|
||||
case 'ods':
|
||||
case 'csv':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!$this->checkExtension($p_dir))
|
||||
{
|
||||
// set error message
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
$package['packagename'] = null;
|
||||
$package['dir'] = $p_dir;
|
||||
$package['type'] = $type;
|
||||
$package['dir'] = $p_dir;
|
||||
$package['type'] = $type;
|
||||
|
||||
return $package;
|
||||
}
|
||||
@ -357,21 +353,15 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
$archivename = JPath::clean($archivename);
|
||||
|
||||
// check the extention
|
||||
switch(strtolower(pathinfo($archivename, PATHINFO_EXTENSION))){
|
||||
case 'xls':
|
||||
case 'ods':
|
||||
case 'csv':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!$this->checkExtension($archivename))
|
||||
{
|
||||
// Cleanup the import files
|
||||
$this->remove($archivename);
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$config = JFactory::getConfig();
|
||||
$config = JFactory::getConfig();
|
||||
// set Package Name
|
||||
$check['packagename'] = $archivename;
|
||||
|
||||
@ -384,6 +374,28 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
return $check;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the extension
|
||||
*
|
||||
* @param string $file Name of the uploaded file
|
||||
*
|
||||
* @return boolean True on success
|
||||
*
|
||||
*/
|
||||
protected function checkExtension($file)
|
||||
{
|
||||
// check the extention
|
||||
switch(strtolower(pathinfo($file, PATHINFO_EXTENSION)))
|
||||
{
|
||||
case 'xls':
|
||||
case 'ods':
|
||||
case 'csv':
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up temporary uploaded spreadsheet
|
||||
*
|
||||
|
@ -34,6 +34,11 @@ defined('_JEXEC') or die('Restricted access');
|
||||
*/
|
||||
class ###Component###Model###View### extends JModelLegacy
|
||||
{
|
||||
// set uploading values
|
||||
protected $use_streams = false;
|
||||
protected $allow_unsafe = false;
|
||||
protected $safeFileOptions = array();
|
||||
|
||||
/**
|
||||
* @var object JTable object
|
||||
*/
|
||||
@ -75,10 +80,6 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
// Recall the 'Import from Directory' path.
|
||||
$path = $app->getUserStateFromRequest($this->_context . '.import_directory', 'import_directory', $app->get('tmp_path'));
|
||||
$this->setState('import.directory', $path);
|
||||
// set uploading values
|
||||
$this->use_streams = false;
|
||||
$this->allow_unsafe = false;
|
||||
$this->safeFileOptions = array();
|
||||
parent::populateState();
|
||||
}
|
||||
###IMPORT_METHOD_CUSTOM###
|
||||
@ -175,21 +176,16 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
}
|
||||
|
||||
// check the extention
|
||||
switch(strtolower(pathinfo($p_dir, PATHINFO_EXTENSION))){
|
||||
case 'xls':
|
||||
case 'ods':
|
||||
case 'csv':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!$this->checkExtension($p_dir))
|
||||
{
|
||||
// set error message
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
$package['packagename'] = null;
|
||||
$package['dir'] = $p_dir;
|
||||
$package['type'] = $type;
|
||||
$package['dir'] = $p_dir;
|
||||
$package['type'] = $type;
|
||||
|
||||
return $package;
|
||||
}
|
||||
@ -247,21 +243,15 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
$archivename = JPath::clean($archivename);
|
||||
|
||||
// check the extention
|
||||
switch(strtolower(pathinfo($archivename, PATHINFO_EXTENSION))){
|
||||
case 'xls':
|
||||
case 'ods':
|
||||
case 'csv':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!$this->checkExtension($archivename))
|
||||
{
|
||||
// Cleanup the import files
|
||||
$this->remove($archivename);
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$config = JFactory::getConfig();
|
||||
$config = JFactory::getConfig();
|
||||
// set Package Name
|
||||
$check['packagename'] = $archivename;
|
||||
|
||||
@ -273,6 +263,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
|
||||
return $check;
|
||||
}
|
||||
###IMPORT_EXT_METHOD_CUSTOM###
|
||||
|
||||
/**
|
||||
* Clean up temporary uploaded spreadsheet
|
||||
|
@ -47,7 +47,7 @@ class ###Component###Model###Views### extends JModelList
|
||||
}
|
||||
|
||||
parent::__construct($config);
|
||||
}
|
||||
}###ADMIN_CUSTOM_BUTTONS_METHOD_LIST###
|
||||
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
|
@ -77,16 +77,7 @@ class ###Component###Model###SViews### extends JModelList
|
||||
*/
|
||||
public function getItems()
|
||||
{
|
||||
$user = JFactory::getUser();
|
||||
// check if this user has permission to access items
|
||||
if (!$user->authorise('site.###sview###.access', 'com_###component###'))
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
$app->enqueueMessage(JText::_('Not authorised!'), 'error');
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
$app->redirect(JRoute::_('index.php?option=com_###component###&view=###SITE_DEFAULT_VIEW###'));
|
||||
return false;
|
||||
}###LICENSE_LOCKED_CHECK### ###SITE_BEFORE_GET_ITEMS###
|
||||
$user = JFactory::getUser();###USER_PERMISSION_CHECK_ACCESS### ###LICENSE_LOCKED_CHECK### ###SITE_BEFORE_GET_ITEMS###
|
||||
// load parent items
|
||||
$items = parent::getItems();
|
||||
|
||||
|
@ -52,7 +52,8 @@ class ###Component###ViewImport extends JViewLegacy
|
||||
}
|
||||
|
||||
// Check for errors.
|
||||
if (count($errors = $this->get('Errors'))){
|
||||
if (count($errors = $this->get('Errors')))
|
||||
{
|
||||
JError::raiseError(500, implode('<br />', $errors));
|
||||
return false;
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ class ###Component###View###Views### extends JViewLegacy
|
||||
// add the button to the page
|
||||
$dhtml = $layout->render(array('title' => $title));
|
||||
$bar->appendButton('Custom', $dhtml, 'batch');
|
||||
}###CUSTOM_ADMIN_DYNAMIC_BUTTONS###
|
||||
}###CUSTOM_ADMIN_DYNAMIC_BUTTONS### ###ADMIN_CUSTOM_BUTTONS_LIST###
|
||||
|
||||
if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete))
|
||||
{
|
||||
@ -142,7 +142,7 @@ class ###Component###View###Views### extends JViewLegacy
|
||||
{
|
||||
JToolbarHelper::trash('###views###.trash');
|
||||
}###EXPORTBUTTON###
|
||||
}###IMPORTBUTTON###
|
||||
}###ADMIN_CUSTOM_FUNCTION_ONLY_BUTTONS_LIST### ###IMPORTBUTTON###
|
||||
|
||||
// set help url for this view if found
|
||||
$help_url = ###Component###Helper::getHelpUrl('###views###');
|
||||
|
@ -60,8 +60,7 @@
|
||||
</files>
|
||||
|
||||
<languages folder="site">
|
||||
<language tag="en-GB">language/en-GB/en-GB.com_###component###.ini</language>
|
||||
<language tag="en-GB">language/en-GB/en-GB.com_###component###.sys.ini</language>
|
||||
###SITE_LANGUAGES###
|
||||
</languages>
|
||||
|
||||
<administration>
|
||||
@ -86,8 +85,7 @@
|
||||
</files>
|
||||
|
||||
<languages folder="admin">
|
||||
<language tag="en-GB">language/en-GB/en-GB.com_###component###.ini</language>
|
||||
<language tag="en-GB">language/en-GB/en-GB.com_###component###.sys.ini</language>
|
||||
###ADMIN_LANGUAGES###
|
||||
</languages>
|
||||
|
||||
</administration>###UPDATESERVER###
|
||||
|
@ -29,30 +29,27 @@ defined('_JEXEC') or die('Restricted access');
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
$manifest = ###Component###Helper::manifest();
|
||||
JHtml::_('bootstrap.loadCss');
|
||||
|
||||
?>
|
||||
<img alt="<?php echo JText::_('COM_###COMPONENT###'); ?>" src="components/com_###component###/assets/images/component-300.###COMP_IMAGE_TYPE###">
|
||||
<img alt="<?php echo JText::_('COM_###COMPONENT###'); ?>" src="components/com_###component###/assets/images/vdm-component.###COMP_IMAGE_TYPE###">
|
||||
<ul class="list-striped">
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_VERSION'); ?>:</b> <?php echo $manifest->version; ?></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_DATE'); ?>:</b> <?php echo $manifest->creationDate; ?></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_AUTHOR'); ?>:</b> <a href="mailto:<?php echo $manifest->authorEmail; ?>"><?php echo $manifest->author; ?></a></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_WEBSITE'); ?>:</b> <a href="<?php echo $manifest->authorUrl; ?>" target="_blank"><?php echo $manifest->authorUrl; ?></a></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_LICENSE'); ?>:</b> <?php echo $manifest->license; ?></li>
|
||||
<li><b><?php echo $manifest->copyright; ?></b></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_VERSION'); ?>:</b> <?php echo $this->manifest->version; ?> <span class="update-notice"></span></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_DATE'); ?>:</b> <?php echo $this->manifest->creationDate; ?></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_AUTHOR'); ?>:</b> <a href="mailto:<?php echo $this->manifest->authorEmail; ?>"><?php echo $this->manifest->author; ?></a></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_WEBSITE'); ?>:</b> <a href="<?php echo $this->manifest->authorUrl; ?>" target="_blank"><?php echo $this->manifest->authorUrl; ?></a></li>
|
||||
<li><b><?php echo JText::_('COM_###COMPONENT###_LICENSE'); ?>:</b> <?php echo $this->manifest->license; ?></li>
|
||||
<li><b><?php echo $this->manifest->copyright; ?></b></li>
|
||||
</ul>
|
||||
<div class="clearfix"></div>
|
||||
<?php if(###Component###Helper::checkArray($this->contributors)): ?>
|
||||
<?php if(count($this->contributors) > 1): ?>
|
||||
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTORS'); ?></h3>
|
||||
<?php else: ?>
|
||||
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTOR'); ?></h3>
|
||||
<?php endif; ?>
|
||||
<ul class="list-striped">
|
||||
<?php foreach($this->contributors as $contributor): ?>
|
||||
<li><b><?php echo $contributor['title']; ?>:</b> <?php echo $contributor['name']; ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<div class="clearfix"></div>
|
||||
<?php if(count($this->contributors) > 1): ?>
|
||||
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTORS'); ?></h3>
|
||||
<?php else: ?>
|
||||
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTOR'); ?></h3>
|
||||
<?php endif; ?>
|
||||
<ul class="list-striped">
|
||||
<?php foreach($this->contributors as $contributor): ?>
|
||||
<li><b><?php echo $contributor['title']; ?>:</b> <?php echo $contributor['name']; ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<div class="clearfix"></div>
|
||||
<?php endif; ?>
|
@ -29,7 +29,7 @@ defined('_JEXEC') or die('Restricted access');
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
class HeaderCheck
|
||||
class ###component###HeaderCheck
|
||||
{
|
||||
function js_loaded($script_name)
|
||||
{
|
||||
|
88
admin/compiler/joomla_3/headercheck_admin.php
Normal file
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
\ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| |
|
||||
\ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` |
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
class ###component###HeaderCheck
|
||||
{
|
||||
function js_loaded($script_name)
|
||||
{
|
||||
// UIkit check point
|
||||
if (strpos($script_name,'uikit') !== false)
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
$getTemplateName = $app->getTemplate('template')->template;
|
||||
|
||||
if (strpos($getTemplateName,'yoo') !== false)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$document = JFactory::getDocument();
|
||||
$head_data = $document->getHeadData();
|
||||
foreach (array_keys($head_data['scripts']) as $script)
|
||||
{
|
||||
if (stristr($script, $script_name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function css_loaded($script_name)
|
||||
{
|
||||
// UIkit check point
|
||||
if (strpos($script_name,'uikit') !== false)
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
$getTemplateName = $app->getTemplate('template')->template;
|
||||
|
||||
if (strpos($getTemplateName,'yoo') !== false)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$document = JFactory::getDocument();
|
||||
$head_data = $document->getHeadData();
|
||||
|
||||
foreach (array_keys($head_data['styleSheets']) as $script)
|
||||
{
|
||||
if (stristr($script, $script_name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,6 +1,11 @@
|
||||
###INSTALL###
|
||||
|
||||
--
|
||||
-- Always insure this column is large enough for all the access control values.
|
||||
-- Always insure this column rules is large enough for all the access control values.
|
||||
--
|
||||
ALTER TABLE `#__assets` CHANGE `rules` `rules` MEDIUMTEXT NOT NULL COMMENT 'JSON encoded access control.';
|
||||
|
||||
--
|
||||
-- Always insure this column name is large enough for long component and view names.
|
||||
--
|
||||
ALTER TABLE `#__assets` CHANGE `name` `name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'The unique name for the asset.';
|
||||
|
@ -127,16 +127,10 @@ class ###Component###Router extends JComponentRouterBase
|
||||
* @since 3.3
|
||||
*/
|
||||
public function parse(&$segments)
|
||||
{
|
||||
//var_dump($segments);
|
||||
//$app = JFactory::getApplication();
|
||||
//$menu = $app->getMenu();
|
||||
//$item = $menu->getActive();
|
||||
|
||||
{
|
||||
$count = count($segments);
|
||||
$vars = array();
|
||||
|
||||
//var_dump($item->query['view']);
|
||||
|
||||
//Handle View and Identifier
|
||||
switch($segments[0])
|
||||
{###ROUTER_PARSE_SWITCH###
|
||||
@ -145,11 +139,11 @@ class ###Component###Router extends JComponentRouterBase
|
||||
return $vars;
|
||||
}
|
||||
|
||||
protected function getVar($table, $where = null, $whereString = 'user', $what = 'id', $operator = '=', $main = '###component###')
|
||||
protected function getVar($table, $where = null, $whereString = null, $what = null, $category = false, $operator = '=', $main = '###component###')
|
||||
{
|
||||
if(!$where)
|
||||
if(!$where || !$what || !$whereString)
|
||||
{
|
||||
$where = JFactory::getUser()->id;
|
||||
return false;
|
||||
}
|
||||
// Get a db connection.
|
||||
$db = JFactory::getDbo();
|
||||
@ -157,21 +151,44 @@ class ###Component###Router extends JComponentRouterBase
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query->select($db->quoteName(array($what)));
|
||||
if ('categories' == $table || 'category' == $table)
|
||||
if ('categories' == $table || 'category' == $table || $category)
|
||||
{
|
||||
$query->from($db->quoteName('#__categories'));
|
||||
$getTable = '#__categories';
|
||||
$query->from($db->quoteName($getTable));
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->from($db->quoteName('#__'.$main.'_'.$table));
|
||||
// we must check if the table exist (TODO not ideal)
|
||||
$tables = $db->getTableList();
|
||||
$app = JFactory::getApplication();
|
||||
$prefix = $app->get('dbprefix');
|
||||
$check = $prefix.$main.'_'.$table;
|
||||
if (in_array($check, $tables))
|
||||
{
|
||||
$getTable = '#__'.$main.'_'.$table;
|
||||
$query->from($db->quoteName($getTable));
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (is_numeric($where))
|
||||
{
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where);
|
||||
return false;
|
||||
}
|
||||
elseif (is_string($where))
|
||||
elseif ($this->checkString($where))
|
||||
{
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where));
|
||||
// we must first check if this table has the column
|
||||
$columns = $db->getTableColumns($getTable);
|
||||
if (isset($columns[$whereString]))
|
||||
{
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where));
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -185,6 +202,15 @@ class ###Component###Router extends JComponentRouterBase
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function checkString($string)
|
||||
{
|
||||
if (isset($string) && is_string($string) && strlen($string) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function ###Component###BuildRoute(&$query)
|
||||
|
@ -157,24 +157,19 @@
|
||||
"rename": "Helper_site",
|
||||
"type": "file"
|
||||
},
|
||||
"Helper_category.php": {
|
||||
"naam":"Helper_category.php",
|
||||
"path": "c0mp0n3nt/site/helpers",
|
||||
"rename": "new",
|
||||
"newName": "category.php",
|
||||
"type": "file"
|
||||
},
|
||||
"script.php": {
|
||||
"naam":"script.php",
|
||||
"path": "c0mp0n3nt/",
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"en-GB.com_admin.ini": {
|
||||
"naam":"en-GB.com_admin.ini",
|
||||
"path": "c0mp0n3nt/admin/language/en-GB",
|
||||
"rename": "admin",
|
||||
"type": "file"
|
||||
},
|
||||
"en-GB.com_admin.sys.ini": {
|
||||
"naam":"en-GB.com_admin.sys.ini",
|
||||
"path": "c0mp0n3nt/admin/language/en-GB",
|
||||
"rename": "admin",
|
||||
"type": "file"
|
||||
},
|
||||
"install.mysql.utf8.sql": {
|
||||
"naam":"install.mysql.utf8.sql",
|
||||
"path": "c0mp0n3nt/admin/sql",
|
||||
@ -187,6 +182,13 @@
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"headercheck_admin.php": {
|
||||
"naam":"headercheck_admin.php",
|
||||
"path": "c0mp0n3nt/admin/helpers",
|
||||
"rename": "new",
|
||||
"newName": "headercheck.php",
|
||||
"type": "file"
|
||||
},
|
||||
"LICENSE.txt": {
|
||||
"naam":"LICENSE.txt",
|
||||
"path": "c0mp0n3nt/",
|
||||
@ -205,18 +207,6 @@
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"en-GB.com_site.ini": {
|
||||
"naam":"en-GB.com_site.ini",
|
||||
"path": "c0mp0n3nt/site/language/en-GB",
|
||||
"rename": "site",
|
||||
"type": "file"
|
||||
},
|
||||
"en-GB.com_site.sys.ini": {
|
||||
"naam":"en-GB.com_site.sys.ini",
|
||||
"path": "c0mp0n3nt/site/language/en-GB",
|
||||
"rename": "site",
|
||||
"type": "file"
|
||||
},
|
||||
"headercheck.php": {
|
||||
"naam":"headercheck.php",
|
||||
"path": "c0mp0n3nt/site/helpers",
|
||||
@ -670,6 +660,11 @@
|
||||
"rename": "new",
|
||||
"newName": "submitbutton.js",
|
||||
"type": "custom_form"
|
||||
},
|
||||
"Helper_category_view.php": {
|
||||
"path": "c0mp0n3nt/site/helpers",
|
||||
"rename": "Helper_category_view",
|
||||
"type": "category"
|
||||
}
|
||||
},
|
||||
"custom_admin": {
|
||||
|
@ -1,167 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_NoFontException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_InvalidFontFileException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_InvalidCanvasMethodException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* @package WideImage
|
||||
*/
|
||||
class WideImage_Canvas
|
||||
{
|
||||
protected $handle = 0;
|
||||
protected $image = null;
|
||||
protected $font = null;
|
||||
|
||||
/**
|
||||
* Creates a canvas object that writes to the image passed as a parameter
|
||||
*
|
||||
* Shouldn't be used directly, use WideImage_Image::getCanvas() instead.
|
||||
*
|
||||
* @param WideImage_Image $img Image object
|
||||
*/
|
||||
function __construct($img)
|
||||
{
|
||||
$this->handle = $img->getHandle();
|
||||
$this->image = $img;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the active font. Can be an instance of
|
||||
* WideImage_Font_TTF, WideImage_Font_PS, or WideImage_Font_GDF.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param object $font Font object to set for writeText()
|
||||
*/
|
||||
function setFont($font)
|
||||
{
|
||||
$this->font = $font;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and sets the current font
|
||||
*
|
||||
* The supported font types are: TTF/OTF, PS, and GDF.
|
||||
* Font type is detected from the extension. If the $file parameter doesn't have an extension, TTF font is presumed.
|
||||
*
|
||||
* Note: not all parameters are supported by all fonts.
|
||||
*
|
||||
* @param string $file Font file name (string)
|
||||
* @param int $size Font size (supported for TTF/OTF and PS fonts, ignored for GDF)
|
||||
* @param int $color Text color
|
||||
* @param int $bgcolor Background color (supported only for PS font, ignored for TTF and PS)
|
||||
* @return mixed One of the WideImage_Font_* objects
|
||||
*/
|
||||
function useFont($file, $size = 12, $color = 0, $bgcolor = null)
|
||||
{
|
||||
$p = strrpos($file, '.');
|
||||
if ($p === false || $p < strlen($file) - 4)
|
||||
$ext = 'ttf';
|
||||
else
|
||||
$ext = strtolower(substr($file, $p + 1));
|
||||
|
||||
if ($ext == 'ttf' || $ext == 'otf')
|
||||
$font = new WideImage_Font_TTF($file, $size, $color);
|
||||
elseif ($ext == 'ps')
|
||||
$font = new WideImage_Font_PS($file, $size, $color, $bgcolor);
|
||||
elseif ($ext == 'gdf')
|
||||
$font = new WideImage_Font_GDF($file, $color);
|
||||
else
|
||||
throw new WideImage_InvalidFontFileException("'$file' appears to be an invalid font file.");
|
||||
|
||||
$this->setFont($font);
|
||||
return $font;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write text on the image at specified position
|
||||
*
|
||||
* You must set a font with a call to WideImage_Canvas::setFont() prior to writing text to the image.
|
||||
*
|
||||
* Smart coordinates are supported for $x and $y arguments, but currently only for TTF/OTF fonts.
|
||||
*
|
||||
* Example:
|
||||
* <code>
|
||||
* $img = WideImage::load('pic.jpg');
|
||||
* $canvas = $img->getCanvas();
|
||||
* $canvas->useFont('Verdana.ttf', 16, $img->allocateColor(255, 0, 0));
|
||||
* $canvas->writeText('right', 'bottom', 'www.website.com');
|
||||
* </code>
|
||||
*
|
||||
* @param int $x Left
|
||||
* @param int $y Top
|
||||
* @param string $text Text to write
|
||||
* @param int $angle The angle, defaults to 0
|
||||
*/
|
||||
function writeText($x, $y, $text, $angle = 0)
|
||||
{
|
||||
if ($this->font === null)
|
||||
throw new WideImage_NoFontException("Can't write text without a font.");
|
||||
|
||||
$angle = - floatval($angle);
|
||||
if ($angle < 0)
|
||||
$angle = 360 + $angle;
|
||||
$angle = $angle % 360;
|
||||
|
||||
$this->font->writeText($this->image, $x, $y, $text, $angle);
|
||||
}
|
||||
|
||||
/**
|
||||
* A magic method that allows you to call any PHP function that starts with "image".
|
||||
*
|
||||
* This is a shortcut to call custom functions on the image handle.
|
||||
*
|
||||
* Example:
|
||||
* <code>
|
||||
* $img = WideImage::load('pic.jpg');
|
||||
* $canvas = $img->getCanvas();
|
||||
* $canvas->filledRect(10, 10, 20, 30, $img->allocateColor(0, 0, 0));
|
||||
* $canvas->line(60, 80, 30, 100, $img->allocateColor(255, 0, 0));
|
||||
* </code>
|
||||
*/
|
||||
function __call($method, $params)
|
||||
{
|
||||
if (function_exists('image' . $method))
|
||||
{
|
||||
array_unshift($params, $this->handle);
|
||||
call_user_func_array('image' . $method, $params);
|
||||
}
|
||||
else
|
||||
throw new WideImage_InvalidCanvasMethodException("Function doesn't exist: image{$method}.");
|
||||
}
|
||||
}
|
@ -1,208 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internals
|
||||
**/
|
||||
|
||||
|
||||
/**
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_InvalidCoordinateException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* A utility class for smart coordinates
|
||||
*
|
||||
* @package Internals
|
||||
**/
|
||||
class WideImage_Coordinate
|
||||
{
|
||||
static protected $coord_align = array("left", "center", "right", "top", "middle", "bottom");
|
||||
static protected $coord_numeric = array("[0-9]+", "[0-9]+\.[0-9]+", "[0-9]+%", "[0-9]+\.[0-9]+%");
|
||||
|
||||
/**
|
||||
* Parses a numeric or string representation of a corrdinate into a structure
|
||||
*
|
||||
* @param string $coord Smart coordinate
|
||||
* @return array Parsed smart coordinate
|
||||
*/
|
||||
static function parse($c)
|
||||
{
|
||||
$tokens = array();
|
||||
$operators = array('+', '-');
|
||||
|
||||
$flush_operand = false;
|
||||
$flush_operator = false;
|
||||
$current_operand = '';
|
||||
$current_operator = '';
|
||||
$coordinate = strval($c);
|
||||
$expr_len = strlen($coordinate);
|
||||
|
||||
for ($i = 0; $i < $expr_len; $i++)
|
||||
{
|
||||
$char = $coordinate[$i];
|
||||
|
||||
if (in_array($char, $operators))
|
||||
{
|
||||
$flush_operand = true;
|
||||
$flush_operator = true;
|
||||
$current_operator = $char;
|
||||
}
|
||||
else
|
||||
{
|
||||
$current_operand .= $char;
|
||||
if ($i == $expr_len - 1)
|
||||
$flush_operand = true;
|
||||
}
|
||||
|
||||
if ($flush_operand)
|
||||
{
|
||||
if (trim($current_operand) != '')
|
||||
$tokens[] = array('type' => 'operand', 'value' => trim($current_operand));
|
||||
|
||||
$current_operand = '';
|
||||
$flush_operand = false;
|
||||
}
|
||||
|
||||
if ($flush_operator)
|
||||
{
|
||||
$tokens[] = array('type' => 'operator', 'value' => $char);
|
||||
$flush_operator = false;
|
||||
}
|
||||
}
|
||||
return $tokens;
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluates the $coord relatively to $dim
|
||||
*
|
||||
* @param string $coord A numeric value or percent string
|
||||
* @param int $dim Dimension
|
||||
* @param int $sec_dim Secondary dimension (for align)
|
||||
* @return int Calculated value
|
||||
*/
|
||||
static function evaluate($coord, $dim, $sec_dim = null)
|
||||
{
|
||||
$comp_regex = implode('|', self::$coord_align) . '|' . implode('|', self::$coord_numeric);
|
||||
if (preg_match("/^([+-])?({$comp_regex})$/", $coord, $matches))
|
||||
{
|
||||
$sign = intval($matches[1] . "1");
|
||||
$val = $matches[2];
|
||||
if (in_array($val, self::$coord_align))
|
||||
{
|
||||
if ($sec_dim === null)
|
||||
{
|
||||
switch ($val)
|
||||
{
|
||||
case 'left':
|
||||
case 'top':
|
||||
return 0;
|
||||
break;
|
||||
case 'center':
|
||||
case 'middle':
|
||||
return $sign * intval($dim / 2);
|
||||
break;
|
||||
case 'right':
|
||||
case 'bottom':
|
||||
return $sign * $dim;
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch ($val)
|
||||
{
|
||||
case 'left':
|
||||
case 'top':
|
||||
return 0;
|
||||
break;
|
||||
case 'center':
|
||||
case 'middle':
|
||||
return $sign * intval($dim / 2 - $sec_dim / 2);
|
||||
break;
|
||||
case 'right':
|
||||
case 'bottom':
|
||||
return $sign * ($dim - $sec_dim);
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (substr($val, -1) === '%')
|
||||
return intval(round($sign * $dim * floatval(str_replace('%', '', $val)) / 100));
|
||||
else
|
||||
return $sign * intval(round($val));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates and fixes a smart coordinate into a numeric value
|
||||
*
|
||||
* @param mixed $value Smart coordinate, relative to $dim
|
||||
* @param int $dim Coordinate to which $value is relative
|
||||
* @param int $sec_dim Secondary dimension (for align)
|
||||
* @return int Calculated value
|
||||
*/
|
||||
static function fix($value, $dim, $sec_dim = null)
|
||||
{
|
||||
$coord_tokens = self::parse($value);
|
||||
|
||||
if (count($coord_tokens) == 0 || $coord_tokens[count($coord_tokens) - 1]['type'] != 'operand')
|
||||
throw new WideImage_InvalidCoordinateException("Couldn't parse coordinate '$value' properly.");
|
||||
|
||||
$value = 0;
|
||||
$operation = 1;
|
||||
foreach ($coord_tokens as $token)
|
||||
{
|
||||
if ($token['type'] == 'operand')
|
||||
{
|
||||
$operand_value = self::evaluate($token['value'], $dim, $sec_dim);
|
||||
if ($operation == 1)
|
||||
$value = $value + $operand_value;
|
||||
elseif ($operation == -1)
|
||||
$value = $value - $operand_value;
|
||||
else
|
||||
throw new WideImage_InvalidCoordinateException("Invalid coordinate syntax.");
|
||||
|
||||
$operation = 0;
|
||||
}
|
||||
elseif ($token['type'] == 'operator')
|
||||
{
|
||||
if ($token['value'] == '-')
|
||||
{
|
||||
if ($operation == 0)
|
||||
$operation = -1;
|
||||
else
|
||||
$operation = $operation * -1;
|
||||
}
|
||||
elseif ($token['value'] == '+')
|
||||
{
|
||||
if ($operation == 0)
|
||||
$operation = '1';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* Base Exception class
|
||||
*
|
||||
* @package Exceptions
|
||||
**/
|
||||
class WideImage_Exception extends RuntimeException {}
|
||||
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* GDF font support class
|
||||
*
|
||||
* @package WideImage
|
||||
*/
|
||||
class WideImage_Font_GDF
|
||||
{
|
||||
protected $font;
|
||||
protected $color;
|
||||
|
||||
function __construct($face, $color)
|
||||
{
|
||||
if (is_int($face) && $face >= 1 && $face <= 5)
|
||||
$this->font = $face;
|
||||
else
|
||||
$this->font = imageloadfont($face);
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
function writeText($image, $x, $y, $text)
|
||||
{
|
||||
imagestring($image->getHandle(), $this->font, $x, $y, $text, $this->color);
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* PS font support class
|
||||
*
|
||||
* @package WideImage
|
||||
*/
|
||||
class WideImage_Font_PS
|
||||
{
|
||||
public $size;
|
||||
public $color;
|
||||
public $handle;
|
||||
|
||||
function __construct($file, $size, $color, $bgcolor = null)
|
||||
{
|
||||
$this->handle = imagepsloadfont($file);
|
||||
$this->size = $size;
|
||||
$this->color = $color;
|
||||
if ($bgcolor === null)
|
||||
$this->bgcolor = $color;
|
||||
else
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
function writeText($image, $x, $y, $text, $angle = 0)
|
||||
{
|
||||
if ($image->isTrueColor())
|
||||
$image->alphaBlending(true);
|
||||
|
||||
imagepstext($image->getHandle(), $text, $this->handle, $this->size, $this->color, $this->bgcolor, $x, $y, 0, 0, $angle, 4);
|
||||
}
|
||||
|
||||
function __destruct()
|
||||
{
|
||||
imagepsfreefont($this->handle);
|
||||
$this->handle = null;
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* TTF font support class
|
||||
*
|
||||
* @package WideImage
|
||||
*/
|
||||
class WideImage_Font_TTF
|
||||
{
|
||||
public $face;
|
||||
public $size;
|
||||
public $color;
|
||||
|
||||
function __construct($face, $size, $color)
|
||||
{
|
||||
$this->face = $face;
|
||||
$this->size = $size;
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes text onto an image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param mixed $x smart coordinate
|
||||
* @param mixed $y smart coordinate
|
||||
* @param string $text
|
||||
* @param int $angle Angle in degrees clockwise
|
||||
*/
|
||||
function writeText($image, $x, $y, $text, $angle = 0)
|
||||
{
|
||||
if ($image->isTrueColor())
|
||||
$image->alphaBlending(true);
|
||||
|
||||
$box = imageftbbox($this->size, $angle, $this->face, $text);
|
||||
$obox = array(
|
||||
'left' => min($box[0], $box[2], $box[4], $box[6]),
|
||||
'top' => min($box[1], $box[3], $box[5], $box[7]),
|
||||
'right' => max($box[0], $box[2], $box[4], $box[6]) - 1,
|
||||
'bottom' => max($box[1], $box[3], $box[5], $box[7]) - 1
|
||||
);
|
||||
$obox['width'] = abs($obox['left']) + abs($obox['right']);
|
||||
$obox['height'] = abs($obox['top']) + abs($obox['bottom']);
|
||||
|
||||
$x = WideImage_Coordinate::fix($x, $image->getWidth(), $obox['width']);
|
||||
$y = WideImage_Coordinate::fix($y, $image->getHeight(), $obox['height']);
|
||||
|
||||
$fixed_x = $x - $obox['left'];
|
||||
$fixed_y = $y - $obox['top'];
|
||||
|
||||
imagettftext($image->getHandle(), $this->size, $angle, $fixed_x, $fixed_y, $this->color, $this->face, $text);
|
||||
}
|
||||
}
|
@ -1,964 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* Thrown when an invalid dimension is passed for some operations
|
||||
*
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_InvalidImageDimensionException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* Thrown when an image can't be saved (returns false by the mapper)
|
||||
*
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_UnknownErrorWhileMappingException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* Base class for images
|
||||
*
|
||||
* @package WideImage
|
||||
*/
|
||||
abstract class WideImage_Image
|
||||
{
|
||||
/**
|
||||
* Holds the image resource
|
||||
* @var resource
|
||||
*/
|
||||
protected $handle = null;
|
||||
|
||||
/**
|
||||
* Flag that determines if WideImage should call imagedestroy() upon object destruction
|
||||
* @var bool
|
||||
*/
|
||||
protected $handleReleased = false;
|
||||
|
||||
/**
|
||||
* Canvas object
|
||||
* @var WideImage_Canvas
|
||||
*/
|
||||
protected $canvas = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $sdata = null;
|
||||
|
||||
/**
|
||||
* The base class constructor
|
||||
*
|
||||
* @param resource $handle Image handle (GD2 resource)
|
||||
*/
|
||||
function __construct($handle)
|
||||
{
|
||||
WideImage::assertValidImageHandle($handle);
|
||||
$this->handle = $handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup
|
||||
*
|
||||
* Destroys the handle via WideImage_Image::destroy() when called by the GC.
|
||||
*/
|
||||
function __destruct()
|
||||
{
|
||||
$this->destroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method destroy the image handle, and releases the image resource.
|
||||
*
|
||||
* After this is called, the object doesn't hold a valid image any more.
|
||||
* No operation should be called after that.
|
||||
*/
|
||||
function destroy()
|
||||
{
|
||||
if ($this->isValid() && !$this->handleReleased)
|
||||
imagedestroy($this->handle);
|
||||
|
||||
$this->handle = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the GD image resource
|
||||
*
|
||||
* @return resource GD image resource
|
||||
*/
|
||||
function getHandle()
|
||||
{
|
||||
return $this->handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool True, if the image object holds a valid GD image, false otherwise
|
||||
*/
|
||||
function isValid()
|
||||
{
|
||||
return WideImage::isValidImageHandle($this->handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Releases the handle
|
||||
*/
|
||||
function releaseHandle()
|
||||
{
|
||||
$this->handleReleased = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves an image to a file
|
||||
*
|
||||
* The file type is recognized from the $uri. If you save to a GIF8, truecolor images
|
||||
* are automatically converted to palette.
|
||||
*
|
||||
* This method supports additional parameters: quality (for jpeg images) and
|
||||
* compression quality and filters (for png images). See http://www.php.net/imagejpeg and
|
||||
* http://www.php.net/imagepng for details.
|
||||
*
|
||||
* Examples:
|
||||
* <code>
|
||||
* // save to a GIF
|
||||
* $image->saveToFile('image.gif');
|
||||
*
|
||||
* // save to a PNG with compression=7 and no filters
|
||||
* $image->saveToFile('image.png', 7, PNG_NO_FILTER);
|
||||
*
|
||||
* // save to a JPEG with quality=80
|
||||
* $image->saveToFile('image.jpg', 80);
|
||||
*
|
||||
* // save to a JPEG with default quality=100
|
||||
* $image->saveToFile('image.jpg');
|
||||
* </code>
|
||||
*
|
||||
* @param string $uri File location
|
||||
*/
|
||||
function saveToFile($uri)
|
||||
{
|
||||
$mapper = WideImage_MapperFactory::selectMapper($uri, null);
|
||||
$args = func_get_args();
|
||||
array_unshift($args, $this->getHandle());
|
||||
$res = call_user_func_array(array($mapper, 'save'), $args);
|
||||
if (!$res)
|
||||
throw new WideImage_UnknownErrorWhileMappingException(get_class($mapper) . " returned an invalid result while saving to $uri");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns binary string with image data in format specified by $format
|
||||
*
|
||||
* Additional parameters may be passed to the function. See WideImage_Image::saveToFile() for more details.
|
||||
*
|
||||
* @param string $format The format of the image
|
||||
* @return string The binary image data in specified format
|
||||
*/
|
||||
function asString($format)
|
||||
{
|
||||
ob_start();
|
||||
$args = func_get_args();
|
||||
$args[0] = null;
|
||||
array_unshift($args, $this->getHandle());
|
||||
|
||||
$mapper = WideImage_MapperFactory::selectMapper(null, $format);
|
||||
$res = call_user_func_array(array($mapper, 'save'), $args);
|
||||
if (!$res)
|
||||
throw new WideImage_UnknownErrorWhileMappingException(get_class($mapper) . " returned an invalid result while writing the image data");
|
||||
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Output a header to browser.
|
||||
*
|
||||
* @param $name Name of the header
|
||||
* @param $data Data
|
||||
*/
|
||||
protected function writeHeader($name, $data)
|
||||
{
|
||||
header($name . ": " . $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the image to browser
|
||||
*
|
||||
* Sets headers Content-length and Content-type, and echoes the image in the specified format.
|
||||
* All other headers (such as Content-disposition) must be added manually.
|
||||
*
|
||||
* Example:
|
||||
* <code>
|
||||
* WideImage::load('image1.png')->resize(100, 100)->output('gif');
|
||||
* </code>
|
||||
*
|
||||
* @param string $format Image format
|
||||
*/
|
||||
function output($format)
|
||||
{
|
||||
$args = func_get_args();
|
||||
$data = call_user_func_array(array($this, 'asString'), $args);
|
||||
|
||||
$this->writeHeader('Content-length', strlen($data));
|
||||
$this->writeHeader('Content-type', WideImage_MapperFactory::mimeType($format));
|
||||
echo $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int Image width
|
||||
*/
|
||||
function getWidth()
|
||||
{
|
||||
return imagesx($this->handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int Image height
|
||||
*/
|
||||
function getHeight()
|
||||
{
|
||||
return imagesy($this->handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate a color by RGB values.
|
||||
*
|
||||
* @param mixed $R Red-component value or an RGB array (with red, green, blue keys)
|
||||
* @param int $G If $R is int, this is the green component
|
||||
* @param int $B If $R is int, this is the blue component
|
||||
* @return int Image color index
|
||||
*/
|
||||
function allocateColor($R, $G = null, $B = null)
|
||||
{
|
||||
if (is_array($R))
|
||||
return imageColorAllocate($this->handle, $R['red'], $R['green'], $R['blue']);
|
||||
else
|
||||
return imageColorAllocate($this->handle, $R, $G, $B);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool True if the image is transparent, false otherwise
|
||||
*/
|
||||
function isTransparent()
|
||||
{
|
||||
return $this->getTransparentColor() >= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int Transparent color index
|
||||
*/
|
||||
function getTransparentColor()
|
||||
{
|
||||
return imagecolortransparent($this->handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current transparent color index. Only makes sense for palette images (8-bit).
|
||||
*
|
||||
* @param int $color Transparent color index
|
||||
*/
|
||||
function setTransparentColor($color)
|
||||
{
|
||||
return imagecolortransparent($this->handle, $color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a RGB array of the transparent color or null if none.
|
||||
*
|
||||
* @return mixed Transparent color RGBA array
|
||||
*/
|
||||
function getTransparentColorRGB()
|
||||
{
|
||||
$total = imagecolorstotal($this->handle);
|
||||
$tc = $this->getTransparentColor();
|
||||
|
||||
if ($tc >= $total && $total > 0)
|
||||
return null;
|
||||
else
|
||||
return $this->getColorRGB($tc);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a RGBA array for pixel at $x, $y
|
||||
*
|
||||
* @param int $x
|
||||
* @param int $y
|
||||
* @return array RGB array
|
||||
*/
|
||||
function getRGBAt($x, $y)
|
||||
{
|
||||
return $this->getColorRGB($this->getColorAt($x, $y));
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a pixel at the designated coordinates
|
||||
*
|
||||
* Takes an associative array of colours and uses getExactColor() to
|
||||
* retrieve the exact index color to write to the image with.
|
||||
*
|
||||
* @param int $x
|
||||
* @param int $y
|
||||
* @param array $color
|
||||
*/
|
||||
function setRGBAt($x, $y, $color)
|
||||
{
|
||||
$this->setColorAt($x, $y, $this->getExactColor($color));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a color's RGB
|
||||
*
|
||||
* @param int $colorIndex Color index
|
||||
* @return mixed RGBA array for a color with index $colorIndex
|
||||
*/
|
||||
function getColorRGB($colorIndex)
|
||||
{
|
||||
return imageColorsForIndex($this->handle, $colorIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an index of the color at $x, $y
|
||||
*
|
||||
* @param int $x
|
||||
* @param int $y
|
||||
* @return int Color index for a pixel at $x, $y
|
||||
*/
|
||||
function getColorAt($x, $y)
|
||||
{
|
||||
return imagecolorat($this->handle, $x, $y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the color index $color to a pixel at $x, $y
|
||||
*
|
||||
* @param int $x
|
||||
* @param int $y
|
||||
* @param int $color Color index
|
||||
*/
|
||||
function setColorAt($x, $y, $color)
|
||||
{
|
||||
return imagesetpixel($this->handle, $x, $y, $color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns closest color index that matches the given RGB value. Uses
|
||||
* PHP's imagecolorclosest()
|
||||
*
|
||||
* @param mixed $R Red or RGBA array
|
||||
* @param int $G Green component (or null if $R is an RGB array)
|
||||
* @param int $B Blue component (or null if $R is an RGB array)
|
||||
* @return int Color index
|
||||
*/
|
||||
function getClosestColor($R, $G = null, $B = null)
|
||||
{
|
||||
if (is_array($R))
|
||||
return imagecolorclosest($this->handle, $R['red'], $R['green'], $R['blue']);
|
||||
else
|
||||
return imagecolorclosest($this->handle, $R, $G, $B);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the color index that exactly matches the given RGB value. Uses
|
||||
* PHP's imagecolorexact()
|
||||
*
|
||||
* @param mixed $R Red or RGBA array
|
||||
* @param int $G Green component (or null if $R is an RGB array)
|
||||
* @param int $B Blue component (or null if $R is an RGB array)
|
||||
* @return int Color index
|
||||
*/
|
||||
function getExactColor($R, $G = null, $B = null)
|
||||
{
|
||||
if (is_array($R))
|
||||
return imagecolorexact($this->handle, $R['red'], $R['green'], $R['blue']);
|
||||
else
|
||||
return imagecolorexact($this->handle, $R, $G, $B);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies transparency information from $sourceImage. Optionally fills
|
||||
* the image with the transparent color at (0, 0).
|
||||
*
|
||||
* @param object $sourceImage
|
||||
* @param bool $fill True if you want to fill the image with transparent color
|
||||
*/
|
||||
function copyTransparencyFrom($sourceImage, $fill = true)
|
||||
{
|
||||
if ($sourceImage->isTransparent())
|
||||
{
|
||||
$rgba = $sourceImage->getTransparentColorRGB();
|
||||
if ($rgba === null)
|
||||
return;
|
||||
|
||||
if ($this->isTrueColor())
|
||||
{
|
||||
$rgba['alpha'] = 127;
|
||||
$color = $this->allocateColorAlpha($rgba);
|
||||
}
|
||||
else
|
||||
$color = $this->allocateColor($rgba);
|
||||
|
||||
$this->setTransparentColor($color);
|
||||
if ($fill)
|
||||
$this->fill(0, 0, $color);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill the image at ($x, $y) with color index $color
|
||||
*
|
||||
* @param int $x
|
||||
* @param int $y
|
||||
* @param int $color
|
||||
*/
|
||||
function fill($x, $y, $color)
|
||||
{
|
||||
return imagefill($this->handle, $x, $y, $color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used internally to create Operation objects
|
||||
*
|
||||
* @param string $name
|
||||
* @return object
|
||||
*/
|
||||
protected function getOperation($name)
|
||||
{
|
||||
return WideImage_OperationFactory::get($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the image's mask
|
||||
*
|
||||
* Mask is a greyscale image where the shade defines the alpha channel (black = transparent, white = opaque).
|
||||
*
|
||||
* For opaque images (JPEG), the result will be white. For images with single-color transparency (GIF, 8-bit PNG),
|
||||
* the areas with the transparent color will be black. For images with alpha channel transparenct,
|
||||
* the result will be alpha channel.
|
||||
*
|
||||
* @return WideImage_Image An image mask
|
||||
**/
|
||||
function getMask()
|
||||
{
|
||||
return $this->getOperation('GetMask')->execute($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resize the image to given dimensions.
|
||||
*
|
||||
* $width and $height are both smart coordinates. This means that you can pass any of these values in:
|
||||
* - positive or negative integer (100, -20, ...)
|
||||
* - positive or negative percent string (30%, -15%, ...)
|
||||
* - complex coordinate (50% - 20, 15 + 30%, ...)
|
||||
*
|
||||
* If $width is null, it's calculated proportionally from $height, and vice versa.
|
||||
*
|
||||
* Example (resize to half-size):
|
||||
* <code>
|
||||
* $smaller = $image->resize('50%');
|
||||
*
|
||||
* $smaller = $image->resize('100', '100', 'inside', 'down');
|
||||
* is the same as
|
||||
* $smaller = $image->resizeDown(100, 100, 'inside');
|
||||
* </code>
|
||||
*
|
||||
* @param mixed $width The new width (smart coordinate), or null.
|
||||
* @param mixed $height The new height (smart coordinate), or null.
|
||||
* @param string $fit 'inside', 'outside', 'fill'
|
||||
* @param string $scale 'down', 'up', 'any'
|
||||
* @return WideImage_Image The resized image
|
||||
*/
|
||||
function resize($width = null, $height = null, $fit = 'inside', $scale = 'any')
|
||||
{
|
||||
return $this->getOperation('Resize')->execute($this, $width, $height, $fit, $scale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as WideImage_Image::resize(), but the image is only applied if it is larger then the given dimensions.
|
||||
* Otherwise, the resulting image retains the source's dimensions.
|
||||
*
|
||||
* @param int $width New width, smart coordinate
|
||||
* @param int $height New height, smart coordinate
|
||||
* @param string $fit 'inside', 'outside', 'fill'
|
||||
* @return WideImage_Image resized image
|
||||
*/
|
||||
function resizeDown($width = null, $height = null, $fit = 'inside')
|
||||
{
|
||||
return $this->resize($width, $height, $fit, 'down');
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as WideImage_Image::resize(), but the image is only applied if it is smaller then the given dimensions.
|
||||
* Otherwise, the resulting image retains the source's dimensions.
|
||||
*
|
||||
* @param int $width New width, smart coordinate
|
||||
* @param int $height New height, smart coordinate
|
||||
* @param string $fit 'inside', 'outside', 'fill'
|
||||
* @return WideImage_Image resized image
|
||||
*/
|
||||
function resizeUp($width = null, $height = null, $fit = 'inside')
|
||||
{
|
||||
return $this->resize($width, $height, $fit, 'up');
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate the image for angle $angle clockwise.
|
||||
*
|
||||
* Preserves transparency. Has issues when saving to a BMP.
|
||||
*
|
||||
* @param int $angle Angle in degrees, clock-wise
|
||||
* @param int $bgColor color of the new background
|
||||
* @param bool $ignoreTransparent
|
||||
* @return WideImage_Image The rotated image
|
||||
*/
|
||||
function rotate($angle, $bgColor = null, $ignoreTransparent = true)
|
||||
{
|
||||
return $this->getOperation('Rotate')->execute($this, $angle, $bgColor, $ignoreTransparent);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method lays the overlay (watermark) on the image.
|
||||
*
|
||||
* Hint: if the overlay is a truecolor image with alpha channel, you should leave $pct at 100.
|
||||
*
|
||||
* This operation supports alignment notation in coordinates:
|
||||
* <code>
|
||||
* $watermark = WideImage::load('logo.gif');
|
||||
* $base = WideImage::load('picture.jpg');
|
||||
* $result = $base->merge($watermark, "right - 10", "bottom - 10", 50);
|
||||
* // applies a logo aligned to bottom-right corner with a 10 pixel margin
|
||||
* </code>
|
||||
*
|
||||
* @param WideImage_Image $overlay The overlay image
|
||||
* @param mixed $left Left position of the overlay, smart coordinate
|
||||
* @param mixed $top Top position of the overlay, smart coordinate
|
||||
* @param int $pct The opacity of the overlay
|
||||
* @return WideImage_Image The merged image
|
||||
*/
|
||||
function merge($overlay, $left = 0, $top = 0, $pct = 100)
|
||||
{
|
||||
return $this->getOperation('Merge')->execute($this, $overlay, $left, $top, $pct);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resizes the canvas of the image, but doesn't scale the content of the image
|
||||
*
|
||||
* This operation creates an empty canvas with dimensions $width x $height, filled with
|
||||
* background color $bg_color and draws the original image onto it at position [$pos_x, $pos_y].
|
||||
*
|
||||
* Arguments $width, $height, $pos_x and $pos_y are all smart coordinates. $width and $height are
|
||||
* relative to the current image size, $pos_x and $pos_y are relative to the newly calculated
|
||||
* canvas size. This can be confusing, but it makes sense. See the example below.
|
||||
*
|
||||
* The example below loads a 100x150 image and then resizes its canvas to 200% x 100%+20
|
||||
* (which evaluates to 200x170). The image is placed at position [10, center+20], which evaluates to [10, 30].
|
||||
* <code>
|
||||
* $image = WideImage::load('someimage.jpg'); // 100x150
|
||||
* $white = $image->allocateColor(255, 255, 255);
|
||||
* $image->resizeCanvas('200%', '100% + 20', 10, 'center+20', $white);
|
||||
* </code>
|
||||
*
|
||||
* The parameter $merge defines whether the original image should be merged onto the new canvas.
|
||||
* This means it blends transparent color and alpha colors into the background color. If set to false,
|
||||
* the original image is just copied over, preserving the transparency/alpha information.
|
||||
*
|
||||
* You can set the $scale parameter to limit when to resize the canvas. For example, if you want
|
||||
* to resize the canvas only if the image is smaller than the new size, but leave the image intact
|
||||
* if it's larger, set it to 'up'. Likewise, if you want to shrink the canvas, but don't want to
|
||||
* change images that are already smaller, set it to 'down'.
|
||||
*
|
||||
* @param mixed $width Width of the new canvas (smart coordinate, relative to current image width)
|
||||
* @param mixed $height Height of the new canvas (smart coordinate, relative to current image height)
|
||||
* @param mixed $pos_x x-position of the image (smart coordinate, relative to the new width)
|
||||
* @param mixed $pos_y y-position of the image (smart coordinate, relative to the new height)
|
||||
* @param int $bg_color Background color (created with allocateColor or allocateColorAlpha), defaults to null (tries to use a transparent color)
|
||||
* @param string $scale Possible values: 'up' (enlarge only), 'down' (downsize only), 'any' (resize precisely to $width x $height). Defaults to 'any'.
|
||||
* @param bool $merge Merge the original image (flatten alpha channel and transparency) or copy it over (preserve). Defaults to false.
|
||||
* @return WideImage_Image The resulting image with resized canvas
|
||||
*/
|
||||
function resizeCanvas($width, $height, $pos_x, $pos_y, $bg_color = null, $scale = 'any', $merge = false)
|
||||
{
|
||||
return $this->getOperation('ResizeCanvas')->execute($this, $width, $height, $pos_x, $pos_y, $bg_color, $scale, $merge);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an image with round corners
|
||||
*
|
||||
* You can either set the corners' color or set them transparent.
|
||||
*
|
||||
* Note on $smoothness: 1 means jagged edges, 2 is much better, more than 4 doesn't noticeably improve the quality.
|
||||
* Rendering becomes increasingly slower if you increase smoothness.
|
||||
*
|
||||
* Example:
|
||||
* <code>
|
||||
* $nice = $ugly->roundCorners(20, $ugly->allocateColor(255, 0, 0), 2);
|
||||
* </code>
|
||||
*
|
||||
* Use $corners parameter to specify which corners to draw rounded. Possible values are
|
||||
* WideImage::SIDE_TOP_LEFT, WideImage::SIDE_TOP,
|
||||
* WideImage::SIDE_TOP_RIGHT, WideImage::SIDE_RIGHT,
|
||||
* WideImage::SIDE_BOTTOM_RIGHT, WideImage::SIDE_BOTTOM,
|
||||
* WideImage::SIDE_BOTTOM_LEFT, WideImage::SIDE_LEFT, and WideImage::SIDE_ALL.
|
||||
* You can specify any combination of corners with a + operation, see example below.
|
||||
*
|
||||
* Example:
|
||||
* <code>
|
||||
* $white = $image->allocateColor(255, 255, 255);
|
||||
* $diagonal_corners = $image->roundCorners(15, $white, 2, WideImage::SIDE_TOP_LEFT + WideImage::SIDE_BOTTOM_RIGHT);
|
||||
* $right_corners = $image->roundCorners(15, $white, 2, WideImage::SIDE_RIGHT);
|
||||
* </code>
|
||||
*
|
||||
* @param int $radius Radius of the corners
|
||||
* @param int $color The color of corners. If null, corners are rendered transparent (slower than using a solid color).
|
||||
* @param int $smoothness Specify the level of smoothness. Suggested values from 1 to 4.
|
||||
* @param int $corners Specify which corners to draw (defaults to WideImage::SIDE_ALL = all corners)
|
||||
* @return WideImage_Image The resulting image with round corners
|
||||
*/
|
||||
function roundCorners($radius, $color = null, $smoothness = 2, $corners = 255)
|
||||
{
|
||||
return $this->getOperation('RoundCorners')->execute($this, $radius, $color, $smoothness, $corners);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an image with applied mask
|
||||
*
|
||||
* A mask is a grayscale image, where the shade determines the alpha channel. Black is fully transparent
|
||||
* and white is fully opaque.
|
||||
*
|
||||
* @param WideImage_Image $mask The mask image, greyscale
|
||||
* @param mixed $left Left coordinate, smart coordinate
|
||||
* @param mixed $top Top coordinate, smart coordinate
|
||||
* @return WideImage_Image The resulting image
|
||||
**/
|
||||
function applyMask($mask, $left = 0, $top = 0)
|
||||
{
|
||||
return $this->getOperation('ApplyMask')->execute($this, $mask, $left, $top);
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies a filter
|
||||
*
|
||||
* @param int $filter One of the IMG_FILTER_* constants
|
||||
* @param int $arg1
|
||||
* @param int $arg2
|
||||
* @param int $arg3
|
||||
* @param int $arg4
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function applyFilter($filter, $arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null)
|
||||
{
|
||||
return $this->getOperation('ApplyFilter')->execute($this, $filter, $arg1, $arg2, $arg3, $arg4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies convolution matrix with imageconvolution()
|
||||
*
|
||||
* @param array $matrix
|
||||
* @param float $div
|
||||
* @param float $offset
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function applyConvolution($matrix, $div, $offset)
|
||||
{
|
||||
return $this->getOperation('ApplyConvolution')->execute($this, $matrix, $div, $offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a cropped rectangular portion of the image
|
||||
*
|
||||
* If the rectangle specifies area that is out of bounds, it's limited to the current image bounds.
|
||||
*
|
||||
* Examples:
|
||||
* <code>
|
||||
* $cropped = $img->crop(10, 10, 150, 200); // crops a 150x200 rect at (10, 10)
|
||||
* $cropped = $img->crop(-100, -50, 100, 50); // crops a 100x50 rect at the right-bottom of the image
|
||||
* $cropped = $img->crop('25%', '25%', '50%', '50%'); // crops a 50%x50% rect from the center of the image
|
||||
* </code>
|
||||
*
|
||||
* This operation supports alignment notation in left/top coordinates.
|
||||
* Example:
|
||||
* <code>
|
||||
* $cropped = $img->crop("right", "bottom", 100, 200); // crops a 100x200 rect from right bottom
|
||||
* $cropped = $img->crop("center", "middle", 50, 30); // crops a 50x30 from the center of the image
|
||||
* </code>
|
||||
*
|
||||
* @param mixed $left Left-coordinate of the crop rect, smart coordinate
|
||||
* @param mixed $top Top-coordinate of the crop rect, smart coordinate
|
||||
* @param mixed $width Width of the crop rect, smart coordinate
|
||||
* @param mixed $height Height of the crop rect, smart coordinate
|
||||
* @return WideImage_Image The cropped image
|
||||
**/
|
||||
function crop($left = 0, $top = 0, $width = '100%', $height = '100%')
|
||||
{
|
||||
return $this->getOperation('Crop')->execute($this, $left, $top, $width, $height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs an auto-crop on the image
|
||||
*
|
||||
* The image is auto-cropped from each of four sides. All sides are
|
||||
* scanned for pixels that differ from $base_color for more than
|
||||
* $rgb_threshold in absolute RGB difference. If more than $pixel_cutoff
|
||||
* differentiating pixels are found, that line is considered to be the crop line for the side.
|
||||
* If the line isn't different enough, the algorithm procedes to the next line
|
||||
* towards the other edge of the image.
|
||||
*
|
||||
* When the crop rectangle is found, it's enlarged by the $margin value on each of the four sides.
|
||||
*
|
||||
* @param int $margin Margin for the crop rectangle, can be negative.
|
||||
* @param int $rgb_threshold RGB difference which still counts as "same color".
|
||||
* @param int $pixel_cutoff How many pixels need to be different to mark a cut line.
|
||||
* @param int $base_color The base color index. If none specified (or null given), left-top pixel is used.
|
||||
* @return WideImage_Image The cropped image
|
||||
*/
|
||||
function autoCrop($margin = 0, $rgb_threshold = 0, $pixel_cutoff = 1, $base_color = null)
|
||||
{
|
||||
return $this->getOperation('AutoCrop')->execute($this, $margin, $rgb_threshold, $pixel_cutoff, $base_color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a negative of the image
|
||||
*
|
||||
* This operation differs from calling WideImage_Image::applyFilter(IMG_FILTER_NEGATIVE), because it's 8-bit and transparency safe.
|
||||
* This means it will return an 8-bit image, if the source image is 8-bit. If that 8-bit image has a palette transparency,
|
||||
* the resulting image will keep transparency.
|
||||
*
|
||||
* @return WideImage_Image negative of the image
|
||||
*/
|
||||
function asNegative()
|
||||
{
|
||||
return $this->getOperation('AsNegative')->execute($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a grayscale copy of the image
|
||||
*
|
||||
* @return WideImage_Image grayscale copy
|
||||
**/
|
||||
function asGrayscale()
|
||||
{
|
||||
return $this->getOperation('AsGrayscale')->execute($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a mirrored copy of the image
|
||||
*
|
||||
* @return WideImage_Image Mirrored copy
|
||||
**/
|
||||
function mirror()
|
||||
{
|
||||
return $this->getOperation('Mirror')->execute($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the unsharp filter
|
||||
*
|
||||
* @param float $amount
|
||||
* @param float $radius
|
||||
* @param float $threshold
|
||||
* @return WideImage_Image Unsharpened copy of the image
|
||||
**/
|
||||
function unsharp($amount, $radius, $threshold)
|
||||
{
|
||||
return $this->getOperation('Unsharp')->execute($this, $amount, $radius, $threshold);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a flipped (mirrored over horizontal line) copy of the image
|
||||
*
|
||||
* @return WideImage_Image Flipped copy
|
||||
**/
|
||||
function flip()
|
||||
{
|
||||
return $this->getOperation('Flip')->execute($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Corrects gamma on the image
|
||||
*
|
||||
* @param float $inputGamma
|
||||
* @param float $outputGamma
|
||||
* @return WideImage_Image Image with corrected gamma
|
||||
**/
|
||||
function correctGamma($inputGamma, $outputGamma)
|
||||
{
|
||||
return $this->getOperation('CorrectGamma')->execute($this, $inputGamma, $outputGamma);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds noise to the image
|
||||
*
|
||||
* @author Tomasz Kapusta
|
||||
*
|
||||
* @param int $amount Number of noise pixels to add
|
||||
* @param string $type Type of noise 'salt&pepper', 'color' or 'mono'
|
||||
* @return WideImage_Image Image with noise added
|
||||
**/
|
||||
function addNoise($amount, $type)
|
||||
{
|
||||
return $this->getOperation('AddNoise')->execute($this, $amount, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used internally to execute operations
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $args
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function __call($name, $args)
|
||||
{
|
||||
$op = $this->getOperation($name);
|
||||
array_unshift($args, $this);
|
||||
return call_user_func_array(array($op, 'execute'), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an image in GIF or PNG format
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function __toString()
|
||||
{
|
||||
if ($this->isTransparent())
|
||||
return $this->asString('gif');
|
||||
else
|
||||
return $this->asString('png');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of the image object
|
||||
*
|
||||
* @return WideImage_Image The copy
|
||||
**/
|
||||
function copy()
|
||||
{
|
||||
$dest = $this->doCreate($this->getWidth(), $this->getHeight());
|
||||
$dest->copyTransparencyFrom($this, true);
|
||||
$this->copyTo($dest, 0, 0);
|
||||
return $dest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies this image onto another image
|
||||
*
|
||||
* @param WideImage_Image $dest
|
||||
* @param int $left
|
||||
* @param int $top
|
||||
**/
|
||||
function copyTo($dest, $left = 0, $top = 0)
|
||||
{
|
||||
if (!imagecopy($dest->getHandle(), $this->handle, $left, $top, 0, 0, $this->getWidth(), $this->getHeight()))
|
||||
throw new WideImage_GDFunctionResultException("imagecopy() returned false");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the canvas object
|
||||
*
|
||||
* The Canvas object can be used to draw text and shapes on the image
|
||||
*
|
||||
* Examples:
|
||||
* <code>
|
||||
* $img = WideImage::load('pic.jpg);
|
||||
* $canvas = $img->getCanvas();
|
||||
* $canvas->useFont('arial.ttf', 15, $img->allocateColor(200, 220, 255));
|
||||
* $canvas->writeText(10, 50, "Hello world!");
|
||||
*
|
||||
* $canvas->filledRectangle(10, 10, 80, 40, $img->allocateColor(255, 127, 255));
|
||||
* $canvas->line(60, 80, 30, 100, $img->allocateColor(255, 0, 0));
|
||||
* $img->saveToFile('new.png');
|
||||
* </code>
|
||||
*
|
||||
* @return WideImage_Canvas The Canvas object
|
||||
**/
|
||||
function getCanvas()
|
||||
{
|
||||
if ($this->canvas == null)
|
||||
$this->canvas = new WideImage_Canvas($this);
|
||||
return $this->canvas;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the image is true-color, false otherwise
|
||||
*
|
||||
* @return bool
|
||||
**/
|
||||
abstract function isTrueColor();
|
||||
|
||||
/**
|
||||
* Returns a true-color copy of the image
|
||||
*
|
||||
* @return WideImage_TrueColorImage
|
||||
**/
|
||||
abstract function asTrueColor();
|
||||
|
||||
/**
|
||||
* Returns a palette copy (8bit) of the image
|
||||
*
|
||||
* @param int $nColors Number of colors in the resulting image, more than 0, less or equal to 255
|
||||
* @param bool $dither Use dithering or not
|
||||
* @param bool $matchPalette Set to true to use imagecolormatch() to match the resulting palette more closely to the original image
|
||||
* @return WideImage_Image
|
||||
**/
|
||||
abstract function asPalette($nColors = 255, $dither = null, $matchPalette = true);
|
||||
|
||||
/**
|
||||
* Retrieve an image with selected channels
|
||||
*
|
||||
* Examples:
|
||||
* <code>
|
||||
* $channels = $img->getChannels('red', 'blue');
|
||||
* $channels = $img->getChannels('alpha', 'green');
|
||||
* $channels = $img->getChannels(array('green', 'blue'));
|
||||
* </code>
|
||||
*
|
||||
* @return WideImage_Image
|
||||
**/
|
||||
abstract function getChannels();
|
||||
|
||||
/**
|
||||
* Returns an image without an alpha channel
|
||||
*
|
||||
* @return WideImage_Image
|
||||
**/
|
||||
abstract function copyNoAlpha();
|
||||
|
||||
/**
|
||||
* Returns an array of serializable protected variables. Called automatically upon serialize().
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function __sleep()
|
||||
{
|
||||
$this->sdata = $this->asString('png');
|
||||
return array('sdata', 'handleReleased');
|
||||
}
|
||||
|
||||
/**
|
||||
* Restores an image from serialization. Called automatically upon unserialize().
|
||||
*/
|
||||
function __wakeup()
|
||||
{
|
||||
$temp_image = WideImage::loadFromString($this->sdata);
|
||||
$temp_image->releaseHandle();
|
||||
$this->handle = $temp_image->handle;
|
||||
$temp_image = null;
|
||||
$this->sdata = null;
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
include_once WideImage::path() . '/vendor/de77/BMP.php';
|
||||
|
||||
/**
|
||||
* Mapper support for BMP
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_BMP
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return WideImage_vendor_de77_BMP::imagecreatefrombmp($uri);
|
||||
}
|
||||
|
||||
function loadFromString($data)
|
||||
{
|
||||
return WideImage_vendor_de77_BMP::imagecreatefromstring($data);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null)
|
||||
{
|
||||
if ($uri == null)
|
||||
return WideImage_vendor_de77_BMP::imagebmp($handle);
|
||||
else
|
||||
return WideImage_vendor_de77_BMP::imagebmp($handle, $uri);
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
/**
|
||||
* Mapper class for GD files
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_GD
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return @imagecreatefromgd($uri);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null)
|
||||
{
|
||||
if ($uri == null)
|
||||
return imagegd($handle);
|
||||
else
|
||||
return imagegd($handle, $uri);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
/**
|
||||
* Mapper class for GD2 files
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_GD2
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return @imagecreatefromgd2($uri);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null, $chunk_size = null, $type = null)
|
||||
{
|
||||
return imagegd2($handle, $uri, $chunk_size, $type);
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
/**
|
||||
* Mapper class for GIF files
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_GIF
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return @imagecreatefromgif($uri);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null)
|
||||
{
|
||||
// This is a workaround for a bug, for which PHP devs claim it's not
|
||||
// really a bug. Well, it IS.
|
||||
// You can't pass null as the second parameter, because php is
|
||||
// then trying to save an image to a '' location (which results in an
|
||||
// error, of course). And the same thing works fine for imagepng() and
|
||||
// imagejpeg(). It's a bug! ;)
|
||||
if ($uri)
|
||||
return imagegif($handle, $uri);
|
||||
else
|
||||
return imagegif($handle);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
/**
|
||||
* Mapper class for JPEG files
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_JPEG
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return @imagecreatefromjpeg($uri);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null, $quality = 100)
|
||||
{
|
||||
return imagejpeg($handle, $uri, $quality);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
/**
|
||||
* Mapper class for PNG files
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_PNG
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return @imagecreatefrompng($uri);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null, $compression = 9, $filters = PNG_ALL_FILTERS)
|
||||
{
|
||||
return imagepng($handle, $uri, $compression, $filters);
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Mappers
|
||||
**/
|
||||
|
||||
include_once WideImage::path() . '/vendor/de77/TGA.php';
|
||||
|
||||
/**
|
||||
* Mapper support for TGA
|
||||
*
|
||||
* @package Internal/Mappers
|
||||
*/
|
||||
class WideImage_Mapper_TGA
|
||||
{
|
||||
function load($uri)
|
||||
{
|
||||
return WideImage_vendor_de77_TGA::imagecreatefromtga($uri);
|
||||
}
|
||||
|
||||
function loadFromString($data)
|
||||
{
|
||||
return WideImage_vendor_de77_TGA::imagecreatefromstring($data);
|
||||
}
|
||||
|
||||
function save($handle, $uri = null)
|
||||
{
|
||||
throw new WideImage_Exception("Saving to TGA isn't supported.");
|
||||
}
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package WideImage
|
||||
**/
|
||||
|
||||
/**
|
||||
* Thrown when image format isn't supported
|
||||
*
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_UnsupportedFormatException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* Mapper factory
|
||||
*
|
||||
* @package Internals
|
||||
**/
|
||||
abstract class WideImage_MapperFactory
|
||||
{
|
||||
static protected $mappers = array();
|
||||
static protected $customMappers = array();
|
||||
|
||||
static protected $mimeTable = array(
|
||||
'image/jpg' => 'JPEG',
|
||||
'image/jpeg' => 'JPEG',
|
||||
'image/pjpeg' => 'JPEG',
|
||||
'image/gif' => 'GIF',
|
||||
'image/png' => 'PNG'
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns a mapper, based on the $uri and $format
|
||||
*
|
||||
* @param string $uri File URI
|
||||
* @param string $format File format (extension or mime-type) or null
|
||||
* @return WideImage_Mapper
|
||||
**/
|
||||
static function selectMapper($uri, $format = null)
|
||||
{
|
||||
$format = self::determineFormat($uri, $format);
|
||||
|
||||
if (array_key_exists($format, self::$mappers))
|
||||
return self::$mappers[$format];
|
||||
|
||||
$mapperClassName = 'WideImage_Mapper_' . $format;
|
||||
|
||||
if (!class_exists($mapperClassName, false))
|
||||
{
|
||||
$mapperFileName = WideImage::path() . 'Mapper/' . $format . '.php';
|
||||
if (file_exists($mapperFileName))
|
||||
require_once $mapperFileName;
|
||||
}
|
||||
|
||||
if (class_exists($mapperClassName))
|
||||
{
|
||||
self::$mappers[$format] = new $mapperClassName();
|
||||
return self::$mappers[$format];
|
||||
}
|
||||
|
||||
throw new WideImage_UnsupportedFormatException("Format '{$format}' is not supported.");
|
||||
}
|
||||
|
||||
static function registerMapper($mapper_class_name, $mime_type, $extension)
|
||||
{
|
||||
self::$customMappers[$mime_type] = $mapper_class_name;
|
||||
self::$mimeTable[$mime_type] = $extension;
|
||||
}
|
||||
|
||||
static function getCustomMappers()
|
||||
{
|
||||
return self::$customMappers;
|
||||
}
|
||||
|
||||
static function determineFormat($uri, $format = null)
|
||||
{
|
||||
if ($format == null)
|
||||
$format = self::extractExtension($uri);
|
||||
|
||||
// mime-type match
|
||||
if (preg_match('~[a-z]*/[a-z-]*~i', $format))
|
||||
if (isset(self::$mimeTable[strtolower($format)]))
|
||||
{
|
||||
return self::$mimeTable[strtolower($format)];
|
||||
}
|
||||
|
||||
// clean the string
|
||||
$format = strtoupper(preg_replace('/[^a-z0-9_-]/i', '', $format));
|
||||
if ($format == 'JPG')
|
||||
$format = 'JPEG';
|
||||
|
||||
return $format;
|
||||
}
|
||||
|
||||
static function mimeType($format)
|
||||
{
|
||||
return array_search(strtoupper($format), self::$mimeTable);
|
||||
}
|
||||
|
||||
static function extractExtension($uri)
|
||||
{
|
||||
$p = strrpos($uri, '.');
|
||||
if ($p === false)
|
||||
return '';
|
||||
else
|
||||
return substr($uri, $p + 1);
|
||||
}
|
||||
}
|
@ -1,153 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Tomasz Kapusta
|
||||
* @copyright 2010
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Noise filter
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_AddNoise {
|
||||
/**
|
||||
* Returns image with noise added
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param float $amount
|
||||
* @param const $type
|
||||
* @param float $threshold
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
|
||||
function execute($image, $amount, $type) {
|
||||
|
||||
switch ($type)
|
||||
{
|
||||
case 'salt&pepper' : $fun = 'saltPepperNoise_fun';
|
||||
break;
|
||||
case 'color' : $fun = 'colorNoise_fun';
|
||||
break;
|
||||
default : $fun = 'monoNoise_fun';
|
||||
break;
|
||||
}
|
||||
|
||||
return self::filter($image->asTrueColor(), $fun, $amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns image with every pixel changed by specififed function
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param str $function
|
||||
* @param int $value
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function filter($image, $function, $value)
|
||||
{
|
||||
for ($y = 0; $y < $image->getHeight(); $y++)
|
||||
{
|
||||
for ($x = 0; $x< $image->getWidth(); $x++)
|
||||
{
|
||||
$rgb = imagecolorat($image->getHandle(), $x, $y);
|
||||
|
||||
$a = ($rgb >> 24) & 0xFF;
|
||||
$r = ($rgb >> 16) & 0xFF;
|
||||
$g = ($rgb >> 8) & 0xFF;
|
||||
$b = $rgb & 0xFF;
|
||||
|
||||
|
||||
self::$function($r, $g, $b, $value);
|
||||
|
||||
$color = imagecolorallocatealpha($image->getHandle(), $r, $g, $b, $a);
|
||||
imagesetpixel($image->getHandle(), $x, $y, $color);
|
||||
}
|
||||
}
|
||||
return $image;
|
||||
}
|
||||
/**
|
||||
* Adds color noise by altering given R,G,B values using specififed amount
|
||||
*
|
||||
* @param int $r
|
||||
* @param int $g
|
||||
* @param int $b
|
||||
* @param int $value
|
||||
* @return void
|
||||
*/
|
||||
function colorNoise_fun(&$r, &$g, &$b, $amount)
|
||||
{
|
||||
$r = self::byte($r + mt_rand(0, $amount) - ($amount >> 1) );
|
||||
$g = self::byte($g + mt_rand(0, $amount) - ($amount >> 1) );
|
||||
$b = self::byte($b + mt_rand(0, $amount) - ($amount >> 1) );
|
||||
}
|
||||
/**
|
||||
* Adds mono noise by altering given R,G,B values using specififed amount
|
||||
*
|
||||
* @param int $r
|
||||
* @param int $g
|
||||
* @param int $b
|
||||
* @param int $value
|
||||
* @return void
|
||||
*/
|
||||
function monoNoise_fun(&$r, &$g, &$b, $amount)
|
||||
{
|
||||
$rand = mt_rand(0, $amount) - ($amount >> 1);
|
||||
|
||||
$r = self::byte($r + $rand);
|
||||
$g = self::byte($g + $rand);
|
||||
$b = self::byte($b + $rand);
|
||||
}
|
||||
/**
|
||||
* Adds salt&pepper noise by altering given R,G,B values using specififed amount
|
||||
*
|
||||
* @param int $r
|
||||
* @param int $g
|
||||
* @param int $b
|
||||
* @param int $value
|
||||
* @return void
|
||||
*/
|
||||
function saltPepperNoise_fun(&$r, &$g, &$b, $amount)
|
||||
{
|
||||
if (mt_rand(0, 255 - $amount) != 0) return;
|
||||
|
||||
$rand = mt_rand(0, 1);
|
||||
switch ($rand)
|
||||
{
|
||||
case 0 : $r = $g = $b = 0;
|
||||
break;
|
||||
case 1 : $r = $g = $b = 255;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Returns value within (0,255)
|
||||
*
|
||||
* @param int $b
|
||||
* @return int
|
||||
*/
|
||||
function byte($b)
|
||||
{
|
||||
if ($b > 255) return 255;
|
||||
if ($b < 0) return 0;
|
||||
return (int) $b;
|
||||
}
|
||||
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* ApplyConvolution operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_ApplyConvolution
|
||||
{
|
||||
/**
|
||||
* Executes imageconvolution() filter
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param array $matrix
|
||||
* @param numeric $div
|
||||
* @param numeric $offset
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image, $matrix, $div, $offset)
|
||||
{
|
||||
$new = $image->asTrueColor();
|
||||
if (!imageconvolution($new->getHandle(), $matrix, $div, $offset))
|
||||
throw new WideImage_GDFunctionResultException("imageconvolution() returned false");
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* ApplyFilter operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_ApplyFilter
|
||||
{
|
||||
/**
|
||||
* A list of filters that only accept one arguments for imagefilter()
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static protected $one_arg_filters = array(IMG_FILTER_SMOOTH, IMG_FILTER_CONTRAST, IMG_FILTER_BRIGHTNESS);
|
||||
|
||||
/**
|
||||
* Executes imagefilter
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param int $filter
|
||||
* @param numeric $arg1
|
||||
* @param numeric $arg2
|
||||
* @param numeric $arg3
|
||||
* @return WideImage_TrueColorImage
|
||||
*/
|
||||
function execute($image, $filter, $arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null)
|
||||
{
|
||||
$new = $image->asTrueColor();
|
||||
|
||||
if (in_array($filter, self::$one_arg_filters))
|
||||
$res = imagefilter($new->getHandle(), $filter, $arg1);
|
||||
elseif (defined('IMG_FILTER_PIXELATE') && $filter == IMG_FILTER_PIXELATE)
|
||||
$res = imagefilter($new->getHandle(), $filter, $arg1, $arg2);
|
||||
elseif ($filter == IMG_FILTER_COLORIZE)
|
||||
$res = imagefilter($new->getHandle(), $filter, $arg1, $arg2, $arg3, $arg4);
|
||||
else
|
||||
$res = imagefilter($new->getHandle(), $filter);
|
||||
|
||||
if (!$res)
|
||||
throw new WideImage_GDFunctionResultException("imagefilter() returned false");
|
||||
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,105 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* ApplyMask operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_ApplyMask
|
||||
{
|
||||
/**
|
||||
* Applies a mask on the copy of source image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param WideImage_Image $mask
|
||||
* @param smart_coordinate $left
|
||||
* @param smart_coordinate $top
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image, $mask, $left = 0, $top = 0)
|
||||
{
|
||||
$left = WideImage_Coordinate::fix($left, $image->getWidth(), $mask->getWidth());
|
||||
$top = WideImage_Coordinate::fix($top, $image->getHeight(), $mask->getHeight());
|
||||
|
||||
$width = $image->getWidth();
|
||||
$mask_width = $mask->getWidth();
|
||||
|
||||
$height = $image->getHeight();
|
||||
$mask_height = $mask->getHeight();
|
||||
|
||||
$result = $image->asTrueColor();
|
||||
|
||||
$result->alphaBlending(false);
|
||||
$result->saveAlpha(true);
|
||||
|
||||
$srcTransparentColor = $result->getTransparentColor();
|
||||
if ($srcTransparentColor >= 0)
|
||||
{
|
||||
# this was here. works without.
|
||||
#$trgb = $image->getColorRGB($srcTransparentColor);
|
||||
#$trgb['alpha'] = 127;
|
||||
#$destTransparentColor = $result->allocateColorAlpha($trgb);
|
||||
#$result->setTransparentColor($destTransparentColor);
|
||||
$destTransparentColor = $srcTransparentColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
$destTransparentColor = $result->allocateColorAlpha(255, 255, 255, 127);
|
||||
}
|
||||
|
||||
for ($x = 0; $x < $width; $x++)
|
||||
for ($y = 0; $y < $height; $y++)
|
||||
{
|
||||
$mx = $x - $left;
|
||||
$my = $y - $top;
|
||||
if ($mx >= 0 && $mx < $mask_width && $my >= 0 && $my < $mask_height)
|
||||
{
|
||||
$srcColor = $image->getColorAt($x, $y);
|
||||
if ($srcColor == $srcTransparentColor)
|
||||
$destColor = $destTransparentColor;
|
||||
else
|
||||
{
|
||||
$maskRGB = $mask->getRGBAt($mx, $my);
|
||||
if ($maskRGB['red'] == 0)
|
||||
$destColor = $destTransparentColor;
|
||||
elseif ($srcColor >= 0)
|
||||
{
|
||||
$imageRGB = $image->getRGBAt($x, $y);
|
||||
$level = ($maskRGB['red'] / 255) * (1 - $imageRGB['alpha'] / 127);
|
||||
$imageRGB['alpha'] = 127 - round($level * 127);
|
||||
if ($imageRGB['alpha'] == 127)
|
||||
$destColor = $destTransparentColor;
|
||||
else
|
||||
$destColor = $result->allocateColorAlpha($imageRGB);
|
||||
}
|
||||
else
|
||||
$destColor = $destTransparentColor;
|
||||
}
|
||||
$result->setColorAt($x, $y, $destColor);
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* AsGrayscale operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_AsGrayscale
|
||||
{
|
||||
/**
|
||||
* Returns a greyscale copy of an image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image)
|
||||
{
|
||||
$new = $image->asTrueColor();
|
||||
if (!imagefilter($new->getHandle(), IMG_FILTER_GRAYSCALE))
|
||||
throw new WideImage_GDFunctionResultException("imagefilter() returned false");
|
||||
|
||||
if (!$image->isTrueColor())
|
||||
$new = $new->asPalette();
|
||||
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* AsNegative operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_AsNegative
|
||||
{
|
||||
/**
|
||||
* Returns a greyscale copy of an image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image)
|
||||
{
|
||||
$palette = !$image->isTrueColor();
|
||||
$transparent = $image->isTransparent();
|
||||
|
||||
if ($palette && $transparent)
|
||||
$tcrgb = $image->getTransparentColorRGB();
|
||||
|
||||
$new = $image->asTrueColor();
|
||||
if (!imagefilter($new->getHandle(), IMG_FILTER_NEGATE))
|
||||
throw new WideImage_GDFunctionResultException("imagefilter() returned false");
|
||||
|
||||
if ($palette)
|
||||
{
|
||||
$new = $new->asPalette();
|
||||
if ($transparent)
|
||||
{
|
||||
$irgb = array('red' => 255 - $tcrgb['red'], 'green' => 255 - $tcrgb['green'], 'blue' => 255 - $tcrgb['blue'], 'alpha' => 127);
|
||||
// needs imagecolorexactalpha instead of imagecolorexact, otherwise doesn't work on some transparent GIF images
|
||||
$new_tci = imagecolorexactalpha($new->getHandle(), $irgb['red'], $irgb['green'], $irgb['blue'], 127);
|
||||
$new->setTransparentColor($new_tci);
|
||||
}
|
||||
}
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,162 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* AutoCrop operation
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_AutoCrop
|
||||
{
|
||||
/**
|
||||
* Executes the auto-crop operation on the $img
|
||||
*
|
||||
* @param WideImage_Image $img
|
||||
* @param int $rgb_threshold The difference in RGB from $base_color
|
||||
* @param int $pixel_cutoff The number of pixels on each border that must be over $rgb_threshold
|
||||
* @param int $base_color The color that will get cropped
|
||||
* @return WideImage_Image resulting auto-cropped image
|
||||
*/
|
||||
function execute($img, $margin, $rgb_threshold, $pixel_cutoff, $base_color)
|
||||
{
|
||||
$margin = intval($margin);
|
||||
|
||||
$rgb_threshold = intval($rgb_threshold);
|
||||
if ($rgb_threshold < 0)
|
||||
$rgb_threshold = 0;
|
||||
|
||||
$pixel_cutoff = intval($pixel_cutoff);
|
||||
if ($pixel_cutoff <= 1)
|
||||
$pixel_cutoff = 1;
|
||||
|
||||
if ($base_color === null)
|
||||
$rgb_base = $img->getRGBAt(0, 0);
|
||||
else
|
||||
{
|
||||
if ($base_color < 0)
|
||||
return $img->copy();
|
||||
|
||||
$rgb_base = $img->getColorRGB($base_color);
|
||||
}
|
||||
|
||||
$cut_rect = array('left' => 0, 'top' => 0, 'right' => $img->getWidth() - 1, 'bottom' => $img->getHeight() - 1);
|
||||
|
||||
for ($y = 0; $y <= $cut_rect['bottom']; $y++)
|
||||
{
|
||||
$count = 0;
|
||||
for ($x = 0; $x <= $cut_rect['right']; $x++)
|
||||
{
|
||||
$rgb = $img->getRGBAt($x, $y);
|
||||
$diff = abs($rgb['red'] - $rgb_base['red']) + abs($rgb['green'] - $rgb_base['green']) + abs($rgb['blue'] - $rgb_base['blue']);
|
||||
if ($diff > $rgb_threshold)
|
||||
{
|
||||
$count++;
|
||||
if ($count >= $pixel_cutoff)
|
||||
{
|
||||
$cut_rect['top'] = $y;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ($y = $img->getHeight() - 1; $y >= $cut_rect['top']; $y--)
|
||||
{
|
||||
$count = 0;
|
||||
for ($x = 0; $x <= $cut_rect['right']; $x++)
|
||||
{
|
||||
$rgb = $img->getRGBAt($x, $y);
|
||||
$diff = abs($rgb['red'] - $rgb_base['red']) + abs($rgb['green'] - $rgb_base['green']) + abs($rgb['blue'] - $rgb_base['blue']);
|
||||
if ($diff > $rgb_threshold)
|
||||
{
|
||||
$count++;
|
||||
if ($count >= $pixel_cutoff)
|
||||
{
|
||||
$cut_rect['bottom'] = $y;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ($x = 0; $x <= $cut_rect['right']; $x++)
|
||||
{
|
||||
$count = 0;
|
||||
for ($y = $cut_rect['top']; $y <= $cut_rect['bottom']; $y++)
|
||||
{
|
||||
$rgb = $img->getRGBAt($x, $y);
|
||||
$diff = abs($rgb['red'] - $rgb_base['red']) + abs($rgb['green'] - $rgb_base['green']) + abs($rgb['blue'] - $rgb_base['blue']);
|
||||
if ($diff > $rgb_threshold)
|
||||
{
|
||||
$count++;
|
||||
if ($count >= $pixel_cutoff)
|
||||
{
|
||||
$cut_rect['left'] = $x;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ($x = $cut_rect['right']; $x >= $cut_rect['left']; $x--)
|
||||
{
|
||||
$count = 0;
|
||||
for ($y = $cut_rect['top']; $y <= $cut_rect['bottom']; $y++)
|
||||
{
|
||||
$rgb = $img->getRGBAt($x, $y);
|
||||
$diff = abs($rgb['red'] - $rgb_base['red']) + abs($rgb['green'] - $rgb_base['green']) + abs($rgb['blue'] - $rgb_base['blue']);
|
||||
if ($diff > $rgb_threshold)
|
||||
{
|
||||
$count++;
|
||||
if ($count >= $pixel_cutoff)
|
||||
{
|
||||
$cut_rect['right'] = $x;
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$cut_rect = array(
|
||||
'left' => $cut_rect['left'] - $margin,
|
||||
'top' => $cut_rect['top'] - $margin,
|
||||
'right' => $cut_rect['right'] + $margin,
|
||||
'bottom' => $cut_rect['bottom'] + $margin
|
||||
);
|
||||
|
||||
if ($cut_rect['left'] < 0)
|
||||
$cut_rect['left'] = 0;
|
||||
|
||||
if ($cut_rect['top'] < 0)
|
||||
$cut_rect['top'] = 0;
|
||||
|
||||
if ($cut_rect['right'] >= $img->getWidth())
|
||||
$cut_rect['right'] = $img->getWidth() - 1;
|
||||
|
||||
if ($cut_rect['bottom'] >= $img->getHeight())
|
||||
$cut_rect['bottom'] = $img->getHeight() - 1;
|
||||
|
||||
return $img->crop($cut_rect['left'], $cut_rect['top'], $cut_rect['right'] - $cut_rect['left'] + 1, $cut_rect['bottom'] - $cut_rect['top'] + 1);
|
||||
}
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* CopyChannelsPalette operation class
|
||||
*
|
||||
* This operation is intended to be used on palette images
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_CopyChannelsPalette
|
||||
{
|
||||
/**
|
||||
* Returns an image with only specified channels copied
|
||||
*
|
||||
* @param WideImage_PaletteImage $img
|
||||
* @param array $channels
|
||||
* @return WideImage_PaletteImage
|
||||
*/
|
||||
function execute($img, $channels)
|
||||
{
|
||||
$blank = array('red' => 0, 'green' => 0, 'blue' => 0);
|
||||
if (isset($channels['alpha']))
|
||||
unset($channels['alpha']);
|
||||
|
||||
$width = $img->getWidth();
|
||||
$height = $img->getHeight();
|
||||
$copy = WideImage_PaletteImage::create($width, $height);
|
||||
|
||||
if ($img->isTransparent())
|
||||
{
|
||||
$otci = $img->getTransparentColor();
|
||||
$TRGB = $img->getColorRGB($otci);
|
||||
$tci = $copy->allocateColor($TRGB);
|
||||
}
|
||||
else
|
||||
{
|
||||
$otci = null;
|
||||
$tci = null;
|
||||
}
|
||||
|
||||
for ($x = 0; $x < $width; $x++)
|
||||
for ($y = 0; $y < $height; $y++)
|
||||
{
|
||||
$ci = $img->getColorAt($x, $y);
|
||||
if ($ci === $otci)
|
||||
{
|
||||
$copy->setColorAt($x, $y, $tci);
|
||||
continue;
|
||||
}
|
||||
$RGB = $img->getColorRGB($ci);
|
||||
|
||||
$newRGB = $blank;
|
||||
foreach ($channels as $channel)
|
||||
$newRGB[$channel] = $RGB[$channel];
|
||||
|
||||
$color = $copy->getExactColor($newRGB);
|
||||
if ($color == -1)
|
||||
$color = $copy->allocateColor($newRGB);
|
||||
|
||||
$copy->setColorAt($x, $y, $color);
|
||||
}
|
||||
|
||||
if ($img->isTransparent())
|
||||
$copy->setTransparentColor($tci);
|
||||
|
||||
return $copy;
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* CopyChannelsTrueColor operation class
|
||||
*
|
||||
* Used to perform CopyChannels operation on truecolor images
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_CopyChannelsTrueColor
|
||||
{
|
||||
/**
|
||||
* Returns an image with only specified channels copied
|
||||
*
|
||||
* @param WideImage_Image $img
|
||||
* @param array $channels
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($img, $channels)
|
||||
{
|
||||
$blank = array('red' => 0, 'green' => 0, 'blue' => 0, 'alpha' => 0);
|
||||
|
||||
$width = $img->getWidth();
|
||||
$height = $img->getHeight();
|
||||
$copy = WideImage_TrueColorImage::create($width, $height);
|
||||
|
||||
if (count($channels) > 0)
|
||||
for ($x = 0; $x < $width; $x++)
|
||||
for ($y = 0; $y < $height; $y++)
|
||||
{
|
||||
$RGBA = $img->getRGBAt($x, $y);
|
||||
$newRGBA = $blank;
|
||||
foreach ($channels as $channel)
|
||||
$newRGBA[$channel] = $RGBA[$channel];
|
||||
|
||||
$color = $copy->getExactColorAlpha($newRGBA);
|
||||
if ($color == -1)
|
||||
$color = $copy->allocateColorAlpha($newRGBA);
|
||||
|
||||
$copy->setColorAt($x, $y, $color);
|
||||
}
|
||||
|
||||
return $copy;
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* CorrectGamma operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_CorrectGamma
|
||||
{
|
||||
/**
|
||||
* Executes imagegammacorrect()
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param numeric $input_gamma
|
||||
* @param numeric $output_gamma
|
||||
* @return WideImage_TrueColorImage
|
||||
*/
|
||||
function execute($image, $input_gamma, $output_gamma)
|
||||
{
|
||||
$new = $image->copy();
|
||||
if (!imagegammacorrect($new->getHandle(), $input_gamma, $output_gamma))
|
||||
throw new WideImage_GDFunctionResultException("imagegammacorrect() returned false");
|
||||
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Crop operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Crop
|
||||
{
|
||||
/**
|
||||
* Returns a cropped image
|
||||
*
|
||||
* @param WideImage_Image $img
|
||||
* @param smart_coordinate $left
|
||||
* @param smart_coordinate $top
|
||||
* @param smart_coordinate $width
|
||||
* @param smart_coordinate $height
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($img, $left, $top, $width, $height)
|
||||
{
|
||||
$width = WideImage_Coordinate::fix($width, $img->getWidth(), $width);
|
||||
$height = WideImage_Coordinate::fix($height, $img->getHeight(), $height);
|
||||
$left = WideImage_Coordinate::fix($left, $img->getWidth(), $width);
|
||||
$top = WideImage_Coordinate::fix($top, $img->getHeight(), $height);
|
||||
if ($left < 0)
|
||||
{
|
||||
$width = $left + $width;
|
||||
$left = 0;
|
||||
}
|
||||
|
||||
if ($width > $img->getWidth() - $left)
|
||||
$width = $img->getWidth() - $left;
|
||||
|
||||
if ($top < 0)
|
||||
{
|
||||
$height = $top + $height;
|
||||
$top = 0;
|
||||
}
|
||||
|
||||
if ($height > $img->getHeight() - $top)
|
||||
$height = $img->getHeight() - $top;
|
||||
|
||||
if ($width <= 0 || $height <= 0)
|
||||
throw new WideImage_Exception("Can't crop outside of an image.");
|
||||
|
||||
$new = $img->doCreate($width, $height);
|
||||
|
||||
if ($img->isTransparent() || $img instanceof WideImage_PaletteImage)
|
||||
{
|
||||
$new->copyTransparencyFrom($img);
|
||||
if (!imagecopyresized($new->getHandle(), $img->getHandle(), 0, 0, $left, $top, $width, $height, $width, $height))
|
||||
throw new WideImage_GDFunctionResultException("imagecopyresized() returned false");
|
||||
}
|
||||
else
|
||||
{
|
||||
$new->alphaBlending(false);
|
||||
$new->saveAlpha(true);
|
||||
if (!imagecopyresampled($new->getHandle(), $img->getHandle(), 0, 0, $left, $top, $width, $height, $width, $height))
|
||||
throw new WideImage_GDFunctionResultException("imagecopyresampled() returned false");
|
||||
}
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Flip operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Flip
|
||||
{
|
||||
/**
|
||||
* Returns a flipped image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image)
|
||||
{
|
||||
$new = $image->copy();
|
||||
|
||||
$width = $image->getWidth();
|
||||
$height = $image->getHeight();
|
||||
|
||||
if ($new->isTransparent())
|
||||
imagefilledrectangle($new->getHandle(), 0, 0, $width, $height, $new->getTransparentColor());
|
||||
|
||||
for ($y = 0; $y < $height; $y++)
|
||||
if (!imagecopy($new->getHandle(), $image->getHandle(), 0, $y, 0, $height - $y - 1, $width, 1))
|
||||
throw new WideImage_GDFunctionResultException("imagecopy() returned false");
|
||||
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* GetMask operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_GetMask
|
||||
{
|
||||
/**
|
||||
* Returns a mask
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image)
|
||||
{
|
||||
$width = $image->getWidth();
|
||||
$height = $image->getHeight();
|
||||
|
||||
$mask = WideImage_TrueColorImage::create($width, $height);
|
||||
$mask->setTransparentColor(-1);
|
||||
$mask->alphaBlending(false);
|
||||
$mask->saveAlpha(false);
|
||||
|
||||
for ($i = 0; $i <= 255; $i++)
|
||||
$greyscale[$i] = ImageColorAllocate($mask->getHandle(), $i, $i, $i);
|
||||
|
||||
imagefilledrectangle($mask->getHandle(), 0, 0, $width, $height, $greyscale[255]);
|
||||
|
||||
$transparentColor = $image->getTransparentColor();
|
||||
$alphaToGreyRatio = 255 / 127;
|
||||
for ($x = 0; $x < $width; $x++)
|
||||
for ($y = 0; $y < $height; $y++)
|
||||
{
|
||||
$color = $image->getColorAt($x, $y);
|
||||
if ($color == $transparentColor)
|
||||
$rgba['alpha'] = 127;
|
||||
else
|
||||
$rgba = $image->getColorRGB($color);
|
||||
imagesetpixel($mask->getHandle(), $x, $y, $greyscale[255 - round($rgba['alpha'] * $alphaToGreyRatio)]);
|
||||
}
|
||||
return $mask;
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Merge operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Merge
|
||||
{
|
||||
/**
|
||||
* Returns a merged image
|
||||
*
|
||||
* @param WideImage_Image $base
|
||||
* @param WideImage_Image $overlay
|
||||
* @param smart_coordinate $left
|
||||
* @param smart_coordinate $top
|
||||
* @param numeric $pct
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($base, $overlay, $left, $top, $pct)
|
||||
{
|
||||
$x = WideImage_Coordinate::fix($left, $base->getWidth(), $overlay->getWidth());
|
||||
$y = WideImage_Coordinate::fix($top, $base->getHeight(), $overlay->getHeight());
|
||||
|
||||
$result = $base->asTrueColor();
|
||||
$result->alphaBlending(true);
|
||||
$result->saveAlpha(true);
|
||||
|
||||
if ($pct <= 0)
|
||||
return $result;
|
||||
|
||||
if ($pct < 100)
|
||||
{
|
||||
if (!imagecopymerge(
|
||||
$result->getHandle(),
|
||||
$overlay->getHandle(),
|
||||
$x, $y, 0, 0,
|
||||
$overlay->getWidth(),
|
||||
$overlay->getHeight(),
|
||||
$pct))
|
||||
throw new WideImage_GDFunctionResultException("imagecopymerge() returned false");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!imagecopy(
|
||||
$result->getHandle(),
|
||||
$overlay->getHandle(),
|
||||
$x, $y, 0, 0,
|
||||
$overlay->getWidth(),
|
||||
$overlay->getHeight()))
|
||||
throw new WideImage_GDFunctionResultException("imagecopy() returned false");
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Mirror operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Mirror
|
||||
{
|
||||
/**
|
||||
* Returns a mirrored image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image)
|
||||
{
|
||||
$new = $image->copy();
|
||||
|
||||
$width = $image->getWidth();
|
||||
$height = $image->getHeight();
|
||||
|
||||
if ($new->isTransparent())
|
||||
imagefilledrectangle($new->getHandle(), 0, 0, $width, $height, $new->getTransparentColor());
|
||||
|
||||
for ($x = 0; $x < $width; $x++)
|
||||
{
|
||||
if (!imagecopy($new->getHandle(), $image->getHandle(), $x, 0, $width - $x - 1, 0, 1, $height))
|
||||
throw new WideImage_GDFunctionResultException("imagecopy() returned false");
|
||||
}
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,157 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* An Exception for when an invalid fit method is passed
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_InvalidFitMethodException extends WideImage_Exception {}
|
||||
/**
|
||||
* An Exception for when an invalid resize dimensions are passed
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_InvalidResizeDimensionException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* Resize operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Resize
|
||||
{
|
||||
/**
|
||||
* Prepares and corrects smart coordinates
|
||||
*
|
||||
* @param WideImage_Image $img
|
||||
* @param smart_coordinate $width
|
||||
* @param smart_coordinate $height
|
||||
* @param string $fit
|
||||
* @return array
|
||||
*/
|
||||
protected function prepareDimensions($img, $width, $height, $fit)
|
||||
{
|
||||
if ($width === null && $height === null)
|
||||
{
|
||||
$width = $img->getWidth();
|
||||
$height = $img->getHeight();
|
||||
}
|
||||
|
||||
if ($width !== null)
|
||||
$width = WideImage_Coordinate::fix($width, $img->getWidth());
|
||||
|
||||
if ($height !== null)
|
||||
$height = WideImage_Coordinate::fix($height, $img->getHeight());
|
||||
|
||||
if ($width === null)
|
||||
$width = floor($img->getWidth() * $height / $img->getHeight());
|
||||
|
||||
if ($height === null)
|
||||
$height = floor($img->getHeight() * $width / $img->getWidth());
|
||||
|
||||
if ($width === 0 || $height === 0)
|
||||
return array('width' => 0, 'height' => 0);
|
||||
|
||||
if ($fit == null)
|
||||
$fit = 'inside';
|
||||
|
||||
$dim = array();
|
||||
if ($fit == 'fill')
|
||||
{
|
||||
$dim['width'] = $width;
|
||||
$dim['height'] = $height;
|
||||
}
|
||||
elseif ($fit == 'inside' || $fit == 'outside')
|
||||
{
|
||||
$rx = $img->getWidth() / $width;
|
||||
$ry = $img->getHeight() / $height;
|
||||
|
||||
if ($fit == 'inside')
|
||||
$ratio = ($rx > $ry) ? $rx : $ry;
|
||||
else
|
||||
$ratio = ($rx < $ry) ? $rx : $ry;
|
||||
|
||||
$dim['width'] = round($img->getWidth() / $ratio);
|
||||
$dim['height'] = round($img->getHeight() / $ratio);
|
||||
}
|
||||
else
|
||||
throw new WideImage_Operation_InvalidFitMethodException("{$fit} is not a valid resize-fit method.");
|
||||
|
||||
return $dim;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a resized image
|
||||
*
|
||||
* @param WideImage_Image $img
|
||||
* @param smart_coordinate $width
|
||||
* @param smart_coordinate $height
|
||||
* @param string $fit
|
||||
* @param string $scale
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($img, $width, $height, $fit, $scale)
|
||||
{
|
||||
$dim = $this->prepareDimensions($img, $width, $height, $fit);
|
||||
if (($scale === 'down' && ($dim['width'] >= $img->getWidth() && $dim['height'] >= $img->getHeight())) ||
|
||||
($scale === 'up' && ($dim['width'] <= $img->getWidth() && $dim['height'] <= $img->getHeight())))
|
||||
$dim = array('width' => $img->getWidth(), 'height' => $img->getHeight());
|
||||
|
||||
if ($dim['width'] <= 0 || $dim['height'] <= 0)
|
||||
throw new WideImage_Operation_InvalidResizeDimensionException("Both dimensions must be larger than 0.");
|
||||
|
||||
if ($img->isTransparent() || $img instanceof WideImage_PaletteImage)
|
||||
{
|
||||
$new = WideImage_PaletteImage::create($dim['width'], $dim['height']);
|
||||
$new->copyTransparencyFrom($img);
|
||||
if (!imagecopyresized(
|
||||
$new->getHandle(),
|
||||
$img->getHandle(),
|
||||
0, 0, 0, 0,
|
||||
$new->getWidth(),
|
||||
$new->getHeight(),
|
||||
$img->getWidth(),
|
||||
$img->getHeight()))
|
||||
throw new WideImage_GDFunctionResultException("imagecopyresized() returned false");
|
||||
}
|
||||
else
|
||||
{
|
||||
$new = WideImage_TrueColorImage::create($dim['width'], $dim['height']);
|
||||
$new->alphaBlending(false);
|
||||
$new->saveAlpha(true);
|
||||
if (!imagecopyresampled(
|
||||
$new->getHandle(),
|
||||
$img->getHandle(),
|
||||
0, 0, 0, 0,
|
||||
$new->getWidth(),
|
||||
$new->getHeight(),
|
||||
$img->getWidth(),
|
||||
$img->getHeight()))
|
||||
throw new WideImage_GDFunctionResultException("imagecopyresampled() returned false");
|
||||
$new->alphaBlending(true);
|
||||
}
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,107 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* ResizeCanvas operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_ResizeCanvas
|
||||
{
|
||||
/**
|
||||
* Returns an image with a resized canvas
|
||||
*
|
||||
* The image is filled with $color. Use $scale to determine, when to resize.
|
||||
*
|
||||
* @param WideImage_Image $img
|
||||
* @param smart_coordinate $width
|
||||
* @param smart_coordinate $height
|
||||
* @param smart_coordinate $left
|
||||
* @param smart_coordinate $top
|
||||
* @param int $color
|
||||
* @param string $scale 'up', 'down', 'any'
|
||||
* @param boolean $merge
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($img, $width, $height, $left, $top, $color, $scale, $merge)
|
||||
{
|
||||
$new_width = WideImage_Coordinate::fix($width, $img->getWidth());
|
||||
$new_height = WideImage_Coordinate::fix($height, $img->getHeight());
|
||||
|
||||
if ($scale == 'down')
|
||||
{
|
||||
$new_width = min($new_width, $img->getWidth());
|
||||
$new_height = min($new_height, $img->getHeight());
|
||||
}
|
||||
elseif ($scale == 'up')
|
||||
{
|
||||
$new_width = max($new_width, $img->getWidth());
|
||||
$new_height = max($new_height, $img->getHeight());
|
||||
}
|
||||
|
||||
$new = WideImage::createTrueColorImage($new_width, $new_height);
|
||||
if ($img->isTrueColor())
|
||||
{
|
||||
if ($color === null)
|
||||
$color = $new->allocateColorAlpha(0, 0, 0, 127);
|
||||
}
|
||||
else
|
||||
{
|
||||
imagepalettecopy($new->getHandle(), $img->getHandle());
|
||||
|
||||
if ($img->isTransparent())
|
||||
{
|
||||
$new->copyTransparencyFrom($img);
|
||||
$tc_rgb = $img->getTransparentColorRGB();
|
||||
$t_color = $new->allocateColorAlpha($tc_rgb);
|
||||
}
|
||||
|
||||
if ($color === null)
|
||||
{
|
||||
if ($img->isTransparent())
|
||||
$color = $t_color;
|
||||
else
|
||||
$color = $new->allocateColorAlpha(255, 0, 127, 127);
|
||||
|
||||
imagecolortransparent($new->getHandle(), $color);
|
||||
}
|
||||
}
|
||||
$new->fill(0, 0, $color);
|
||||
|
||||
|
||||
$x = WideImage_Coordinate::fix($left, $new->getWidth(), $img->getWidth());
|
||||
$y = WideImage_Coordinate::fix($top, $new->getHeight(), $img->getHeight());
|
||||
|
||||
// blending for truecolor images
|
||||
if ($img->isTrueColor())
|
||||
$new->alphaBlending($merge);
|
||||
|
||||
// not-blending for palette images
|
||||
if (!$merge && !$img->isTrueColor() && isset($t_color))
|
||||
$new->getCanvas()->filledRectangle($x, $y, $x + $img->getWidth(), $y + $img->getHeight(), $t_color);
|
||||
|
||||
$img->copyTo($new, $x, $y);
|
||||
return $new;
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Rotate operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Rotate
|
||||
{
|
||||
/**
|
||||
* Returns rotated image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param numeric $angle
|
||||
* @param int $bgColor
|
||||
* @param bool $ignoreTransparent
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image, $angle, $bgColor, $ignoreTransparent)
|
||||
{
|
||||
$angle = -floatval($angle);
|
||||
if ($angle < 0)
|
||||
$angle = 360 + $angle;
|
||||
$angle = $angle % 360;
|
||||
|
||||
if ($angle == 0)
|
||||
return $image->copy();
|
||||
|
||||
$image = $image->asTrueColor();
|
||||
|
||||
if ($bgColor === null)
|
||||
{
|
||||
$bgColor = $image->getTransparentColor();
|
||||
if ($bgColor == -1)
|
||||
{
|
||||
$bgColor = $image->allocateColorAlpha(255, 255, 255, 127);
|
||||
imagecolortransparent($image->getHandle(), $bgColor);
|
||||
}
|
||||
}
|
||||
return new WideImage_TrueColorImage(imagerotate($image->getHandle(), $angle, $bgColor, $ignoreTransparent));
|
||||
}
|
||||
}
|
@ -1,114 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* ApplyMask operation class
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_RoundCorners
|
||||
{
|
||||
/**
|
||||
* @param WideImage_Image $image
|
||||
* @param int $radius
|
||||
* @param int $color
|
||||
* @param int $smoothness
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image, $radius, $color, $smoothness, $corners)
|
||||
{
|
||||
if ($smoothness < 1)
|
||||
$sample_ratio = 1;
|
||||
elseif ($smoothness > 16)
|
||||
$sample_ratio = 16;
|
||||
else
|
||||
$sample_ratio = $smoothness;
|
||||
|
||||
$corner = WideImage::createTrueColorImage($radius * $sample_ratio, $radius * $sample_ratio);
|
||||
if ($color === null)
|
||||
{
|
||||
imagepalettecopy($corner->getHandle(), $image->getHandle());
|
||||
$bg_color = $corner->allocateColor(0, 0, 0);
|
||||
|
||||
$corner->fill(0, 0, $bg_color);
|
||||
$fg_color = $corner->allocateColor(255, 255, 255);
|
||||
$corner->getCanvas()->filledEllipse($radius * $sample_ratio, $radius * $sample_ratio, $radius * 2 * $sample_ratio, $radius * 2 * $sample_ratio, $fg_color);
|
||||
$corner = $corner->resize($radius, $radius);
|
||||
|
||||
$result = $image->asTrueColor();
|
||||
|
||||
$tc = $result->getTransparentColor();
|
||||
if ($tc == -1)
|
||||
{
|
||||
$tc = $result->allocateColorAlpha(255, 255, 255, 127);
|
||||
imagecolortransparent($result->getHandle(), $tc);
|
||||
$result->setTransparentColor($tc);
|
||||
}
|
||||
|
||||
if ($corners & WideImage::SIDE_TOP_LEFT || $corners & WideImage::SIDE_LEFT || $corners & WideImage::SIDE_TOP)
|
||||
$result = $result->applyMask($corner, -1, -1);
|
||||
|
||||
$corner = $corner->rotate(90);
|
||||
if ($corners & WideImage::SIDE_TOP_RIGHT || $corners & WideImage::SIDE_TOP || $corners & WideImage::SIDE_RIGHT)
|
||||
$result = $result->applyMask($corner, $result->getWidth() - $corner->getWidth() + 1, -1, 100);
|
||||
|
||||
$corner = $corner->rotate(90);
|
||||
if ($corners & WideImage::SIDE_BOTTOM_RIGHT || $corners & WideImage::SIDE_RIGHT || $corners & WideImage::SIDE_BOTTOM)
|
||||
$result = $result->applyMask($corner, $result->getWidth() - $corner->getWidth() + 1, $result->getHeight() - $corner->getHeight() + 1, 100);
|
||||
|
||||
$corner = $corner->rotate(90);
|
||||
if ($corners & WideImage::SIDE_BOTTOM_LEFT || $corners & WideImage::SIDE_LEFT || $corners & WideImage::SIDE_BOTTOM)
|
||||
$result = $result->applyMask($corner, -1, $result->getHeight() - $corner->getHeight() + 1, 100);
|
||||
|
||||
return $result;
|
||||
}
|
||||
else
|
||||
{
|
||||
$bg_color = $color;
|
||||
|
||||
$corner->fill(0, 0, $bg_color);
|
||||
$fg_color = $corner->allocateColorAlpha(127, 127, 127, 127);
|
||||
$corner->getCanvas()->filledEllipse($radius * $sample_ratio, $radius * $sample_ratio, $radius * 2 * $sample_ratio, $radius * 2 * $sample_ratio, $fg_color);
|
||||
$corner = $corner->resize($radius, $radius);
|
||||
|
||||
$result = $image->copy();
|
||||
if ($corners & WideImage::SIDE_TOP_LEFT || $corners & WideImage::SIDE_LEFT || $corners & WideImage::SIDE_TOP)
|
||||
$result = $result->merge($corner, -1, -1, 100);
|
||||
|
||||
$corner = $corner->rotate(90);
|
||||
if ($corners & WideImage::SIDE_TOP_RIGHT || $corners & WideImage::SIDE_TOP || $corners & WideImage::SIDE_RIGHT)
|
||||
$result = $result->merge($corner, $result->getWidth() - $corner->getWidth() + 1, -1, 100);
|
||||
|
||||
$corner = $corner->rotate(90);
|
||||
if ($corners & WideImage::SIDE_BOTTOM_RIGHT || $corners & WideImage::SIDE_RIGHT || $corners & WideImage::SIDE_BOTTOM)
|
||||
$result = $result->merge($corner, $result->getWidth() - $corner->getWidth() + 1, $result->getHeight() - $corner->getHeight() + 1, 100);
|
||||
|
||||
$corner = $corner->rotate(90);
|
||||
if ($corners & WideImage::SIDE_BOTTOM_LEFT || $corners & WideImage::SIDE_LEFT || $corners & WideImage::SIDE_BOTTOM)
|
||||
$result = $result->merge($corner, -1, $result->getHeight() - $corner->getHeight() + 1, 100);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,135 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internal/Operations
|
||||
**/
|
||||
|
||||
/**
|
||||
* Unsharp filter
|
||||
*
|
||||
* This filter was taken from http://vikjavev.no/computing/ump.php,
|
||||
* the original author Torstein Hønsi. Adapted to fit better within
|
||||
* the Wideimage package.
|
||||
*
|
||||
* @package Internal/Operations
|
||||
*/
|
||||
class WideImage_Operation_Unsharp {
|
||||
/**
|
||||
* Returns sharpened image
|
||||
*
|
||||
* @param WideImage_Image $image
|
||||
* @param float $amount
|
||||
* @param int $radius
|
||||
* @param float $threshold
|
||||
* @return WideImage_Image
|
||||
*/
|
||||
function execute($image, $amount, $radius, $threshold) {
|
||||
|
||||
// Attempt to calibrate the parameters to Photoshop:
|
||||
if ($amount > 500) $amount = 500;
|
||||
$amount = $amount * 0.016;
|
||||
if ($radius > 50) $radius = 50;
|
||||
$radius = $radius * 2;
|
||||
if ($threshold > 255) $threshold = 255;
|
||||
|
||||
$radius = abs(round($radius)); // Only integers make sense.
|
||||
if ($radius == 0) {
|
||||
return $image;
|
||||
}
|
||||
|
||||
// Gaussian blur matrix
|
||||
|
||||
$matrix = array(
|
||||
array(1, 2, 1),
|
||||
array(2, 4, 2),
|
||||
array(1, 2, 1)
|
||||
);
|
||||
|
||||
$blurred = $image->applyConvolution($matrix, 16, 0);
|
||||
|
||||
if($threshold > 0) {
|
||||
// Calculate the difference between the blurred pixels and the original
|
||||
// and set the pixels
|
||||
for ($x = 0; $x < $image->getWidth(); $x++) {
|
||||
for ($y = 0; $y < $image->getHeight(); $y++) {
|
||||
$rgbOrig = $image->getRGBAt($x, $y);
|
||||
$rOrig = $rgbOrig["red"];
|
||||
$gOrig = $rgbOrig["green"];
|
||||
$bOrig = $rgbOrig["blue"];
|
||||
|
||||
$rgbBlur = $blurred->getRGBAt($x, $y);
|
||||
$rBlur = $rgbBlur["red"];
|
||||
$gBlur = $rgbBlur["green"];
|
||||
$bBlur = $rgbBlur["blue"];
|
||||
|
||||
// When the masked pixels differ less from the original
|
||||
// than the threshold specifies, they are set to their original value.
|
||||
$rNew = (abs($rOrig - $rBlur) >= $threshold)
|
||||
? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig))
|
||||
: $rOrig;
|
||||
$gNew = (abs($gOrig - $gBlur) >= $threshold)
|
||||
? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig))
|
||||
: $gOrig;
|
||||
$bNew = (abs($bOrig - $bBlur) >= $threshold)
|
||||
? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig))
|
||||
: $bOrig;
|
||||
$rgbNew = array("red" => $rNew, "green" => $gNew, "blue" => $bNew, "alpha" => 0);
|
||||
|
||||
if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) {
|
||||
$image->setRGBAt($x, $y, $rgbNew);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$w = $image->getWidth();
|
||||
$h = $image->getHeight();
|
||||
for ($x = 0; $x < $w; $x++) {
|
||||
for ($y = 0; $y < $h; $y++) {
|
||||
$rgbOrig = $image->getRGBAt($x, $y);
|
||||
$rOrig = $rgbOrig["red"];
|
||||
$gOrig = $rgbOrig["green"];
|
||||
$bOrig = $rgbOrig["blue"];
|
||||
|
||||
$rgbBlur = $blurred->getRGBAt($x, $y);
|
||||
$rBlur = $rgbBlur["red"];
|
||||
$gBlur = $rgbBlur["green"];
|
||||
$bBlur = $rgbBlur["blue"];
|
||||
|
||||
$rNew = ($amount * ($rOrig - $rBlur)) + $rOrig;
|
||||
if($rNew>255){$rNew=255;}
|
||||
elseif($rNew<0){$rNew=0;}
|
||||
$gNew = ($amount * ($gOrig - $gBlur)) + $gOrig;
|
||||
if($gNew>255){$gNew=255;}
|
||||
elseif($gNew<0){$gNew=0;}
|
||||
$bNew = ($amount * ($bOrig - $bBlur)) + $bOrig;
|
||||
if($bNew>255){$bNew=255;}
|
||||
elseif($bNew<0){$bNew=0;}
|
||||
$rgbNew = array("red" => $rNew, "green" => $gNew, "blue" => $bNew, "alpha" => 0);
|
||||
|
||||
$image->setRGBAt($x, $y, $rgbNew);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $image;
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Gasper Kozak
|
||||
* @copyright 2007-2011
|
||||
|
||||
This file is part of WideImage.
|
||||
|
||||
WideImage is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
WideImage is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with WideImage; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
* @package Internals
|
||||
**/
|
||||
|
||||
/**
|
||||
* @package Exceptions
|
||||
*/
|
||||
class WideImage_UnknownImageOperationException extends WideImage_Exception {}
|
||||
|
||||
/**
|
||||
* Operation factory
|
||||
*
|
||||
* @package Internals
|
||||
**/
|
||||
class WideImage_OperationFactory
|
||||
{
|
||||
static protected $cache = array();
|
||||
|
||||
static function get($operationName)
|
||||
{
|
||||
$lcname = strtolower($operationName);
|
||||
if (!isset(self::$cache[$lcname]))
|
||||
{
|
||||
$opClassName = "WideImage_Operation_" . ucfirst($operationName);
|
||||
if (!class_exists($opClassName, false))
|
||||
{
|
||||
$fileName = WideImage::path() . 'Operation/' . ucfirst($operationName) . '.php';
|
||||
if (file_exists($fileName))
|
||||
require_once $fileName;
|
||||
elseif (!class_exists($opClassName))
|
||||
throw new WideImage_UnknownImageOperationException("Can't load '{$operationName}' operation.");
|
||||
}
|
||||
self::$cache[$lcname] = new $opClassName();
|
||||
}
|
||||
return self::$cache[$lcname];
|
||||
}
|
||||
}
|