Merge remote-tracking branch 'origin/3.6' into 3.7

Conflicts:
	htdocs/core/class/commonobject.class.php
	htdocs/product/liste.php
This commit is contained in:
Laurent Destailleur
2014-12-18 11:42:55 +01:00
4875 changed files with 121365 additions and 260183 deletions

5
.gitignore vendored
View File

@@ -17,7 +17,4 @@ doxygen_warnings.log
*.iml
Thumbs.db
# Vagrant generated files
.vagrant
/index.html
/phpmyadmin
/xhprof
.vagrant

View File

@@ -180,8 +180,38 @@ tools:
- 'htdocs/includes/*'
paths: { }
php_changetracking:
enabled: false
bug_patterns:
- '\bfix(?:es|ed)?\b'
feature_patterns:
- '\badd(?:s|ed)?\b'
- '\bimplement(?:s|ed)?\b'
filter:
excluded_paths:
- 'build/*'
- 'dev/*'
- 'doc/*'
- 'test/*'
- 'htdocs/includes/*'
paths: { }
# Coding-Style / Bug Detection
js_hint: false
js_hint:
enabled: false
use_native_config: true
extensions:
- js
filter:
excluded_paths:
- 'build/*'
- 'dev/*'
- 'doc/*'
- 'test/*'
- 'htdocs/includes/*'
paths: { }
config: { }
path_configs: { }
before_commands: { }

View File

@@ -36,6 +36,7 @@ before_script:
- echo Install phpcs then show installed rules
- pyrus install pear/PHP_CodeSniffer
- phpenv rehash
- phpcs --version
- phpcs -i
- echo Create dir $(pwd)/htdocs/documents
- sudo mkdir -p $(pwd)/htdocs/documents/admin/temp;
@@ -53,12 +54,14 @@ before_script:
- sh -c "if [ '$PHPV' = '5.3' ]; then echo 'zend_extension_ts = xdebug.so' >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi"
- sh -c "if [ '$PHPV' = '5.4' ]; then echo 'zend_extension_ts = xdebug.so' >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi"
- cat ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
- echo Mysql version
- mysql --version
- echo Init database
- sh -c "if [ '$DB' = 'pgsql' ]; then psql -c 'DROP DATABASE IF EXISTS myapp_test;' -U postgres; fi"
- sh -c "if [ '$DB' = 'pgsql' ]; then psql -c 'CREATE DATABASE myapp_test;' -U postgres; fi"
- sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'DROP DATABASE IF EXISTS myapp_test;'; fi"
- sh -c "if [ '$DB' = 'mysql' ]; then mysql -e 'CREATE DATABASE IF NOT EXISTS myapp_test;'; fi"
- sh -c "if [ '$DB' = 'mysql' ]; then mysql -D myapp_test < $(pwd)/dev/initdata/mysqldump_dolibarr_3.4.0.sql; fi"
- sh -c "if [ '$DB' = 'mysql' ]; then mysql -D myapp_test < $(pwd)/dev/initdata/mysqldump_dolibarr_3.5.0.sql; fi"
- echo Create config file htdocs/conf/conf.php
- echo '<?php ' > htdocs/conf/conf.php
- sh -c "if [ '$DB' = 'pgsql' ]; then echo '$'dolibarr_main_db_type=\'pgsql\'';' >> htdocs/conf/conf.php; fi"
@@ -87,18 +90,22 @@ before_script:
script:
- cd htdocs/install
- php upgrade.php 3.4.0 3.5.0 > upgrade.log
- php upgrade2.php 3.4.0 3.5.0 > upgrade2.log
- date
# - php upgrade.php 3.4.0 3.5.0 > upgrade.log
# - php upgrade2.php 3.4.0 3.5.0 > upgrade2.log
- php upgrade.php 3.5.0 3.6.0 >> upgrade.log
- php upgrade2.php 3.5.0 3.6.0 >> upgrade2.log
# - cat upgrade.log
- php upgrade.php 3.6.0 3.7.0 >> upgrade.log
# - cat upgrade360370.log
- php upgrade2.php 3.6.0 3.7.0 >> upgrade2.log
# - cat upgrade2.log
- cd ../..
- date
# - phpcs -p --warning-severity=0 -s --report-summary --standard=dev/codesniffer/ruleset.xml --tab-width=4 --ignore=/build/html/,/dev/vagrant/,/documents/,/includes/,/test/report/ htdocs/core/class/dolgraph.class.php 2>&1
- phpcs -p --warning-severity=0 -s --report-checkstyle --report-summary --standard=dev/codesniffer/ruleset.xml --tab-width=4 --ignore=/build/html/,/dev/vagrant/,/documents/,/includes/,/test/report/ . 2>&1
- date
- phpunit -d memory_limit=-1 --configuration test/phpunit/phpunittest.xml test/phpunit/AllTests.php
- date
# - phpcs -p --warning-severity=0 -s --report-summary --standard=dev/codesniffer/ruleset.xml --tab-width=4 --ignore=/build/html/,/dev/vagrant/,/documents/,/includes/,/test/report/ htdocs/core/class/dolgraph.class.php 2>&1
- phpcs -p --warning-severity=0 -s --report-checkstyle --report-summary --standard=dev/codesniffer/ruleset.xml --tab-width=4 --ignore=/htdocs/conf/conf.php,/build/html/,/dev/vagrant/,/documents/,/includes/,/test/report/ . 2>&1
- date
after_script:
# - echo Output dolibarr log file; cat $(pwd)/htdocs/documents/dolibarr.log

View File

@@ -2,6 +2,12 @@
host = https://www.transifex.com
lang_map = uz: uz_UZ
[dolibarr.accountancy]
file_filter = htdocs/langs/<lang>/accountancy.lang
source_file = htdocs/langs/en_US/accountancy.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.admin]
file_filter = htdocs/langs/<lang>/admin.lang
source_file = htdocs/langs/en_US/admin.lang
@@ -212,12 +218,6 @@ source_file = htdocs/langs/en_US/orders.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.oscommerce]
file_filter = htdocs/langs/<lang>/oscommerce.lang
source_file = htdocs/langs/en_US/oscommerce.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.other]
file_filter = htdocs/langs/<lang>/other.lang
source_file = htdocs/langs/en_US/other.lang
@@ -236,6 +236,18 @@ source_file = htdocs/langs/en_US/paypal.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.printipp]
file_filter = htdocs/langs/<lang>/printipp.lang
source_file = htdocs/langs/en_US/printipp.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.productbatch]
file_filter = htdocs/langs/<lang>/productbatch.lang
source_file = htdocs/langs/en_US/productbatch.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.products]
file_filter = htdocs/langs/<lang>/products.lang
source_file = htdocs/langs/en_US/products.lang
@@ -254,6 +266,12 @@ source_file = htdocs/langs/en_US/propal.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.resource]
file_filter = htdocs/langs/<lang>/resource.lang
source_file = htdocs/langs/en_US/resource.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.salaries]
file_filter = htdocs/langs/<lang>/salaries.lang
source_file = htdocs/langs/en_US/salaries.lang
@@ -266,12 +284,6 @@ source_file = htdocs/langs/en_US/sendings.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.shop]
file_filter = htdocs/langs/<lang>/shop.lang
source_file = htdocs/langs/en_US/shop.lang
source_lang = en_US
type = MOZILLAPROPERTIES
[dolibarr.sms]
file_filter = htdocs/langs/<lang>/sms.lang
source_file = htdocs/langs/en_US/sms.lang
@@ -313,4 +325,3 @@ file_filter = htdocs/langs/<lang>/workflow.lang
source_file = htdocs/langs/en_US/workflow.lang
source_lang = en_US
type = MOZILLAPROPERTIES

View File

@@ -9,41 +9,41 @@ More information: http://www.gnu.org/licenses/gpl-3.0.txt
Dolibarr uses some external libraries released under different licenses. This is compatibility summary:
Component Version License GPL Compatible Usage
Component Version License GPL Compatible Usage
-------------------------------------------------------------------------------------
PHP libraries:
AdoDb-Date 0.32 Modified BSD License Yes Date convertion (not into rpm package)
CKEditor 4.3.3 LGPL-2.1+ Yes Editor WYSIWYG
FPDI 1.4.2 Apache Software License 2.0 Yes PDF templates management
FPDF_TPL 1.2 Apache Software License 2.0 Yes PDF templates management
GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package)
NuSoap 0.9.5 LGPL 2.1+ Yes Library to develop SOAP Web services (not into rpm and deb package)
odtPHP 1.0.1 GPL-2+ b Yes Library to build/edit ODT files
PHPExcel 1.7.6 LGPL-2.1+ Yes Read/Write XLS files, read ODS files
PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests
TCPDF 6.0.093 LGPL-3+ Yes PDF generation
AdoDb-Date 0.32 Modified BSD License Yes Date convertion (not into rpm package)
CKEditor 4.3.3 LGPL-2.1+ Yes Editor WYSIWYG
FPDI 1.4.2 Apache Software License 2.0 Yes PDF templates management
FPDF_TPL 1.2 Apache Software License 2.0 Yes PDF templates management
GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package)
NuSoap 0.9.5 LGPL 2.1+ Yes Library to develop SOAP Web services (not into rpm and deb package)
odtPHP 1.0.1 GPL-2+ b Yes Library to build/edit ODT files
PHPExcel 1.7.8 LGPL-2.1+ Yes Read/Write XLS files, read ODS files
PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests
TCPDF 6.0.093 LGPL-3+ Yes PDF generation
JS libraries:
jQuery 1.8.2 MIT License Yes JS library
jQuery UI 1.9.1 GPL and MIT License Yes JS library plugin UI
jQuery UI Multiselect ? GPL and MIT License Yes JS library plugin for sexier multiselect
jQuery blockUI 2.43 GPL and MIT License Yes JS library plugin blockUI (to use ajax popups)
jQuery Colorpicker 1.1 MIT License Yes JS library for color picker for a defined list of colors
jQuery DataTables 1.9.4 BSD Yes JS library for tables output
jQuery FileUpload 5.0.3 GPL and MIT License Yes JS library to upload files
jQuery Flot 0.7 MIT License Yes JS library to build graph
jQuery JCrop 0.9.8 GPL and MIT License Yes JS library plugin Crop (to crop images)
jQuery Jeditable 1.7.1 GPL and MIT License Yes JS library plugin jeditable (to edit in place)
jQuery jNotify 1.1.00 Apache Software License 2.0 Yes JS library plugin jNotify (to use ajax popups)
jQuery jPicker 1.1.6 GPL and MIT License Yes JS library for color picker with not defined list of colors
jQuery jqueryFileTree 1.0.1 GPL and MIT License Yes JS library for color picker with not defined list of colors
jQuery jquerytreeview 1.4.1 MIT License Yes JS library for color picker with not defined list of colors
jQuery Layout 1.3.0rc30.74 GPL and MIT License Yes JS library plugin Layout (RC-29.15)
jQuery Mobile 1.3.0 GPL and MIT License Yes JS library for smartphone (not used)
jQuery TableDnD 0.6 GPL and MIT License Yes JS library plugin TableDnD (to reorder table rows)
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
jQuery Tiptip 1.3 GPL and MIT License Yes JS library for tooltips
jsGantt 1.2 BSD License Yes JS library (to build Gantt reports)
jQuery 1.8.2 MIT License Yes JS library
jQuery UI 1.9.1 GPL and MIT License Yes JS library plugin UI
jQuery select2 3.5.2 GPL and Apache License Yes JS library plugin for sexier multiselect
jQuery blockUI 2.43 GPL and MIT License Yes JS library plugin blockUI (to use ajax popups)
jQuery Colorpicker 1.1 MIT License Yes JS library for color picker for a defined list of colors
jQuery DataTables 1.9.4 BSD Yes JS library for tables output
jQuery FileUpload 5.0.3 GPL and MIT License Yes JS library to upload files
jQuery Flot 0.7 MIT License Yes JS library to build graph
jQuery JCrop 0.9.8 GPL and MIT License Yes JS library plugin Crop (to crop images)
jQuery Jeditable 1.7.1 GPL and MIT License Yes JS library plugin jeditable (to edit in place)
jQuery jNotify 1.1.00 Apache Software License 2.0 Yes JS library plugin jNotify (to use ajax popups)
jQuery jPicker 1.1.6 GPL and MIT License Yes JS library for color picker with not defined list of colors
jQuery jqueryFileTree 1.0.1 GPL and MIT License Yes JS library for color picker with not defined list of colors
jQuery jquerytreeview 1.4.1 MIT License Yes JS library for color picker with not defined list of colors
jQuery Layout 1.3.0rc30.74 GPL and MIT License Yes JS library plugin Layout (RC-29.15)
jQuery Mobile 1.3.0 GPL and MIT License Yes JS library for smartphone (not used)
jQuery TableDnD 0.6 GPL and MIT License Yes JS library plugin TableDnD (to reorder table rows)
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
jQuery Tiptip 1.3 GPL and MIT License Yes JS library for tooltips
jsGantt 1.2 BSD License Yes JS library (to build Gantt reports)
For licenses compatibility informations:
http://www.fsf.org/licensing/licenses/index_html

178
ChangeLog
View File

@@ -2,8 +2,170 @@
English Dolibarr ChangeLog
--------------------------------------------------------------
***** ChangeLog for 3.5.7 compared to 3.5.6 *****
Fix: Paypal link were broken dur to SSL v3 closed.
***** ChangeLog for 3.7 compared to 3.6.* *****
For users:
- New: Match other auth system: Login can be done entering login or user
email (this open the road for SSO).
- New: Agenda export by project #1967.
- New: Increase length of thirdparty to 128 chars.
- New: "Is Order shippable" icon #1975.
- New: statistics on supplier orders and invoices on home page.
- New: Add permissions to read all trips and expenses.
- New: Can filter on date into tab "Referring object" of a project.
- New: Module notification has been enhanced:
EMail use now language of target contact.
Can also define a fixed email for notifications.
- New: Feature to link manually an order to an invoice does not disappear once
link has been done.
- New: Can set a color on user card (visible into agenda view).
- New: extrafields for projects and tasks are exported to ODT documents.
- New: Add number of active notification into tab title (like we do for notes and documents)
- New: Can add product into category from category card.
- New: PDF event report show project and status of event.
- New: Can filter on status on interventions.
- New: Add help info of field type into dictionary of payment types.
- New: Add proposals into referer page of thirdparty.
- New: On contact list can set filter on both active and not active (no more exclusive select).
- New: Intervention documents are now available in ECM module.
- New: Can attach supplier order to a customer order.
- New: Supervisor is now visible into user list.
- New: Add user of creation and validation on invoice export.
- New: Add info page about browser.
- New: Enable feature developed for 3.6 we forgot to enabled: Adding prefix
on uploaded file names.
- New: No more dependency between contract and service module.
- New: [ task #867 ] Remove ESAEB external module code from core.
- New: Can create proposal from an intervention.
- New: An event can be assigned to several users.
- New: Can filter events on a group of users.
- New: Can filter events of a thirdparty.
- New: Onto event summary of elements, end date and status are visible.
- New: Split Agenda view (month, week, day) into different tabs.
- New: Add a view "per user" of agenda events (with different colors according to type of event).
- New: Each user can include its own external ics calendar into dolibarr agenda view.
- New: Add event FICHINTER_CLASSIFY_BILLED into list of possible events to
create an automatic event into agenda.
- New: Add new type of event (when type of events are used, not by default).
- New: Can disable predefined type of events.
- New: Form to add a photo is immediatly available on photo page if
permissions are ok (save one click per photo to add).
- New: Add option PRODUCT_MAX_VISIBLE_PHOTO to limit number of photos
shown on main product card.
- New: Add country into table of thirdparties type. This will allow to provide
a list of thirdparty types specific to a country (like argentina that
need type A or B).
- New: Can force a specific bank account onto an invoice/order.
- New: Home page of project area shows list of draft project (like other main page).
- New: Can search on project ref or string from project main page (like other main page).
- New: First change to match accessibility rules: http://www.w3.org/TR/WCAG10-HTML-TECHS/
Differentiate text and img.
Use label into quick search form.
Use accesskey on form search.
- New: Intervention documents are now available in ECM module.
- New: Add attachments on user card + in ECM module.
- New: Can add __PROJECT_REF__ and __TIHRPARTY_NAME__ into email topic or content template.
- New: [ task #1204 ] add Numering contrat module free (like leopard in product module).
- New: [ task #712 ] Add warning when creating invoice from proposal or order, when there is already one invoice.
- New: Enable supplier price log table.
- New: [ task #1204 ] add a supplier reference to contract.
- New: [ task #1218 ] Can drag and drop an event from calendar to change its day.
- New: Optimize size of image static resources.
- New: Add hourly and daily amount on user card. Add weekly working hours and salary on user card.
- New: Content of predefined email come firstly from table llx_c_email_template, then translation key.
- New: Add option MAIN_GENERATE_INVOICES_WITH_PICTURE to show picture
onto PDF like MAIN_GENERATE_PROPOSALS_WITH_PICTURE dir for proposals.
- New: Add more search field in list of cheque deposits.
- New: Add feature to order to invoice on supplier part.
- New : Use of MAIN_USE_FILECACHE_EXPORT_EXCEL_DIR to use disk cache for big excel export.
- New: Direct invoice creation from predefined invoice.
- New: Add dunning into accountancy report.
- New: Add favorite button into country dictionary to put value on top select list
- Upgrade phpexcel lib to 1.7.8
- New : Use of MAIN_USE_FILECACHE_EXPORT_EXCEL_DIR to use disk cache for big excel export.
- New : Option on extrafields to have them always editable regardless of the document status.
- New : New module PrintIPP to print without opening document is available as stable.
- Fix: [ bug #1487 ] PAYMENT_DELETE trigger does not intercept trigger action
- Fix: [ bug #1470, #1472, #1473] User trigger problem
- Fix: [ bug #1489, #1491 ] Intervention trigger problem
- Fix: [ bug #1492, #1493 ] Member trigger problem
- Fix: [ bug #1474, #1475 ] Contract trigger problem
- Fix: [ bug #1496 ] ACTION_DELETE trigger does not show trigger error
- Fix: [ bug #1494 ] CATEGORY_CREATE and CATEGORY_MODIFY triggers do not intercept trigger action
- Fix: [ bug #1502 ] DON_CREATE trigger does not intercept trigger action
- Fix: [ bug #1505, #1504] Project trigger problem
- Fix: [ bug #1463, #1464 ] Proposal triggers problem
- Fix: [ bug #1498, #1499 ] Shipment/Delivery triggers problem
- Fix: [ bug #1465, #1466 ] Product triggers problem
- Fix: [ bug #1508 ] STOCK_MOVEMENT does not show trigger error message
- Fix: [ bug #1501 ] DEPLACEMENT_CREATE trigger do not intercept trigger action
- Fix: [ bug #1506, #1507 ] ECM trigger error problem
- Fix: [ bug #1469 ] Triggers CONTACT_MODIFY and CONTACT_DELETE duplicates error message
- Fix: [ bug #1537 ] Difference between societe.nom and adherent.societe.
- Fix: [ bug #1535 ] Supplier invoice Extrafields are not shown
- Fix: datepicker first day of week can be monday by setting into display setup
For users, new experimental module (need to set feature level of instance to experimental to see them):
- New: Module Accounting Expert to manage accountancy
Special Thanks to developpers :
Olivier Geffroy
Alexandre Spangaro
Ari Elbaz
Florian Henry
Juanjo Menent
And to the contributors :
Jeff Info 2000 euros
Nord Anim 120 euros
Hydroflex 120 euros
Asysteo 120 euros
Fournisseur médical 120 euros
- Removed: unmaintained OScommerce module
For translators:
- Update language files.
- New: When a translation is not available we always jump to en_US and only en_US.
For developers:
- New: Add a css style "cursorpointer".
- New: Select list of users can return user into hierarchy.
- New: getBrowserInfo can return type of layout of browser (classic/phone/tablet)
- New: Add hook "searchAgendaFrom" and "beforePDFCreation".
- New: Add trigger DON_UPDATE, DON_DELETE
- New: Add country iso code on 3 chars into table of countries.
- Qual: Removed hard coded rowid into data init of table llx_c_action_trigger.
- LINEBILL_DELETE, LINK_DELETE, ORDER_SUPPLIER_DELETE, RESOURCE_DELETE trigger called before SQL delete
- New: [ Task #1481 ] Add trigger BILL_SUPPLIER_UPDATE.
- New: [ Task #1495 ] Add trigger LINECONTRACT_CREATE.
- New: Added hook "formConfirm" and "doActions" for supplier invoice card.
- New: [ task #1511, #1426 ] Added hook "doActions" for supplier card and supplier order card.
- New: renamed table llx_c_pays to llx_c_country & libelle field to label.
- New: Added hook "formConfirm" and "doActions" for fichinter card
- New: Can search list of thirdparties from web service on part of name.
- New: Function getCurrencyAmount is marked as deprecated. Use function price to output a price
including currency symbol.
- Qual: Renamed table llx_c_civilite into llx_c_civility,
field civilite into label in the same table,
and field civilite into civility in other table.
- Qual: Renamed all files & links "liste.php" into "list.php".
- Qual: Renamed all files & links "fiche.php" into "card.php".
- Qual: Replace all constants COMPTA_* by ACCOUNTING_*.
- Qual: Replace all constants ACCOUNTINGEX_* by ACCOUNTING_* to simplify migration of the module
WARNING: Following changes may create regression for some external modules, but was necessary to make
Dolibarr better:
- If you can't see trips and expenses records, check that you have the new permission "read all
trips and expenses".
- Deprecated module "oscommerce" were removed.
- Changed the way parameters are provided to scripts sync_xxx_ldap2dolibarr.php
- Some field into database were renamed from "libelle" to "label".
- Table llx_c_pays were renamed into llx_c_country.
- Triggers *_BUILDDOC are removed. Building a doc is not a business event. For action after
creation of a pdf or odt, hook "afterPDFCreation" or "afterODTCreation" must be used instead.
- A lot of pages called fiche.php were renamed into card.php
- A lot of pages called liste.php were renamed into list.php
- If you used warehouse/stock module, recheck setup of stock increase/decrease rules of the
warehouse module and your Point Of Sale module if you use one.
***** ChangeLog for 3.6.2 compared to 3.6.1 *****
- Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice.
@@ -109,6 +271,9 @@ For users:
- Fix: Add actions events not implemented.
- Fix: Price min of composition is not supplier price min by quantity.
- Fix: [ bug #1356 ] Bank accountancy number is limited to 8 numbers.
- Fix: [ bug #1439 ] impossible to remove a a translation (multilanguage-feature)
- New: If multilangue is enabled, mail (from propal, invoice, etc...) message is pre-defaulted in Customer language
- Fix: [ bug #1459 ] _ADD_CONTACT and _DEL_CONTACT triggers do not intercept insertion when reported an error
- Fix: [ bug #1478 ] BILL_PAYED trigger action does not intercept failure under some circumstances
- Fix: [ bug #1479 ] Several customer invoice triggers do not intercept trigger action
- Fix: [ bug #1477 ] Several customer invoice triggers do not show trigger error messages
@@ -136,6 +301,8 @@ For developers:
- New: A module can disable a standard ECM view.
- New: Add multilang support into product webservice.
- New: Add hooks on project card page.
- New: Add call_trigger method on CommonObject class. So new trigger call within object is just :
$result = $this->call_trigger($trigger_name, $user)
WARNING: Following change may create regression for some external modules, but was necessary to make
Dolibarr better:
@@ -143,16 +310,19 @@ Dolibarr better:
- The deprecated way (with 4 parameters) to declare a new tab into a module descriptor file has been
removed. You must now use the 6 parameters way. See file modMyModule.class.php for example.
- Remove the javascript function ac_delay() that is not used anymore by core code.
- Properties "dictionnaries" into module descriptor files has been renamed into "dictionaries".
- Properties "dictionnaries" into module descriptor files have been renamed into "dictionaries".
- Method form->select_currency() has been removed. Use instead print form->selectCurrency().
- Method form->select_methodes_commande() has been renamed into english name selectInputMethod().
- The following hooks are now 'addreplace' hooks: "formCreateThirdpartyOptions"
So check that return value is 0 to keep default standard behaviour after hook or 1 to disable
So check that return value is 0 to keep default standard behaviour after hook, or 1 to disable
default standard behaviour.
- Properties "civilite_id" were renamed into "civility_id".
- Remove add_photo_web() that is ot used anymore by core code.
***** ChangeLog for 3.5.7 compared to 3.5.6 *****
Fix: Paypal link were broken dur to SSL v3 closed.
***** ChangeLog for 3.5.6 compared to 3.5.5 *****
Fix: Avoid missing class error for fetch_thirdparty method #1973
Fix: Can't update phone_pro from web service

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="dolibarr" default="hudson" basedir=".">
fdfds
<!-- Exclude/ignore paths -->
<property name="ignorepaths" value="${basedir}/htdocs/conf,${basedir}/htdocs/core/filemanagerdol,${basedir}/htdocs/includes" />
<property name="ignoreregexp" value="**/PEAR/*,**/NET/*,**/HTTP/*,**/zendgdata/*,**/reportico/*" />

View File

@@ -153,6 +153,9 @@ from origin/upstream and origin/pristine.
* Into root dir, launch:
> debian/get-orig-source.sh
If script fails with error Bad certificate, you can set "export PERL_LWP_SSL_VERIFY_HOSTNAME=0" to solve this.
* Some files are removed from archive by the get-orig-source.sh
* Staying into git root directory, run
> git-import-orig -vv ../tcpdf_x.y.z+dfsg.orig.tar.xz
@@ -160,9 +163,9 @@ from origin/upstream and origin/pristine.
Note: If there was errors solved manually, you may need to make a git commit
* Add an entry into debian/changelog
> dch -v x.y.z-dsfg-1 "My comment" will add entry.
For example: dch -v x.y.z-dsfg-1 "New upstream release." for a new version
Then modify changelog to replace "unstable" with "UNRELEASED".
> dch -v x.y.z+dfsg-1 "My comment" will add entry.
For example: dch -v x.y.z+dfsg-1 "New upstream release." for a new version
Then modify changelog to replace "version" or "unstable" with "UNRELEASED".
Warning: Date must have format reported by "date -R"
Warning: Name and email must match value into debian/control file (Entry added here is used by next step).
@@ -228,23 +231,29 @@ from origin/upstream and origin/pristine.
* If new upstream is available onto sourceforge, launch:
> debian/get-orig-source.sh
If script fails with error Bad certificate, you can set "export PERL_LWP_SSL_VERIFY_HOSTNAME=0" to solve this.
* Edit tgz file to remove ckeditor and phpexcel and rename file into
dolibarr-x.y.z+dsfgw.tgz
(x.y.z = version, w start from 1 and is increased for each new import)
* Edit tgz file to remove
- htdocs/includes/ckeditor
- htdocs/includes/jquery/plugins/datatables/extras/TableTools/swf
- htdocs/includes/phpexcel
- htdocs/includes/tcpdf
And rename file into
dolibarr-x.y.z+dfsgw.tgz
(x.y.z = version, w start from 1 and is increased for each new git-import-orig already done)
* Staying into git root directory, run
> git-import-orig -vv ../dolibarr-x.y.z+dsfgw.tgz
> git-import-orig -vv ../dolibarr-x.y.z+dfsgw.tgz
and enter version when requested with format
x.y.z+dsfgw
x.y.z+dfsgw
(x.y.z = version, w start from 1 and is increased for each new import)
Note: If there was errors solved manually after get-orig-sources.sh, you may need to make a git commit
* Add an entry into debian/changelog
> dch -v x.y.z-w "My comment" will add entry.
For example: dch -v x.y.z-w "New upstream release." for a new version (x.y.z = version, w start from 1 and increaed for each new import)
Then modify changelog to replace "unstable" with "UNRELEASED".
> dch -v x.y.z+dfsg-w "My comment" will add entry.
For example: dch -v x.y.z+dfsgw-1 "New upstream release." for a new version (x.y.z = version, w start from 1 and increaed for each new import)
Then modify changelog to replace "version" or "unstable" with "UNRELEASED".
Then check/modify also the user/date signature:
- Date must have format reported by "date -R"
- Name and email must match value into debian/control file (Entry added here is used by next step).

View File

@@ -1,13 +1,6 @@
dolibarr (3.6.1-3) unstable; urgency=low
dolibarr (3.7.0-3) UNRELEASED; urgency=low
[ Laurent Destailleur (eldy) ]
* New upstream release.
-- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Tue, 23 Sep 2014 12:00:00 +0100
dolibarr (3.6.0-3) unstable; urgency=low
[ Laurent Destailleur (eldy) ]
* New upstream release.
-- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Tue, 15 July 2014 12:00:00 +0100
-- Laurent Destailleur (eldy) <eldy@users.sourceforge.net> Tue, 21 Oct 2014 12:00:00 +0100

View File

@@ -1,10 +1,9 @@
#!/bin/sh
# Scan for new official sources and download file
# run with debian/get-orig-source.sh [x.y.z]
tmpdir=$(mktemp -d)
echo "tmpdir = $tmpdir"
# Download source file
if [ -n "$1" ]; then
uscan_opts="--download-version=$1"
fi

View File

@@ -17,9 +17,9 @@
; ----- Change this -----
AppName=DoliWamp
; DoliWamp-x.x.x or DoliWamp-x.x.x-alpha or DoliWamp-x.x.x-beta or DoliWamp-x.x.x-rc or DoliWamp-x.x.x
AppVerName=DoliWamp-3.6.1
AppVerName=DoliWamp-3.7.0-beta
; DoliWamp-x.x x or DoliWamp-x.x.x-alpha or DoliWamp-x.x.x-beta or DoliWamp-x.x.x-rc or DoliWamp-x.x.x
OutputBaseFilename=DoliWamp-3.6.1
OutputBaseFilename=DoliWamp-3.7.0-beta
; ----- End of change
;OutputManifestFile=build\doliwampbuild.log
; Define full path from which all relative path are defined

View File

@@ -61,13 +61,17 @@ If you want to build/test package locally:
- List of series are visible here: https://launchpad.net/dolibarr/+series
# To update Dolibarr into launchpad (when repository for sources already exists)
# To update Dolibarr into launchpad (when remote repository for sources already exists)
#----------------------------------
# create local repository
cd bzr
bzr branch lp:~yourlogin/dolibarr/[dev|beta|stable]
bzr branch lp:~yourlogin/dolibarr/[develop|beta|stable] dolibarr-[dev|beta|stable]
cd dolibarr-[dev|beta|stable]
# Update
bzr update
-- Update files here. Remove all and overwrite --
bzr status
-- Update files here --
bzr add *
bzr commit -m "Description of change"
bzr push

File diff suppressed because it is too large Load Diff

View File

@@ -1,300 +0,0 @@
#!/usr/bin/perl
#----------------------------------------------------------------------------
# \file build/makepack-dolibarrlang.pl
# \brief Package builder (tgz, zip, rpm, deb, exe)
# \author (c)2005 Laurent Destailleur <eldy@users.sourceforge.net>
#----------------------------------------------------------------------------
use Cwd;
$PROJECT = "dolibarr";
@LISTETARGET = ("TGZ"); # Possible packages
%REQUIREMENTTARGET = ( # Tool requirement for each package
"TGZ" => "tar",
"ZIP" => "7z",
"EXE" => "makensis.exe"
);
%ALTERNATEPATH = (
"7z" => "7-ZIP",
"makensis.exe" => "NSIS"
);
use vars qw/ $REVISION $VERSION /;
$REVISION = '1.10';
$VERSION = "1.0 (build $REVISION)";
#------------------------------------------------------------------------------
# MAIN
#------------------------------------------------------------------------------
( $DIR = $0 ) =~ s/([^\/\\]+)$//;
( $PROG = $1 ) =~ s/\.([^\.]*)$//;
$Extension = $1;
$DIR ||= '.';
$DIR =~ s/([^\/\\])[\\\/]+$/$1/;
# Detect OS type
# --------------
if ( "$^O" =~ /linux/i || ( -d "/etc" && -d "/var" && "$^O" !~ /cygwin/i ) ) {
$OS = 'linux';
$CR = '';
}
elsif ( -d "/etc" && -d "/Users" ) { $OS = 'macosx'; $CR = ''; }
elsif ( "$^O" =~ /cygwin/i || "$^O" =~ /win32/i ) {
$OS = 'windows';
$CR = "\r";
}
if ( !$OS ) {
print "$PROG.$Extension was not able to detect your OS.\n";
print "Can't continue.\n";
print "$PROG.$Extension aborted.\n";
sleep 2;
exit 1;
}
# Define buildroot
# ----------------
if ( $OS =~ /linux/ ) {
$TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "/tmp";
}
if ( $OS =~ /macos/ ) {
$TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "/tmp";
}
if ( $OS =~ /windows/ ) {
$TEMP = $ENV{"TEMP"} || $ENV{"TMP"} || "c:/temp";
$PROGPATH = $ENV{"ProgramFiles"};
}
if ( !$TEMP || !-d $TEMP ) {
print "Error: A temporary directory can not be find.\n";
print "Check that TEMP or TMP environment variable is set correctly.\n";
print "makepack-dolibarrlang.pl aborted.\n";
sleep 2;
exit 2;
}
$BUILDROOT = "$TEMP/dolibarr-buildroot";
my $copyalreadydone = 0;
my $batch = 0;
print "Makepack langs version $VERSION\n";
print "Enter language code to package (en_US, fr_FR, ...) : ";
$PROJECT = <STDIN>;
chomp($PROJECT);
# Ask and set version $MAJOR and $MINOR
print "Enter value for version: ";
$PROJVERSION = <STDIN>;
chomp($PROJVERSION);
( $MAJOR, $MINOR ) = split( /\./, $PROJVERSION, 2 );
if ( $MINOR eq '' ) {
print "Enter value for minor version: ";
$MINOR = <STDIN>;
chomp($MINOR);
}
$FILENAME = "$PROJECT";
$FILENAMETGZ = "lang_$PROJECT-$MAJOR.$MINOR";
if ( -d "/usr/src/redhat" ) {
# redhat
$RPMDIR = "/usr/src/redhat";
}
if ( -d "/usr/src/RPM" ) {
# mandrake
$RPMDIR = "/usr/src/RPM";
}
$SOURCE = "$DIR/../../dolibarr";
$DESTI = "$SOURCE/build";
# Choose package targets
#-----------------------
$target = "ZIP"; # Les langs sont au format zip
if ($target) {
$CHOOSEDTARGET{ uc($target) } = 1;
}
else {
my $found = 0;
my $NUM_SCRIPT;
while ( !$found ) {
my $cpt = 0;
printf( " %d - %3s (%s)\n",
$cpt, "All", "Need " . join( ",", values %REQUIREMENTTARGET ) );
foreach my $target (@LISTETARGET) {
$cpt++;
printf( " %d - %3s (%s)\n",
$cpt, $target, "Need " . $REQUIREMENTTARGET{$target} );
}
# Are asked to select the file to move
print "Choose one package number or several separated with space: ";
$NUM_SCRIPT = <STDIN>;
chomp($NUM_SCRIPT);
if ( $NUM_SCRIPT =~ s/-//g ) {
# Do not do copy
$copyalreadydone = 1;
}
if ( $NUM_SCRIPT !~ /^[0-$cpt\s]+$/ ) {
print "This is not a valid package number list.\n";
$found = 0;
}
else {
$found = 1;
}
}
print "\n";
if ($NUM_SCRIPT) {
foreach my $num ( split( /\s+/, $NUM_SCRIPT ) ) {
$CHOOSEDTARGET{ $LISTETARGET[ $num - 1 ] } = 1;
}
}
else {
foreach my $key (@LISTETARGET) {
$CHOOSEDTARGET{$key} = 1;
}
}
}
# Test if requirement is ok
#--------------------------
foreach my $target ( keys %CHOOSEDTARGET ) {
foreach my $req ( split( /[,\s]/, $REQUIREMENTTARGET{$target} ) ) {
# Test
print "Test requirement for target $target: Search '$req'... ";
$ret = `"$req" 2>&1`;
$coderetour = $?;
$coderetour2 = $coderetour >> 8;
if (
$coderetour != 0
&& ( ( $coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i )
|| ( $coderetour2 == 127 && $OS !~ /windows/ ) )
&& $PROGPATH
)
{
# Not found error, we try in PROGPATH
$ret = `"$PROGPATH/$ALTERNATEPATH{$req}/$req\" 2>&1`;
$coderetour = $?;
$coderetour2 = $coderetour >> 8;
$REQUIREMENTTARGET{$target} = "$PROGPATH/$ALTERNATEPATH{$req}/$req";
}
if (
$coderetour != 0
&& ( ( $coderetour2 == 1 && $OS =~ /windows/ && $ret !~ /Usage/i )
|| ( $coderetour2 == 127 && $OS !~ /windows/ ) )
)
{
# Not found error
print
"Not found\nCan't build target $target. Requirement '$req' not found in PATH\n";
$CHOOSEDTARGET{$target} = -1;
last;
}
else {
# Pas erreur ou erreur autre que programme absent
print " Found " . $REQUIREMENTTARGET{$target} . "\n";
}
}
}
print "\n";
# Check if there is at least on target to build
#----------------------------------------------
$nboftargetok = 0;
foreach my $target ( keys %CHOOSEDTARGET ) {
if ( $CHOOSEDTARGET{$target} < 0 ) { next; }
$nboftargetok++;
}
if ($nboftargetok) {
# Update buildroot
#-----------------
if ( !$copyalreadydone ) {
print "Delete directory $BUILDROOT\n";
$ret = `rm -fr "$BUILDROOT"`;
mkdir "$BUILDROOT";
mkdir "$BUILDROOT/htdocs";
mkdir "$BUILDROOT/htdocs/langs";
mkdir "$BUILDROOT/htdocs/langs/$PROJECT";
print "Copy $SOURCE into $BUILDROOT\n";
mkdir "$BUILDROOT";
$ret =
`cp -pr "$SOURCE/htdocs/langs/$PROJECT" "$BUILDROOT/htdocs/langs"`;
}
print "Clean $BUILDROOT\n";
$ret =
`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/Thumbs.db $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/Thumbs.db`;
$ret =
`rm -fr $BUILDROOT/htdocs/langs/$PROJECT/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/CVS* $BUILDROOT/htdocs/langs/$PROJECT/*/*/*/*/*/CVS*`;
# Build package for each target
#------------------------------
foreach my $target ( keys %CHOOSEDTARGET )
{
if ( $CHOOSEDTARGET{$target} < 0 ) { next; }
print "\nBuild package for target $target\n";
if ( $target eq 'TGZ' )
{
unlink $FILENAMETGZ . tgz;
# unlink $BUILDROOT/$FILENAMETGZ.tgz;
print "Compress $BUILDROOT/htdocs into $FILENAMETGZ.tgz...\n";
$cmd =
"tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$FILENAMETGZ.tgz\" htdocs";
$ret = `$cmd`;
# $cmd="tar --exclude-vcs --exclude-from \"$DESTI/tgz/tar.exclude\" --directory \"$BUILDROOT\" --mode=go-w --group=500 --owner=500 -czvf \"$BUILDROOT/$FILENAMETGZ.tgz\" htdocs\n";
# $ret=`$cmd`;
if ( $OS =~ /windows/i ) {
print "Move $FILENAMETGZ.tgz to $DESTI/$FILENAMETGZ.tgz\n";
$ret = `mv "$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`;
# $ret=`mv "$BUILDROOT/$FILENAMETGZ.tgz" "$DESTI/$FILENAMETGZ.tgz"`;
}
next;
}
if ( $target eq 'ZIP' )
{
unlink $FILENAMEZIP . zip;
print "Compress $FILENAMETGZ into $FILENAMEZIP.zip...\n";
chdir("$BUILDROOT");
#print "cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*\n";
#$ret=`cd $BUILDROOTNT & 7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`;
$ret =
`7z a -r -tzip -mx $BUILDROOT/$FILENAMEZIP.zip $FILENAMETGZ\\*.*`;
print "Move $FILENAMEZIP.zip to $DESTI\n";
rename( "$BUILDROOT/$FILENAMEZIP.zip", "$DESTI/$FILENAMEZIP.zip" );
next;
}
}
}
print "\n----- Summary -----\n";
foreach my $target ( keys %CHOOSEDTARGET ) {
if ( $CHOOSEDTARGET{$target} < 0 ) {
print "Package $target not built (bad requirement).\n";
}
else {
print "Package $target built succeessfully in $DESTI\n";
}
}
if ( !$btach ) {
print "\nPress key to finish...";
my $WAITKEY = <STDIN>;
}
0;

View File

@@ -29,12 +29,18 @@ To submit a snapshot for building, we should have a service file with content
</services>
How to have such a service file created automatically ?
Click on "Add file", then select mode "Upload From: Remote URL"
Enter the Remote URL that should looks like this: http://www.dolibarr.org/files/stable/package_rpm_generic/dolibarr-x.y.v-3.src.rpm
Then add into advanded - attributes
Go into project you want to update. It mught be:
- openSUSE Build Service > Projects > Application:ERP:Dolibarr > dolibarr
- or your private project
Once logged, click on "Add file" in section "Source Files", then select mode "Upload From: Remote URL"
Keep empty for "Filename", choose "Remote URL" and enter into last field, URL that should looks like this:
http://www.dolibarr.org/files/stable/package_rpm_generic/dolibarr-x.y.v-0.3.src.rpm
Then add into Advanded - Attributes
OBS:Screenshots http://www.dolibarr.org/images/dolibarr_screenshot1.png
OBS:QualityCategory Testing
OBS:QualityCategory Stable|Testing|Development|Private
# Move project into official directory

View File

@@ -5,4 +5,3 @@
//
// This file will be filled by installer
//
?>

View File

@@ -162,7 +162,6 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/asterisk
%_datadir/dolibarr/htdocs/barcode
%_datadir/dolibarr/htdocs/bookmarks
%_datadir/dolibarr/htdocs/boutique
%_datadir/dolibarr/htdocs/cashdesk
%_datadir/dolibarr/htdocs/categories
%_datadir/dolibarr/htdocs/comm
@@ -333,6 +332,9 @@ fi
# version x.y.z-0.1.a for alpha, x.y.z-0.2.b for beta, x.y.z-0.3 for release
%changelog
* Wed Oct 29 2014 Laurent Destailleur 3.7.0-0.3
- Upstream release
* Wed Sep 24 2014 Laurent Destailleur 3.6.1-0.3
- Upstream release

View File

@@ -242,7 +242,6 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/asterisk
%_datadir/dolibarr/htdocs/barcode
%_datadir/dolibarr/htdocs/bookmarks
%_datadir/dolibarr/htdocs/boutique
%_datadir/dolibarr/htdocs/cashdesk
%_datadir/dolibarr/htdocs/categories
%_datadir/dolibarr/htdocs/comm
@@ -569,6 +568,9 @@ fi
# version x.y.z-0.1.a for alpha, x.y.z-0.2.b for beta, x.y.z-0.3 for release
%changelog
* Wed Oct 29 2014 Laurent Destailleur 3.7.0-0.3
- Upstream release
* Wed Sep 24 2014 Laurent Destailleur 3.6.1-0.3
- Upstream release

View File

@@ -159,7 +159,6 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/asterisk
%_datadir/dolibarr/htdocs/barcode
%_datadir/dolibarr/htdocs/bookmarks
%_datadir/dolibarr/htdocs/boutique
%_datadir/dolibarr/htdocs/cashdesk
%_datadir/dolibarr/htdocs/categories
%_datadir/dolibarr/htdocs/comm
@@ -338,6 +337,9 @@ fi
# version x.y.z-0.1.a for alpha, x.y.z-0.2.b for beta, x.y.z-0.3 for release
%changelog
* Wed Oct 29 2014 Laurent Destailleur 3.7.0-0.3
- Upstream release
* Wed Sep 24 2014 Laurent Destailleur 3.6.1-0.3
- Upstream release

View File

@@ -170,7 +170,6 @@ done >>%{name}.lang
%_datadir/dolibarr/htdocs/asterisk
%_datadir/dolibarr/htdocs/barcode
%_datadir/dolibarr/htdocs/bookmarks
%_datadir/dolibarr/htdocs/boutique
%_datadir/dolibarr/htdocs/cashdesk
%_datadir/dolibarr/htdocs/categories
%_datadir/dolibarr/htdocs/comm
@@ -349,6 +348,9 @@ fi
# version x.y.z-0.1.a for alpha, x.y.z-0.2.b for beta, x.y.z-0.3 for release
%changelog
* Wed Oct 29 2014 Laurent Destailleur 3.7.0-0.3
- Upstream release
* Wed Sep 24 2014 Laurent Destailleur 3.6.1-0.3
- Upstream release

View File

@@ -24,6 +24,8 @@
"ext-mcrypt": "*",
"ext-openssl": "*",
"ext-mbstring": "*",
"ext-soap": "*"
"ext-soap": "*",
"ext-zip": "*",
"ext-xml": "*"
}
}

View File

@@ -6,15 +6,22 @@
<exclude-pattern>*/conf.php</exclude-pattern>
<exclude-pattern>*/includes/*</exclude-pattern>
<exclude-pattern>*/documents/*</exclude-pattern>
<exclude-pattern>*/dev/vagrant/*</exclude-pattern>
<exclude-pattern>*/custom/*</exclude-pattern>
<exclude-pattern>*/nltechno*</exclude-pattern>
<!-- List of all tests -->
<!-- Rules from Internal Standard -->
<rule ref="Internal.NoCodeFound">
<severity>0</severity>
</rule>
<!-- Rules from Generic Standard -->
<rule ref="Generic.CodeAnalysis.EmptyStatement" />
<rule ref="Generic.CodeAnalysis.EmptyStatement.NotAllowed">
@@ -24,9 +31,6 @@
<severity>0</severity>
</rule>
<!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
<!-- <rule ref="Zend.Files.ClosingTag"/> -->
<!-- <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop" /> -->
<rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall" />
@@ -105,7 +109,7 @@
<rule ref="Generic.Metrics.CyclomaticComplexity">
<properties>
<property name="complexity" value="80" />
<property name="absoluteComplexity" value="200" />
<property name="absoluteComplexity" value="250" />
</properties>
</rule>
<rule ref="Generic.Metrics.NestingLevel">
@@ -153,6 +157,10 @@
<!-- Disabled as this does not support tab -->
<!-- <rule ref="Generic.WhiteSpace.ScopeIndent" /> -->
<!-- Rules from PEAR Standard -->
<rule ref="PEAR.Classes.ClassDeclaration" />
<!-- Check for duplicate class names -->
@@ -162,6 +170,40 @@
<rule ref="PEAR.Commenting.ClassComment.MissingTag">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.ClassComment.Missing@authorTag">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.ClassComment.Missing@categoryTag">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.ClassComment.Missing@licenseTag">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.ClassComment.Missing@linkTag">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.ClassComment.Missing@packageTag">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.FunctionComment.SpacingAfterParamType">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.FunctionComment.SpacingAfterParamName">
<severity>0</severity>
</rule>
<!-- TODO Remove this and fix reported errors -->
<rule ref="PEAR.Commenting.ClassComment.Missing">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.FunctionComment.MissingReturn">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.FunctionComment.ReturnNotRequired">
<severity>0</severity>
</rule>
<rule ref="PEAR.Commenting.FunctionComment.Missing">
<severity>0</severity>
</rule>
<!--
<rule ref="PEAR.Commenting.FileComment" />
@@ -219,6 +261,24 @@
<rule ref="PEAR.Functions.FunctionCallSignature.Indent">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.SpaceBeforeOpenBracket">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.SpaceAfterOpenBracket">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.SpaceBeforeCloseBracket">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.SpaceAfterCloseBracket">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.CloseBracketLine">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket">
<severity>0</severity>
</rule>
<rule ref="PEAR.Functions.ValidDefaultValue" />
@@ -236,6 +296,10 @@
</rule>
<rule ref="PEAR.NamingConventions.ValidFunctionName" />
<rule ref="PEAR.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore">
<severity>0</severity>
</rule>
<rule ref="PEAR.NamingConventions.ValidFunctionName.FunctionNameInvalid">
<severity>0</severity>
</rule>
@@ -246,13 +310,13 @@
<rule ref="PEAR.NamingConventions.ValidFunctionName.FunctionNoCaptial">
<severity>0</severity>
</rule>
<rule ref="PEAR.NamingConventions.ValidFunctionName.NotCamelCaps">
<severity>0</severity>
</rule>
<rule ref="PEAR.NamingConventions.ValidFunctionName.PrivateNoUnderscore">
<severity>0</severity>
</rule>
<rule ref="PEAR.NamingConventions.ValidVariableName" />
<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent" />
@@ -270,4 +334,10 @@
<!-- Already found as a Generic rule -->
<!-- <rule ref="PEAR.WhiteSpace.ScopeIndent" /> -->
<!-- Rules from Zend Standard-->
<!-- The closing ?> tag MUST be omitted from files containing only PHP. -->
<rule ref="Zend.Files.ClosingTag"/>
</ruleset>

View File

@@ -1,21 +0,0 @@
#!/bin/sh
# Helps find duplicate translation keys in language files
#
# Copyright (C) 2014 Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr
for file in `find . -type f`
do
dupes=$(
sed "s/^\s*//" "$file" | # Remove any leading whitespace
sed "s/\s*\=/=/" | # Remove any whitespace before =
grep -Po "(^.*?)=" | # Non greedeely match everything before =
sed "s/\=//" | # Remove trailing = so we get the key
sort | uniq -d # Find duplicates
)
if [ -n "$dupes" ]
then
echo "Duplicates found in $file"
echo "$dupes"
fi
done

View File

@@ -1,6 +1,6 @@
#!/bin/sh
#------------------------------------------------------
# Script to find files that are not Unix encoded
# Detect files that does not contains any tab inside
#
# Laurent Destailleur - eldy@users.sourceforge.net
#------------------------------------------------------

View File

@@ -44,6 +44,8 @@ In htdocs/includes/tcpdf/tcpdf.php
- protected $default_monospaced_font = 'courier';
+ protected $default_monospaced_font = 'freemono';
* Renamed getmypid into dol_getmypid().
JSGANTT:
--------

38
dev/fixduplicatelangkey.sh Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/sh
# Helps find duplicate translation keys in language files
#
# Copyright (C) 2014 Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr
# Syntax
if [ "x$1" != "xlist" -a "x$1" != "xfix" ]
then
echo "Usage: detectduplicatelangkey.sh (list|fix)"
fi
if [ "x$1" = "xlist" ]
then
for file in `find htdocs/langs/en_US -name *.lang -type f`
do
dupes=$(
sed "s/^\s*//" "$file" | # Remove any leading whitespace
sed "s/\s*\=/=/" | # Remove any whitespace before =
grep -Po "(^.*?)=" | # Non greedeely match everything before =
sed "s/\=//" | # Remove trailing = so we get the key
sort | uniq -d # Find duplicates
)
if [ -n "$dupes" ]
then
echo "Duplicates found in $file"
echo "$dupes"
fi
done
fi
# To convert
if [ "x$1" = "xfix" ]
then
echo Feature not implemented. Please fix files manually.
fi

View File

@@ -25,4 +25,6 @@ then
find ./htdocs -type f -iname "*.php" -exec chmod a-x {} \;
chmod a+x ./scripts/*/*.php
chmod a+x ./scripts/*/*.sh
chmod g-w ./scripts/*/*.php
chmod g-w ./scripts/*/*.sh
fi

View File

@@ -94,7 +94,7 @@ while ($i < GEN_NUMBER_FACTURE && $result >= 0)
print "Invoice ".$i." for socid ".$socid;
$facture = new Facture($db, $socids[$socid]);
$facture = new Facture($db);
$facture->date = time();
$facture->cond_reglement_id = 3;
$facture->mode_reglement_id = 3;

View File

@@ -122,7 +122,7 @@ while ($i < GEN_NUMBER_PROPAL && $result >= 0)
$soc = new Societe($db);
$propal = new Propal($db, $socids[$socid]);
$propal = new Propal($db);
$obj = $conf->global->PROPALE_ADDON;
$modPropale = new $obj;
@@ -130,6 +130,7 @@ while ($i < GEN_NUMBER_PROPAL && $result >= 0)
$propal->ref = $numpr;
$propal->contactid = $contids[$socids[$socid]][0];
$propal->socid = $socids[$socid];
$propal->datep = time();
$propal->cond_reglement_id = 3;
$propal->mode_reglement_id = 3;

View File

@@ -4867,7 +4867,7 @@ CREATE TABLE `llx_opensurvey_sondage` (
`mailsonde` tinyint(4) NOT NULL DEFAULT '0',
`survey_link_visible` int(11) DEFAULT '1',
`origin` varchar(64) DEFAULT NULL,
`tms` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`tms` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id_sondage`),
KEY `idx_id_sondage_admin` (`id_sondage_admin`),
KEY `idx_date_fin` (`date_fin`)

233
dev/optimize_images.sh Executable file
View File

@@ -0,0 +1,233 @@
#!/bin/bash
# Borrowed from https://gist.github.com/lgiraudel/6065155
# Inplace mode added by Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
PROGNAME=${0##*/}
INPUT=''
QUIET='0'
NOSTATS='0'
INPLACE='0'
max_input_size=0
max_output_size=0
usage()
{
cat <<EO
Usage: $PROGNAME [options]
Script to optimize JPG and PNG images in a directory.
Options:
EO
cat <<EO | column -s\& -t
-h, --help & shows this help
-q, --quiet & disables output
-i, --input [dir] & specify input directory (current directory by default)
-o, --output [dir] & specify output directory ("output" by default)
-ns, --no-stats & no stats at the end
-p, --inplace & optimizes files inplace
EO
}
# $1: input image
# $2: output image
optimize_image()
{
input_file_size=$(stat -c%s "$1")
max_input_size=$(expr $max_input_size + $input_file_size)
if [ "${1##*.}" = "png" ]; then
#optipng -o1 -clobber -quiet $1 -out $2.firstpass
optipng -o1 -quiet $1 -out $2.firstpass
pngcrush -q -rem alla -reduce $2.firstpass $2 >/dev/null
rm -fr $2.firstpass
fi
if [ "${1##*.}" = "jpg" -o "${1##*.}" = "jpeg" ]; then
jpegtran -copy none -progressive $1 > $2
fi
output_file_size=$(stat -c%s "$2")
max_output_size=$(expr $max_output_size + $output_file_size)
}
get_max_file_length()
{
local maxlength=0
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v $OUTPUT)
for CURRENT_IMAGE in $IMAGES; do
filename=$(basename "$CURRENT_IMAGE")
if [[ ${#filename} -gt $maxlength ]]; then
maxlength=${#filename}
fi
done
echo "$maxlength"
}
main()
{
test=`type pngcrush >/dev/null 2>&1`
result=$?
if [ "x$result" == "x1" ]; then
echo "Tool pngcrush not found" && exit
fi
test=`type optipng >/dev/null 2>&1`
result=$?
if [ "x$result" == "x1" ]; then
echo "Tool optipng not found" && exit
fi
test=`type jpegtran >/dev/null 2>&1`
result=$?
if [ "x$result" == "x1" ]; then
echo "Tool jpegtran not found" && exit
fi
# If $INPUT is empty, then we use current directory
if [[ "$INPUT" == "" ]]; then
INPUT=$(pwd)
fi
# If $OUTPUT is empty, then we use the directory "output" in the current directory
if [[ "$OUTPUT" == "" ]]; then
OUTPUT=$(pwd)/output
fi
# If inplace, we use /tmp for output
if [[ "$INPLACE" == "1" ]]; then
OUTPUT='/tmp/optimize'
fi
echo "Mode is $INPLACE (1=Images are replaced, 0=New images are stored into $OUTPUT)"
# We create the output directory
mkdir -p $OUTPUT
# To avoid some troubles with filename with spaces, we store the current IFS (Internal File Separator)...
SAVEIFS=$IFS
# ...and we set a new one
IFS=$(echo -en "\n\b")
max_filelength=`get_max_file_length`
pad=$(printf '%0.1s' "."{1..600})
sDone=' [ DONE ]'
linelength=$(expr $max_filelength + ${#sDone} + 5)
# Search of all jpg/jpeg/png in $INPUT
# We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT
echo "Scan $INPUT to find images"
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v $OUTPUT)
if [ "$QUIET" == "0" ]; then
echo --- Optimizing $INPUT ---
echo
fi
for CURRENT_IMAGE in $IMAGES; do
echo "Process $CURRENT_IMAGE"
filename=$(basename $CURRENT_IMAGE)
if [ "$QUIET" == "0" ]; then
printf '%s ' "$filename"
printf '%*.*s' 0 $((linelength - ${#filename} - ${#sDone} )) "$pad"
fi
optimize_image $CURRENT_IMAGE $OUTPUT/$filename
# Replace file
if [[ "$INPLACE" == "1" ]]; then
mv $OUTPUT/$filename $CURRENT_IMAGE
fi
if [ "$QUIET" == "0" ]; then
printf '%s\n' "$sDone"
fi
done
# Cleanup
if [[ "$INPLACE" == "1" ]]; then
rm -rf $OUTPUT
fi
# we restore the saved IFS
IFS=$SAVEIFS
if [ "$NOSTATS" == "0" -a "$QUIET" == "0" ]; then
echo
echo "Input: " $(human_readable_filesize $max_input_size)
echo "Output: " $(human_readable_filesize $max_output_size)
space_saved=$(expr $max_input_size - $max_output_size)
echo "Space save: " $(human_readable_filesize $space_saved)
fi
}
human_readable_filesize()
{
echo -n $1 | awk 'function human(x) {
s=" b Kb Mb Gb Tb"
while (x>=1024 && length(s)>1)
{x/=1024; s=substr(s,4)}
s=substr(s,1,4)
xf=(s==" b ")?"%5d ":"%.2f"
return sprintf( xf"%s", x, s)
}
{gsub(/^[0-9]+/, human($1)); print}'
}
SHORTOPTS="h,i:,o:,q,s,p"
LONGOPTS="help,input:,output:,quiet,no-stats,inplace"
ARGS=$(getopt -s bash --options $SHORTOPTS --longoptions $LONGOPTS --name $PROGNAME -- "$@")
# Syntax
if [ "x$1" != "xlist" -a "x$1" != "xfix" ]
then
echo "Usage: optimize_images.sh (list|fix) -i dirtoscan"
exit
fi
eval set -- "$ARGS"
while true; do
case $1 in
-h|--help)
usage
exit 0
;;
-i|--input)
shift
INPUT=$1
;;
-o|--output)
shift
OUTPUT=$1
;;
-q|--quiet)
QUIET='1'
;;
-s|--no-stats)
NOSTATS='1'
;;
-p|--inplace)
INPLACE='1'
;;
--)
shift
break
;;
*)
shift
break
;;
esac
shift
done
# To convert
if [ "x$1" = "xlist" ]
then
INPLACE=0
fi
main

View File

@@ -254,11 +254,11 @@ foreach($property as $key => $prop)
$varprop.="\t\t\$sql.= \" ";
if ($prop['istime'])
{
$varprop.='".(! isset($this->'.$prop['field'].') || dol_strlen($this->'.$prop['field'].')==0?\'NULL\':$this->db->idate(';
$varprop.='".(! isset($this->'.$prop['field'].') || dol_strlen($this->'.$prop['field'].')==0?\'NULL\':"\'".$this->db->idate(';
$varprop.="\$this->".$prop['field']."";
$varprop.='))."';
$varprop.=')."\'")."';
if ($i < count($property)) $varprop.=",";
$varprop.="\";";
$varprop.='";';
}
elseif ($prop['ischar'])
{

View File

@@ -173,7 +173,7 @@ class modMyModule extends DolibarrModules
// Add here list of permission defined by an id, a label, a boolean and two constant strings.
// Example:
// $this->rights[$r][0] = 2000; // Permission id (must not be already used)
// $this->rights[$r][0] = $this->numero + $r; // Permission id (must not be already used)
// $this->rights[$r][1] = 'Permision label'; // Permission label
// $this->rights[$r][3] = 1; // Permission by default for new user (0/1)
// $this->rights[$r][4] = 'level1'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)

View File

@@ -1,5 +1,6 @@
<?php
/* Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) ---Put here your own copyright and developer email---
*
* This program is free software; you can redistribute it and/or modify
@@ -79,7 +80,7 @@ class Skeleton_Class extends CommonObject
// Put here code to add control on parameters values
// Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."mytable(";
$sql = "INSERT INTO ".MAIN_DB_PREFIX.$this->table_element."(";
$sql.= " field1,";
$sql.= " field2";
//...
@@ -91,13 +92,13 @@ class Skeleton_Class extends CommonObject
$this->db->begin();
dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG);
dol_syslog(__METHOD__, LOG_DEBUG);
$resql=$this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
if (! $error)
{
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."mytable");
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
if (! $notrigger)
{
@@ -105,10 +106,8 @@ class Skeleton_Class extends CommonObject
// want this action calls a trigger.
//// Call triggers
//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
//$interface=new Interfaces($this->db);
//$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
//if ($result < 0) { $error++; $this->errors=$interface->errors; }
//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
//// End call triggers
}
}
@@ -118,7 +117,7 @@ class Skeleton_Class extends CommonObject
{
foreach($this->errors as $errmsg)
{
dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR);
dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
}
$this->db->rollback();
@@ -135,10 +134,11 @@ class Skeleton_Class extends CommonObject
/**
* Load object in memory from the database
*
* @param int $id Id object
* @param int $id Id object
* @param string $ref Ref
* @return int <0 if KO, >0 if OK
*/
function fetch($id)
function fetch($id,$ref='')
{
global $langs;
$sql = "SELECT";
@@ -146,10 +146,11 @@ class Skeleton_Class extends CommonObject
$sql.= " t.field1,";
$sql.= " t.field2";
//...
$sql.= " FROM ".MAIN_DB_PREFIX."mytable as t";
$sql.= " WHERE t.rowid = ".$id;
$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as t";
if ($ref) $sql.= " WHERE t.ref = '".$ref."'";
else $sql.= " WHERE t.rowid = ".$id;
dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG);
dol_syslog(get_class($this)."::fetch");
$resql=$this->db->query($sql);
if ($resql)
{
@@ -169,7 +170,6 @@ class Skeleton_Class extends CommonObject
else
{
$this->error="Error ".$this->db->lasterror();
dol_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR);
return -1;
}
}
@@ -182,7 +182,7 @@ class Skeleton_Class extends CommonObject
* @param int $notrigger 0=launch triggers after, 1=disable triggers
* @return int <0 if KO, >0 if OK
*/
function update($user=0, $notrigger=0)
function update($user, $notrigger=0)
{
global $conf, $langs;
$error=0;
@@ -196,7 +196,7 @@ class Skeleton_Class extends CommonObject
// Put here code to add a control on parameters values
// Update request
$sql = "UPDATE ".MAIN_DB_PREFIX."mytable SET";
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET";
$sql.= " field1=".(isset($this->field1)?"'".$this->db->escape($this->field1)."'":"null").",";
$sql.= " field2=".(isset($this->field2)?"'".$this->db->escape($this->field2)."'":"null")."";
//...
@@ -204,7 +204,7 @@ class Skeleton_Class extends CommonObject
$this->db->begin();
dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG);
dol_syslog(__METHOD__);
$resql = $this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
@@ -216,12 +216,10 @@ class Skeleton_Class extends CommonObject
// want this action calls a trigger.
//// Call triggers
//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
//$interface=new Interfaces($this->db);
//$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
//if ($result < 0) { $error++; $this->errors=$interface->errors; }
//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
//// End call triggers
}
}
}
// Commit or rollback
@@ -229,7 +227,7 @@ class Skeleton_Class extends CommonObject
{
foreach($this->errors as $errmsg)
{
dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
}
$this->db->rollback();
@@ -264,21 +262,19 @@ class Skeleton_Class extends CommonObject
// Uncomment this and change MYOBJECT to your own tag if you
// want this action calls a trigger.
//// Call triggers
//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
//$interface=new Interfaces($this->db);
//$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
//if ($result < 0) { $error++; $this->errors=$interface->errors; }
//// End call triggers
//// Call triggers
//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
//// End call triggers
}
}
if (! $error)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."mytable";
$sql = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element;
$sql.= " WHERE rowid=".$this->id;
dol_syslog(get_class($this)."::delete sql=".$sql);
dol_syslog(__METHOD__);
$resql = $this->db->query($sql);
if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
}
@@ -288,7 +284,7 @@ class Skeleton_Class extends CommonObject
{
foreach($this->errors as $errmsg)
{
dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
$this->error.=($this->error?', '.$errmsg:$errmsg);
}
$this->db->rollback();

View File

@@ -43,6 +43,7 @@ if (! $res && file_exists("../../../dolibarr/htdocs/main.inc.php")) $res=@includ
if (! $res && file_exists("../../../../dolibarr/htdocs/main.inc.php")) $res=@include '../../../../dolibarr/htdocs/main.inc.php'; // Used on dev env only
if (! $res) die("Include of main fails");
// Change this following line to use the correct relative path from htdocs
include_once(DOL_DOCUMENT_ROOT.'/core/class/formcompany.class.php');
dol_include_once('/module/class/skeleton_class.class.php');
// Load traductions files requiredby by page
@@ -52,6 +53,7 @@ $langs->load("other");
// Get parameters
$id = GETPOST('id','int');
$action = GETPOST('action','alpha');
$backtopage = GETPOST('backtopage');
$myparam = GETPOST('myparam','alpha');
// Protection if external user
@@ -60,6 +62,16 @@ if ($user->societe_id > 0)
//accessforbidden();
}
if (empty($action) && empty($id) && empty($ref)) $action='create';
// Load object if id or ref is provided as parameter
$object=new Skeleton_Class($db);
if (($id > 0 || ! empty($ref)) && $action != 'add')
{
$result=$object->fetch($id,$ref);
if ($result < 0) dol_print_error($db);
}
/*******************************************************************
@@ -68,19 +80,104 @@ if ($user->societe_id > 0)
* Put here all code to do according to value of "action" parameter
********************************************************************/
// Action to add record
if ($action == 'add')
{
$object=new Skeleton_Class($db);
$object->prop1=$_POST["field1"];
$object->prop2=$_POST["field2"];
$result=$object->create($user);
if (GETPOST('cancel'))
{
$urltogo=$backtopage?$backtopage:dol_buildpath('/buildingmanagement/list.php',1);
header("Location: ".$urltogo);
exit;
}
$error=0;
/* object_prop_getpost_prop */
$object->prop1=GETPOST("field1");
$object->prop2=GETPOST("field2");
if (empty($object->ref))
{
$error++;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Ref")),'errors');
}
if (! $error)
{
$result=$object->create($user);
if ($result > 0)
{
// Creation OK
$urltogo=$backtopage?$backtopage:dol_buildpath('/mymodule/list.php',1);
header("Location: ".$urltogo);
exit;
}
{
// Creation KO
if (! empty($object->errors)) setEventMessages(null, $object->errors, 'errors');
else setEventMessages($object->error, null, 'errors');
$action='create';
}
}
else
{
$action='create';
}
}
// Cancel
if ($action == 'update' && GETPOST('cancel')) $action='view';
// Action to update record
if ($action == 'update' && ! GETPOST('cancel'))
{
$error=0;
$object->prop1=GETPOST("field1");
$object->prop2=GETPOST("field2");
if (empty($object->ref))
{
$error++;
setEventMessages($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Ref")),null,'errors');
}
if (! $error)
{
$result=$object->update($user);
if ($result > 0)
{
$action='view';
}
else
{
// Creation KO
if (! empty($object->errors)) setEventMessages(null, $object->errors, 'errors');
else setEventMessages($object->error, null, 'errors');
$action='edit';
}
}
else
{
$action='edit';
}
}
// Action to delete
if ($action == 'confirm_delete')
{
$result=$object->delete($user);
if ($result > 0)
{
// Creation OK
// Delete OK
setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs');
header("Location: ".dol_buildpath('/buildingmanagement/list.php',1));
exit;
}
else
{
// Creation KO
$mesg=$object->error;
if (! empty($object->errors)) setEventMessages(null,$object->errors,'errors');
else setEventMessages($object->error,null,'errors');
}
}
@@ -101,7 +198,7 @@ $form=new Form($db);
// Put here content of your page
// Example 1 : Adding jquery code
// Example : Adding jquery code
print '<script type="text/javascript" language="javascript">
jQuery(document).ready(function() {
function init_myfunc()
@@ -117,13 +214,8 @@ jQuery(document).ready(function() {
</script>';
// Example 2 : Adding links to objects
// The class must extends CommonObject class to have this method available
//$somethingshown=$object->showLinkedObjectBlock();
// Example 3 : List of data
if ($action == 'list')
// Part to show a list
if ($action == 'list' || empty($id))
{
$sql = "SELECT";
$sql.= " t.rowid,";
@@ -139,27 +231,24 @@ if ($action == 'list')
print_liste_field_titre($langs->trans('field2'),$_SERVER['PHP_SELF'],'t.field2','',$param,'',$sortfield,$sortorder);
print '</tr>';
dol_syslog($script_file." sql=".$sql, LOG_DEBUG);
dol_syslog($script_file, LOG_DEBUG);
$resql=$db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i = 0;
if ($num)
while ($i < $num)
{
while ($i < $num)
$obj = $db->fetch_object($resql);
if ($obj)
{
$obj = $db->fetch_object($resql);
if ($obj)
{
// You can use here results
print '<tr><td>';
print $obj->field1;
print $obj->field2;
print '</td></tr>';
}
$i++;
// You can use here results
print '<tr><td>';
print $obj->field1;
print $obj->field2;
print '</td></tr>';
}
$i++;
}
}
else
@@ -173,6 +262,102 @@ if ($action == 'list')
// Part to create
if ($action == 'create')
{
print_fiche_titre($langs->trans("NewResidence"));
dol_fiche_head();
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
print '<input type="hidden" name="action" value="add">';
print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
print '<table class="border centpercent">'."\n";
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td>';
print '<input class="flat" type="text" size="36" name="label" value="'.$label.'">';
print '</td></tr>';
print '</table>'."\n";
print '<br>';
print '<center><input type="submit" class="button" name="add" value="'.$langs->trans("Create").'"> &nbsp; <input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'"></center>';
print '</form>';
dol_fiche_end();
}
// Part to edit record
if (($id || $ref) && $action == 'edit')
{
dol_fiche_head();
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
print '<input type="hidden" name="action" value="add">';
print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
print '<input type="hidden" name="id" value="'.$object->id.'">';
print '<br>';
print '<center><input type="submit" class="button" name="add" value="'.$langs->trans("Create").'"></center>';
print '</form>';
dol_fiche_end();
}
// Part to show record
if ($id && (empty($action) || $action == 'view'))
{
dol_fiche_head();
dol_fiche_end();
// Buttons
print '<div class="tabsAction">'."\n";
$parameters=array();
$reshook=$hookmanager->executeHooks('addMoreActionsButtons',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
if (empty($reshook))
{
if ($user->rights->mymodule->write)
{
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=edit">'.$langs->trans("Modify").'</a></div>'."\n";
}
if ($user->rights->mymodule->delete)
{
if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) // We can't use preloaded confirm form with jmobile
{
print '<div class="inline-block divButAction"><span id="action-delete" class="butActionDelete">'.$langs->trans('Delete').'</span></div>'."\n";
}
else
{
print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete">'.$langs->trans('Delete').'</a></div>'."\n";
}
}
}
print '</div>'."\n";
// Example 2 : Adding links to objects
// The class must extends CommonObject class to have this method available
//$somethingshown=$object->showLinkedObjectBlock();
}
// End of page
llxFooter();
$db->close();

View File

@@ -57,7 +57,7 @@ if (! $result > 0) { dol_print_error('',$user->error); exit; }
$user->getrights();
print "***** ".$script_file." (".$version.") pid=".getmypid()." *****\n";
print "***** ".$script_file." (".$version.") pid=".dol_getmypid()." *****\n";
if (! isset($argv[1])) { // Check parameters
print "Usage: ".$script_file." param1 param2 ...\n";
exit(-1);
@@ -119,7 +119,7 @@ $sql.= " FROM ".MAIN_DB_PREFIX."skeleton";
$sql.= " WHERE field3 = 'xxx'";
$sql.= " ORDER BY field1 ASC";
dol_syslog($script_file." sql=".$sql, LOG_DEBUG);
dol_syslog($script_file, LOG_DEBUG);
$resql=$db->query($sql);
if ($resql)
{

View File

@@ -269,5 +269,4 @@ function createSkeleton($authentication,$skeleton)
}
// Return the results.
$server->service($HTTP_RAW_POST_DATA);
$server->service(file_get_contents("php://input"));

View File

@@ -1,9 +1,22 @@
#!/usr/bin/php
<?php
/*
* strip_language_file.php
/* Copyright (C) 2014 by FromDual GmbH, licensed under GPL v2
* Copyright (C) 2014 Laurent Destailleur <eldy@users.sourceforge.net>
*
* (c) 2014 by FromDual GmbH, licensed under GPL v2
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* -----
*
* Compares a secondary language translation file with its primary
* language file and strips redundant translations.
@@ -12,11 +25,10 @@
*
* Usage:
* cd htdocs/langs
* ../../dev/translation/strip_language_file.php <primary_lang_dir> <secondary_lang_dir> <languagefile.lang>
* ../../dev/translation/strip_language_file.php <primary_lang_dir> <secondary_lang_dir> [file.lang|all]
*
* Parameters:
* 1 - Primary Language
* 2 - Secondary Language
* To rename all .delta files, you can do
* for fic in `ls *.delta`; do f=`echo $fic | sed -e 's/\.delta//'`; echo $f; mv $f.delta $f; done
*
* Rules:
* secondary string == primary string -> strip
@@ -24,9 +36,6 @@
* secondary string not in primary -> strip and warning
* secondary string has no value -> strip and warning
* secondary string != primary string -> secondary.lang.delta
*
* To rename all .delta fils, you can do
* for fic in `ls *.delta`; do f=`echo $fic | sed -e 's/\.delta//'`; echo $f; mv $f.delta $f; done
*/
/**
@@ -260,6 +269,9 @@ foreach($filesToProcess as $fileToProcess)
}
print "Output can be found at $output.\n";
print "To rename all .delta files, you can do\n";
print 'for fic in `ls *.delta`; do f=`echo $fic | sed -e \'s/\.delta//\'`; echo $f; mv $f.delta $f; done'."\n";
}

View File

@@ -23,7 +23,7 @@ Usage
`cd` into the vagrant box directory and simply type `vagrant up`.
That's all you need to do. It will build a brand new VirtalBox machine for you with everything you need to develop on Dolibarr.
That's all you need to do. It will build a brand new VirtualBox machine for you with everything you need to develop on Dolibarr.
### Name resolution
For easy access to the VM you need to setup name resolution to the machines IP.
@@ -45,9 +45,16 @@ Somewhat bleeding edge vagrant box for develop branch related work.
- IP: 192.168.42.101
- Vhost: dev.dolibarr.org
- OS: Debian Wheezy 7.5
- OS: Debian Wheezy 7.5 x64
- Webserver: Apache 2.2.22
- PHP: mod_php 5.5.13-1~dotdeb.1
- PHP: mod_php 5.5.14-1~dotdeb.1
Installed modules:
- cli
- curl
- gd
- imagick
- intl
- mcrypt
- Database: MySQL 5.5
- Root user: root
- Root password: root
@@ -55,7 +62,13 @@ Somewhat bleeding edge vagrant box for develop branch related work.
- Database user: user
- Database password: user
- Initial data: dev/initdata/mysqldump_dolibarr-3.5.0.sql
- Database: PostgreSQL 9.3
- Adminer: lightweight database management. Access through http://192.168.42.101/adminer
- Debugger: XDebug
- Profiler: Xhprof
- Profiler: Xhprof. Access through http://192.168.42.101/xhprof/xhprof_html
You can access MailCatcher to read all outgoing emails at http://192.168.42.101:1080
To access the machine you must use the following private keys:
- User root: located at puphpet/files/dot/ssh/root_rsa
- User vagrant: located at puphpet/files/dot/ssh/id_rsa

View File

@@ -23,13 +23,62 @@ Vagrant.configure("2") do |config|
end
end
if Vagrant.has_plugin?('vagrant-hostsupdater')
hosts = Array.new()
if !configValues['apache']['install'].nil? &&
configValues['apache']['install'].to_i == 1 &&
configValues['apache']['vhosts'].is_a?(Hash)
configValues['apache']['vhosts'].each do |i, vhost|
hosts.push(vhost['servername'])
if vhost['serveraliases'].is_a?(Array)
vhost['serveraliases'].each do |vhost_alias|
hosts.push(vhost_alias)
end
end
end
elsif !configValues['nginx']['install'].nil? &&
configValues['nginx']['install'].to_i == 1 &&
configValues['nginx']['vhosts'].is_a?(Hash)
configValues['nginx']['vhosts'].each do |i, vhost|
hosts.push(vhost['server_name'])
if vhost['server_aliases'].is_a?(Array)
vhost['server_aliases'].each do |x, vhost_alias|
hosts.push(vhost_alias)
end
end
end
end
if hosts.any?
contents = File.open("#{dir}/puphpet/shell/hostsupdater-notice.txt", 'r'){ |file| file.read }
puts "\n\033[34m#{contents}\033[0m\n"
if config.vm.hostname.to_s.strip.length == 0
config.vm.hostname = 'puphpet-dev-machine'
end
config.hostsupdater.aliases = hosts
end
end
data['vm']['synced_folder'].each do |i, folder|
if folder['source'] != '' && folder['target'] != ''
nfs = (folder['nfs'] == "true") ? "nfs" : nil
if nfs == "nfs"
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs
if folder['sync_type'] == 'nfs'
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "nfs"
elsif folder['sync_type'] == 'smb'
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: "smb"
elsif folder['sync_type'] == 'rsync'
rsync_args = !folder['rsync']['args'].nil? ? folder['rsync']['args'] : ["--verbose", "--archive", "--delete", "-z"]
rsync_auto = !folder['rsync']['auto'].nil? ? folder['rsync']['auto'] : true
rsync_exclude = !folder['rsync']['exclude'].nil? ? folder['rsync']['exclude'] : [".vagrant/"]
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}",
rsync__args: rsync_args, rsync__exclude: rsync_exclude, rsync__auto: rsync_auto, type: "rsync"
else
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}", type: nfs,
config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{i}",
group: 'www-data', owner: 'www-data', mount_options: ["dmode=775", "fmode=764"]
end
end
@@ -45,6 +94,9 @@ Vagrant.configure("2") do |config|
if key == "memory"
next
end
if key == "cpus"
next
end
if key == "natdnshostresolver1"
value = value ? "on" : "off"
@@ -54,6 +106,7 @@ Vagrant.configure("2") do |config|
end
virtualbox.customize ["modifyvm", :id, "--memory", "#{data['vm']['memory']}"]
virtualbox.customize ["modifyvm", :id, "--cpus", "#{data['vm']['cpus']}"]
if data['vm']['hostname'].to_s.strip.length != 0
virtualbox.customize ["modifyvm", :id, "--name", config.vm.hostname]
@@ -69,11 +122,15 @@ Vagrant.configure("2") do |config|
if key == "memsize"
next
end
if key == "cpus"
next
end
v.vmx["#{key}"] = "#{value}"
end
v.vmx["memsize"] = "#{data['vm']['memory']}"
v.vmx["numvcpus"] = "#{data['vm']['cpus']}"
if data['vm']['hostname'].to_s.strip.length != 0
v.vmx["displayName"] = config.vm.hostname
@@ -89,11 +146,15 @@ Vagrant.configure("2") do |config|
if key == "memsize"
next
end
if key == "cpus"
next
end
v.customize ["set", :id, "--#{key}", "#{value}"]
end
v.memory = "#{data['vm']['memory']}"
v.cpus = "#{data['vm']['cpus']}"
if data['vm']['hostname'].to_s.strip.length != 0
v.name = config.vm.hostname
@@ -111,7 +172,8 @@ Vagrant.configure("2") do |config|
kg.path = "puphpet/shell/ssh-keygen.sh"
kg.args = "#{ssh_username}"
end
config.vm.provision :shell, :path => "puphpet/shell/update-puppet.sh"
config.vm.provision :shell, :path => "puphpet/shell/install-ruby.sh"
config.vm.provision :shell, :path => "puphpet/shell/install-puppet.sh"
config.vm.provision :puppet do |puppet|
puppet.facter = {
@@ -128,7 +190,14 @@ Vagrant.configure("2") do |config|
end
end
config.vm.provision :shell, :path => "puphpet/shell/execute-files.sh"
config.vm.provision :shell do |s|
s.path = "puphpet/shell/execute-files.sh"
s.args = ["exec-once", "exec-always"]
end
config.vm.provision :shell, run: "always" do |s|
s.path = "puphpet/shell/execute-files.sh"
s.args = ["startup-once", "startup-always"]
end
config.vm.provision :shell, :path => "puphpet/shell/important-notices.sh"
if File.file?("#{dir}/puphpet/files/dot/ssh/id_rsa")
@@ -168,3 +237,4 @@ Vagrant.configure("2") do |config|
end

View File

@@ -2,9 +2,4 @@
* text=auto
# Force the following filetypes to have unix eols, so Windows does not break them
*.pp text eol=lf
*.sh text eol=lf
*.yaml text eol=lf
Puppetfile text eol=lf
.bash_aliases text eol=lf
.vimrc text eol=lf
*.* text eol=lf

View File

@@ -5,6 +5,7 @@ vagrantfile-local:
box_url: puphpet/debian75-x64
hostname: null
memory: '512'
cpus: '1'
chosen_provider: virtualbox
network:
private_network: 192.168.42.101
@@ -29,10 +30,12 @@ vagrantfile-local:
- '--hiera_config /vagrant/puphpet/puppet/hiera.yaml'
- '--parser future'
synced_folder:
PL1BkioqqvGY:
w6GqzzS2a7lu:
source: ../../../
target: /var/www
nfs: 'false'
target: /var/www/dolibarr
sync_type: default
rsync:
auto: 'false'
usable_port_range: 2200..2250
ssh:
host: null
@@ -61,8 +64,7 @@ mailcatcher:
smtp_port: 1025
http_ip: 0.0.0.0
http_port: '1080'
mailcatcher_path: /usr/local/bin
log_path: /var/log/mailcatcher/mailcatcher.log
mailcatcher_path: /usr/local/rvm/wrappers/default
firewall:
install: '1'
rules: null
@@ -71,7 +73,7 @@ apache:
settings:
user: www-data
group: www-data
default_vhost: false
default_vhost: true
manage_user: false
manage_group: false
sendfile: 0
@@ -79,9 +81,9 @@ apache:
- php
- rewrite
vhosts:
CGyWQB0fx4x0:
syTi8VestVdG:
servername: dev.dolibarr.org
docroot: /var/www/htdocs
docroot: /var/www/dolibarr/htdocs
port: '80'
setenv:
- 'APP_ENV dev'
@@ -96,8 +98,12 @@ apache:
mod_spdy: 0
nginx:
install: 0
settings:
default_vhost: 1
proxy_buffer_size: 128k
proxy_buffers: '4 256k'
vhosts:
jeF1sybIJ3V2:
kZiLLcLAIVAF:
server_name: awesome.dev
server_aliases:
- www.awesome.dev
@@ -152,7 +158,7 @@ mysql:
root_password: root
adminer: 0
databases:
2OfuuapoIqsl:
HHTBm64g1siG:
grant:
- ALTER
- CREATE
@@ -166,16 +172,16 @@ mysql:
host: localhost
user: user
password: user
sql_file: /var/www/dev/initdata/mysqldump_dolibarr_3.5.0.sql
sql_file: /var/www/dolibarr/dev/initdata/mysqldump_dolibarr_3.5.0.sql
postgresql:
install: 0
install: '1'
settings:
root_password: '123'
root_password: root
user_group: postgres
encoding: UTF8
version: '9.3'
databases: { }
adminer: 0
adminer: '1'
mariadb:
install: 0
root_password: '123'

View File

@@ -1,4 +1 @@
ssh/id_rsa
ssh/id_rsa.pub
ssh/insecure_private_key
ssh/id_rsa.ppk
ssh/*

View File

@@ -197,8 +197,8 @@ if is_array($server_values['packages']) and count($server_values['packages']) >
}
define add_dotdeb ($release){
apt::source { $name:
location => 'http://packages.dotdeb.org',
apt::source { "${name}-repo.puphpet":
location => 'http://repo.puphpet.com/dotdeb/',
release => $release,
repos => 'all',
required_packages => 'debian-keyring debian-archive-keyring',
@@ -270,7 +270,7 @@ if hash_key_equals($mailcatcher_values, 'install', 1) {
create_resources('class', { 'mailcatcher' => $mailcatcher_values['settings'] })
if ! defined(Firewall["100 tcp/${mailcatcher_values['settings']['smtp_port']},${mailcatcher_values['settings']['http_port']}"]) {
if ! defined(Firewall["100 tcp/${mailcatcher_values['settings']['smtp_port']}, ${mailcatcher_values['settings']['http_port']}"]) {
firewall { "100 tcp/${mailcatcher_values['settings']['smtp_port']}, ${mailcatcher_values['settings']['http_port']}":
port => [$mailcatcher_values['settings']['smtp_port'], $mailcatcher_values['settings']['http_port']],
proto => tcp,
@@ -279,30 +279,39 @@ if hash_key_equals($mailcatcher_values, 'install', 1) {
}
if ! defined(Class['supervisord']) {
class{ 'puphpet::python::pip': }
class { 'supervisord':
install_pip => true,
install_pip => false,
require => [
Class['my_fw::post'],
Class['Puphpet::Python::Pip'],
],
}
}
$supervisord_mailcatcher_options = sort(join_keys_to_values({
$mailcatcher_path = $mailcatcher_values['settings']['mailcatcher_path']
$mailcatcher_options = sort(join_keys_to_values({
' --smtp-ip' => $mailcatcher_values['settings']['smtp_ip'],
' --smtp-port' => $mailcatcher_values['settings']['smtp_port'],
' --http-ip' => $mailcatcher_values['settings']['http_ip'],
' --http-port' => $mailcatcher_values['settings']['http_port']
}, ' '))
$supervisord_mailcatcher_cmd = "mailcatcher ${supervisord_mailcatcher_options} -f >> ${mailcatcher_values['settings']['log']}"
supervisord::program { 'mailcatcher':
command => $supervisord_mailcatcher_cmd,
command => "${mailcatcher_path}/mailcatcher ${mailcatcher_options} -f",
priority => '100',
user => 'mailcatcher',
autostart => true,
autorestart => 'true',
environment => {
'PATH' => "/bin:/sbin:/usr/bin:/usr/sbin:${mailcatcher_values['settings']['path']}"
'PATH' => "/bin:/sbin:/usr/bin:/usr/sbin:${mailcatcher_path}"
},
require => Package['mailcatcher']
require => [
Class['mailcatcher::config'],
File['/var/log/mailcatcher']
],
}
}
@@ -312,10 +321,6 @@ if $firewall_values == undef {
$firewall_values = hiera('firewall', false)
}
resources { 'firewall':
purge => true
}
Firewall {
before => Class['my_fw::post'],
require => Class['my_fw::pre'],
@@ -383,16 +388,15 @@ if hash_key_equals($apache_values, 'install', 1) {
include puphpet::params
include apache::params
$webroot_location = $puphpet::params::apache_webroot_location
$webroot_location = $puphpet::params::apache_webroot_location
$apache_provider_types = ['virtualbox', 'vmware_fusion', 'vmware_desktop', 'parallels']
exec { "exec mkdir -p ${webroot_location}":
command => "mkdir -p ${webroot_location}",
creates => $webroot_location,
}
if (downcase($::provisioner_type) in ['virtualbox', 'vmware_fusion'])
and ! defined(File[$webroot_location])
{
if (downcase($::provisioner_type) in $apache_provider_types) and ! defined(File[$webroot_location]) {
file { $webroot_location:
ensure => directory,
mode => 0775,
@@ -401,11 +405,7 @@ if hash_key_equals($apache_values, 'install', 1) {
Group['www-data']
]
}
}
if !(downcase($::provisioner_type) in ['virtualbox', 'vmware_fusion'])
and ! defined(File[$webroot_location])
{
} elsif ! (downcase($::provisioner_type) in $apache_provider_types) and ! defined(File[$webroot_location]) {
file { $webroot_location:
ensure => directory,
group => 'www-data',
@@ -435,8 +435,8 @@ if hash_key_equals($apache_values, 'install', 1) {
}
if $::operatingsystem == 'ubuntu'
and hash_key_equals($php_values, 'install', 1)
and hash_key_equals($php_values, 'version', 55)
and hash_key_equals($php_values, 'install', 1)
and hash_key_equals($php_values, 'version', 55)
{
$apache_version = '2.4'
} else {
@@ -467,15 +467,16 @@ if hash_key_equals($apache_values, 'install', 1) {
$apache_vhosts = merge($apache_values['vhosts'], {
'default_vhost_80' => {
'servername' => 'default',
'serveraliases' => ['*'],
'docroot' => '/var/www/default',
'port' => 80,
'default_vhost' => true,
},
'default_vhost_443' => {
'servername' => 'default',
'serveraliases' => ['*'],
'docroot' => '/var/www/default',
'port' => 443,
'default_vhost' => true,
'ssl' => 1,
},
})
} else {
@@ -489,7 +490,7 @@ if hash_key_equals($apache_values, 'install', 1) {
creates => $vhost['docroot'],
}
if (downcase($::provisioner_type) in ['virtualbox', 'vmware_fusion'])
if (downcase($::provisioner_type) in $apache_provider_types)
and ! defined(File[$vhost['docroot']])
{
file { $vhost['docroot']:
@@ -497,9 +498,7 @@ if hash_key_equals($apache_values, 'install', 1) {
mode => 0765,
require => Exec["exec mkdir -p ${vhost['docroot']} @ key ${key}"]
}
}
if !(downcase($::provisioner_type) in ['virtualbox', 'vmware_fusion'])
} elsif !(downcase($::provisioner_type) in $apache_provider_types)
and ! defined(File[$vhost['docroot']])
{
file { $vhost['docroot']:
@@ -515,11 +514,11 @@ if hash_key_equals($apache_values, 'install', 1) {
create_resources(apache::vhost, { "${key}" => merge($vhost, {
'custom_fragment' => template('puphpet/apache/custom_fragment.erb'),
'ssl' => 'ssl' in $vhost and str2bool($vhost['ssl']) ? { true => true, default => false },
'ssl_cert' => 'ssl_cert' in $vhost and $vhost['ssl_cert'] ? { undef => undef, '' => undef, default => $vhost['ssl_cert'] },
'ssl_key' => 'ssl_key' in $vhost and $vhost['ssl_key'] ? { undef => undef, '' => undef, default => $vhost['ssl_key'] },
'ssl_chain' => 'ssl_chain' in $vhost and $vhost['ssl_chain'] ? { undef => undef, '' => undef, default => $vhost['ssl_chain'] },
'ssl_certs_dir' => 'ssl_certs_dir' in $vhost and $vhost['ssl_certs_dir'] ? { undef => undef, '' => undef, default => $vhost['ssl_certs_dir'] }
'ssl' => 'ssl' in $vhost and str2bool($vhost['ssl']) ? { true => true, default => false },
'ssl_cert' => hash_key_true($vhost, 'ssl_cert') ? { true => $vhost['ssl_cert'], default => undef },
'ssl_key' => hash_key_true($vhost, 'ssl_key') ? { true => $vhost['ssl_key'], default => undef },
'ssl_chain' => hash_key_true($vhost, 'ssl_chain') ? { true => $vhost['ssl_chain'], default => undef },
'ssl_certs_dir' => hash_key_true($vhost, 'ssl_certs_dir') ? { true => $vhost['ssl_certs_dir'], default => undef }
})
})
@@ -578,33 +577,25 @@ if hash_key_equals($nginx_values, 'install', 1) {
}
}
$webroot_location = $puphpet::params::nginx_webroot_location
$webroot_location = $puphpet::params::nginx_webroot_location
$nginx_provider_types = ['virtualbox', 'vmware_fusion', 'vmware_desktop', 'parallels']
exec { "exec mkdir -p ${webroot_location}":
command => "mkdir -p ${webroot_location}",
creates => $webroot_location,
}
if (downcase($::provisioner_type) in ['virtualbox', 'vmware_fusion'])
and ! defined(File[$webroot_location])
{
if (downcase($::provisioner_type) in $nginx_provider_types) and ! defined(File[$webroot_location]) {
file { $webroot_location:
ensure => directory,
mode => 0775,
require => [
Exec["exec mkdir -p ${webroot_location}"],
Group['www-data']
]
require => Exec["exec mkdir -p ${webroot_location}"],
}
}
if !(downcase($::provisioner_type) in ['virtualbox', 'vmware_fusion'])
and ! defined(File[$webroot_location])
{
} elsif ! (downcase($::provisioner_type) in $nginx_provider_types) and ! defined(File[$webroot_location]) {
file { $webroot_location:
ensure => directory,
group => 'www-data',
mode => 0775,
group => 'www-data',
require => [
Exec["exec mkdir -p ${webroot_location}"],
Group['www-data']
@@ -626,12 +617,10 @@ if hash_key_equals($nginx_values, 'install', 1) {
if hash_key_equals($php_values, 'install', 1) {
$php5_fpm_sock = '/var/run/php5-fpm.sock'
if $php_values['version'] == undef {
$fastcgi_pass = null
} elsif $php_values['version'] == '53' {
$fastcgi_pass = '127.0.0.1:9000'
} else {
$fastcgi_pass = "unix:${php5_fpm_sock}"
$fastcgi_pass = $php_values['version'] ? {
'53' => '127.0.0.1:9000',
undef => null,
default => "unix:${php5_fpm_sock}"
}
if $::osfamily == 'redhat' and $fastcgi_pass == "unix:${php5_fpm_sock}" {
@@ -641,7 +630,7 @@ if hash_key_equals($nginx_values, 'install', 1) {
require => Package['nginx'],
}
exec { "listen = 127.0.0.1:9000 => listen = ${php5_fpm_sock}":
exec { "'listen = 127.0.0.1:9000' => 'listen = ${php5_fpm_sock}'":
command => "perl -p -i -e 's#listen = 127.0.0.1:9000#listen = ${php5_fpm_sock}#gi' /etc/php-fpm.d/www.conf",
unless => "grep -c 'listen = 127.0.0.1:9000' '${php5_fpm_sock}'",
notify => [
@@ -651,29 +640,51 @@ if hash_key_equals($nginx_values, 'install', 1) {
require => Exec["create ${php5_fpm_sock} file"]
}
set_php5_fpm_sock_group_and_user { 'php_rhel':
set_nginx_php5_fpm_sock_group_and_user { 'php_rhel':
require => Exec["create ${php5_fpm_sock} file"],
}
} else {
set_php5_fpm_sock_group_and_user { 'php':
set_nginx_php5_fpm_sock_group_and_user { 'php':
require => Package['nginx'],
subscribe => Service['php5-fpm'],
}
}
} elsif hash_key_equals($hhvm_values, 'install', 1) {
$fastcgi_pass = '127.0.0.1:9000'
set_php5_fpm_sock_group_and_user { 'hhvm':
require => Package['nginx'],
}
$fastcgi_pass = '127.0.0.1:9000'
} else {
$fastcgi_pass = ''
$fastcgi_pass = null
}
class { 'nginx': }
if count($nginx_values['vhosts']) > 0 {
each( $nginx_values['vhosts'] ) |$key, $vhost| {
if hash_key_equals($nginx_values['settings'], 'default_vhost', 1) {
$nginx_vhosts = merge($nginx_values['vhosts'], {
'default' => {
'server_name' => '_',
'server_aliases' => [],
'www_root' => '/var/www/html',
'listen_port' => 80,
'index_files' => ['index', 'index.html', 'index.htm', 'index.php'],
'envvars' => [],
'ssl' => '0',
'ssl_cert' => '',
'ssl_key' => '',
},
})
if ! defined(File[$puphpet::params::nginx_default_conf_location]) {
file { $puphpet::params::nginx_default_conf_location:
ensure => absent,
require => Package['nginx'],
notify => Class['nginx::service'],
}
}
} else {
$nginx_vhosts = $nginx_values['vhosts']
}
if count($nginx_vhosts) > 0 {
each( $nginx_vhosts ) |$key, $vhost| {
exec { "exec mkdir -p ${vhost['www_root']} @ key ${key}":
command => "mkdir -p ${vhost['www_root']}",
creates => $vhost['www_root'],
@@ -695,7 +706,7 @@ if hash_key_equals($nginx_values, 'install', 1) {
}
}
create_resources(nginx_vhost, $nginx_values['vhosts'])
create_resources(nginx_vhost, $nginx_vhosts)
}
if ! defined(Firewall['100 tcp/443']) {
@@ -743,41 +754,12 @@ define nginx_vhost (
$fastcgi_param_parts = []
}
if $ssl == 0 or $ssl == false or $ssl == '' {
$ssl_set = false
} else {
$ssl_set = true
}
if $ssl_cert == 0 or $ssl_cert == false or $ssl_cert == '' {
$ssl_cert_set = $puphpet::params::ssl_cert_location
} else {
$ssl_cert_set = $ssl_cert
}
if $ssl_key == 0 or $ssl_key == false or $ssl_key == '' {
$ssl_key_set = $puphpet::params::ssl_key_location
} else {
$ssl_key_set = $ssl_key
}
if $ssl_port == 0 or $ssl_port == false or $ssl_port == '' {
$ssl_port_set = '443'
} else {
$ssl_port_set = $ssl_port
}
if $rewrite_to_https == 0 or $rewrite_to_https == false or $rewrite_to_https == '' {
$rewrite_to_https_set = false
} else {
$rewrite_to_https_set = true
}
if $spdy == off or $spdy == 0 or $spdy == false or $spdy == '' {
$spdy_set = off
} else {
$spdy_set = on
}
$ssl_set = value_true($ssl) ? { true => true, default => false, }
$ssl_cert_set = value_true($ssl_cert) ? { true => $ssl_cert, default => $puphpet::params::ssl_cert_location, }
$ssl_key_set = value_true($ssl_key) ? { true => $ssl_key, default => $puphpet::params::ssl_key_location, }
$ssl_port_set = value_true($ssl_port) ? { true => $ssl_port, default => '443', }
$rewrite_to_https_set = value_true($rewrite_to_https) ? { true => true, default => false, }
$spdy_set = value_true($spdy) ? { true => on, default => off, }
nginx::resource::vhost { $server_name:
server_name => $merged_server_name,
@@ -798,6 +780,19 @@ define nginx_vhost (
$fastcgi_param = concat($fastcgi_param_parts, $envvars)
$fastcgi_pass_hash = fastcgi_pass ? {
null => {},
'' => {},
default => {'fastcgi_pass' => $fastcgi_pass},
}
$location_cfg_append = merge({
'fastcgi_split_path_info' => '^(.+\.php)(/.+)$',
'fastcgi_param' => $fastcgi_param,
'fastcgi_index' => 'index.php',
'include' => 'fastcgi_params'
}, $fastcgi_pass_hash)
nginx::resource::location { "${server_name}-php":
ensure => present,
vhost => $server_name,
@@ -806,20 +801,17 @@ define nginx_vhost (
try_files => ['$uri', '$uri/', "/${try_files}?\$args"],
ssl => $ssl_set,
www_root => $www_root,
location_cfg_append => {
'fastcgi_split_path_info' => '^(.+\.php)(/.+)$',
'fastcgi_param' => $fastcgi_param,
'fastcgi_pass' => $fastcgi_pass,
'fastcgi_index' => 'index.php',
'include' => 'fastcgi_params'
},
location_cfg_append => $location_cfg_append,
notify => Class['nginx::service'],
}
}
define set_php5_fpm_sock_group_and_user (){
define set_nginx_php5_fpm_sock_group_and_user () {
exec { 'set php5_fpm_sock group and user':
command => "chmod 660 ${php5_fpm_sock} && chown www-data ${php5_fpm_sock} && chgrp www-data ${php5_fpm_sock} && touch /.puphpet-stuff/php5_fpm_sock",
command => "chmod 660 ${php5_fpm_sock} && \
chown www-data ${php5_fpm_sock} && \
chgrp www-data ${php5_fpm_sock} && \
touch /.puphpet-stuff/php5_fpm_sock",
creates => '/.puphpet-stuff/php5_fpm_sock',
}
}
@@ -998,7 +990,7 @@ if hash_key_equals($php_values, 'install', 1) {
{
puphpet::ini { 'sendmail_path':
entry => 'CUSTOM/sendmail_path',
value => '/usr/bin/env catchmail',
value => "${mailcatcher_values['settings']['mailcatcher_path']}/catchmail -f",
php_version => $php_values['version'],
webserver => $php_webserver_service_ini
}
@@ -1096,7 +1088,7 @@ if hash_key_equals($xhprof_values, 'install', 1)
}
if hash_key_equals($apache_values, 'install', 1) {
$xhprof_webroot_location = $puphpet::params::apache_webroot_location
$xhprof_webroot_location = '/var/www/default'
$xhprof_webserver_service = 'httpd'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$xhprof_webroot_location = $puphpet::params::nginx_webroot_location
@@ -1216,11 +1208,11 @@ if hash_key_equals($mysql_values, 'install', 1) {
if hash_key_equals($mysql_values, 'adminer', 1) and $mysql_php_installed {
if hash_key_equals($apache_values, 'install', 1) {
$mysql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mysql_adminer_webroot_location = '/var/www/default'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$mysql_adminer_webroot_location = $puphpet::params::nginx_webroot_location
} else {
$mysql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mysql_adminer_webroot_location = '/var/www/default'
}
class { 'puphpet::adminer':
@@ -1329,11 +1321,11 @@ if hash_key_equals($postgresql_values, 'install', 1) {
if hash_key_equals($postgresql_values, 'adminer', 1) and $postgresql_php_installed {
if hash_key_equals($apache_values, 'install', 1) {
$postgresql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$postgresql_adminer_webroot_location = '/var/www/default'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$postgresql_adminer_webroot_location = $puphpet::params::nginx_webroot_location
} else {
$postgresql_adminer_webroot_location = $puphpet::params::apache_webroot_location
$postgresql_adminer_webroot_location = '/var/www/default'
}
class { 'puphpet::adminer':
@@ -1364,7 +1356,7 @@ define postgresql_db (
$table = "${name}.*"
exec{ "${name}-import":
command => "psql ${name} < ${sql_file}",
command => "sudo -u postgres psql ${name} < ${sql_file}",
logoutput => true,
refreshonly => $refresh,
require => Postgresql::Server::Db[$name],
@@ -1491,11 +1483,11 @@ if hash_key_equals($mariadb_values, 'install', 1) {
if hash_key_equals($mariadb_values, 'adminer', 1) and $mariadb_php_installed {
if hash_key_equals($apache_values, 'install', 1) {
$mariadb_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mariadb_adminer_webroot_location = '/var/www/default'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$mariadb_adminer_webroot_location = $puphpet::params::nginx_webroot_location
} else {
$mariadb_adminer_webroot_location = $puphpet::params::apache_webroot_location
$mariadb_adminer_webroot_location = '/var/www/default'
}
class { 'puphpet::adminer':
@@ -1662,7 +1654,7 @@ if $beanstalkd_values == undef {
}
if hash_key_equals($apache_values, 'install', 1) {
$beanstalk_console_webroot_location = "${puphpet::params::apache_webroot_location}/beanstalk_console"
$beanstalk_console_webroot_location = '/var/www/default/beanstalk_console'
} elsif hash_key_equals($nginx_values, 'install', 1) {
$beanstalk_console_webroot_location = "${puphpet::params::nginx_webroot_location}/beanstalk_console"
} else {
@@ -1724,6 +1716,11 @@ if hash_key_equals($apache_values, 'install', 1)
}
if hash_key_equals($rabbitmq_values, 'install', 1) {
if $::osfamily == 'redhat' {
Class['erlang'] -> Class['rabbitmq']
include 'erlang'
}
create_resources('class', { 'rabbitmq' => $rabbitmq_values['settings'] })
if hash_key_equals($php_values, 'install', 1) and ! defined(Php::Pecl::Module['amqp']) {

View File

@@ -0,0 +1,15 @@
source 'https://rubygems.org'
group :development, :test do
gem 'rake', :require => false
gem 'rspec-puppet', :require => false
gem 'puppetlabs_spec_helper', :require => false
gem 'puppet-lint', :require => false
gem 'rspec-system-puppet', '~>2.0.0'
end
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', :require => false
end

View File

@@ -0,0 +1,13 @@
Copyright 2012-2014 Michael Stahnke
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -0,0 +1,8 @@
name 'stahnma-epel'
version '0.1.0'
source 'http://github.com/stahnma/puppet-module-epel'
author 'stahnma'
license 'Apache License, Version 2.0'
summary 'Setup the EPEL package repo'
description 'Setup the EPEL package repo on Centos/RHEL et all'
project_page 'http://github.com/stahnma/puppet-module-epel'

View File

@@ -0,0 +1,90 @@
# Configure EPEL (Extra Repository for Enterprise Linux)
# About
This module basically just mimics the epel-release rpm. The same repos are
enabled/disabled and the GPG key is imported. In the end you will end up with
the EPEL repos configured.
The following Repos will be setup and enabled by default:
* epel
Other repositories that will setup but disabled (as per the epel-release setup)
* epel-debuginfo
* epel-source
* epel-testing
* epel-testing-debuginfo
* epel-testing-source
# Proxy
If you have an http proxy required to access the internet, you can use either
a class parameter in the _epel_ class, or edit the $proxy variable in the
params.pp file. By default no proxy is assumed.
# Why?
I am a big fan of EPEL. I actually was one of the people who helped get it
going. I am also the owner of the epel-release package, so in general this
module should stay fairly up to date with the official upstream package.
I just got sick of coding Puppet modules and basically having an assumption
that EPEL was setup or installed. I can now depend on this module instead.
I realize it is fairly trivial to get EPEL setup. Every now-and-then however
the path to epel-release changes because something changes in the package (mass
rebuild, rpm build macros updates, etc). This module will bypass the changing
URL and just setup the package mirrors.
This does mean that if you are looking for RPM macros that are normally
included with EPEL release, this will not have them.
# Futher Information
* [EPEL Wiki](http://fedoraproject.org/wiki/EPEL)
* [epel-release package information](http://mirrors.servercentral.net/fedora/epel/6/i386/repoview/epel-release.html)
# Testing
* This is commonly used on Puppet Enterprise 3.x
* This was tested using Puppet 3.3.0 on Centos5/6
* This was tested using Puppet 3.1.1 on Amazon's AWS Linux
* I assume it will work on any RHEL variant (Amazon Linux is debatable as a variant)
# Lifecycle
* No functionality has been introduced that should break Puppet 2.6 or 2.7, but I am no longer testing these versions of Puppet as they are end-of-lifed from Puppet Labs.
## Unit tests
Install the necessary gems
bundle install
Run the RSpec and puppet-lint tests
bundle exec rake ci
## System tests
If you have Vagrant >=1.1.0 you can also run system tests:
RSPEC_SET=centos-64-x64 bundle exec rake spec:system
Available RSPEC_SET options are in .nodeset.yml
# License
Apache Software License 2.0
# Author/Contributors
* Chad Metcalf <metcalfc@gmail.com>
* Joseph Swick <joseph.swick@meltwater.com>
* Matthaus Owens <mlitteken@gmail.com>
* Michael Stahnke <stahnma@puppetlabs.com>
* Michael Stahnke <stahnma@websages.com>
* Pro Cabales <proletaryo@gmail.com>
* Proletaryo Cabales <proletaryo@gmail.com>
* Stefan Goethals <stefan@zipkid.eu>
* Tim Rupp <caphrim007@gmail.com>
* Trey Dockendorf <treydock@gmail.com>
* Troy Bollinger <troy@us.ibm.com>
* Vlastimil Holer <holer@ics.muni.cz>
* Ewoud Kohl van Wijngaarden <e.kohlvanwijngaarden@oxilion.nl>

View File

@@ -0,0 +1,17 @@
require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-lint/tasks/puppet-lint'
require 'rspec-system/rake_task'
task :default do
sh %{rake -T}
end
# Disable specific puppet-lint checks
PuppetLint.configuration.send("disable_80chars")
PuppetLint.configuration.send("disable_class_inherits_from_params_class")
desc "Run rspec-puppet and puppet-lint tasks"
task :ci => [
:lint,
:spec,
]

View File

@@ -0,0 +1,30 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
mQGiBEXopTIRBACZDBMOoFOakAjaxw1LXjeSvh/kmE35fU1rXfM7T0AV31NATCLF
l5CQiNDA4oWreDThg2Bf6+LIVTsGQb1V+XXuLak4Em5yTYwMTVB//4/nMxQEbpl/
QB2XwlJ7EQ0vW+kiPDz/7pHJz1p1jADzd9sQQicMtzysS4qT2i5A23j0VwCg1PB/
lpYqo0ZhWTrevxKMa1n34FcD/REavj0hSLQFTaKNLHRotRTF8V0BajjSaTkUT4uk
/RTaZ8Kr1mTosVtosqmdIAA2XHxi8ZLiVPPSezJjfElsSqOAxEKPL0djfpp2wrTm
l/1iVnX+PZH5DRKCbjdCMLDJhYap7YUhcPsMGSeUKrwmBCBJUPc6DhjFvyhA9IMl
1T0+A/9SKTv94ToP/JYoCTHTgnG5MoVNafisfe0wojP2mWU4gRk8X4dNGKMj6lic
vM6gne3hESyjcqZSmr7yELPPGhI9MNauJ6Ob8cTR2T12Fmv9w03DD3MnBstR6vhP
QcqZKhc5SJYYY7oVfxlSOfF4xfwcHQKoD5TOKwIAQ6T8jyFpKbQkRmVkb3JhIEVQ
RUwgPGVwZWxAZmVkb3JhcHJvamVjdC5vcmc+iGQEExECACQFAkXopTICGwMFCRLM
AwAGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQEZzANiF1IfabmQCgzvE60MnHSOBa
ZXXF7uU2Vzu8EOkAoKg9h+j0NuNom6WUYZyJQt4zc5seuQINBEXopTYQCADapnR/
blrJ8FhlgNPl0X9S3JE/kygPbNXIqne4XBVYisVp0uzNCRUxNZq30MpY027JCs2J
nL2fMpwvx33f0phU029vrIZKA3CmnnwVsjcWfMJOVPBmVN7m5bGU68F+PdRIcDsl
PMOWRLkTBZOGolLgIbM4719fqA8etewILrX6uPvRDwywV7/sPCFpRcfNNBUY+Zx3
5bf4fnkaCKxgXgQS3AT+hGYhlzIqQVTkGNveHTnt4SSzgAqR9sSwQwqvEfVtYNeS
w5rDguLG41HQm1Hojv59HNYjH6F/S1rClZi21bLgZbKpCFX76qPt8CTw+iQLBPPd
yoOGHfzyp7nsfhUrAAMFB/9/H9Gpk822ZpBexQW4y3LGFo9ZSnmu+ueOZPU3SqDA
DW1ovZdYzGuJTGGM9oMl6bL8eZrcUBBOFaWge5wZczIE3hx2exEOkDdvq+MUDVD1
axmN45q/7h1NYRp5GQL2ZsoV4g9U2gMdzHOFtZCER6PP9ErVlfJpgBUCdSL93V4H
Sgpkk7znmTOklbCM6l/G/A6q4sCRqfzHwVSTiruyTBiU9lfROsAl8fjIq2OzWJ2T
P9sadBe1llUYaow7txYSUxssW+89avct35gIyrBbof5M+CBXyAOUaSWmpM2eub24
0qbqiSr/Y6Om0t6vSzR8gRk7g+1H6IE0Tt1IJCvCAMimiE8EGBECAA8FAkXopTYC
GwwFCRLMAwAACgkQEZzANiF1IfZQYgCgiZHCv4xb+sTHCn/otc1Ovvi/OgMAnRXY
bbsLFWOfmzAnNIGvFRWy+YHi
=MMNL
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQINBEvSKUIBEADLGnUj24ZVKW7liFN/JA5CgtzlNnKs7sBg7fVbNWryiE3URbn1
JXvrdwHtkKyY96/ifZ1Ld3lE2gOF61bGZ2CWwJNee76Sp9Z+isP8RQXbG5jwj/4B
M9HK7phktqFVJ8VbY2jfTjcfxRvGM8YBwXF8hx0CDZURAjvf1xRSQJ7iAo58qcHn
XtxOAvQmAbR9z6Q/h/D+Y/PhoIJp1OV4VNHCbCs9M7HUVBpgC53PDcTUQuwcgeY6
pQgo9eT1eLNSZVrJ5Bctivl1UcD6P6CIGkkeT2gNhqindRPngUXGXW7Qzoefe+fV
QqJSm7Tq2q9oqVZ46J964waCRItRySpuW5dxZO34WM6wsw2BP2MlACbH4l3luqtp
Xo3Bvfnk+HAFH3HcMuwdaulxv7zYKXCfNoSfgrpEfo2Ex4Im/I3WdtwME/Gbnwdq
3VJzgAxLVFhczDHwNkjmIdPAlNJ9/ixRjip4dgZtW8VcBCrNoL+LhDrIfjvnLdRu
vBHy9P3sCF7FZycaHlMWP6RiLtHnEMGcbZ8QpQHi2dReU1wyr9QgguGU+jqSXYar
1yEcsdRGasppNIZ8+Qawbm/a4doT10TEtPArhSoHlwbvqTDYjtfV92lC/2iwgO6g
YgG9XrO4V8dV39Ffm7oLFfvTbg5mv4Q/E6AWo/gkjmtxkculbyAvjFtYAQARAQAB
tCFFUEVMICg2KSA8ZXBlbEBmZWRvcmFwcm9qZWN0Lm9yZz6JAjYEEwECACAFAkvS
KUICGw8GCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRA7Sd8qBgi4lR/GD/wLGPv9
qO39eyb9NlrwfKdUEo1tHxKdrhNz+XYrO4yVDTBZRPSuvL2yaoeSIhQOKhNPfEgT
9mdsbsgcfmoHxmGVcn+lbheWsSvcgrXuz0gLt8TGGKGGROAoLXpuUsb1HNtKEOwP
Q4z1uQ2nOz5hLRyDOV0I2LwYV8BjGIjBKUMFEUxFTsL7XOZkrAg/WbTH2PW3hrfS
WtcRA7EYonI3B80d39ffws7SmyKbS5PmZjqOPuTvV2F0tMhKIhncBwoojWZPExft
HpKhzKVh8fdDO/3P1y1Fk3Cin8UbCO9MWMFNR27fVzCANlEPljsHA+3Ez4F7uboF
p0OOEov4Yyi4BEbgqZnthTG4ub9nyiupIZ3ckPHr3nVcDUGcL6lQD/nkmNVIeLYP
x1uHPOSlWfuojAYgzRH6LL7Idg4FHHBA0to7FW8dQXFIOyNiJFAOT2j8P5+tVdq8
wB0PDSH8yRpn4HdJ9RYquau4OkjluxOWf0uRaS//SUcCZh+1/KBEOmcvBHYRZA5J
l/nakCgxGb2paQOzqqpOcHKvlyLuzO5uybMXaipLExTGJXBlXrbbASfXa/yGYSAG
iVrGz9CE6676dMlm8F+s3XXE13QZrXmjloc6jwOljnfAkjTGXjiB7OULESed96MR
XtfLk0W5Ab9pd7tKDR6QHI7rgHXfCopRnZ2VVQ==
=V/6I
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
mQINBFKuaIQBEAC1UphXwMqCAarPUH/ZsOFslabeTVO2pDk5YnO96f+rgZB7xArB
OSeQk7B90iqSJ85/c72OAn4OXYvT63gfCeXpJs5M7emXkPsNQWWSju99lW+AqSNm
jYWhmRlLRGl0OO7gIwj776dIXvcMNFlzSPj00N2xAqjMbjlnV2n2abAE5gq6VpqP
vFXVyfrVa/ualogDVmf6h2t4Rdpifq8qTHsHFU3xpCz+T6/dGWKGQ42ZQfTaLnDM
jToAsmY0AyevkIbX6iZVtzGvanYpPcWW4X0RDPcpqfFNZk643xI4lsZ+Y2Er9Yu5
S/8x0ly+tmmIokaE0wwbdUu740YTZjCesroYWiRg5zuQ2xfKxJoV5E+Eh+tYwGDJ
n6HfWhRgnudRRwvuJ45ztYVtKulKw8QQpd2STWrcQQDJaRWmnMooX/PATTjCBExB
9dkz38Druvk7IkHMtsIqlkAOQMdsX1d3Tov6BE2XDjIG0zFxLduJGbVwc/6rIc95
T055j36Ez0HrjxdpTGOOHxRqMK5m9flFbaxxtDnS7w77WqzW7HjFrD0VeTx2vnjj
GqchHEQpfDpFOzb8LTFhgYidyRNUflQY35WLOzLNV+pV3eQ3Jg11UFwelSNLqfQf
uFRGc+zcwkNjHh5yPvm9odR1BIfqJ6sKGPGbtPNXo7ERMRypWyRz0zi0twARAQAB
tChGZWRvcmEgRVBFTCAoNykgPGVwZWxAZmVkb3JhcHJvamVjdC5vcmc+iQI4BBMB
AgAiBQJSrmiEAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBqL66iNSxk
5cfGD/4spqpsTjtDM7qpytKLHKruZtvuWiqt5RfvT9ww9GUUFMZ4ZZGX4nUXg49q
ixDLayWR8ddG/s5kyOi3C0uX/6inzaYyRg+Bh70brqKUK14F1BrrPi29eaKfG+Gu
MFtXdBG2a7OtPmw3yuKmq9Epv6B0mP6E5KSdvSRSqJWtGcA6wRS/wDzXJENHp5re
9Ism3CYydpy0GLRA5wo4fPB5uLdUhLEUDvh2KK//fMjja3o0L+SNz8N0aDZyn5Ax
CU9RB3EHcTecFgoy5umRj99BZrebR1NO+4gBrivIfdvD4fJNfNBHXwhSH9ACGCNv
HnXVjHQF9iHWApKkRIeh8Fr2n5dtfJEF7SEX8GbX7FbsWo29kXMrVgNqHNyDnfAB
VoPubgQdtJZJkVZAkaHrMu8AytwT62Q4eNqmJI1aWbZQNI5jWYqc6RKuCK6/F99q
thFT9gJO17+yRuL6Uv2/vgzVR1RGdwVLKwlUjGPAjYflpCQwWMAASxiv9uPyYPHc
ErSrbRG0wjIfAR3vus1OSOx3xZHZpXFfmQTsDP7zVROLzV98R3JwFAxJ4/xqeON4
vCPFU6OsT3lWQ8w7il5ohY95wmujfr6lk89kEzJdOTzcn7DBbUru33CQMGKZ3Evt
RjsC7FDbL017qxS+ZVA/HGkyfiu4cpgV8VUnbql5eAZ+1Ll6Dw==
=hdPa
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -0,0 +1,11 @@
# This is a simple fact to get the Major version of an OS without having to
# have the entire LSB suite installed. LSB seems to pull in about 300 megs of
# stuff I often don't require. This fact is quick to load so it shouldn't be
# much of an issue.
Facter.add(:os_maj_version) do
setcode do
v = Facter.value(:operatingsystemrelease)
v.split('.')[0].strip
end
end

View File

@@ -0,0 +1,135 @@
# Class epel
#
# Actions:
# Configure the proper repositories and import GPG keys
#
# Reqiures:
# You should probably be on an Enterprise Linux variant. (Centos, RHEL,
# Scientific, Oracle, Ascendos, et al)
#
# Sample Usage:
# include epel
#
class epel (
$epel_mirrorlist = $epel::params::epel_mirrorlist,
$epel_baseurl = $epel::params::epel_baseurl,
$epel_failovermethod = $epel::params::epel_failovermethod,
$epel_proxy = $epel::params::epel_proxy,
$epel_enabled = $epel::params::epel_enabled,
$epel_gpgcheck = $epel::params::epel_gpgcheck,
$epel_testing_baseurl = $epel::params::epel_testing_baseurl,
$epel_testing_failovermethod = $epel::params::epel_testing_failovermethod,
$epel_testing_proxy = $epel::params::epel_testing_proxy,
$epel_testing_enabled = $epel::params::epel_testing_enabled,
$epel_testing_gpgcheck = $epel::params::epel_testing_gpgcheck,
$epel_source_mirrorlist = $epel::params::epel_source_mirrorlist,
$epel_source_baseurl = $epel::params::epel_source_baseurl,
$epel_source_failovermethod = $epel::params::epel_source_failovermethod,
$epel_source_proxy = $epel::params::epel_source_proxy,
$epel_source_enabled = $epel::params::epel_source_enabled,
$epel_source_gpgcheck = $epel::params::epel_source_gpgcheck,
$epel_debuginfo_mirrorlist = $epel::params::epel_debuginfo_mirrorlist,
$epel_debuginfo_baseurl = $epel::params::epel_debuginfo_baseurl,
$epel_debuginfo_failovermethod = $epel::params::epel_debuginfo_failovermethod,
$epel_debuginfo_proxy = $epel::params::epel_debuginfo_proxy,
$epel_debuginfo_enabled = $epel::params::epel_debuginfo_enabled,
$epel_debuginfo_gpgcheck = $epel::params::epel_debuginfo_gpgcheck,
$epel_testing_source_baseurl = $epel::params::epel_testing_source_baseurl,
$epel_testing_source_failovermethod = $epel::params::epel_testing_source_failovermethod,
$epel_testing_source_proxy = $epel::params::epel_testing_source_proxy,
$epel_testing_source_enabled = $epel::params::epel_testing_source_enabled,
$epel_testing_source_gpgcheck = $epel::params::epel_testing_source_gpgcheck,
$epel_testing_debuginfo_baseurl = $epel::params::epel_testing_debuginfo_baseurl,
$epel_testing_debuginfo_failovermethod = $epel::params::epel_testing_debuginfo_failovermethod,
$epel_testing_debuginfo_proxy = $epel::params::epel_testing_debuginfo_proxy,
$epel_testing_debuginfo_enabled = $epel::params::epel_testing_debuginfo_enabled,
$epel_testing_debuginfo_gpgcheck = $epel::params::epel_testing_debuginfo_gpgcheck
) inherits epel::params {
if $::osfamily == 'RedHat' and $::operatingsystem !~ /Fedora|Amazon/ {
yumrepo { 'epel-testing':
baseurl => $epel_testing_baseurl,
failovermethod => $epel_testing_failovermethod,
proxy => $epel_testing_proxy,
enabled => $epel_testing_enabled,
gpgcheck => $epel_testing_gpgcheck,
gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
descr => "Extra Packages for Enterprise Linux ${::os_maj_version} - Testing - \$basearch ",
}
yumrepo { 'epel-testing-debuginfo':
baseurl => $epel_testing_debuginfo_baseurl,
failovermethod => $epel_testing_debuginfo_failovermethod,
proxy => $epel_testing_debuginfo_proxy,
enabled => $epel_testing_debuginfo_enabled,
gpgcheck => $epel_testing_debuginfo_gpgcheck,
gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
descr => "Extra Packages for Enterprise Linux ${::os_maj_version} - Testing - \$basearch - Debug",
}
yumrepo { 'epel-testing-source':
baseurl => $epel_testing_source_baseurl,
failovermethod => $epel_testing_source_failovermethod,
proxy => $epel_testing_source_proxy,
enabled => $epel_testing_source_enabled,
gpgcheck => $epel_testing_source_gpgcheck,
gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
descr => "Extra Packages for Enterprise Linux ${::os_maj_version} - Testing - \$basearch - Source",
}
yumrepo { 'epel':
mirrorlist => $epel_mirrorlist,
baseurl => $epel_baseurl,
failovermethod => $epel_failovermethod,
proxy => $epel_proxy,
enabled => $epel_enabled,
gpgcheck => $epel_gpgcheck,
gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
descr => "Extra Packages for Enterprise Linux ${::os_maj_version} - \$basearch",
}
yumrepo { 'epel-debuginfo':
mirrorlist => $epel_debuginfo_mirrorlist,
baseurl => $epel_debuginfo_baseurl,
failovermethod => $epel_debuginfo_failovermethod,
proxy => $epel_debuginfo_proxy,
enabled => $epel_debuginfo_enabled,
gpgcheck => $epel_debuginfo_gpgcheck,
gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
descr => "Extra Packages for Enterprise Linux ${::os_maj_version} - \$basearch - Debug",
}
yumrepo { 'epel-source':
mirrorlist => $epel_source_mirrorlist,
baseurl => $epel_source_baseurl,
failovermethod => $epel_source_failovermethod,
proxy => $epel_source_proxy,
enabled => $epel_source_enabled,
gpgcheck => $epel_source_gpgcheck,
gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
descr => "Extra Packages for Enterprise Linux ${::os_maj_version} - \$basearch - Source",
}
file { "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}":
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
source => "puppet:///modules/epel/RPM-GPG-KEY-EPEL-${::os_maj_version}",
}
epel::rpm_gpg_key{ "EPEL-${::os_maj_version}":
path => "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::os_maj_version}",
before => Yumrepo['epel','epel-source','epel-debuginfo','epel-testing','epel-testing-source','epel-testing-debuginfo'],
}
} elsif $::osfamily == 'RedHat' and $::operatingsystem == 'Amazon' {
yumrepo { 'epel':
enabled => $epel_enabled,
gpgcheck => $epel_gpgcheck,
}
} else {
notice ("Your operating system ${::operatingsystem} will not have the EPEL repository applied")
}
}

View File

@@ -0,0 +1,45 @@
# Optional parameters in setting up EPEL
class epel::params {
# Setting to 'absent' will fall back to the yum.conf
# Setting proxy here will be the default for all repos.
#
# If you wish to set a proxy for an individual set of repos,
# you can declare $proxy in that class, and should scope to
# the most specific declaration of proxy.
$proxy = 'absent'
$epel_mirrorlist = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-${::os_maj_version}&arch=\$basearch"
$epel_baseurl = 'absent'
$epel_failovermethod = 'priority'
$epel_proxy = $proxy
$epel_enabled = '1'
$epel_gpgcheck = '1'
$epel_testing_baseurl = "http://download.fedoraproject.org/pub/epel/testing/${::os_maj_version}/\$basearch"
$epel_testing_failovermethod = 'priority'
$epel_testing_proxy = $proxy
$epel_testing_enabled = '0'
$epel_testing_gpgcheck = '1'
$epel_source_mirrorlist = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-${::os_maj_version}&arch=\$basearch"
$epel_source_baseurl = 'absent'
$epel_source_failovermethod = 'priority'
$epel_source_proxy = $proxy
$epel_source_enabled = '0'
$epel_source_gpgcheck = '1'
$epel_debuginfo_mirrorlist = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-${::os_maj_version}&arch=\$basearch"
$epel_debuginfo_baseurl = 'absent'
$epel_debuginfo_failovermethod = 'priority'
$epel_debuginfo_proxy = $proxy
$epel_debuginfo_enabled = '0'
$epel_debuginfo_gpgcheck = '1'
$epel_testing_source_baseurl = "http://download.fedoraproject.org/pub/epel/testing/${::os_maj_version}/SRPMS"
$epel_testing_source_failovermethod = 'priority'
$epel_testing_source_proxy = $proxy
$epel_testing_source_enabled = '0'
$epel_testing_source_gpgcheck = '1'
$epel_testing_debuginfo_baseurl = "http://download.fedoraproject.org/pub/epel/testing/${::os_maj_version}/\$basearch/debug"
$epel_testing_debuginfo_failovermethod = 'priority'
$epel_testing_debuginfo_proxy = $proxy
$epel_testing_debuginfo_enabled = '0'
$epel_testing_debuginfo_gpgcheck = '1'
}

View File

@@ -0,0 +1,28 @@
# Define epel::rpm_gpg_key
#
# Actions:
# Import a RPM gpg key
#
# Parameters:
#
# [*path*]
# Path of the RPM GPG key to import
#
# Reqiures:
# You should probably be on an Enterprise Linux variant. (Centos, RHEL, Scientific, Oracle, Ascendos, et al)
#
# Sample Usage:
# epel::rpm_gpg_key{ "EPEL-6":
# path => "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6"
# }
#
define epel::rpm_gpg_key($path) {
# Given the path to a key, see if it is imported, if not, import it
exec { "import-${name}":
path => '/bin:/usr/bin:/sbin:/usr/sbin',
command => "rpm --import ${path}",
unless => "rpm -q gpg-pubkey-$(echo $(gpg --throw-keyids < ${path}) | cut --characters=11-18 | tr '[A-Z]' '[a-z]')",
require => File[$path],
logoutput => 'on_failure',
}
}

View File

@@ -0,0 +1,45 @@
{
"name": "stahnma-epel",
"version": "0.1.0",
"source": "http://github.com/stahnma/puppet-module-epel",
"author": "stahnma",
"license": "Apache License, Version 2.0",
"summary": "Setup the EPEL package repo",
"description": "Setup the EPEL package repo on Centos/RHEL et all",
"project_page": "http://github.com/stahnma/puppet-module-epel",
"dependencies": [
],
"types": [
],
"checksums": {
"Gemfile": "3189476f30a99858b367d955298fe469",
"LICENSE": "94f0b1430ad7e59227ccabf8232f81d5",
"Modulefile": "250a4370b189d3f2e68ffd359ee02bb5",
"README.md": "6b4c4d2e7f0f9c1b6197529fa1120c88",
"Rakefile": "946eced163d7f8e0da85bda4baa7fa9c",
"files/RPM-GPG-KEY-EPEL-5": "0466c259781def56dafe0a2cdc9de0c5",
"files/RPM-GPG-KEY-EPEL-6": "d865e6b948a74cb03bc3401c0b01b785",
"files/RPM-GPG-KEY-EPEL-7": "58fa8ae27c89f37b08429f04fd4a88cc",
"lib/facter/os_maj_version.rb": "806fb856251b605df379e973c716a41c",
"manifests/init.pp": "61856de8db1eb00700e0a9a93aea506f",
"manifests/params.pp": "4fb2e283b4ba6e41abd7a914bdd001b8",
"manifests/rpm_gpg_key.pp": "69086f12752a14b200e462afaa59a93c",
"spec/classes/epel_spec.rb": "7e8e5973fdccb866e91ed00a3fd0af4c",
"spec/classes/shared_base.rb": "a6a46eb7225a1814b9343f32190ba75b",
"spec/classes/shared_debuginfo.rb": "1bd23934bc1f7d14d2491c7741f10299",
"spec/classes/shared_gpgkey.rb": "38a62fe24acfc9cc8d740d242c9f1c85",
"spec/classes/shared_source.rb": "6581989ed1ca2edd589ed98ecb08bdfa",
"spec/classes/shared_testing.rb": "50e936b9cf241c9849cf551961492532",
"spec/classes/shared_testing_debuginfo.rb": "41e8a2215d347246ff241f1b3a819c91",
"spec/classes/shared_testing_source.rb": "8cd827b2cb0b08b1633d70784417f946",
"spec/defines/rpm_gpg_key_spec.rb": "489fa716eaa2aba013089a6cf552c5a6",
"spec/spec_helper.rb": "a5ad64bd67aa3fe2512fa7ba505c8e8b",
"spec/spec_helper_system.rb": "d24a7ffdf4b67dbbd3ef5687292f51cf",
"spec/system/basic_spec.rb": "bc475b95f390134b31d905590bf8b039",
"spec/system/usage_spec.rb": "04506df5627ecbe975acd1fd0407ae40",
"spec/unit/facter/os_maj_version_spec.rb": "67ab2730991d4a8430f1115aad46bcea",
"tests/init.pp": "7c69b7adf2ba141cb62cfc9e0704d59e"
}
}

View File

@@ -0,0 +1,80 @@
require 'spec_helper'
require 'classes/shared_gpgkey'
require 'classes/shared_base'
require 'classes/shared_source'
require 'classes/shared_debuginfo'
require 'classes/shared_testing'
require 'classes/shared_testing_source'
require 'classes/shared_testing_debuginfo'
describe 'epel' do
it { should create_class('epel') }
it { should contain_class('epel::params') }
context "operatingsystem => #{default_facts[:operatingsystem]}" do
context 'os_maj_version => 6' do
include_context :base_6
include_context :gpgkey_6
include_context :epel_source_6
include_context :epel_debuginfo_6
include_context :epel_testing_6
include_context :epel_testing_source_6
include_context :epel_testing_debuginfo_6
let :facts do
default_facts.merge({
:operatingsystemrelease => '6.4',
:os_maj_version => '6',
})
end
context 'epel_baseurl => http://example.com/epel/6/x86_64' do
let(:params) {{ :epel_baseurl => "http://example.com/epel/6/x86_64" }}
it { should contain_yumrepo('epel').with('baseurl' => 'http://example.com/epel/6/x86_64') }
end
context 'epel_mirrorlist => absent' do
let(:params) {{ :epel_mirrorlist => 'absent' }}
it { should contain_yumrepo('epel').with('mirrorlist' => 'absent') }
end
end
context 'os_maj_version => 5' do
include_context :base_5
include_context :gpgkey_5
include_context :epel_source_5
include_context :epel_debuginfo_5
include_context :epel_testing_5
include_context :epel_testing_source_5
include_context :epel_testing_debuginfo_5
let :facts do
default_facts.merge({
:operatingsystemrelease => '5.9',
:os_maj_version => '5',
})
end
end
end
context 'operatingsystem => Amazon' do
let :facts do
default_facts.merge({
:operatingsystem => 'Amazon',
})
end
it { should_not contain_yumrepo('epel-testing') }
it { should_not contain_yumrepo('epel-testing-debuginfo') }
it { should_not contain_yumrepo('epel-testing-source') }
it { should_not contain_yumrepo('epel-debuginfo') }
it { should_not contain_yumrepo('epel-source') }
it do
should contain_yumrepo('epel').with({
'enabled' => '1',
'gpgcheck' => '1',
})
end
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
shared_context :base do
it do
should contain_yumrepo('epel').with({
'failovermethod' => 'priority',
'proxy' => 'absent',
'enabled' => '1',
'gpgcheck' => '1',
})
end
end
shared_context :base_6 do
include_context :base
it do
should contain_yumrepo('epel').with({
'mirrorlist' => "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
'descr' => "Extra Packages for Enterprise Linux 6 - $basearch",
})
end
end
shared_context :base_5 do
include_context :base
it do
should contain_yumrepo('epel').with({
'mirrorlist' => "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5",
'descr' => "Extra Packages for Enterprise Linux 5 - $basearch",
})
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
shared_context :epel_debuginfo do
it do
should contain_yumrepo('epel-debuginfo').with({
'proxy' => 'absent',
'failovermethod' => 'priority',
'enabled' => '0',
'gpgcheck' => '1',
})
end
end
shared_context :epel_debuginfo_6 do
include_context :epel_debuginfo
it do
should contain_yumrepo('epel-debuginfo').with({
'mirrorlist' => "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-6&arch=$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
'descr' => "Extra Packages for Enterprise Linux 6 - $basearch - Debug",
})
end
end
shared_context :epel_debuginfo_5 do
include_context :epel_debuginfo
it do
should contain_yumrepo('epel-debuginfo').with({
'mirrorlist' => "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5",
'descr' => "Extra Packages for Enterprise Linux 5 - $basearch - Debug",
})
end
end

View File

@@ -0,0 +1,37 @@
require 'spec_helper'
shared_context :gpgkey_6 do
it do
should contain_file("/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6").with({
'ensure' => 'present',
'owner' => 'root',
'group' => 'root',
'mode' => '0644',
'source' => "puppet:///modules/epel/RPM-GPG-KEY-EPEL-6",
})
end
it do
should contain_epel__rpm_gpg_key("EPEL-6").with({
'path' => "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6"
})
end
end
shared_context :gpgkey_5 do
it do
should contain_file("/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5").with({
'ensure' => 'present',
'owner' => 'root',
'group' => 'root',
'mode' => '0644',
'source' => "puppet:///modules/epel/RPM-GPG-KEY-EPEL-5",
})
end
it do
should contain_epel__rpm_gpg_key("EPEL-5").with({
'path' => "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5"
})
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
shared_context :epel_source do
it do
should contain_yumrepo('epel-source').with({
'proxy' => 'absent',
'failovermethod' => 'priority',
'enabled' => '0',
'gpgcheck' => '1',
})
end
end
shared_context :epel_source_6 do
include_context :epel_source
it do
should contain_yumrepo('epel-source').with({
'mirrorlist' => "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-6&arch=$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
'descr' => "Extra Packages for Enterprise Linux 6 - $basearch - Source",
})
end
end
shared_context :epel_source_5 do
include_context :epel_source
it do
should contain_yumrepo('epel-source').with({
'mirrorlist' => "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5",
'descr' => "Extra Packages for Enterprise Linux 5 - $basearch - Source",
})
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
shared_context :epel_testing do
it do
should contain_yumrepo('epel-testing').with({
'failovermethod' => 'priority',
'proxy' => 'absent',
'enabled' => '0',
'gpgcheck' => '1',
})
end
end
shared_context :epel_testing_6 do
include_context :epel_testing
it do
should contain_yumrepo('epel-testing').with({
'baseurl' => "http://download.fedoraproject.org/pub/epel/testing/6/$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
'descr' => "Extra Packages for Enterprise Linux 6 - Testing - $basearch ",
})
end
end
shared_context :epel_testing_5 do
include_context :epel_testing
it do
should contain_yumrepo('epel-testing').with({
'baseurl' => "http://download.fedoraproject.org/pub/epel/testing/5/$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5",
'descr' => "Extra Packages for Enterprise Linux 5 - Testing - $basearch ",
})
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
shared_context :epel_testing_debuginfo do
it do
should contain_yumrepo('epel-testing-debuginfo').with({
'failovermethod' => 'priority',
'proxy' => 'absent',
'enabled' => '0',
'gpgcheck' => '1',
})
end
end
shared_context :epel_testing_debuginfo_6 do
include_context :epel_testing_debuginfo
it do
should contain_yumrepo('epel-testing-debuginfo').with({
'baseurl' => "http://download.fedoraproject.org/pub/epel/testing/6/$basearch/debug",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
'descr' => "Extra Packages for Enterprise Linux 6 - Testing - $basearch - Debug",
})
end
end
shared_context :epel_testing_debuginfo_5 do
include_context :epel_testing_debuginfo
it do
should contain_yumrepo('epel-testing-debuginfo').with({
'baseurl' => "http://download.fedoraproject.org/pub/epel/testing/5/$basearch/debug",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5",
'descr' => "Extra Packages for Enterprise Linux 5 - Testing - $basearch - Debug",
})
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper'
shared_context :epel_testing_source do
it do
should contain_yumrepo('epel-testing-source').with({
'failovermethod' => 'priority',
'proxy' => 'absent',
'enabled' => '0',
'gpgcheck' => '1',
})
end
end
shared_context :epel_testing_source_6 do
include_context :epel_testing_source
it do
should contain_yumrepo('epel-testing-source').with({
'baseurl' => "http://download.fedoraproject.org/pub/epel/testing/6/SRPMS",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
'descr' => "Extra Packages for Enterprise Linux 6 - Testing - $basearch - Source",
})
end
end
shared_context :epel_testing_source_5 do
include_context :epel_testing_source
it do
should contain_yumrepo('epel-testing-source').with({
'baseurl' => "http://download.fedoraproject.org/pub/epel/testing/5/SRPMS",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5",
'descr' => "Extra Packages for Enterprise Linux 5 - Testing - $basearch - Source",
})
end
end

View File

@@ -0,0 +1,57 @@
require 'spec_helper'
describe 'epel::rpm_gpg_key' do
context 'os_maj_version => 6' do
let :facts do
default_facts.merge({
:operatingsystemrelease => '6.4',
:os_maj_version => '6',
})
end
let :title do
'EPEL-6'
end
let :params do
{ :path => "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6" }
end
it do
should contain_exec("import-#{title}").with({
'path' => '/bin:/usr/bin:/sbin:/usr/sbin',
'command' => "rpm --import #{params[:path]}",
'unless' => "rpm -q gpg-pubkey-$(echo $(gpg --throw-keyids < #{params[:path]}) | cut --characters=11-18 | tr '[A-Z]' '[a-z]')",
'require' => "File[#{params[:path]}]",
'logoutput' => 'on_failure',
})
end
end
context 'os_maj_version => 5' do
let :facts do
default_facts.merge({
:operatingsystemrelease => '5.9',
:os_maj_version => '5',
})
end
let :title do
'EPEL-5'
end
let :params do
{ :path => "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5" }
end
it do
should contain_exec("import-#{title}").with({
'path' => '/bin:/usr/bin:/sbin:/usr/sbin',
'command' => "rpm --import #{params[:path]}",
'unless' => "rpm -q gpg-pubkey-$(echo $(gpg --throw-keyids < #{params[:path]}) | cut --characters=11-18 | tr '[A-Z]' '[a-z]')",
'require' => "File[#{params[:path]}]",
'logoutput' => 'on_failure',
})
end
end
end

View File

@@ -0,0 +1,8 @@
require 'puppetlabs_spec_helper/module_spec_helper'
def default_facts
{
:osfamily => 'RedHat',
:operatingsystem => 'CentOS',
}
end

View File

@@ -4,22 +4,20 @@ require 'rspec-system-puppet/helpers'
include RSpecSystemPuppet::Helpers
RSpec.configure do |c|
# Project root
# Project root for the this module's code
proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
# Enable colour
# Enable colour in Jenkins
c.tty = true
c.include RSpecSystemPuppet::Helpers
# This is where we 'setup' the nodes before running our tests
c.before :suite do
# Install puppet
puppet_install
puppet_master_install
# Replace mymodule with your module name
puppet_module_install(:source => proj_root, :module_name => 'supervisord')
shell('puppet module install puppetlabs/stdlib')
shell('puppet module install puppetlabs/concat')
puppet_module_install(:source => proj_root, :module_name => 'epel')
end
end

View File

@@ -0,0 +1,36 @@
require 'spec_helper_system'
describe 'epel class:' do
context puppet_agent do
its(:stderr) { should be_empty }
its(:exit_code) { should_not == 1 }
end
# Verify the os_maj_version fact is working
context shell 'facter --puppet os_maj_version' do
its(:stdout) { should_not be_empty }
its(:stderr) { should be_empty }
its(:exit_code) { should be_zero }
end
pp = "class { 'epel': }"
context puppet_apply pp do
its(:stderr) { should be_empty }
its(:exit_code) { should_not == 1 }
its(:refresh) { should be_nil }
its(:stderr) { should be_empty }
its(:exit_code) { should be_zero }
end
context 'test EPEL repo presence' do
facts = node.facts
# Only test for EPEL's presence if not Fedora
if facts['operatingsystem'] !~ /Fedora/
context shell '/usr/bin/yum-config-manager epel | grep -q "\[epel\]"' do
its(:exit_code) { should be_zero }
end
end
end
end

View File

@@ -0,0 +1,60 @@
require 'spec_helper_system'
describe 'standage usage tests:' do
context 'test epel baseurl and mirrorlist' do
facts = node.facts
os_maj_version = facts['operatingsystemrelease'].split('.')[0]
pp = <<-EOS
class { 'epel':
epel_baseurl => 'http://dl.fedoraproject.org/pub/epel/#{os_maj_version}/x86_64/',
epel_mirrorlist => 'absent',
}
EOS
context puppet_apply pp do
its(:stderr) { should be_empty }
its(:exit_code) { should_not == 1 }
its(:refresh) { should be_nil }
its(:stderr) { should be_empty }
its(:exit_code) { should be_zero }
end
# Only test for EPEL's presence if not Fedora
if facts['operatingsystem'] !~ /Fedora/
# Test the yum config to ensure mirrorlist was emptied
context shell '/usr/bin/yum-config-manager epel | egrep "^mirrorlist ="' do
its(:stdout) { should =~ /mirrorlist =\s+/ }
end
# Test the yum config to ensure baseurl was defined
context shell '/usr/bin/yum-config-manager epel | egrep "^baseurl ="' do
its(:stdout) { should =~ /baseurl = http:\/\/dl.fedoraproject.org\/pub\/epel\/#{os_maj_version}\/x86_64\// }
end
end
end
context 'test epel-testing is enabled' do
facts = node.facts
pp = <<-EOS
class { 'epel':
epel_testing_enabled => '1',
}
EOS
context puppet_apply pp do
its(:stderr) { should be_empty }
its(:exit_code) { should_not == 1 }
its(:refresh) { should be_nil }
its(:stderr) { should be_empty }
its(:exit_code) { should be_zero }
end
# Only test for EPEL's presence if not Fedora
if facts['operatingsystem'] !~ /Fedora/
# Test the yum config to ensure epel-testing was enabled
context shell '/usr/bin/yum-config-manager epel-testing | grep -q "enabled = True"' do
its(:exit_code) { should be_zero }
end
end
end
end

View File

@@ -0,0 +1,21 @@
require 'spec_helper'
describe 'os_maj_version fact' do
before :each do
Facter.clear
end
context "on 5.9 operatingsystemrelease" do
it "should have os_maj_version => 5" do
Facter.fact(:operatingsystemrelease).stubs(:value).returns("5.9")
Facter.fact(:os_maj_version).value.should == "5"
end
end
context "on 6.4 operatingsystemrelease" do
it "should have os_maj_version => 6" do
Facter.fact(:operatingsystemrelease).stubs(:value).returns("6.4")
Facter.fact(:os_maj_version).value.should == "6"
end
end
end

View File

@@ -0,0 +1,3 @@
# And by test, I mean, run this thing for me using Puppet apply and I'll check
# it out.
include 'epel'

View File

@@ -0,0 +1,7 @@
fixtures:
repositories:
apt: git://github.com/puppetlabs/puppetlabs-apt.git
stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git
epel: git://github.com/stahnma/puppet-module-epel.git
symlinks:
erlang: "#{source_dir}"

View File

@@ -0,0 +1,35 @@
---
default_set: 'centos-64-x64'
sets:
'centos-59-x64':
nodes:
"main.foo.vm":
prefab: 'centos-59-x64'
'centos-64-x64':
nodes:
"main.foo.vm":
prefab: 'centos-64-x64'
'fedora-18-x64':
nodes:
"main.foo.vm":
prefab: 'fedora-18-x64'
'debian-607-x64':
nodes:
"main.foo.vm":
prefab: 'debian-607-x64'
'debian-70rc1-x64':
nodes:
"main.foo.vm":
prefab: 'debian-70rc1-x64'
'ubuntu-server-10044-x64':
nodes:
"main.foo.vm":
prefab: 'ubuntu-server-10044-x64'
'ubuntu-server-12042-x64':
nodes:
"main.foo.vm":
prefab: 'ubuntu-server-12042-x64'
'sles-11sp1-x64':
nodes:
"main.foo.vm":
prefab: 'sles-11sp1-x64'

View File

@@ -0,0 +1 @@
--format documentation

View File

@@ -0,0 +1,23 @@
---
language: ruby
bundler_args: --without development
before_install: rm Gemfile.lock || true
rvm:
- 1.8.7
- 1.9.3
- 2.0.0
script: bundle exec rake test
env:
- PUPPET_VERSION="~> 2.7.0"
- PUPPET_VERSION="~> 3.1.0"
- PUPPET_VERSION="~> 3.2.0"
- PUPPET_VERSION="~> 3.3.0"
- PUPPET_VERSION="~> 3.4.0"
matrix:
exclude:
- rvm: 2.0.0
env: PUPPET_VERSION="~> 2.7.0"
- rvm: 2.0.0
env: PUPPET_VERSION="~> 3.1.0"
- rvm: 1.9.3
env: PUPPET_VERSION="~> 2.7.0"

View File

@@ -0,0 +1,15 @@
source "http://rubygems.org"
gem "rake"
gem "puppet", ENV['PUPPET_VERSION'] || '~> 3.2.0'
gem "puppet-lint"
gem "rspec-puppet", '~> 1.0.0'
gem "puppetlabs_spec_helper"
gem "rspec-system-puppet"
gem "vagrant-wrapper"
gem "puppet-syntax"
group :development do
gem "puppet-blacksmith"
end

View File

@@ -0,0 +1,94 @@
GEM
remote: http://rubygems.org/
specs:
builder (3.2.2)
diff-lcs (1.2.5)
excon (0.31.0)
facter (1.7.5)
fog (1.20.0)
builder
excon (~> 0.31.0)
formatador (~> 0.2.0)
mime-types
multi_json (~> 1.0)
net-scp (~> 1.1)
net-ssh (>= 2.1.3)
nokogiri (>= 1.5.11)
formatador (0.2.4)
hiera (1.3.2)
json_pure
json_pure (1.8.1)
kwalify (0.7.2)
metaclass (0.0.4)
mime-types (1.25.1)
mocha (1.0.0)
metaclass (~> 0.0.1)
multi_json (1.8.4)
net-scp (1.1.2)
net-ssh (>= 2.6.5)
net-ssh (2.8.0)
nokogiri (1.5.11)
puppet (3.2.4)
facter (~> 1.6)
hiera (~> 1.0)
rgen (~> 0.6.5)
puppet-blacksmith (2.0.2)
nokogiri
puppet (>= 2.7.16)
rest-client
puppet-lint (0.3.2)
puppet-syntax (1.1.0)
puppet (>= 2.7.0)
rake
puppetlabs_spec_helper (0.4.1)
mocha (>= 0.10.5)
rake
rspec (>= 2.9.0)
rspec-puppet (>= 0.1.1)
rake (10.1.1)
rbvmomi (1.8.1)
builder
nokogiri (>= 1.4.1)
trollop
rest-client (1.6.7)
mime-types (>= 1.16)
rgen (0.6.6)
rspec (2.14.1)
rspec-core (~> 2.14.0)
rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.14.0)
rspec-core (2.14.8)
rspec-expectations (2.14.5)
diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.14.6)
rspec-puppet (1.0.1)
rspec
rspec-system (2.8.0)
fog (~> 1.18)
kwalify (~> 0.7.2)
mime-types (~> 1.16)
net-scp (~> 1.1)
net-ssh (~> 2.7)
nokogiri (~> 1.5.10)
rbvmomi (~> 1.6)
rspec (~> 2.14)
systemu (~> 2.5)
rspec-system-puppet (2.2.1)
rspec-system (~> 2.0)
systemu (2.6.3)
trollop (2.0)
vagrant-wrapper (1.2.1.1)
PLATFORMS
ruby
DEPENDENCIES
puppet (~> 3.2.0)
puppet-blacksmith
puppet-lint
puppet-syntax
puppetlabs_spec_helper
rake
rspec-puppet (~> 1.0.0)
rspec-system-puppet
vagrant-wrapper

View File

@@ -0,0 +1,207 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the
copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other
entities that control, are controlled by, or are under common control with
that entity. For the purposes of this definition, "control" means (i) the
power, direct or indirect, to cause the direction or management of such
entity, whether by contract or otherwise, or (ii) ownership of
fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation source,
and configuration files.
"Object" form shall mean any form resulting from mechanical transformation
or translation of a Source form, including but not limited to compiled
object code, generated documentation, and conversions to
other media types.
"Work" shall mean the work of authorship, whether in Source or Object
form, made available under the License, as indicated by a copyright notice
that is included in or attached to the work (an example is provided in the
Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form,
that is based on (or derived from) the Work and for which the editorial
revisions, annotations, elaborations, or other modifications represent,
as a whole, an original work of authorship. For the purposes of this
License, Derivative Works shall not include works that remain separable
from, or merely link (or bind by name) to the interfaces of, the Work and
Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original
version of the Work and any modifications or additions to that Work or
Derivative Works thereof, that is intentionally submitted to Licensor for
inclusion in the Work by the copyright owner or by an individual or
Legal Entity authorized to submit on behalf of the copyright owner.
For the purposes of this definition, "submitted" means any form of
electronic, verbal, or written communication sent to the Licensor or its
representatives, including but not limited to communication on electronic
mailing lists, source code control systems, and issue tracking systems
that are managed by, or on behalf of, the Licensor for the purpose of
discussing and improving the Work, but excluding communication that is
conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on
behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor
hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable copyright license to reproduce, prepare
Derivative Works of, publicly display, publicly perform, sublicense,
and distribute the Work and such Derivative Works in
Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor
hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import, and
otherwise transfer the Work, where such license applies only to those
patent claims licensable by such Contributor that are necessarily
infringed by their Contribution(s) alone or by combination of their
Contribution(s) with the Work to which such Contribution(s) was submitted.
If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or
contributory patent infringement, then any patent licenses granted to
You under this License for that Work shall terminate as of the date such
litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works
thereof in any medium, with or without modifications, and in Source or
Object form, provided that You meet the following conditions:
1. You must give any other recipients of the Work or Derivative Works a
copy of this License; and
2. You must cause any modified files to carry prominent notices stating
that You changed the files; and
3. You must retain, in the Source form of any Derivative Works that You
distribute, all copyright, patent, trademark, and attribution notices from
the Source form of the Work, excluding those notices that do not pertain
to any part of the Derivative Works; and
4. If the Work includes a "NOTICE" text file as part of its distribution,
then any Derivative Works that You distribute must include a readable copy
of the attribution notices contained within such NOTICE file, excluding
those notices that do not pertain to any part of the Derivative Works,
in at least one of the following places: within a NOTICE text file
distributed as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or, within a
display generated by the Derivative Works, if and wherever such
third-party notices normally appear. The contents of the NOTICE file are
for informational purposes only and do not modify the License.
You may add Your own attribution notices within Derivative Works that You
distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and may
provide additional or different license terms and conditions for use,
reproduction, or distribution of Your modifications, or for any such
Derivative Works as a whole, provided Your use, reproduction, and
distribution of the Work otherwise complies with the conditions
stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally
submitted for inclusion in the Work by You to the Licensor shall be under
the terms and conditions of this License, without any additional
terms or conditions. Notwithstanding the above, nothing herein shall
supersede or modify the terms of any separate license agreement you may
have executed with Licensor regarding such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor
provides the Work (and each Contributor provides its Contributions)
on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied, including, without limitation, any warranties
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS
FOR A PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any risks
associated with Your exercise of permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort
(including negligence), contract, or otherwise, unless required by
applicable law (such as deliberate and grossly negligent acts) or agreed
to in writing, shall any Contributor be liable to You for damages,
including any direct, indirect, special, incidental, or consequential
damages of any character arising as a result of this License or out of
the use or inability to use the Work (including but not limited to damages
for loss of goodwill, work stoppage, computer failure or malfunction,
or any and all other commercial damages or losses), even if such
Contributor has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose
to offer, and charge a fee for, acceptance of support, warranty,
indemnity, or other liability obligations and/or rights consistent with
this License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf of any
other Contributor, and only if You agree to indemnify, defend, and hold
each Contributor harmless for any liability incurred by, or claims
asserted against, such Contributor by reason of your accepting any such
warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included
on the same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2013 Gareth Rushgrove
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the specific language governing
permissions and limitations under the License.

View File

@@ -0,0 +1,10 @@
name 'garethr-erlang'
version '0.3.0'
source 'git://github.com/garethr/garethr-erlang.git'
author 'Gareth Rushgrove'
summary 'Module for installing erlang from official repos'
description 'Install one of the official erlang packages'
license 'Apache License, Version 2.0'
dependency 'puppetlabs/apt'
dependency 'puppetlabs/stdlib'
dependency 'stahnma/epel'

View File

@@ -0,0 +1,28 @@
Puppet module for installing Erlang from alternative repositories.
On debian it will use the official repositories
mentioned on the [Erlang
docs](https://www.erlang-solutions.com/downloads/download-erlang-otp).
On Redhat 5 it'll use an additional EPEL repository hosted by
[Redhat](http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo).
On Redhat 6 it'll require EPEL.
On SUSE it'll use the official repos.
On Archlinux it'll use community repos.
This module is also available on the [Puppet
Forge](https://forge.puppetlabs.com/garethr/erlang)
[![Build
Status](https://secure.travis-ci.org/garethr/garethr-erlang.png)](http://travis-ci.org/garethr/garethr-erlang)
## Usage
The module includes a single class:
include 'erlang'
By default this sets up the repository and installs the erlang package.

View File

@@ -0,0 +1,35 @@
require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-lint/tasks/puppet-lint'
require 'puppet-syntax/tasks/puppet-syntax'
require 'rspec-system/rake_task'
begin
require 'puppet_blacksmith/rake_tasks'
rescue LoadError
end
PuppetLint.configuration.log_format = "%{path}:%{linenumber}:%{check}:%{KIND}:%{message}"
PuppetLint.configuration.fail_on_warnings = true
# Forsake support for Puppet 2.6.2 for the benefit of cleaner code.
# http://puppet-lint.com/checks/class_parameter_defaults/
PuppetLint.configuration.send('disable_class_parameter_defaults')
# http://puppet-lint.com/checks/class_inherits_from_params_class/
PuppetLint.configuration.send('disable_class_inherits_from_params_class')
# http://puppet-lint.com/checks/80chars/
PuppetLint.configuration.send("disable_80chars")
exclude_paths = [
"pkg/**/*",
"vendor/**/*",
"spec/**/*",
]
PuppetLint.configuration.ignore_paths = exclude_paths
PuppetSyntax.exclude_paths = exclude_paths
desc "Run syntax, lint, and spec tests."
task :test => [
:syntax,
:lint,
:spec,
]

View File

@@ -0,0 +1,45 @@
# == Class: erlang
#
# Module to install an up-to-date version of Erlang from the
# official repositories
#
# === Parameters
# [*version*]
# The package version to install, passed to ensure.
# Defaults to present.
#
class erlang (
$epel_enable = $erlang::params::epel_enable,
$key_signature = $erlang::params::key_signature,
$local_repo_location = $erlang::params::local_repo_location,
$package_name = $erlang::params::package_name,
$remote_repo_location = $erlang::params::remote_repo_location,
$remote_repo_key_location = $erlang::params::remote_repo_key_location,
$repos = $erlang::params::repos,
$version = 'present',
) inherits erlang::params {
validate_string($version)
case $::osfamily {
'Debian' : {
include '::apt'
include '::erlang::repo::apt'
}
'RedHat' : {
if $epel_enable {
# Include epel as this is a requirement for erlang in RHEL6.
include '::epel'
Class['epel'] -> Package[$package_name]
}
# This is only needed on RHEL5, RHEL6 has erlang in EPEL.
if $::operatingsystemrelease =~ /^5/ {
include '::erlang::repo::yum'
}
}
default : {
}
}
package { $package_name: ensure => $version, }
}

View File

@@ -0,0 +1,29 @@
# == Class: erlang::params
#
# Default paramaters setting repository details for different
# operating systems
#
class erlang::params {
$epel_enable = false
case $::osfamily {
'Debian' : {
$key_signature = 'D208507CA14F4FCA'
$package_name = 'erlang-nox'
$remote_repo_key_location = 'http://packages.erlang-solutions.com/debian/erlang_solutions.asc'
$remote_repo_location = 'http://packages.erlang-solutions.com/debian'
$repos = 'contrib'
}
'RedHat', 'SUSE', 'Archlinux' : {
$package_name = 'erlang'
if $::operatingsystemrelease =~ /^5/ {
$local_repo_location = '/etc/yum.repos.d/epel-erlang.repo'
$remote_repo_location = 'http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo'
}
}
default : {
fail("The ${module_name} module is not supported on an ${::osfamily} based system.")
}
}
}

View File

@@ -0,0 +1,41 @@
# == Class: erlang::repo::apt
#
# Install an apt package repository containing Erlang.
# All parameters have sane default values in erlang::params.
#
# === Parameters
# [*key_signature*]
# The signature for the key used to sign packages in the repository.
#
# [*package_name*]
# Name of the Erlang package in the specified repository.
#
# [*remote_repo_key_location*]
# URL of the public key for the remote repository.
#
# [*remote_repo_location*]
# URL of the remote debian repository.
#
# [*repos*]
# Which of the standard repositories to install from the
# remote repo. For instance main, contrib, restricted.
#
class erlang::repo::apt(
$key_signature = $erlang::key_signature,
$package_name = $erlang::package_name,
$remote_repo_key_location = $erlang::remote_repo_key_location,
$remote_repo_location = $erlang::remote_repo_location,
$repos = $erlang::repos,
) {
Class['erlang::repo::apt'] -> Package<| title == $package_name |>
apt::source { 'erlang':
include_src => false,
key => $key_signature,
key_source => $remote_repo_key_location,
location => $remote_repo_location,
repos => $repos,
}
}

View File

@@ -0,0 +1,30 @@
# == Class: erlang::repo::yum
#
# Install a yum package repository containing Erlang.
# All parameters have sane default values in erlang::params.
#
# === Parameters
# [*local_repo_location*]
# File system location to store the repository details
#
# [*package_name*]
# Name of the Erlang package in the specified repository
#
# [*remote_repo_location*]
# URL of the remote repository
#
class erlang::repo::yum (
$local_repo_location = $erlang::local_repo_location,
$package_name = $erlang::package_name,
$remote_repo_location = $erlang::remote_repo_location,
) inherits erlang {
Class['erlang::repo::yum'] -> Package<| title == $package_name |>
exec { 'erlang-repo-download':
command => "curl -o ${local_repo_location} ${remote_repo_location}",
path => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin',
creates => $local_repo_location,
}
}

View File

@@ -0,0 +1,138 @@
require 'spec_helper'
describe 'erlang', :type => :class do
context 'on Debian' do
let(:facts) { {
:osfamily => 'Debian',
:lsbdistid => 'debian',
:lsbdistcodename => 'squeeze'
}}
context 'with no parameters' do
it { should compile.with_all_deps }
it { should contain_package('erlang-nox').with_ensure('present') }
it { should contain_apt__source('erlang').with(
'key_source' => 'http://packages.erlang-solutions.com/debian/erlang_solutions.asc',
'key' => 'D208507CA14F4FCA'
) }
end
context 'with a custom version' do
let(:params) { {'version' => 'absent' } }
it { should contain_package('erlang-nox').with_ensure('absent') }
end
context 'with a custom package name' do
let(:params) { {'package_name' => 'not-erlang' } }
it { should contain_package('not-erlang').with_ensure('present') }
end
context 'with custom repository details' do
let(:params) { {
'key_signature' => '1234ABCD',
'repos' => 'main',
'remote_repo_location' => 'http://example.com/debian',
'remote_repo_key_location' => 'http://example.com/debian/key.asc',
} }
it { should contain_apt__source('erlang').with(
'location' => 'http://example.com/debian',
'key_source' => 'http://example.com/debian/key.asc',
'key' => '1234ABCD',
'repos' => 'main'
) }
end
end
context 'on RedHat 5' do
let(:facts) { {:osfamily => 'RedHat', :operatingsystemrelease => '5.9' } }
context "epel enabled" do
let(:params) {{ :epel_enable => true }}
it { should contain_class('epel') }
end
context "epel disabled" do
let(:params) {{ :epel_enable => false }}
it { should_not contain_class('epel') }
end
context 'with no parameters' do
it { should contain_package('erlang').with_ensure('present') }
it { should contain_exec('erlang-repo-download').with(
'command' => 'curl -o /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo',
'path' => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin'
)
}
end
context 'with a custom repository' do
let(:params) { {
'local_repo_location' => '/tmp/yum.repos.d/tmp.repo',
'remote_repo_location' => 'http://example.com/fake.repo',
} }
it { should contain_exec('erlang-repo-download').with(
'command' => 'curl -o /tmp/yum.repos.d/tmp.repo http://example.com/fake.repo'
)
}
end
context 'with a custom version' do
let(:params) { {'version' => 'absent' } }
it { should contain_package('erlang').with_ensure('absent') }
end
end
context 'on RedHat 6' do
let(:facts) { {:osfamily => 'RedHat', :operatingsystemrelease => '6.4' } }
context "epel enabled" do
let(:params) {{ :epel_enable => true }}
it { should contain_class('epel') }
end
context "epel disabled" do
let(:params) {{ :epel_enable => false }}
it { should_not contain_class('epel') }
end
context 'with no parameters' do
it { should contain_package('erlang').with_ensure('present') }
end
context 'with a custom version' do
let(:params) { {'version' => 'absent' } }
it { should contain_package('erlang').with_ensure('absent') }
end
end
context 'on SUSE' do
let(:facts) {{ :osfamily => 'SUSE', }}
context 'with no parameters' do
it { should contain_package('erlang').with_ensure('present') }
end
context 'with a custom version' do
let(:params) { {'version' => 'absent' } }
it { should contain_package('erlang').with_ensure('absent') }
end
end
context 'on Archlinux' do
let(:facts) {{ :osfamily => 'Archlinux', }}
context 'with no parameters' do
it { should contain_package('erlang').with_ensure('present') }
end
context 'with a custom version' do
let(:params) { {'version' => 'absent' } }
it { should contain_package('erlang').with_ensure('absent') }
end
end
end

View File

@@ -0,0 +1 @@
require 'puppetlabs_spec_helper/module_spec_helper'

View File

@@ -0,0 +1,17 @@
require 'rspec-system/spec_helper'
require 'rspec-system-puppet/helpers'
include RSpecSystemPuppet::Helpers
RSpec.configure do |c|
proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
c.tty = true
c.include RSpecSystemPuppet::Helpers
c.before :suite do
puppet_install
puppet_module_install(:source => proj_root, :module_name => 'erlang')
shell('puppet module install puppetlabs-apt')
shell('puppet module install stahnma-epel')
end
end

View File

@@ -0,0 +1,25 @@
require 'spec_helper_system'
describe 'The erlang puppet module' do
it 'should run without errors' do
pp = <<-EOS
class { 'erlang':
epel_enable => true
}
EOS
puppet_apply(pp) do |r|
r.exit_code.should == 2
r.refresh
r.exit_code.should be_zero
end
end
it 'should install the erl binary into /usr/bin' do
shell 'which erl' do |r|
r.stdout.should =~ /\/usr\/bin\/erl/
r.stderr.should be_empty
r.exit_code.should be_zero
end
end
end

View File

@@ -0,0 +1,46 @@
#
# hash_key_true.rb
#
module Puppet::Parser::Functions
newfunction(:hash_key_true, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args|
Returns true if the key within hash is truthy
ENDHEREDOC
unless args.length == 2
raise Puppet::ParseError, ("hash_key_true(): wrong number of arguments (#{args.length}; must be 2)")
end
arr = args[0]
key = args[1]
unless arr.is_a?(Hash)
return false
end
unless arr.has_key?(key)
return false
end
if arr[key].nil?
return false
end
if arr[key] == false
return false
end
if arr[key] == 'false'
return false
end
if arr[key].empty?
return false
end
return true
end
end

View File

@@ -0,0 +1,45 @@
#
# value_true.rb
#
module Puppet::Parser::Functions
newfunction(:value_true, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args|
Returns true if value is truthy
ENDHEREDOC
unless args.length == 1
raise Puppet::ParseError, ("value_true(): wrong number of arguments (#{args.length}; must be 1)")
end
value = args[0]
if value.nil?
return false
end
if value == false
return false
end
if value == 0
return false
end
if value == '0'
return false
end
if value == 'false'
return false
end
if value.empty?
return false
end
return true
end
end

View File

@@ -44,7 +44,11 @@ class puphpet::hhvm(
'deb http://security.debian.org/ wheezy/updates main',
'deb-src http://security.debian.org/ wheezy/updates main',
'deb http://http.us.debian.org/debian wheezy-updates main',
'deb-src http://http.us.debian.org/debian wheezy-updates main'
'deb-src http://http.us.debian.org/debian wheezy-updates main',
'deb http://http.debian.net/debian wheezy main',
'deb-src http://http.debian.net/debian wheezy main',
'deb http://http.debian.net/debian wheezy-updates main',
'deb-src http://http.debian.net/debian wheezy-updates main',
]
each( $deb_srcs ) |$value| {
@@ -69,17 +73,39 @@ class puphpet::hhvm(
}
}
'centos': {
$jemalloc_url = 'http://files.puphpet.com/centos6/jemalloc-3.6.0-1.el6.x86_64.rpm'
$jemalloc_download_location = '/.puphpet-stuff/jemalloc-3.6.0-1.el6.x86_64.rpm'
$require = defined(Class['my_fw::post']) ? {
true => Class['my_fw::post'],
default => [],
}
exec { "download jemalloc to ${download_location}":
creates => $download_location,
command => "wget --quiet --tries=5 --connect-timeout=10 -O '${jemalloc_download_location}' '${jemalloc_url}'",
timeout => 30,
path => '/usr/bin',
require => $require
}
package { 'jemalloc':
ensure => latest,
provider => yum,
source => $download_location,
require => Exec["download jemalloc to ${download_location}"],
}
yum::managed_yumrepo { 'hop5':
descr => 'hop5 repository',
baseurl => 'http://www.hop5.in/yum/el6/',
gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-HOP5',
enabled => 1,
gpgcheck => 0,
priority => 1
priority => 1,
}
}
}
if $real_webserver == 'apache2' {
if ! defined(Class['apache::mod::mime']) {
class { 'apache::mod::mime': }

View File

@@ -53,9 +53,14 @@ class puphpet::params {
'Redhat' => 'php-cgi'
}
$nginx_default_conf_location = $::osfamily ? {
'Debian' => '/etc/nginx/conf.d/default.conf',
'Redhat' => '/etc/nginx/conf.d/default.conf'
}
$nginx_webroot_location = $::osfamily ? {
'Debian' => '/var/www/html',
'Redhat' => '/usr/share/nginx/html'
'Redhat' => '/var/www/html'
}
$mariadb_package_client_name = $::osfamily ? {

View File

@@ -3,7 +3,8 @@
*/
define puphpet::php::pear (
$service_autorestart
$service_name = '',
$service_autorestart,
){
$package = {
@@ -15,7 +16,9 @@ define puphpet::php::pear (
'pear_command_packaging' => 'alpha',
'pear_frontend_gtk2' => false,
'php_beautifier' => 'beta',
'php_parser' => 'alpha',
'php_parser_docblockparser' => 'alpha',
'soap' => 'beta',
'testing_selenium' => 'beta',
'versioncontrol_git' => 'alpha',
'versioncontrol_svn' => 'alpha',
@@ -38,7 +41,8 @@ define puphpet::php::pear (
::php::pear::module { $name:
use_package => false,
preferred_state => $preferred_state,
service_autorestart => $php_webserver_restart,
service => $service_name,
service_autorestart => $service_autorestart,
}
}

View File

@@ -16,7 +16,10 @@ define puphpet::php::pecl (
$pecl = $::osfamily ? {
'Debian' => {
#
'mongo' => $::lsbdistcodename ? {
'precise' => 'mongo',
default => false,
},
},
'Redhat' => {
#
@@ -63,24 +66,34 @@ define puphpet::php::pecl (
}
}
$auto_answer_hash = {
'mongo' => 'no\n'
}
$downcase_name = downcase($name)
if has_key($ignore, $downcase_name) {
if has_key($auto_answer_hash, $downcase_name) {
$auto_answer = $auto_answer_hash[$downcase_name]
} else {
$auto_answer = '\\n'
}
if has_key($ignore, $downcase_name) and $ignore[$downcase_name] {
$pecl_name = $pecl[$downcase_name]
$package_name = false
$preferred_state = 'stable'
}
elsif has_key($pecl, $downcase_name) {
$pecl_name = false
elsif has_key($pecl, $downcase_name) and $pecl[$downcase_name] {
$pecl_name = $pecl[$downcase_name]
$package_name = false
$preferred_state = false
$preferred_state = 'stable'
}
elsif has_key($pecl_beta, $downcase_name) and $pecl_beta[$downcase_name] {
$pecl_name = $pecl_beta[$downcase_name]
$package_name = false
$preferred_state = 'beta'
}
elsif has_key($package, $downcase_name) {
elsif has_key($package, $downcase_name) and $package[$downcase_name] {
$pecl_name = false
$package_name = $package[$downcase_name]
}
@@ -93,6 +106,7 @@ define puphpet::php::pecl (
::php::pecl::module { $pecl_name:
use_package => false,
preferred_state => $preferred_state,
auto_answer => $auto_answer,
service_autorestart => $service_autorestart,
}
}

View File

@@ -0,0 +1,22 @@
class puphpet::python::pip {
Exec { path => [ '/usr/bin/', '/usr/local/bin', '/bin', '/usr/local/sbin', '/usr/sbin', '/sbin' ] }
if ! defined(Package['python-setuptools']) {
package { 'python-setuptools': }
}
exec { 'easy_install pip':
unless => 'which pip',
require => Package['python-setuptools'],
}
if $::osfamily == 'RedHat' {
exec { 'rhel pip_provider_name_fix':
command => 'alternatives --install /usr/bin/pip-python pip-python /usr/bin/pip 1',
subscribe => Exec['easy_install pip'],
unless => 'which pip-python',
}
}
}

View File

@@ -0,0 +1,18 @@
# This depends on
# ajcrowe/supervisord: https://github.com/ajcrowe/puppet-supervisord
class puphpet::supervisord {
if ! defined(Class['::supervisord']) {
class{ 'puphpet::python::pip': }
class { '::supervisord':
install_pip => false,
require => [
Class['::my_fw::post'],
Class['puphpet::python::pip'],
],
}
}
}

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