Compare commits

...

46 Commits

Author SHA1 Message Date
4d47f8292f added another fields to admin view to target list controller and model. Also improve compiler to add these new custom script to correct areas 2017-03-02 02:55:04 +02:00
a1ff74f157 Resolves #43 to insure that fields are sorted by tab once save, thanks to @Peeripapo 2017-02-24 16:57:40 +02:00
dc1217e6d1 Resolved #42 to insure the strpos always returns the correct data type. Improvements to some of the UI surrounding the custom code area. Added an edit button for the component being compiled on the complier page. 2017-02-23 02:29:37 +02:00
f2e4df6ecb Improved the custom code by adding the feature that shows where the manual custom code is used, including better placeholder information. Added component information to the compiler view. 2017-02-17 20:35:18 +02:00
a197f503a9 changed component table name to joomla-component to add history/version tracking back to components 2017-02-16 16:02:23 +02:00
79ab3164a6 few changes in comments, descriptions and fields. Included JS files to custom code engine 2017-02-14 02:33:24 +02:00
290a51dd5a Further improved #37 to ensure language strings are set and reversed, also add extra buttons to the compiler page. Major restructure of custom code implementation to make it more stable. Resolved #40 by updating the default field sql values. 2017-02-14 01:24:38 +02:00
de008d5907 Stable release of the automatic import of custom code, and the JCB manual placeholder implementation resolves #37 please view https://youtu.be/KiAtJawZ3oo 2017-02-11 04:24:26 +02:00
5b5599575b Fixes #39 to ensure components are build even if created and modified dates are not set. Improved #37 #issuecomment-278372267 to avoid one line error in windows. 2017-02-09 18:11:10 +02:00
3497de7c28 Changed alias in site-view and custom-admin-view to codename so we can have views with the same names in different components, added warning notice if custom code can't be added, Bug fixes in the demo content dates 2017-02-04 02:22:17 +02:00
e0efef54e9 Implementation of the switches and update the update server. 2017-02-02 14:19:09 +02:00
655708cfa3 Bug fixes, error on compilation when using view date & version was fixed, headercheck file missing was fixed. Added swithces to controle custom import placeholders and if view version and date should be used 2017-02-02 13:54:07 +02:00
1a79b92b07 Added #39 a new feature the imports custom code during compilation. We also improved the compiler. 2017-02-01 15:17:04 +02:00
ea2b2ea4c4 added feature to remove site folder if not needed, also some linked to component tabs to fields, admin views, site views, and custom admin views 2017-01-20 02:16:50 +02:00
b02771762d improved the linked view option, and added the Linked - Admin Views to each field 2017-01-13 00:38:33 +02:00
0ae4e4f80d Added #31 feature to build fields and views dynamically via a sql dump. Fixed #29 to insure that a redirect loop does not occur easily. Made many other compiler improvements. 2016-12-30 12:47:19 +02:00
829384a56b added dynamic email helper fields to the global settings of all components that use the email helper class 2016-12-22 23:32:13 +02:00
0cd5660141 added another field to the component view, to add helper methods to both admin and site area of the component 2016-11-25 04:56:16 +02:00
082196378b Improved the lockdown WHMCS license integration 2016-11-22 19:08:17 +02:00
319944db68 Next test release of new update server 2016-11-22 11:22:45 +02:00
52f7737f5c updated the update server link 2016-11-22 11:21:50 +02:00
05160b499f Improved the compiler, added the option to add the update server file to the zipped package, fixed a few bugs. 2016-11-22 07:48:55 +02:00
07f9344265 Fixed some compile errors in relation to the adding of config fields to target a view menu relationship. Changed the notice area to give little reminder when new notice are sent. 2016-10-31 23:47:21 +02:00
e63441531b Fixed the compiler run on readme placeholder error 2016-10-24 01:05:06 +02:00
33f3bb5652 Added lots more demo data on Github to help demonstrate the ease of use. Adding feature to insert custom scripting during install. Adding easy issue tracking, and member notice board. Many bug fixes, to the compiler and general improvements. 2016-10-24 00:48:26 +02:00
ecb3ab5af9 Added custom buttons to admin views, improved the compiler code, with some bug fixes 2016-09-11 17:27:04 +02:00
8fbd4f8701 Added the updating sql files, sorry! 2016-09-07 23:37:07 +02:00
b8311078ac Added PHP (script - before publish) & PHP (script - after publish)
with some fixes to the compiler
2016-09-07 23:20:58 +02:00
f8d5145af9 Bug fix to getCustomScriptBuilder sig 2016-09-04 00:14:54 +01:00
a7e641b499 Added another PHP field to the admin views, improved the custom code methods in the compiler, and fixed some permissional errors. 2016-09-03 22:44:47 +01:00
675ecece84 Compiled update 2016-08-29 20:46:01 +01:00
f76587361b Fixed #14 the sql field type build method 2016-07-17 11:24:51 +01:00
2f9e54e371 Resolved #9 Layout Issue - Custom Lookup Field. 2016-07-12 22:07:55 +01:00
53cf534664 Fixed image link in readme.md 2016-06-28 05:27:09 +01:00
5567ca6856 New Release 2016-06-27 12:12:29 +01:00
7546e9aceb New Release 2016-06-27 12:05:53 +01:00
f09fd06ddc Removed $_GET from all callback response and used JInput instead 2016-06-24 15:23:01 +01:00
2004b8d91c Made some improvements to the compiler and extended the email helper features. 2016-06-23 16:05:37 +01:00
d82d4aeb22 Added email helper class. 2016-06-03 07:28:32 +01:00
5cd07f3b88 Removed the PDF lib since it made the installer to big for most servers. We will setup an another lib installer for the PDF library. 2016-06-02 17:34:46 +01:00
5d19f46070 Added the option to overwrite the default-fields, so you can add them to the list view in admin area and change their layout position in the edit view. Also fixed some minor bugs. 2016-06-02 17:18:49 +01:00
02f9523e1b Fixed fade-in affect problem of not loading the affect when added. 2016-05-31 06:36:31 +01:00
7f52decf16 Added fade-in option for admin views, added pdf lib to custom folder for use in projects. 2016-05-31 06:11:07 +01:00
d2aa1fce0b Improved the custom import option to include the display method override. 2016-05-20 06:00:31 +01:00
3b774a8385 This fixes #3 to insure that custom/other Data Length/Values can be set. 2016-05-12 02:26:54 +01:00
ee2fea1db8 Updated the readme file. 2016-05-10 06:47:47 +01:00
638 changed files with 50062 additions and 33352 deletions

147
README.md
View File

@ -1,69 +1,122 @@
# Component Builder (2.1.8)
# 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")
![Component Builder image](https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder/master/admin/assets/images/component-300.jpg "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 Component Builder with the following components as demo setup 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
# Extra Support
+ 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!
Would you require more help VDM.io has a number of support plans available [visit us today!](https://www.vdm.io/joomla-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*: 7th May, 2016
+ *Version*: 2.1.8
+ *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**
## Build Time
> 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)
**230 Hours** or **29 Eight Hour Days** (actual time the author saved -
due to [Automated Component Builder] (https://www.vdm.io/joomla-component-builder))
## Donations
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,
> never making one mistake or taking any coffee break.)
+ *Line count*: **82516**
+ *File count*: **501**
+ *Folder count*: **98**
**152 Hours** or **19 Eight Hour Days** (the actual time the author spent)
> (with the following break down:
> **debugging @58hours** = codingtime / 4;
> **planning @33hours** = codingtime / 7;
> **mapping @23hours** = codingtime / 10;
> **office @38hours** = codingtime / 6;)
**382 Hours** or **48 Eight Hour Days**
(a total of the realistic time frame for this project)
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,
> with the normal everyday realities at the office, that includes the component planning, mapping & debugging.)
Project duration: **9.6 weeks** or **2 months**
> 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)
Come on buy me a coffee :)
* PayPal: pay@vdm.io
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3

122
admin/README.txt Normal file
View File

@ -0,0 +1,122 @@
# Component Builder (2.3.6)
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.jpg "The Component Builder")
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

View File

@ -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" />

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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;}

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View 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 */

View 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 */

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

View File

@ -9,13 +9,12 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -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###
/------------------------------------------------------------------------------------------------------*/

View File

@ -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);
@ -162,31 +168,33 @@ abstract class ###Component###Helper
return false;
}
public static function jsonToString($value, $sperator = ", ")
public static function jsonToString($value, $sperator = ", ", $table = null)
{
// check if string is JSON
$result = json_decode($value, true);
if (json_last_error() === JSON_ERROR_NONE) {
// is JSON
if (json_last_error() === JSON_ERROR_NONE)
{
// is JSON
if (self::checkArray($result))
{
$value = '';
$counter = 0;
foreach ($result as $string)
if (self::checkString($table))
{
if ($counter)
$names = array();
foreach ($result as $val)
{
$value .= $sperator.$string;
if ($name = self::getVar($table, $val, 'id', 'name'))
{
$names[] = $name;
}
}
else
if (self::checkArray($names))
{
$value .= $string;
}
$counter++;
return (string) implode($sperator,$names);
}
}
return $value;
return (string) implode($sperator,$result);
}
return json_decode($value);
return (string) json_decode($value);
}
return $value;
}
@ -257,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')
{
@ -478,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
@ -592,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;
@ -661,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;
}

View File

@ -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;
}
}

View File

@ -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,35 +33,38 @@ defined('_JEXEC') or die('Restricted access');
* ###Component### component helper
*/
abstract class ###Component###Helper
{###SITE_GLOBAL_EVENT_HELPER### ###SITE_CUSTOM_HELPER_SCRIPT###
public static function jsonToString($value)
{###SITE_GLOBAL_EVENT_HELPER### ###SITE_CUSTOM_HELPER_SCRIPT### ###BOTH_CUSTOM_HELPER_SCRIPT###
public static function jsonToString($value, $sperator = ", ", $table = null)
{
// check if string is JSON
$result = json_decode($value, true);
if (json_last_error() === JSON_ERROR_NONE) {
// check if string is JSON
$result = json_decode($value, true);
if (json_last_error() === JSON_ERROR_NONE)
{
// is JSON
if (self::checkArray($result))
if (self::checkArray($result))
{
if (self::checkString($table))
{
$value = '';
$counter = 0;
foreach ($result as $string)
$names = array();
foreach ($result as $val)
{
if ($counter)
if ($name = self::getVar($table, $val, 'id', 'name'))
{
$value .= ", ".$string;
$names[] = $name;
}
else
{
$value .= $string;
}
$counter++;
}
if (self::checkArray($names))
{
return (string) implode($sperator,$names);
}
}
return json_decode($value);
}
return $value;
}
return (string) implode($sperator,$result);
}
return (string) json_decode($value);
}
return $value;
}
/**
* Load the Component xml manifest.
@ -168,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
@ -273,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);
@ -399,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')
{
@ -583,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;
@ -652,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)

View File

@ -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###
}

View File

@ -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.

View File

@ -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
{

View File

@ -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
{

View File

@ -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.

View File

@ -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.

View File

@ -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
{

View File

@ -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
{

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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();

View File

@ -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;
}

View File

@ -36,59 +36,7 @@ jimport('joomla.application.component.view');
* ###Component### ###View### View
*/
class ###Component###View###View### extends JViewLegacy
{
protected $headerList;
protected $hasPackage = false;
protected $headers;
protected $hasHeader = 0;
protected $dataType;
public function display($tpl = null)
{
if ($this->getLayout() !== 'modal')
{
// Include helper submenu
###Component###Helper::addSubmenu('import');
}
// Check for errors.
if (count($errors = $this->get('Errors'))){
JError::raiseError(500, implode('<br />', $errors));
return false;
}
$paths = new stdClass;
$paths->first = '';
$state = $this->get('state');
$this->paths = &$paths;
$this->state = &$state;
// get global action permissions
$this->canDo = ###Component###Helper::getActions('import');
// We don't need toolbar in the modal window.
if ($this->getLayout() !== 'modal')
{
$this->addToolbar();
$this->sidebar = JHtmlSidebar::render();
}
// get the session object
$session = JFactory::getSession();
// check if it has package
$this->hasPackage = $session->get('hasPackage', false);
$this->dataType = $session->get('dataType', false);
if($this->hasPackage && $this->dataType)
{
$this->headerList = json_decode($session->get($this->dataType.'_VDM_IMPORTHEADERS', false),true);
$this->headers = ###Component###Helper::getFileHeaders($this->dataType);
// clear the data type
$session->clear('dataType');
}
// Display the template
parent::display($tpl);
}
{###IMPORT_DISPLAY_METHOD_CUSTOM###
/**
* Setting the toolbar

View File

@ -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))
{

View File

@ -0,0 +1 @@
###README###

View File

@ -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).");";
}
}

View File

@ -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>

View File

@ -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

View File

@ -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###

View File

@ -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)) : ?>

View File

@ -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###

View File

@ -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'); ?>

View File

@ -30,16 +30,18 @@ defined('_JEXEC') or die('Restricted access');
defined('_JEXEC') or die('Restricted access');
?>
<?php if(is_array($this->icons['main'])) :?>
<?php if(isset($this->icons['main']) && is_array($this->icons['main'])) :?>
<?php foreach($this->icons['main'] as $icon): ?>
<div class="dashboard-wraper">
<div class="dashboard-content">
<a class="icon" href="<?php echo $icon->url; ?>">
<img alt="<?php echo $icon->alt; ?>" src="components/com_###component###/assets/images/icons/<?php echo $icon->image; ?>">
<span class="dashboard-title"><?php echo JText::_($icon->name); ?></span>
</a>
</div>
</div>
<?php endforeach; ?>
<div class="clearfix"></div>
<div class="dashboard-wraper">
<div class="dashboard-content">
<a class="icon" href="<?php echo $icon->url; ?>">
<img alt="<?php echo $icon->alt; ?>" src="components/com_###component###/assets/images/icons/<?php echo $icon->image; ?>">
<span class="dashboard-title"><?php echo JText::_($icon->name); ?></span>
</a>
</div>
</div>
<?php endforeach; ?>
<div class="clearfix"></div>
<?php else: ?>
<div class="alert alert-error"><h4 class="alert-heading"><?php echo JText::_("Permission denied, or not correctly set"); ?></h4><div class="alert-message"><?php echo JText::_("Please notify your System Administrator if result is unexpected."); ?></div></div>
<?php endif; ?>

View File

@ -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###

View File

@ -1,4 +1,4 @@
<?php
<?php
/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/
__ __ _ _____ _ _ __ __ _ _ _
\ \ / / | | | __ \ | | | | | \/ | | | | | | |
@ -10,12 +10,9 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.1.8
@build 7th 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;
}
}

View File

@ -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.';

View File

@ -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)

View File

@ -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###
}
}
}

View File

@ -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/",

View File

@ -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}.");
}
}

View File

@ -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;
}
}

View File

@ -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 {}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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.");
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

Some files were not shown because too many files have changed in this diff Show More