Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
4d47f8292f | |||
a1ff74f157 | |||
dc1217e6d1 | |||
f2e4df6ecb | |||
a197f503a9 | |||
79ab3164a6 | |||
290a51dd5a | |||
de008d5907 | |||
5b5599575b | |||
3497de7c28 | |||
e0efef54e9 | |||
655708cfa3 | |||
1a79b92b07 | |||
ea2b2ea4c4 | |||
b02771762d | |||
0ae4e4f80d | |||
829384a56b | |||
0cd5660141 | |||
082196378b | |||
319944db68 | |||
52f7737f5c | |||
05160b499f | |||
07f9344265 | |||
e63441531b | |||
33f3bb5652 | |||
ecb3ab5af9 | |||
8fbd4f8701 | |||
b8311078ac | |||
f8d5145af9 | |||
a7e641b499 | |||
675ecece84 | |||
f76587361b | |||
2f9e54e371 | |||
53cf534664 | |||
5567ca6856 | |||
7546e9aceb | |||
f09fd06ddc | |||
2004b8d91c | |||
d82d4aeb22 | |||
5cd07f3b88 | |||
5d19f46070 | |||
02f9523e1b | |||
7f52decf16 |
122
README.md
@ -1,44 +1,122 @@
|
||||
# Component Builder (2.1.9)
|
||||
# Component Builder (2.3.6)
|
||||
|
||||
This is a [Joomla 3.x] (http://www.joomla.org/) component.
|
||||
This is a [Joomla 3.x](http://www.joomla.org/) component.
|
||||
|
||||
![Component Builder image] (https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder/master/admin/assets/images/component-300.png "The Component Builder")
|
||||

|
||||
|
||||
The Component Builder for Joomla that is highly advanced, truly able to build extremely complex components in a fraction of the time.
|
||||
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.
|
||||
|
||||
> **You can purchase demo content inside Component Builder:**
|
||||
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!
|
||||
|
||||
+ **Development Version** ([get this demo set](https://www.vdm.io/joomla-component-builder))
|
||||
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.3.6) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
*Help View Integration*
|
||||
Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
|
||||
*Demo Component* see the build on [github] (https://github.com/namibia/demo-joomla-3-component)
|
||||
# Some of the Features
|
||||
|
||||
+ **Dev + Howtos Version** ([get this demo set](https://www.vdm.io/joomla-component-builder))
|
||||
+ Adding mySQL Dump to any View/Table.
|
||||
+ Grab existing Table data and build a dynamic dump.
|
||||
+ Unlimited Joomla Components.
|
||||
+ Unlimited Tables/Views.
|
||||
+ Reusing Views and Fields.
|
||||
+ Runs on Your Own Joomla Install.
|
||||
+ Add Dynamic/custom back-end views that uses Table and Chart result sets.
|
||||
+ Build data query of extreme complex nature to use in Dynamic/custom views.
|
||||
+ Highly Dynamic/custom Front-end Structures.
|
||||
+ Dynamically setup templates and layouts for Front-end design.
|
||||
+ Integration of the excellent UIKIT lib.
|
||||
+ Integration of the excellent FOOTABLE lib.
|
||||
+ All Joomla Standard Field Types (including repeatable fields).
|
||||
+ Strong Implementation of all Joomla Form Security.
|
||||
+ Load data via ajax with ease.
|
||||
+ You can add an Update Server to Components you build.
|
||||
+ Build advanced Dynamic front-end forms.
|
||||
+ Dynamic data queries from multiple tables.
|
||||
+ Place in local GIT folder, and publish to sales server.
|
||||
+ Include any amount of custom files and folders during build.
|
||||
+ Static helper class with smart methods already included.
|
||||
+ Static helper methods Can easily be added.
|
||||
+ Direct install from complier view.
|
||||
+ Integrative with native Joomla Categories and Tags.
|
||||
+ Fully Dynamic Search Friendly URL Auto Implementation.
|
||||
+ Custom scripting options all over the MVC structure.
|
||||
+ Permission implementation down to each view, item and field.
|
||||
+ Easy extendible to include other libraries.
|
||||
+ Can include SQL and visioning update link to distribute your component updates via Joomla default upgrade of components.
|
||||
+ Easy Export & Import addon to all backend-tables.
|
||||
+ Overriding ability of import concepts in all backend-tables.
|
||||
+ The Batch and Filter implementation on all backend-list views.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
*All the above*
|
||||
# Just Imagine
|
||||
|
||||
*Sermon Distributor* see the build on [github] (https://github.com/SermonDistributor/Joomla-3-Component)
|
||||
+ Your Component Back-end can be more advanced then the Joomla Article Manager.
|
||||
+ Your Code as Perfectly Unified to the strict Joomla Standards.
|
||||
+ Adding Custom Scripting almost anywhere in the MVC structure.
|
||||
+ Import and export feature to all backend-views.
|
||||
+ Batch copy and move/update feature for all backend-views.
|
||||
+ History tracking per/change made on any back-end item.
|
||||
+ Dynamic field control, to show and hide fields in amazing ways.
|
||||
+ Front-end freedom of design that allows for any library to be used.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
*Training & Help Videos* tutorials in the component included.
|
||||
# You are in Control
|
||||
|
||||
+ You can change the licensing template for your components.
|
||||
+ You can change/improve existing field types and add more.
|
||||
+ Line numbers to show where in compiler was the code build.
|
||||
+ You can improve the component since all code are open-source.
|
||||
+ Free updates for the lifetime of the project.
|
||||
+ 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.
|
||||
+ 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:**
|
||||
|
||||
+ 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.
|
||||
|
||||
[**GET ACCESS NOW!**](http://vdm.bz/component-builder)
|
||||
|
||||
# gitHub Support
|
||||
|
||||
Would you require more help please open and issue here on [gitHub today](https://github.com/vdm-io/Joomla-Component-Builder/issues)!
|
||||
|
||||
# WHY GIVE IT AWAY LIKE THIS?
|
||||
|
||||
> I am an Open Source Enthusiast
|
||||
> Who Support the Joomla Community
|
||||
|
||||
My idea was to almost let this tool serve as a cheat sheet to how things can be done... and with the help of other developers (more advanced then me) end up formulating the way how things not only can, but must be done to insure secure, stable, scalable and maintainable code is produced.
|
||||
|
||||
# MAKING IT BETTER!
|
||||
|
||||
Component Builder is mapped as a component in itself on my local development environment. So I am improving it like you would any other component in it. I am looking for developers with the **skill** and the **desire** to really join me... and then I will possible give them access to this, so we can all help improve this simple, yet advanced tool.
|
||||
|
||||
# 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*: 20th May, 2016
|
||||
+ *Version*: 2.1.9
|
||||
+ *Last Build*: 1st March, 2017
|
||||
+ *Version*: 2.3.6
|
||||
+ *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*: **82627**
|
||||
+ *File count*: **502**
|
||||
+ *Folder count*: **98**
|
||||
+ *Line count*: **92671**
|
||||
+ *File count*: **596**
|
||||
+ *Folder count*: **105**
|
||||
|
||||
> This **component** was build with a Joomla [Automated Component Builder] (https://www.vdm.io/joomla-component-builder).
|
||||
> Developed by [Llewellyn van der Merwe] (mailto:joomla@vdm.io)
|
||||
> 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
|
||||
|
||||
Come on buy me a coffee :)
|
||||
* PayPal: pay@vdm.io
|
||||
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
|
122
admin/README.txt
Normal file
@ -0,0 +1,122 @@
|
||||
# Component Builder (2.3.6)
|
||||
|
||||
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.3.6) 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.
|
||||
|
||||
# Some of the Features
|
||||
|
||||
+ Adding mySQL Dump to any View/Table.
|
||||
+ Grab existing Table data and build a dynamic dump.
|
||||
+ Unlimited Joomla Components.
|
||||
+ Unlimited Tables/Views.
|
||||
+ Reusing Views and Fields.
|
||||
+ Runs on Your Own Joomla Install.
|
||||
+ Add Dynamic/custom back-end views that uses Table and Chart result sets.
|
||||
+ Build data query of extreme complex nature to use in Dynamic/custom views.
|
||||
+ Highly Dynamic/custom Front-end Structures.
|
||||
+ Dynamically setup templates and layouts for Front-end design.
|
||||
+ Integration of the excellent UIKIT lib.
|
||||
+ Integration of the excellent FOOTABLE lib.
|
||||
+ All Joomla Standard Field Types (including repeatable fields).
|
||||
+ Strong Implementation of all Joomla Form Security.
|
||||
+ Load data via ajax with ease.
|
||||
+ You can add an Update Server to Components you build.
|
||||
+ Build advanced Dynamic front-end forms.
|
||||
+ Dynamic data queries from multiple tables.
|
||||
+ Place in local GIT folder, and publish to sales server.
|
||||
+ Include any amount of custom files and folders during build.
|
||||
+ Static helper class with smart methods already included.
|
||||
+ Static helper methods Can easily be added.
|
||||
+ Direct install from complier view.
|
||||
+ Integrative with native Joomla Categories and Tags.
|
||||
+ Fully Dynamic Search Friendly URL Auto Implementation.
|
||||
+ Custom scripting options all over the MVC structure.
|
||||
+ Permission implementation down to each view, item and field.
|
||||
+ Easy extendible to include other libraries.
|
||||
+ Can include SQL and visioning update link to distribute your component updates via Joomla default upgrade of components.
|
||||
+ Easy Export & Import addon to all backend-tables.
|
||||
+ Overriding ability of import concepts in all backend-tables.
|
||||
+ The Batch and Filter implementation on all backend-list views.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# Just Imagine
|
||||
|
||||
+ Your Component Back-end can be more advanced then the Joomla Article Manager.
|
||||
+ Your Code as Perfectly Unified to the strict Joomla Standards.
|
||||
+ Adding Custom Scripting almost anywhere in the MVC structure.
|
||||
+ Import and export feature to all backend-views.
|
||||
+ Batch copy and move/update feature for all backend-views.
|
||||
+ History tracking per/change made on any back-end item.
|
||||
+ Dynamic field control, to show and hide fields in amazing ways.
|
||||
+ Front-end freedom of design that allows for any library to be used.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# You are in Control
|
||||
|
||||
+ You can change the licensing template for your components.
|
||||
+ You can change/improve existing field types and add more.
|
||||
+ Line numbers to show where in compiler was the code build.
|
||||
+ You can improve the component since all code are open-source.
|
||||
+ Free updates for the lifetime of the project.
|
||||
+ 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.
|
||||
+ 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:**
|
||||
|
||||
+ 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.
|
||||
|
||||
[**GET ACCESS NOW!**](http://vdm.bz/component-builder)
|
||||
|
||||
# gitHub Support
|
||||
|
||||
Would you require more help please open and issue here on [gitHub today](https://github.com/vdm-io/Joomla-Component-Builder/issues)!
|
||||
|
||||
# WHY GIVE IT AWAY LIKE THIS?
|
||||
|
||||
> I am an Open Source Enthusiast
|
||||
> Who Support the Joomla Community
|
||||
|
||||
My idea was to almost let this tool serve as a cheat sheet to how things can be done... and with the help of other developers (more advanced then me) end up formulating the way how things not only can, but must be done to insure secure, stable, scalable and maintainable code is produced.
|
||||
|
||||
# MAKING IT BETTER!
|
||||
|
||||
Component Builder is mapped as a component in itself on my local development environment. So I am improving it like you would any other component in it. I am looking for developers with the **skill** and the **desire** to really join me... and then I will possible give them access to this, so we can all help improve this simple, yet advanced tool.
|
||||
|
||||
# Build Details
|
||||
|
||||
+ *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*: 1st March, 2017
|
||||
+ *Version*: 2.3.6
|
||||
+ *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*: **92671**
|
||||
+ *File count*: **596**
|
||||
+ *Folder count*: **105**
|
||||
|
||||
> 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
|
||||
|
||||
Come on buy me a coffee :)
|
||||
* PayPal: pay@vdm.io
|
||||
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
|
@ -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,16 @@
|
||||
<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.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="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 +144,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 +203,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" />
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version 2.3.6
|
||||
@build 1st March, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version @update number 99 of this MVC
|
||||
@build 1st March, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version @update number 99 of this MVC
|
||||
@build 1st March, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 26 of this MVC
|
||||
@build 28th February, 2017
|
||||
@created 1st February, 2017
|
||||
@package Component Builder
|
||||
@subpackage component.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 22 of this MVC
|
||||
@build 1st March, 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>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 22 of this MVC
|
||||
@build 1st March, 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>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 81 of this MVC
|
||||
@build 1st March, 2017
|
||||
@created 11th October, 2016
|
||||
@package Component Builder
|
||||
@subpackage components.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 81 of this MVC
|
||||
@build 1st March, 2017
|
||||
@created 11th October, 2016
|
||||
@package Component Builder
|
||||
@subpackage site.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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
|
||||
|
||||
@ -24,9 +23,5 @@
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* CSS Document */
|
||||
.no-click {
|
||||
pointer-events: none;
|
||||
}
|
||||
.fieldMedium { width: 130px; }
|
||||
.fieldSmall { width: 60px; }
|
||||
code { display: inline-block; margin: 3px;}
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version 2.3.6
|
||||
@build 1st March, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dashboard.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 81 of this MVC
|
||||
@build 15th January, 2017
|
||||
@created 21st May, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_get.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 81 of this MVC
|
||||
@build 15th January, 2017
|
||||
@created 21st May, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_gets.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version @update number 37 of this MVC
|
||||
@build 3rd February, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage field.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version @update number 37 of this MVC
|
||||
@build 3rd February, 2017
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fields.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version @update number 12 of this MVC
|
||||
@build 20th October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtype.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@version @update number 12 of this MVC
|
||||
@build 20th October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtypes.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 6 of this MVC
|
||||
@build 17th 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>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 6 of this MVC
|
||||
@build 17th 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>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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 96 of this MVC
|
||||
@build 17th February, 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 96 of this MVC
|
||||
@build 17th February, 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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 67 of this MVC
|
||||
@build 22nd February, 2017
|
||||
@created 18th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage layout.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 67 of this MVC
|
||||
@build 22nd February, 2017
|
||||
@created 18th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage layouts.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 48 of this MVC
|
||||
@build 1st March, 2017
|
||||
@created 29th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 48 of this MVC
|
||||
@build 1st March, 2017
|
||||
@created 29th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 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>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 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>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 40 of this MVC
|
||||
@build 22nd February, 2017
|
||||
@created 26th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage template.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@version @update number 40 of this MVC
|
||||
@build 22nd February, 2017
|
||||
@created 26th May, 2015
|
||||
@package Component Builder
|
||||
@subpackage templates.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@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
|
||||
|
||||
|
BIN
admin/assets/images/component-300.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 126 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 |
@ -1,17 +0,0 @@
|
||||
/*----------------------------------------------------------------------------------| www.giz.de |----/
|
||||
###COMPANYNAME###
|
||||
/-------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version ###VERSION###
|
||||
@build ###BUILDDATE###
|
||||
@created ###CREATIONDATE###
|
||||
@package ###Component_name###
|
||||
@subpackage ###FILENAME###
|
||||
@author ###AUTHOR### <###AUTHORWEBSITE###>
|
||||
@owner ###COMPANYNAME###
|
||||
@copyright ###COPYRIGHT###
|
||||
@license ###LICENSE###
|
||||
|
||||
/-------------------------------------------------------------------------------------------------------/
|
||||
###SHORT_DESCRIPTION###
|
||||
/------------------------------------------------------------------------------------------------------*/
|
@ -7,7 +7,7 @@
|
||||
\ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| |
|
||||
\/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_|
|
||||
| |
|
||||
|_|
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@package Component Builder
|
||||
@ -16,9 +16,9 @@
|
||||
@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
|
||||
|
||||
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
// No direct access to this file
|
||||
@ -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.
|
||||
**/
|
||||
@ -102,9 +102,15 @@ abstract class ###Component###Helper
|
||||
$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));
|
||||
}
|
||||
if (is_numeric($where))
|
||||
{
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where);
|
||||
@ -259,7 +265,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')
|
||||
{
|
||||
@ -480,7 +486,7 @@ abstract class ###Component###Helper
|
||||
|
||||
if (!$asset->check() || !$asset->store())
|
||||
{
|
||||
JError::raiseWarning(500, $asset->getError());
|
||||
JFactory::getApplication()->enqueueMessage($asset->getError(), 'warning');
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@ -594,10 +600,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;
|
||||
@ -663,57 +681,72 @@ 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')
|
||||
// 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;
|
||||
}
|
||||
|
@ -1,13 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @version 2.0.0 - September 03, 2014
|
||||
* @package Component Builder
|
||||
* @author Llewellyn van de Merwe <http://www.vdm.io>
|
||||
* @copyright Copyright (C) 2014. All Rights Reserved
|
||||
* @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
**/
|
||||
/*--------------------------------------------------------------------------------------------------------| 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');
|
||||
@ -222,13 +234,13 @@ abstract class ###Component###Email
|
||||
$numReplyTo = count($mailreply);
|
||||
for ($i=0; $i < $numReplyTo; $i++)
|
||||
{
|
||||
$mail->addReplyTo( array($mailreply[$i], $replyname[$i]) );
|
||||
$mail->addReplyTo($mailreply[$i], $replyname[$i]);
|
||||
}
|
||||
}
|
||||
elseif (!empty($mailreply))
|
||||
{
|
||||
$mail->ClearReplyTos();
|
||||
$mail->addReplyTo( array( $mailreply, $replyname ) );
|
||||
$mail->addReplyTo($mailreply, $replyname);
|
||||
}
|
||||
|
||||
// check if we can add the DKIM to email
|
||||
@ -256,6 +268,12 @@ abstract class ###Component###Email
|
||||
@unlink($tmp);
|
||||
}
|
||||
|
||||
if (method_exists('###Component###Helper','storeMessage'))
|
||||
{
|
||||
// store the massage if the method is set
|
||||
###Component###Helper::storeMessage($sendmail, $recipient, $subject, $body, $textonly, $mode, 'email');
|
||||
}
|
||||
|
||||
return $sendmail;
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@
|
||||
@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
|
||||
Builds Complex Joomla Components
|
||||
|
||||
/-----------------------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@ -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)
|
||||
{
|
||||
@ -171,7 +171,7 @@ abstract class ###Component###Helper
|
||||
|
||||
if (!$asset->check() || !$asset->store())
|
||||
{
|
||||
JError::raiseWarning(500, $asset->getError());
|
||||
JFactory::getApplication()->enqueueMessage($asset->getError(), 'warning');
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@ -276,9 +276,15 @@ abstract class ###Component###Helper
|
||||
$db = JFactory::getDbo();
|
||||
// Create a new query object.
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query->select($db->quoteName(array($what)));
|
||||
$query->from($db->quoteName('#__'.$main.'_'.$table));
|
||||
$query->select($db->quoteName(array($what)));
|
||||
if (empty($table))
|
||||
{
|
||||
$query->from($db->quoteName('#__'.$main));
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->from($db->quoteName('#__'.$main.'_'.$table));
|
||||
}
|
||||
if (is_numeric($where))
|
||||
{
|
||||
$query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where);
|
||||
@ -402,7 +408,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')
|
||||
{
|
||||
@ -586,10 +592,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;
|
||||
@ -655,62 +673,77 @@ 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))
|
||||
{
|
||||
// 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)
|
||||
|
@ -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###
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ class ###Component###Controller###View### extends JControllerForm
|
||||
{
|
||||
$this->view_list = '###Views###'; // safeguard for setting the return view listing to the main view.
|
||||
parent::__construct($config);
|
||||
}
|
||||
}###ADMIN_CUSTOM_BUTTONS_CONTROLLER###
|
||||
|
||||
/**
|
||||
* Method override to check if you can add a new record.
|
||||
|
@ -63,9 +63,9 @@ class ###Component###ControllerAjax extends JControllerLegacy
|
||||
}
|
||||
else
|
||||
{
|
||||
if(array_key_exists('callback',$_GET))
|
||||
if($callback = $jinput->get('callback', null, 'CMD'))
|
||||
{
|
||||
echo $_GET['callback']."(".json_encode(false).");";
|
||||
echo $callback."(".json_encode(false).");";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -63,9 +63,9 @@ class ###Component###ControllerAjax extends JControllerLegacy
|
||||
}
|
||||
else
|
||||
{
|
||||
if(array_key_exists('callback',$_GET))
|
||||
if($callback = $jinput->get('callback', null, 'CMD'))
|
||||
{
|
||||
echo $_GET['callback']."(".json_encode(false).");";
|
||||
echo $callback."(".json_encode(false).");";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -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();
|
||||
|
||||
@ -267,6 +267,26 @@ class ###Component###Model###View### extends JModelAdmin
|
||||
|
||||
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.
|
||||
|
@ -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.
|
||||
|
@ -97,9 +97,10 @@ class ###Component###Model###SView### extends JModelItem
|
||||
// check if this user has permission to access item
|
||||
if (!$this->user->authorise('###sview###.access', 'com_###component###'))
|
||||
{
|
||||
JError::raiseWarning(500, JText::_('Not authorised!'));
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
JFactory::getApplication()->redirect('index.php?option=com_###component###');
|
||||
$app = JFactory::getApplication();
|
||||
$app->enqueueMessage(JText::_('Not authorised!'), 'error');
|
||||
// redirect away if not a correct to cPanel/default view
|
||||
$app->redirect('index.php?option=com_###component###');
|
||||
return false;
|
||||
}
|
||||
$this->userId = $this->user->get('id');
|
||||
@ -126,7 +127,7 @@ class ###Component###Model###SView### extends JModelItem
|
||||
if ($e->getCode() == 404)
|
||||
{
|
||||
// Need to go thru the error handler to allow Redirect to work.
|
||||
JError::raiseError(404, $e->getMessage());
|
||||
JError::raiseWaring(404, $e->getMessage());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -95,15 +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###'))
|
||||
{
|
||||
JError::raiseWarning(500, JText::_('Not authorised!'));
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
JFactory::getApplication()->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');
|
||||
@ -128,7 +120,7 @@ class ###Component###Model###SView### extends JModelItem
|
||||
if ($e->getCode() == 404)
|
||||
{
|
||||
// Need to go thru the error handler to allow Redirect to work.
|
||||
JError::raiseError(404, $e->getMessage());
|
||||
JError::raiseWaring(404, $e->getMessage());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -201,7 +201,8 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
protected function _getPackageFromUpload()
|
||||
{
|
||||
// Get the uploaded file information
|
||||
$input = JFactory::getApplication()->input;
|
||||
$app = JFactory::getApplication();
|
||||
$input = $app->input;
|
||||
|
||||
// Do not change the filter type 'raw'. We need this to let files containing PHP code to upload. See JInputFiles::get.
|
||||
$userfile = $input->files->get('import_package', null, 'raw');
|
||||
@ -209,21 +210,21 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
// Make sure that file uploads are enabled in php
|
||||
if (!(bool) ini_get('file_uploads'))
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTFILE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTFILE'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
// If there is no uploaded file, we have a problem...
|
||||
if (!is_array($userfile))
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_NO_FILE_SELECTED'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_NO_FILE_SELECTED'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if there was a problem uploading the file.
|
||||
if ($userfile['error'] || $userfile['size'] < 1)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTUPLOADERROR'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTUPLOADERROR'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -261,7 +262,8 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
*/
|
||||
protected function _getPackageFromFolder()
|
||||
{
|
||||
$input = JFactory::getApplication()->input;
|
||||
$app = JFactory::getApplication();
|
||||
$input = $app->input;
|
||||
|
||||
// Get the path to the package to import
|
||||
$p_dir = $input->getString('import_directory');
|
||||
@ -269,7 +271,7 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
// Did you give us a valid path?
|
||||
if (!file_exists($p_dir))
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -279,7 +281,7 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
// Did you give us a valid package?
|
||||
if (!$type)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE'), 'warning');
|
||||
}
|
||||
|
||||
// check the extention
|
||||
@ -290,7 +292,7 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
break;
|
||||
|
||||
default:
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
@ -310,15 +312,16 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
*/
|
||||
protected function _getPackageFromUrl()
|
||||
{
|
||||
$input = JFactory::getApplication()->input;
|
||||
|
||||
$app = JFactory::getApplication();
|
||||
$input = $app->input;
|
||||
|
||||
// Get the URL of the package to import
|
||||
$url = $input->getString('import_url');
|
||||
|
||||
// Did you give us a URL?
|
||||
if (!$url)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_ENTER_A_URL'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_ENTER_A_URL'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -328,7 +331,7 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
// Was the package downloaded?
|
||||
if (!$p_file)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_INVALID_URL'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_INVALID_URL'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -349,6 +352,7 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
*/
|
||||
protected function check($archivename)
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
// Clean the name
|
||||
$archivename = JPath::clean($archivename);
|
||||
|
||||
@ -362,7 +366,7 @@ class ###Component###ModelImport extends JModelLegacy
|
||||
default:
|
||||
// Cleanup the import files
|
||||
$this->remove($archivename);
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
@ -91,7 +91,8 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
protected function _getPackageFromUpload()
|
||||
{
|
||||
// Get the uploaded file information
|
||||
$input = JFactory::getApplication()->input;
|
||||
$app = JFactory::getApplication();
|
||||
$input = $app->input;
|
||||
|
||||
// Do not change the filter type 'raw'. We need this to let files containing PHP code to upload. See JInputFiles::get.
|
||||
$userfile = $input->files->get('import_package', null, 'raw');
|
||||
@ -99,21 +100,21 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
// Make sure that file uploads are enabled in php
|
||||
if (!(bool) ini_get('file_uploads'))
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTFILE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTFILE'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
// If there is no uploaded file, we have a problem...
|
||||
if (!is_array($userfile))
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_NO_FILE_SELECTED'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_NO_FILE_SELECTED'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if there was a problem uploading the file.
|
||||
if ($userfile['error'] || $userfile['size'] < 1)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTUPLOADERROR'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_WARNIMPORTUPLOADERROR'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -151,7 +152,8 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
*/
|
||||
protected function _getPackageFromFolder()
|
||||
{
|
||||
$input = JFactory::getApplication()->input;
|
||||
$app = JFactory::getApplication();
|
||||
$input = $app->input;
|
||||
|
||||
// Get the path to the package to import
|
||||
$p_dir = $input->getString('import_directory');
|
||||
@ -159,7 +161,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
// Did you give us a valid path?
|
||||
if (!file_exists($p_dir))
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -169,7 +171,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
// Did you give us a valid package?
|
||||
if (!$type)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE'), 'warning');
|
||||
}
|
||||
|
||||
// check the extention
|
||||
@ -180,7 +182,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
break;
|
||||
|
||||
default:
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
@ -200,7 +202,8 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
*/
|
||||
protected function _getPackageFromUrl()
|
||||
{
|
||||
$input = JFactory::getApplication()->input;
|
||||
$app = JFactory::getApplication();
|
||||
$input = $app->input;
|
||||
|
||||
// Get the URL of the package to import
|
||||
$url = $input->getString('import_url');
|
||||
@ -208,7 +211,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
// Did you give us a URL?
|
||||
if (!$url)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_ENTER_A_URL'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_ENTER_A_URL'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -218,7 +221,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
// Was the package downloaded?
|
||||
if (!$p_file)
|
||||
{
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_INVALID_URL'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_INVALID_URL'), 'warning');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -239,6 +242,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
*/
|
||||
protected function check($archivename)
|
||||
{
|
||||
$app = JFactory::getApplication();
|
||||
// Clean the name
|
||||
$archivename = JPath::clean($archivename);
|
||||
|
||||
@ -252,7 +256,7 @@ class ###Component###Model###View### extends JModelLegacy
|
||||
default:
|
||||
// Cleanup the import files
|
||||
$this->remove($archivename);
|
||||
JError::raiseWarning('', JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'));
|
||||
$app->enqueueMessage(JText::_('COM_###COMPONENT###_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning');
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
@ -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.
|
||||
@ -95,7 +95,7 @@ class ###Component###Model###Views### extends JModelList
|
||||
public function getItems()
|
||||
{###LICENSE_LOCKED_CHECK### ###CHECKINCALL###
|
||||
// load parent items
|
||||
$items = parent::getItems();###GET_ITEMS_METHOD_STRING_FIX### ###SELECTIONTRANSLATIONFIX###
|
||||
$items = parent::getItems();###GET_ITEMS_METHOD_STRING_FIX### ###SELECTIONTRANSLATIONFIX### ###GET_ITEMS_METHOD_AFTER_ALL###
|
||||
|
||||
// return items
|
||||
return $items;
|
||||
|
@ -81,9 +81,10 @@ class ###Component###Model###SViews### extends JModelList
|
||||
// check if this user has permission to access items
|
||||
if (!$user->authorise('###sviews###.access', 'com_###component###'))
|
||||
{
|
||||
JError::raiseWarning(500, JText::_('Not authorised!'));
|
||||
$app = JFactory::getApplication();
|
||||
$app->enqueueMessage(JText::_('Not authorised!'), 'error');
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
JFactory::getApplication()->redirect('index.php?option=com_###component###');
|
||||
$app->redirect('index.php?option=com_###component###');
|
||||
return false;
|
||||
}###LICENSE_LOCKED_CHECK### ###CUSTOM_ADMIN_BEFORE_GET_ITEMS###
|
||||
// load parent items
|
||||
|
@ -77,15 +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###'))
|
||||
{
|
||||
JError::raiseWarning(500, JText::_('Not authorised!'));
|
||||
// redirect away if not a correct (TODO for now we go to default view)
|
||||
JFactory::getApplication()->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))
|
||||
{
|
||||
|
1
admin/compiler/joomla_3/README.txt
Normal file
@ -0,0 +1 @@
|
||||
###README###
|
@ -55,7 +55,8 @@ class ###Component###ControllerAjax extends JControllerLegacy
|
||||
// Check Token!
|
||||
$token = JSession::getFormToken();
|
||||
$call_token = $jinput->get('token', 0, 'ALNUM');
|
||||
if($user->id != 0 && $token == $call_token){
|
||||
if($user->id != 0 && $token == $call_token)
|
||||
{
|
||||
$task = $this->getTask();
|
||||
switch($task){
|
||||
case 'fieldRequired':
|
||||
@ -73,26 +74,37 @@ class ###Component###ControllerAjax extends JControllerLegacy
|
||||
{
|
||||
$result = false;
|
||||
}
|
||||
if(array_key_exists('callback',$_GET)){
|
||||
echo $_GET['callback'] . "(".json_encode($result).");";
|
||||
} else {
|
||||
if($callback = $jinput->get('callback', null, 'CMD'))
|
||||
{
|
||||
echo $callback . "(".json_encode($result).");";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "(".json_encode($result).");";
|
||||
}
|
||||
}
|
||||
catch(Exception $e)
|
||||
catch(Exception $e)
|
||||
{
|
||||
if(array_key_exists('callback',$_GET)){
|
||||
echo $_GET['callback']."(".json_encode($e).");";
|
||||
} else {
|
||||
if($callback = $jinput->get('callback', null, 'CMD'))
|
||||
{
|
||||
echo $callback."(".json_encode($e).");";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "(".json_encode($e).");";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if(array_key_exists('callback',$_GET)){
|
||||
echo $_GET['callback']."(".json_encode(false).");";
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if($callback = $jinput->get('callback', null, 'CMD'))
|
||||
{
|
||||
echo $callback."(".json_encode(false).");";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "(".json_encode(false).");";
|
||||
}
|
||||
}
|
||||
|
@ -74,7 +74,7 @@
|
||||
<filename>config.xml</filename>
|
||||
<filename>controller.php</filename>###ENCRYPT_FILE###
|
||||
<filename>index.html</filename>
|
||||
<filename>###component###.php</filename>
|
||||
<filename>###component###.php</filename>###EXSTRA_ADMIN_FILES###
|
||||
<folder>assets</folder>
|
||||
<folder>controllers</folder>
|
||||
<folder>helpers</folder>
|
||||
|
@ -32,7 +32,7 @@ defined('_JEXEC') or die('Restricted access');
|
||||
// Access check.
|
||||
if (!JFactory::getUser()->authorise('core.manage', 'com_###component###'))
|
||||
{
|
||||
return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
|
||||
return JError::raiseWaring(404, JText::_('JERROR_ALERTNOAUTHOR'));
|
||||
};
|
||||
|
||||
// Load cms libraries
|
||||
|
@ -35,20 +35,9 @@ JHtml::_('behavior.formvalidation');
|
||||
JHtml::_('formbehavior.chosen', 'select');
|
||||
JHtml::_('behavior.keepalive');
|
||||
?>
|
||||
<?php if ($this->canDo->get('###sview###.access')): ?>
|
||||
<script type="text/javascript">
|
||||
Joomla.submitbutton = function(task) {
|
||||
if (task == '###sview###.back') {
|
||||
parent.history.back();
|
||||
return false;
|
||||
} else {
|
||||
var form = document.getElementById('adminForm');
|
||||
form.task.value = task;
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<form action="<?php echo JRoute::_('index.php?option=com_costbenefitprojection&view=###sview###&id='.$this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate" enctype="multipart/form-data">
|
||||
<?php if ($this->canDo->get('###sview###.access')): ?>###CUSTOM_ADMIN_SUBMITBUTTON_SCRIPT###
|
||||
<?php $urlId = (isset($this->item->id)) ? '&id='. (int) $this->item->id : ''; ?>
|
||||
<form action="<?php echo JRoute::_('index.php?option=com_###component###&view=###sview###'.$urlId); ?>" method="post" name="adminForm" id="adminForm" class="form-validate" enctype="multipart/form-data">
|
||||
<input type="hidden" name="task" value="" />
|
||||
<?php echo JHtml::_('form.token'); ?>
|
||||
</form>###CUSTOM_ADMIN_BODY###
|
||||
|
@ -32,6 +32,7 @@ defined('_JEXEC') or die('Restricted access');###LICENSE_LOCKED_DEFINED###
|
||||
JHtml::_('jquery.framework');
|
||||
JHtml::_('bootstrap.tooltip');
|
||||
JHtml::_('script', 'system/core.js', false, true);
|
||||
JHtml::_('behavior.keepalive');
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
<?php if ($this->hasPackage && ###Component###Helper::checkArray($this->headerList)) : ?>
|
||||
|
@ -32,4 +32,5 @@ defined('_JEXEC') or die('Restricted access');###LICENSE_LOCKED_DEFINED###
|
||||
JHtml::_('jquery.framework');
|
||||
JHtml::_('bootstrap.tooltip');
|
||||
JHtml::_('script', 'system/core.js', false, true);
|
||||
JHtml::_('behavior.keepalive');
|
||||
?>###IMPORT_DEFAULT_VIEW_CUSTOM###
|
||||
|
@ -35,19 +35,7 @@ JHtml::_('behavior.formvalidation');
|
||||
JHtml::_('formbehavior.chosen', 'select');
|
||||
JHtml::_('behavior.keepalive');
|
||||
?>
|
||||
<?php if ($this->canDo->get('###sview###.access')): ?>
|
||||
<script type="text/javascript">
|
||||
Joomla.submitbutton = function(task) {
|
||||
if (task == '###sview###.back') {
|
||||
parent.history.back();
|
||||
return false;
|
||||
} else {
|
||||
var form = document.getElementById('adminForm');
|
||||
form.task.value = task;
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php if ($this->canDo->get('###sview###.access')): ?>###CUSTOM_ADMIN_SUBMITBUTTON_SCRIPT###
|
||||
<form action="<?php echo JRoute::_('index.php?option=com_###component###&view=###sviews###'); ?>" method="post" name="adminForm" id="adminForm" class="form-validate" enctype="multipart/form-data">
|
||||
<input type="hidden" name="task" value="" />###HIDDEN_INPUT_VALUES###
|
||||
<?php echo JHtml::_('form.token'); ?>
|
||||
|
@ -36,7 +36,8 @@ JHtml::_('formbehavior.chosen', 'select');
|
||||
JHtml::_('behavior.keepalive');
|
||||
$componentParams = JComponentHelper::getParams('com_###component###');
|
||||
?>
|
||||
|
||||
###EDITBODYFADEIN###
|
||||
<form action="<?php echo JRoute::_('index.php?option=com_###component###&layout=edit&id='.(int) $this->item->id.$this->referral); ?>" method="post" name="adminForm" id="adminForm" class="form-validate" enctype="multipart/form-data">
|
||||
###EDITBODY###
|
||||
</form>###EDITBODYSCRIPT###
|
||||
</form>
|
||||
</div>###EDITBODYSCRIPT###
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
||||
__ __ _ _____ _ _ __ __ _ _ _
|
||||
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
|
||||
@ -10,12 +10,9 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.9
|
||||
@build 20th May, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@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
|
||||
@ -26,25 +23,66 @@
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// Set the component css/js
|
||||
$document = JFactory::getDocument();
|
||||
$document->addStyleSheet('components/com_componentbuilder/assets/css/site.css');
|
||||
$document->addScript('components/com_componentbuilder/assets/js/site.js');
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// Require helper files
|
||||
JLoader::register('ComponentbuilderHelper', dirname(__FILE__) . '/helpers/componentbuilder.php');
|
||||
JLoader::register('ComponentbuilderHelperRoute', dirname(__FILE__) . '/helpers/route.php'); ###SITE_GLOBAL_EVENT###
|
||||
class 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;
|
||||
}
|
||||
}
|
||||
|
||||
// import joomla controller library
|
||||
jimport('joomla.application.component.controller');
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
// Get an instance of the controller prefixed by Componentbuilder
|
||||
$controller = JControllerLegacy::getInstance('Componentbuilder');
|
||||
|
||||
// Perform the request task
|
||||
$jinput = JFactory::getApplication()->input;
|
||||
$controller->execute($jinput->get('task', null, 'CMD'));
|
||||
|
||||
// Redirect if set by the controller
|
||||
$controller->redirect();
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1 +1,6 @@
|
||||
###INSTALL###
|
||||
###INSTALL###
|
||||
|
||||
--
|
||||
-- Always insure this column is large enough for all the access control values.
|
||||
--
|
||||
ALTER TABLE `#__assets` CHANGE `rules` `rules` MEDIUMTEXT NOT NULL COMMENT 'JSON encoded access control.';
|
||||
|
@ -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)
|
||||
|
@ -41,7 +41,6 @@ class com_###component###InstallerScript
|
||||
/**
|
||||
* method to install the component
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function install($parent)
|
||||
@ -81,18 +80,28 @@ class com_###component###InstallerScript
|
||||
*/
|
||||
function preflight($type, $parent)
|
||||
{
|
||||
// get application
|
||||
$app = JFactory::getApplication();
|
||||
// is redundant ...hmmm
|
||||
if ($type == 'uninstall')
|
||||
{
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
$app = JFactory::getApplication();
|
||||
// the default for both install and update
|
||||
$jversion = new JVersion();
|
||||
if (!$jversion->isCompatible('3.4.1'))
|
||||
if (!$jversion->isCompatible('3.6.0'))
|
||||
{
|
||||
$app->enqueueMessage('Please upgrade to at least Joomla! 3.4.1 before continuing!', 'error');
|
||||
$app->enqueueMessage('Please upgrade to at least Joomla! 3.6.0 before continuing!', 'error');
|
||||
return false;
|
||||
}
|
||||
// do any updates needed
|
||||
if ($type == 'update')
|
||||
{###PREUPDATESCRIPT###
|
||||
}
|
||||
// do any install needed
|
||||
if ($type == 'install')
|
||||
{###PREINSTALLSCRIPT###
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -104,11 +113,11 @@ class com_###component###InstallerScript
|
||||
{
|
||||
// set the default component settings
|
||||
if ($type == 'install')
|
||||
{###INSTALLSCRIPT###
|
||||
{###POSTINSTALLSCRIPT###
|
||||
}
|
||||
// do any updates needed
|
||||
if ($type == 'update')
|
||||
{###UPDATESCRIPT###
|
||||
{###POSTUPDATESCRIPT###
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,12 +187,25 @@
|
||||
"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/",
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"README.txt": {
|
||||
"naam":"README.txt",
|
||||
"path": "c0mp0n3nt/admin",
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"README.md": {
|
||||
"naam":"README.md",
|
||||
"path": "c0mp0n3nt/",
|
||||
|
@ -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;
|
||||
}
|
||||
}
|