Compare commits
482 Commits
Author | SHA1 | Date |
---|---|---|
Felix Schäfer | dfb77852cf | |
Holger Just | 93de0ba668 | |
Holger Just | fdc9c245ac | |
Holger Just | d7b23acea0 | |
Holger Just | f9babbbbc3 | |
Toshi MARUYAMA | 90a05668a0 | |
Holger Just | e4b814e167 | |
Felix Schäfer | 304155122d | |
Felix Schäfer | 1e2a029099 | |
Holger Just | 68e6d171b1 | |
Gregor Schmidt | d6e5c9e1fa | |
Holger Just | 63976e6522 | |
Holger Just | 31ad2ef6c3 | |
Holger Just | 595e60fb9c | |
Holger Just | 8b357a118d | |
Holger Just | 6d3dc6e619 | |
Holger Just | 0b567641bc | |
Holger Just | fd306095c6 | |
Holger Just | 430b6bb442 | |
Felix Schäfer | 3f9007b909 | |
Felix Schäfer | 6bef9c26ab | |
Felix Schäfer | 6744e23ed2 | |
Felix Schäfer | 065542c7d1 | |
Felix Schäfer | dc66e8f831 | |
Felix Schäfer | 6e30b3d3fc | |
Holger Just | 2854524ba9 | |
Holger Just | eb41df17d2 | |
Holger Just | 7f7a06706f | |
Holger Just | db3087b318 | |
Holger Just | d8536ced55 | |
Holger Just | 908391d54e | |
Holger Just | 93b2a1daf9 | |
Holger Just | c69a005353 | |
Holger Just | bf4ed9b37b | |
Holger Just | 90a94d75c3 | |
Holger Just | 2243c8dfd0 | |
Holger Just | cee98d306b | |
Holger Just | 0dac4ecb53 | |
Holger Just | c65779bbc1 | |
Holger Just | 0261b16b3e | |
Holger Just | c80591fe57 | |
Felix Schäfer | cdad6f752a | |
Felix Schäfer | 335da86b55 | |
Holger Just | 8e417fd5c4 | |
Holger Just | 07e54eda9e | |
Holger Just | a93a3af895 | |
Holger Just | 5156fbbfc4 | |
Felix Schäfer | 4d4efa482e | |
Holger Just | c734c6506d | |
Toshi MARUYAMA | e7ef06a926 | |
Felix Schäfer | 0dfa793abc | |
C-Moreira | ce5524ba4d | |
Holger Just | 003fc93b15 | |
Holger Just | da4641442f | |
Web Siduction | 0e1a622a6a | |
Holger Just | d63d2d2e81 | |
Holger Just | 7a4b664577 | |
Felix Schäfer | d24d4ce6b6 | |
jplang | a2f8557f23 | |
Holger Just | 080c5b63ca | |
Holger Just | 22204d588d | |
Holger Just | 19dd488298 | |
Holger Just | 12cedb1e91 | |
Holger Just | 27f24a78db | |
Andrew Smith | 4838c4ede8 | |
Holger Just | f2e4c71b27 | |
Andrew Smith | ff94716791 | |
Felix Schäfer | cb9ac281d9 | |
Felix Schäfer | a642a1fdc4 | |
Holger Just | f89c003847 | |
Andrew Smith | d6eb87508c | |
Romano Licker | 1e96ac9e06 | |
Holger Just | 9fde11f950 | |
Felix Schäfer | d41c7f1e8c | |
Andrew Smith | e3dc444b9c | |
Felix Schäfer | 37385642fa | |
Felix Schäfer | 12b2d3c182 | |
Andrew Smith | 37c762b997 | |
Holger Just | 17793c87e3 | |
Holger Just | eea550e639 | |
Holger Just | 760df0ae35 | |
Andrew Smith | a4fbb15f6c | |
Andrew Smith | 6fa46e5136 | |
Andrew Smith | cf83e274d7 | |
Jan Vlnas | 29af3ec964 | |
Holger Just | 6932070752 | |
Holger Just | cd4efd2e0d | |
Felix Schäfer | 2f21522458 | |
Holger Just | d3d6a93a45 | |
Holger Just | e4386f61da | |
Holger Just | 59e2a2fdde | |
Holger Just | 5c7a3a53c2 | |
Holger Just | 4d9060964f | |
Holger Just | 16e266e7e5 | |
Holger Just | d629209364 | |
Holger Just | 221a2e73ce | |
Holger Just | c9d141061d | |
Holger Just | 8e41daf92a | |
Felix Schäfer | caceb58947 | |
Felix Schäfer | 5ef63ec4bb | |
Holger Just | e6e057d10d | |
Felix Schäfer | f8ec89b999 | |
Holger Just | bd132c5607 | |
Holger Just | bcb02a4634 | |
Holger Just | d11e074748 | |
Felix Schäfer | 1f91054244 | |
Felix Schäfer | 32e1cc2dee | |
Felix Schäfer | 3997220a45 | |
Felix Schäfer | 69656422a1 | |
Felix Schäfer | d6ad07ee97 | |
Justin Geibel | 1722e96bb0 | |
Andrew Smith | 4956e9ca93 | |
Andrew Smith | 7c1b17509f | |
Andrew Smith | c8be011a93 | |
Holger Just | 8ab42473d9 | |
Felix Schäfer | a43c06ff77 | |
Andrew Smith | f983b451ad | |
Andrew Smith | 61c00779d0 | |
Dereckson | 375045a82b | |
Felix Schäfer | 2e18840f12 | |
Felix Schäfer | 20448c7efb | |
Andrew Smith | 9cd14ca152 | |
Felix Schäfer | 87f68e58ad | |
Andrew Smith | 43723385c6 | |
Felix Schäfer | 93abdcf487 | |
Felix Schäfer | 1d3cdf1fa9 | |
Felix Schäfer | 3e84c4817b | |
Felix Schäfer | 7930e8fa66 | |
Felix Schäfer | d4f0542e74 | |
tmaruyama | 6a26543887 | |
Felix Schäfer | 03dfae0529 | |
Eric Davis | 75bb38df08 | |
Jean-Philippe Lang | 16947dc016 | |
unknown | e7d96825b2 | |
Holger Just | 2bcd8787d3 | |
jwalkerbg | 6a4559e6af | |
Gabriel Mazetto | 859a9cb9d2 | |
Holger Just | 33260d885d | |
Holger Just | 277815ec96 | |
Holger Just | 01c386b3c6 | |
Holger Just | a6071c75ec | |
Spenser Jones | e6c79ddef4 | |
Holger Just | c3fc106355 | |
Holger Just | b169f02377 | |
Holger Just | 1f4baaa27b | |
Felix Schäfer | 8f06b77ccb | |
Holger Just | b8a29c288b | |
Holger Just | aca166271b | |
Holger Just | d61ad01308 | |
Holger Just | f681ed8c13 | |
Holger Just | eb62f4f7ec | |
Holger Just | 4aed677908 | |
Holger Just | 6f055664f1 | |
Holger Just | bb4340eb6d | |
Jean-Philippe Lang | 3183aa55ed | |
Jean-Philippe Lang | 275163ead2 | |
Jean-Philippe Lang | fc5dfd5813 | |
Jean-Philippe Lang | a3f6b30e99 | |
Jean-Philippe Lang | 5de377c5ee | |
Jean-Philippe Lang | 305df19ab7 | |
Jean-Philippe Lang | c3ca5813d5 | |
Jean-Philippe Lang | 384890c5ad | |
Jean-Philippe Lang | e77cb6133d | |
Jean-Philippe Lang | 7505cb2ff0 | |
Jean-Philippe Lang | 2eeb4b13a6 | |
Felix Schäfer | 0a7c6e6774 | |
Felix Schäfer | 6f064d3856 | |
Robert Mitwicki | c6af5c7982 | |
Jean-Philippe Lang | 20a79124f7 | |
Felix Schäfer | e6ec8ab30c | |
Felix Schäfer | dafe09ee32 | |
Andrew Smith | 7b3280e5ad | |
Andrew Smith | fd250726ce | |
Andrew Smith | 1cfd20e7e7 | |
Andrew Smith | b15e6d8305 | |
Andrew Smith | 2a70e2704f | |
Andrew Smith | 23a857bf75 | |
Andrew Smith | a510f0a85f | |
Andrew Smith | 2b640f76ec | |
Andrew Smith | 1b7ddb3cd7 | |
Andrew Smith | 27160b76f5 | |
Gregor Schmidt | c9a403a4b5 | |
Felix Schäfer | 565aeabc79 | |
Holger Just | 68efc3de32 | |
Felix Schäfer | efac256a6b | |
Felix Schäfer | f01194856f | |
Felix Schäfer | df66e9b915 | |
Felix Schäfer | 20eed68421 | |
Felix Schäfer | 26c847a4ca | |
Felix Schäfer | 1bc182405e | |
Michaël Rigart | 23864d99b5 | |
Felix Schäfer | ef5dddf4db | |
Felix Schäfer | 2c76240544 | |
Holger Just | 724bd48494 | |
Felix Schäfer | 900eda7a23 | |
Felix Schäfer | 4b5271f487 | |
Felix Schäfer | 4a3f10317f | |
Eric Davis | b9b2c8c0d7 | |
Felix Schäfer | fbc71a80f8 | |
Felix Schäfer | f327298f88 | |
Michaël Rigart | e678612d75 | |
Michaël Rigart | cbcce70400 | |
Felix Schäfer | fda1dfa96d | |
Dominique Feyer | f561c54356 | |
Holger Just | 11e93ff36a | |
Holger Just | 3ecace901b | |
Holger Just | 2e7050ef79 | |
Holger Just | e0eb21b48b | |
Holger Just | 1eefd4b40d | |
Holger Just | 0fd499afca | |
Holger Just | aa3ab990d0 | |
Holger Just | 3f99ee63ff | |
Holger Just | be4d679d54 | |
Holger Just | 3f126bdeaf | |
Holger Just | 8e85cbdc11 | |
Holger Just | 21f70fc86c | |
Holger Just | f4c87b92e2 | |
Holger Just | b692d4a671 | |
Holger Just | 185edcd283 | |
Holger Just | 19f2ccd496 | |
Holger Just | 91f6e79f4d | |
Holger Just | e85947c7d4 | |
Holger Just | a0a2776f95 | |
Holger Just | 3c9e9764b0 | |
Holger Just | 3f325243ce | |
Holger Just | c313ed2d25 | |
Holger Just | e1ecae83b3 | |
Holger Just | 323b5bebc8 | |
Holger Just | 91c04f335d | |
Holger Just | 31620d0c0a | |
Holger Just | 9967b5cdf2 | |
Holger Just | e91a1e010f | |
Holger Just | 637ca24aed | |
Holger Just | a938d582b1 | |
Holger Just | 33a8baf347 | |
Holger Just | d7ebffb7ad | |
Holger Just | 61a65d4624 | |
Holger Just | d9a0ac37eb | |
Holger Just | dbbc0b4919 | |
Eric Davis | 0407abbd56 | |
Eric Davis | 4ce3b88473 | |
Holger Just | b080ad14ef | |
Holger Just | f1324e6af4 | |
Holger Just | 446f943968 | |
Holger Just | 3c3eb2f7e7 | |
Holger Just | dc5fd8bc10 | |
Holger Just | 0c87f611e9 | |
Eric Davis | b8a7f2923a | |
Eric Davis | e4554a6d7b | |
Eric Davis | 00df832126 | |
Eric Davis | 66fe8287ce | |
Eric Davis | a3b1127ef8 | |
Eric Davis | c51d339512 | |
Eric Davis | af00598e5e | |
Eric Davis | f835420383 | |
Eric Davis | 38d0d530b0 | |
Eric Davis | 4acee9e989 | |
Eric Davis | aafec2c50f | |
Eric Davis | 08454ab7fa | |
Eric Davis | 5ad97a4ea3 | |
Eric Davis | e045306a5c | |
Eric Davis | 8100ce0ce5 | |
Eric Davis | 84cc8ab215 | |
Eric Davis | ef00061568 | |
Eric Davis | 15428fc092 | |
Eric Davis | a8d28e4593 | |
Eric Davis | ce0c32ea02 | |
Eric Davis | 97fe88f8d9 | |
Eric Davis | 3df729e47d | |
Eric Davis | 7bce7f7b07 | |
Eric Davis | 04db42f537 | |
Eric Davis | 16943d04f7 | |
Eric Davis | 8e3d4da376 | |
Eric Davis | 65e7995682 | |
Eric Davis | e6e6a06fff | |
Eric Davis | 10054cfd8f | |
Eric Davis | 8b3207a893 | |
Eric Davis | 037d915d7b | |
Eric Davis | c3555b1728 | |
Eric Davis | 8160cd02bd | |
Eric Davis | 5deae7ebe3 | |
Eric Davis | a110f1041d | |
Eric Davis | 111c7f47f7 | |
Eric Davis | df5b2198e9 | |
Eric Davis | 3af5544dbc | |
Eric Davis | 61a21f4990 | |
Eric Davis | 72eadcc6ea | |
Eric Davis | dc541597ec | |
Eric Davis | 1dd07471ca | |
Eric Davis | 4ff670f5fa | |
Eric Davis | 9f4683d71b | |
Eric Davis | 331ecb4c4f | |
Eric Davis | 7c7aca4f0c | |
Eric Davis | d53c4e9aae | |
Eric Davis | 9d8fc86b8e | |
Eric Davis | 260e8b84f8 | |
Eric Davis | 21685caf5f | |
Gregor Schmidt | 69ccbafaf4 | |
Gregor Schmidt | 10e16e9a56 | |
Gregor Schmidt | 6273891ae7 | |
Gregor Schmidt | 92b6d43150 | |
Holger Just | 6f17ec6fd0 | |
Holger Just | d5f4bec112 | |
Holger Just | 745f889e92 | |
Holger Just | ceac1bb419 | |
Holger Just | e1ac469cfb | |
Holger Just | d24e8186b4 | |
Holger Just | 81f6635878 | |
Holger Just | ba6fcfeca9 | |
Holger Just | 2733e5173f | |
Holger Just | 6b725c32e6 | |
Holger Just | 0049f82182 | |
Holger Just | 58a7182e2d | |
Eric Davis | 2f0d13149d | |
Eric Davis | d583c94b5f | |
Eric Davis | 3a16f3f5b1 | |
Holger Just | 04eb115da7 | |
Holger Just | 34fef9d8fc | |
Holger Just | e2c57fd12d | |
Holger Just | 7458bca34b | |
Holger Just | 60deeb5306 | |
Holger Just | 4656cf1c57 | |
Eric Davis | d2ccdc88fa | |
Eric Davis | d32480753b | |
Eric Davis | 9f0bd25523 | |
Eric Davis | 100faf94f7 | |
Eric Davis | f6d0932bff | |
Eric Davis | 2a74699196 | |
Eric Davis | ee48a8da4f | |
Eric Davis | 52ab42b5b0 | |
Eric Davis | e8b8841717 | |
Eric Davis | f9a2e30b9f | |
Eric Davis | f76c922dd8 | |
Eric Davis | 8e6ccceb28 | |
Eric Davis | a73c23ae9b | |
Eric Davis | 0385979d5e | |
Eric Davis | 612f2f98e4 | |
Eric Davis | b312bf387a | |
Eric Davis | 971277b507 | |
Eric Davis | c33227ffe3 | |
Eric Davis | 32fa8cb522 | |
Romano Licker | 83f8f63640 | |
jwollert | a1500a49b5 | |
Romano Licker | d22afea284 | |
Romano Licker | e371bcad24 | |
Romano Licker | 0eeeb04c31 | |
Romano Licker | 729e801c9f | |
jwollert | 7e287d6e5a | |
Eric Davis | 7d1c0374e4 | |
Felix Schäfer | fbde6859d1 | |
Felix Schäfer | 1c84fc0f4d | |
Felix Schäfer | 8671006b70 | |
Felix Schäfer | aa88fe8e39 | |
Eric Davis | b32fc97314 | |
Eric Davis | a2feb14c83 | |
Eric Davis | 4b5d4307d2 | |
Eric Davis | f179fea7bf | |
Felix Schäfer | 1d21cab2e4 | |
Holger Just | 5bf27de92a | |
Holger Just | 0b952a1edd | |
Holger Just | 9f4d12ffdf | |
Holger Just | 28ce07b1dd | |
Eric Davis | 01e43f2e6b | |
Gregor Schmidt | 3577550cfa | |
Eric Davis | 8fc2b72740 | |
Gregor Schmidt | 13da5e0445 | |
Eric Davis | e6fe1fc776 | |
Eric Davis | b1d9667335 | |
Holger Just | a31a4a8852 | |
Eric Davis | dedf696666 | |
Holger Just | 464dafc1e7 | |
Holger Just | f6805303fb | |
Holger Just | 994132a51a | |
Holger Just | fe6a79ac17 | |
Holger Just | cc0526cb27 | |
Holger Just | 862c9e0fde | |
Eric Davis | 71ecdb57ed | |
Eric Davis | 1e7dfe545e | |
Eric Davis | 7778ff2f83 | |
Holger Just | 29fe856916 | |
Eric Davis | 81ca15c52c | |
Holger Just | 82432f3f99 | |
Eric Davis | 72fa3ff920 | |
Eric Davis | 981143f78f | |
Eric Davis | 7906afe6b9 | |
Eric Davis | 6f8d8c4105 | |
Eric Davis | 91914cb877 | |
Holger Just | 7261622196 | |
Eric Davis | 4289559b5f | |
Eric Davis | 1e41ec912b | |
Eric Davis | af9572d985 | |
Eric Davis | 5f3c6b87e4 | |
Felix Schäfer | b1671e46f0 | |
jwollert | edce16c89a | |
Romano Licker | 977f74e11a | |
Romano Licker | c16cfd8ff1 | |
Romano Licker | 734da91b4b | |
jwollert | fecfbaf908 | |
Eric Davis | 1897459b76 | |
Eric Davis | 3e87af38d4 | |
Eric Davis | 3409f5b620 | |
Eric Davis | ab2856b53f | |
Eric Davis | 7bc11f8de0 | |
Eric Davis | f10412ef71 | |
Eric Davis | a911d83889 | |
Eric Davis | 5620488727 | |
Eric Davis | b160217299 | |
Holger Just | 9c8380667c | |
Kornelius Kalnbach | aa8237c546 | |
Kornelius Kalnbach | 260a6bb1da | |
Kornelius Kalnbach | 7b1a263d1d | |
Kornelius Kalnbach | 65af1e4436 | |
Eric Davis | a2514ecc54 | |
Eric Davis | f31f44f4af | |
Eric Davis | cce496b011 | |
Eric Davis | e51f067f12 | |
Eric Davis | 8d10daa68f | |
Eric Davis | b968d260fd | |
Eric Davis | 34ffbc8e46 | |
Eric Davis | cbb99f81a1 | |
Eric Davis | 923cdf3ff3 | |
Eric Davis | a592f024cb | |
Eric Davis | dc682eaddc | |
Eric Davis | aed2b4f661 | |
Eric Davis | d99bc8a066 | |
Eric Davis | 5e2d633ebb | |
Eric Davis | ca3eeedfff | |
Eric Davis | 155e1ba2a7 | |
Eric Davis | 2b7a221dee | |
Eric Davis | 061beb4967 | |
Gregor Schmidt | c1ecadbff7 | |
Holger Just | c87738daf2 | |
Holger Just | 2a3e12927f | |
Eric Davis | 27fd103132 | |
Eric Davis | a9d6518a5d | |
Eric Davis | d8023e6949 | |
Eric Davis | 667f85f9a5 | |
Eric Davis | 7f06e7394c | |
Eric Davis | d94f7f7f9b | |
Eric Davis | 949d229629 | |
Eric Davis | ccad72ba85 | |
Eric Davis | 4b8f4c3b83 | |
Eric Davis | d63cb35e82 | |
Eric Davis | cfed74579d | |
Eric Davis | 9bb8f80d7e | |
Eric Davis | b4804f4ce4 | |
Eric Davis | adffd044d7 | |
Eric Davis | ffa2d5f319 | |
Eric Davis | 156cdf316e | |
Eric Davis | aed0a6d5c3 | |
Eric Davis | 635923f90d | |
Eric Davis | 8f45e780ce | |
Eric Davis | 124c98d4ba | |
Eric Davis | 8c183dda2e | |
Eric Davis | e7e4557009 | |
Eric Davis | 5cedd5cdcb | |
Eric Davis | cf40447356 | |
Eric Davis | 61847d831a | |
Eric Davis | 6c9c85134a | |
Eric Davis | 6435905132 | |
Eric Davis | ce973429fe | |
Eric Davis | cff91d8cf0 | |
Eric Davis | 13f57032c1 | |
Eric Davis | 7485858da2 | |
Eric Davis | 2dc0e100c3 | |
Eric Davis | 5949f8de91 | |
Eric Davis | ec21b4c075 | |
Eric Davis | 84ef979c47 | |
Eric Davis | 6d522a9acd | |
Eric Davis | 48675d63a5 | |
Eric Davis | bfa57e5e6c | |
Eric Davis | ac48b91864 | |
Eric Davis | d3392c6d0d | |
Eric Davis | a0c777ee79 | |
Eric Davis | c23f73e9fe | |
Eric Davis | 484ed29fa2 | |
Eric Davis | 1f57eb01b1 | |
Eric Davis | 74cfd7b5ca | |
Eric Davis | ddeb1a2a0f | |
Eric Davis | 0f35c7d1c2 | |
Eric Davis | 3a0a7d93b1 | |
Eric Davis | f0987c8238 |
|
@ -4,6 +4,7 @@
|
||||||
/config/configuration.yml
|
/config/configuration.yml
|
||||||
/config/database.yml
|
/config/database.yml
|
||||||
/config/email.yml
|
/config/email.yml
|
||||||
|
/config/setup_load_paths.rb
|
||||||
/config/initializers/session_store.rb
|
/config/initializers/session_store.rb
|
||||||
/coverage
|
/coverage
|
||||||
/db/*.db
|
/db/*.db
|
||||||
|
@ -28,3 +29,6 @@ doc/app
|
||||||
/Gemfile.lock
|
/Gemfile.lock
|
||||||
/Gemfile.local
|
/Gemfile.local
|
||||||
/.rvmrc*
|
/.rvmrc*
|
||||||
|
/*.iml
|
||||||
|
/.idea
|
||||||
|
.rbx
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
language: ruby
|
||||||
|
rvm:
|
||||||
|
- 1.8.7
|
||||||
|
- 1.9.2
|
||||||
|
- 1.9.3
|
||||||
|
- rbx-18mode
|
||||||
|
env:
|
||||||
|
- "TEST_SUITE=units RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- "TEST_SUITE=units RAILS_ENV=test DB=mysql2 BUNDLE_WITHOUT=rmagick:mysql:postgres:sqlite"
|
||||||
|
- "TEST_SUITE=units RAILS_ENV=test DB=postgres BUNDLE_WITHOUT=rmagick:mysql:mysql2:sqlite"
|
||||||
|
- "TEST_SUITE=units RAILS_ENV=test DB=sqlite BUNDLE_WITHOUT=rmagick:mysql:mysql2:postgres"
|
||||||
|
- "TEST_SUITE=functionals RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- "TEST_SUITE=functionals RAILS_ENV=test DB=mysql2 BUNDLE_WITHOUT=rmagick:mysql:postgres:sqlite"
|
||||||
|
- "TEST_SUITE=functionals RAILS_ENV=test DB=postgres BUNDLE_WITHOUT=rmagick:mysql:mysql2:sqlite"
|
||||||
|
- "TEST_SUITE=functionals RAILS_ENV=test DB=sqlite BUNDLE_WITHOUT=rmagick:mysql:mysql2:postgres"
|
||||||
|
- "TEST_SUITE=integration RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- "TEST_SUITE=integration RAILS_ENV=test DB=mysql2 BUNDLE_WITHOUT=rmagick:mysql:postgres:sqlite"
|
||||||
|
- "TEST_SUITE=integration RAILS_ENV=test DB=postgres BUNDLE_WITHOUT=rmagick:mysql:mysql2:sqlite"
|
||||||
|
- "TEST_SUITE=integration RAILS_ENV=test DB=sqlite BUNDLE_WITHOUT=rmagick:mysql:mysql2:postgres"
|
||||||
|
matrix:
|
||||||
|
exclude:
|
||||||
|
- rvm: 1.9.2
|
||||||
|
env: "TEST_SUITE=units RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: 1.9.2
|
||||||
|
env: "TEST_SUITE=functionals RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: 1.9.2
|
||||||
|
env: "TEST_SUITE=integration RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: 1.9.3
|
||||||
|
env: "TEST_SUITE=units RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: 1.9.3
|
||||||
|
env: "TEST_SUITE=functionals RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: 1.9.3
|
||||||
|
env: "TEST_SUITE=integration RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: rbx-18mode
|
||||||
|
env: "TEST_SUITE=units RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: rbx-18mode
|
||||||
|
env: "TEST_SUITE=functionals RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
- rvm: rbx-18mode
|
||||||
|
env: "TEST_SUITE=integration RAILS_ENV=test DB=mysql BUNDLE_WITHOUT=rmagick:mysql2:postgres:sqlite"
|
||||||
|
allow_failures:
|
||||||
|
- rvm: rbx-18mode
|
||||||
|
before_install:
|
||||||
|
- "sudo apt-get update -qq"
|
||||||
|
- "sudo apt-get --no-install-recommends install bzr cvs git mercurial subversion"
|
||||||
|
before_script:
|
||||||
|
- "rvm rubygems 1.8.25" # Rubygems 2.0.x fails with Rails 2.3
|
||||||
|
- "rake ci:travis:prepare"
|
||||||
|
- "rm -rf tmp/test/darcs_repository" # Don't test Darcs on Travis. It breaks there :(
|
||||||
|
script: "bundle exec rake test:$TEST_SUITE"
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- unstable
|
||||||
|
- master
|
||||||
|
- stable
|
||||||
|
- /^stable-.*$/
|
||||||
|
- /^release-.*$/
|
||||||
|
notifications:
|
||||||
|
email: false
|
||||||
|
irc: "irc.freenode.org#chiliproject"
|
|
@ -0,0 +1,33 @@
|
||||||
|
For the impatient: [report][cpo_new-issue], confirm, claim,
|
||||||
|
[fork][gh_chiliproject], [branch][cpo_contribute-code-branch],
|
||||||
|
[write][cpo_code-standards], [test][cpo_code-review], push.
|
||||||
|
|
||||||
|
The short version:
|
||||||
|
|
||||||
|
* Make sure the issue you are working on is reported and confirmed, add a note
|
||||||
|
to the issue to claim your intention to work on it.
|
||||||
|
* Fork [ChiliProject on GitHub][gh_chiliproject]
|
||||||
|
* Create a new branch from `master` with a descriptive name prefixed by the
|
||||||
|
issue ID (Example: `123-change_background_from_black_to_blue`).
|
||||||
|
* Make changes according to our [Code Standards][cpo_code-standards].
|
||||||
|
1. Be sure to include tests as necessary.
|
||||||
|
1. Make sure to not break existing tests.
|
||||||
|
1. Please try to make sure your code is going to pass a [Code
|
||||||
|
Review][cpo_code-review] prior to submitting the patch. If in doubt, just ask.
|
||||||
|
* Either upload your branch to GitHub and send a pull request to the
|
||||||
|
ChiliProject repository, or attach a patch to the issue on ChiliProject. If
|
||||||
|
you send a pull request on GitHub, remember to link to the pull request in the
|
||||||
|
issue you create on ChiliProject and to link to the issue on ChiliProject in
|
||||||
|
the pull request on GitHub.
|
||||||
|
* Make sure you watch the corresponding issue in case any discussion arises or
|
||||||
|
improvements are needed.
|
||||||
|
|
||||||
|
The long version is on the [Contribute Code][cpo_contribute-code] page.
|
||||||
|
|
||||||
|
|
||||||
|
[cpo_new-issue]: https://www.chiliproject.org/projects/chiliproject/issues/new
|
||||||
|
[cpo_contribute-code-branch]: https://www.chiliproject.org/projects/chiliproject/wiki/Contribute_Code#Branch
|
||||||
|
[cpo_contribute-code]: https://www.chiliproject.org/projects/chiliproject/wiki/Contribute_Code
|
||||||
|
[cpo_code-standards]: https://www.chiliproject.org/projects/chiliproject/wiki/Code_Standards
|
||||||
|
[cpo_code-review]: https://www.chiliproject.org/projects/chiliproject/wiki/Code_Review
|
||||||
|
[gh_chiliproject]: https://github.com/chiliproject/chiliproject
|
27
Gemfile
27
Gemfile
|
@ -1,23 +1,32 @@
|
||||||
source :rubygems
|
# -*- coding: utf-8 -*-
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
gem "rails", "2.3.14"
|
gem "rails", "2.3.18"
|
||||||
|
|
||||||
gem "coderay", "~> 0.9.7"
|
gem "json", "~> 1.7.7"
|
||||||
|
gem "coderay", "~> 1.0.0"
|
||||||
gem "i18n", "~> 0.4.2"
|
gem "i18n", "~> 0.4.2"
|
||||||
gem "rubytree", "~> 0.5.2", :require => 'tree'
|
gem "rubytree", "~> 0.5.2", :require => 'tree'
|
||||||
gem "rdoc", ">= 2.4.2"
|
gem "rdoc", ">= 2.4.2"
|
||||||
|
gem "liquid", "~> 2.3.0"
|
||||||
|
gem "acts-as-taggable-on", "= 2.1.0"
|
||||||
|
gem 'gravatarify', '~> 3.0.0'
|
||||||
# Needed only on RUBY_VERSION = 1.8, ruby 1.9+ compatible interpreters should bring their csv
|
# Needed only on RUBY_VERSION = 1.8, ruby 1.9+ compatible interpreters should bring their csv
|
||||||
gem "fastercsv", "~> 1.5.0", :platforms => [:ruby_18, :jruby, :mingw_18]
|
gem "fastercsv", "~> 1.5.0", :platforms => [:ruby_18, :jruby, :mingw_18]
|
||||||
|
gem "tzinfo", "~> 0.3.31" # Fixes #903. Not required for Rails >= 3.2
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'shoulda', '~> 2.10.3'
|
gem 'shoulda', '~> 2.10.3'
|
||||||
|
# Shoulda doesn't work nice on 1.9.3 and seems to need test-unit explicitely…
|
||||||
|
gem 'test-unit', :platforms => [:mri_19]
|
||||||
gem 'edavis10-object_daddy', :require => 'object_daddy'
|
gem 'edavis10-object_daddy', :require => 'object_daddy'
|
||||||
gem 'mocha'
|
gem 'mocha', '0.12.1'
|
||||||
gem 'capybara'
|
# capybara 2 drops ruby 1.8.7 compatibility
|
||||||
|
gem 'capybara', '< 2.0.0'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :ldap do
|
group :ldap do
|
||||||
gem "net-ldap", '~> 0.2.2'
|
gem "net-ldap", '~> 0.3.1'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :openid do
|
group :openid do
|
||||||
|
@ -48,13 +57,13 @@ end
|
||||||
# orders of magnitude compared to their native counterparts. You have been
|
# orders of magnitude compared to their native counterparts. You have been
|
||||||
# warned.
|
# warned.
|
||||||
|
|
||||||
platforms :mri, :mingw do
|
platforms :mri, :mingw, :rbx do
|
||||||
group :mysql2 do
|
group :mysql2 do
|
||||||
gem "mysql2", "~> 0.2.7"
|
gem "mysql2", "~> 0.2.7"
|
||||||
end
|
end
|
||||||
|
|
||||||
group :postgres do
|
group :postgres do
|
||||||
gem "pg", "~> 0.9.0"
|
gem "pg"
|
||||||
# gem "postgres-pr"
|
# gem "postgres-pr"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -70,7 +79,7 @@ platforms :mri_18, :mingw_18 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
platforms :mri_19, :mingw_19 do
|
platforms :mri_19, :mingw_19, :rbx do
|
||||||
group :sqlite do
|
group :sqlite do
|
||||||
gem "sqlite3"
|
gem "sqlite3"
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
= ChiliProject
|
= ChiliProject {<img src="https://travis-ci.org/chiliproject/chiliproject.png?branch=master" />}[http://travis-ci.org/chiliproject/chiliproject]
|
||||||
|
|
||||||
ChiliProject is a web based project management system. It supports your team throughout the complete project life cycle, from setting up and discussing a project plan, over tracking issues and reporting work progress to collaboratively sharing knowledge.
|
ChiliProject is a web based project management system. It supports your team throughout the complete project life cycle, from setting up and discussing a project plan, over tracking issues and reporting work progress to collaboratively sharing knowledge.
|
||||||
|
|
||||||
|
|
2
Rakefile
2
Rakefile
|
@ -8,3 +8,5 @@ require 'rake/testtask'
|
||||||
require 'rdoc/task'
|
require 'rdoc/task'
|
||||||
|
|
||||||
require 'tasks/rails'
|
require 'tasks/rails'
|
||||||
|
# Load rake tasks from plugins in chiliproject_plugins
|
||||||
|
Dir["#{RAILS_ROOT}/vendor/chiliproject_plugins/*/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -37,7 +37,7 @@ class AccountController < ApplicationController
|
||||||
def lost_password
|
def lost_password
|
||||||
redirect_to(home_url) && return unless Setting.lost_password?
|
redirect_to(home_url) && return unless Setting.lost_password?
|
||||||
if params[:token]
|
if params[:token]
|
||||||
@token = Token.find_by_action_and_value("recovery", params[:token])
|
@token = Token.find_by_action_and_value("recovery", params[:token].to_s)
|
||||||
redirect_to(home_url) && return unless @token and !@token.expired?
|
redirect_to(home_url) && return unless @token and !@token.expired?
|
||||||
@user = @token.user
|
@user = @token.user
|
||||||
if request.post?
|
if request.post?
|
||||||
|
@ -53,7 +53,7 @@ class AccountController < ApplicationController
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
if request.post?
|
if request.post?
|
||||||
user = User.find_by_mail(params[:mail])
|
user = User.find_by_mail(params[:mail].to_s)
|
||||||
# user not found in db
|
# user not found in db
|
||||||
(flash.now[:error] = l(:notice_account_unknown_email); return) unless user
|
(flash.now[:error] = l(:notice_account_unknown_email); return) unless user
|
||||||
# user uses an external authentification
|
# user uses an external authentification
|
||||||
|
@ -109,7 +109,7 @@ class AccountController < ApplicationController
|
||||||
# Token based account activation
|
# Token based account activation
|
||||||
def activate
|
def activate
|
||||||
redirect_to(home_url) && return unless Setting.self_registration? && params[:token]
|
redirect_to(home_url) && return unless Setting.self_registration? && params[:token]
|
||||||
token = Token.find_by_action_and_value('register', params[:token])
|
token = Token.find_by_action_and_value('register', params[:token].to_s)
|
||||||
redirect_to(home_url) && return unless token and !token.expired?
|
redirect_to(home_url) && return unless token and !token.expired?
|
||||||
user = token.user
|
user = token.user
|
||||||
redirect_to(home_url) && return unless user.registered?
|
redirect_to(home_url) && return unless user.registered?
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -33,7 +33,7 @@ class ActivitiesController < ApplicationController
|
||||||
:with_subprojects => @with_subprojects,
|
:with_subprojects => @with_subprojects,
|
||||||
:author => @author)
|
:author => @author)
|
||||||
@activity.scope_select {|t| !params["show_#{t}"].nil?}
|
@activity.scope_select {|t| !params["show_#{t}"].nil?}
|
||||||
@activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty?
|
@activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty? unless params[:set_filter]
|
||||||
|
|
||||||
events = @activity.events(@date_from, @date_to)
|
events = @activity.events(@date_from, @date_to)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -19,6 +19,10 @@ class AdminController < ApplicationController
|
||||||
|
|
||||||
include SortHelper
|
include SortHelper
|
||||||
|
|
||||||
|
menu_item :projects, :only => [:projects]
|
||||||
|
menu_item :plugins, :only => [:plugins]
|
||||||
|
menu_item :info, :only => [:info]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@no_configuration_data = Redmine::DefaultData::Loader::no_data?
|
@no_configuration_data = Redmine::DefaultData::Loader::no_data?
|
||||||
end
|
end
|
||||||
|
@ -73,7 +77,7 @@ class AdminController < ApplicationController
|
||||||
def info
|
def info
|
||||||
@db_adapter_name = ActiveRecord::Base.connection.adapter_name
|
@db_adapter_name = ActiveRecord::Base.connection.adapter_name
|
||||||
@checklist = [
|
@checklist = [
|
||||||
[:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
|
[:text_default_administrator_account_changed, !User.find_by_login("admin").try(:check_password?, "admin")],
|
||||||
[:text_file_repository_writable, File.writable?(Attachment.storage_path)],
|
[:text_file_repository_writable, File.writable?(Attachment.storage_path)],
|
||||||
[:text_plugin_assets_writable, File.writable?(Engines.public_directory)],
|
[:text_plugin_assets_writable, File.writable?(Engines.public_directory)],
|
||||||
[:text_rmagick_available, Object.const_defined?(:Magick)]
|
[:text_rmagick_available, Object.const_defined?(:Magick)]
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -31,18 +31,6 @@ class ApplicationController < ActionController::Base
|
||||||
cookies.delete(:autologin)
|
cookies.delete(:autologin)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Remove broken cookie after upgrade from 0.8.x (#4292)
|
|
||||||
# See https://rails.lighthouseapp.com/projects/8994/tickets/3360
|
|
||||||
# TODO: remove it when Rails is fixed
|
|
||||||
before_filter :delete_broken_cookies
|
|
||||||
def delete_broken_cookies
|
|
||||||
if cookies['_chiliproject_session'] && cookies['_chiliproject_session'] !~ /--/
|
|
||||||
cookies.delete '_chiliproject_session'
|
|
||||||
redirect_to home_path
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# FIXME: Remove this when all of Rack and Rails have learned how to
|
# FIXME: Remove this when all of Rack and Rails have learned how to
|
||||||
# properly use encodings
|
# properly use encodings
|
||||||
before_filter :params_filter
|
before_filter :params_filter
|
||||||
|
@ -64,7 +52,16 @@ class ApplicationController < ActionController::Base
|
||||||
before_filter :user_setup, :check_if_login_required, :set_localization
|
before_filter :user_setup, :check_if_login_required, :set_localization
|
||||||
filter_parameter_logging :password
|
filter_parameter_logging :password
|
||||||
|
|
||||||
rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token
|
# FIXME: This doesn't work with Rails >= 3.0 anymore
|
||||||
|
# Possible workaround: https://github.com/rails/rails/issues/671#issuecomment-1780159
|
||||||
|
rescue_from ActionController::RoutingError, :with => proc{
|
||||||
|
# manually apply basic before_filters which aren't applied by default here
|
||||||
|
user_setup
|
||||||
|
check_if_login_required
|
||||||
|
set_localization
|
||||||
|
|
||||||
|
render_404
|
||||||
|
}
|
||||||
|
|
||||||
include Redmine::Search::Controller
|
include Redmine::Search::Controller
|
||||||
include Redmine::MenuManager::MenuController
|
include Redmine::MenuManager::MenuController
|
||||||
|
@ -75,8 +72,6 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def user_setup
|
def user_setup
|
||||||
# Check the settings cache for each request
|
|
||||||
Setting.check_cache
|
|
||||||
# Find the current user
|
# Find the current user
|
||||||
User.current = find_current_user
|
User.current = find_current_user
|
||||||
end
|
end
|
||||||
|
@ -94,11 +89,11 @@ class ApplicationController < ActionController::Base
|
||||||
user
|
user
|
||||||
elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
|
elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
|
||||||
# RSS key authentication does not start a session
|
# RSS key authentication does not start a session
|
||||||
User.find_by_rss_key(params[:key])
|
User.find_by_rss_key(params[:key].to_s)
|
||||||
elsif Setting.rest_api_enabled? && api_request?
|
elsif Setting.rest_api_enabled? && api_request?
|
||||||
if (key = api_key_from_request) && accept_key_auth_actions.include?(params[:action])
|
if (key = api_key_from_request) && accept_key_auth_actions.include?(params[:action])
|
||||||
# Use API key
|
# Use API key
|
||||||
User.find_by_api_key(key)
|
User.find_by_api_key(key.to_s)
|
||||||
else
|
else
|
||||||
# HTTP Basic, either username/password or API key/random
|
# HTTP Basic, either username/password or API key/random
|
||||||
authenticate_with_http_basic do |username, password|
|
authenticate_with_http_basic do |username, password|
|
||||||
|
@ -335,13 +330,6 @@ class ApplicationController < ActionController::Base
|
||||||
request.xhr? ? false : 'base'
|
request.xhr? ? false : 'base'
|
||||||
end
|
end
|
||||||
|
|
||||||
def invalid_authenticity_token
|
|
||||||
if api_request?
|
|
||||||
logger.error "Form authenticity token is missing or is invalid. API calls must include a proper Content-type header (text/xml or text/json)."
|
|
||||||
end
|
|
||||||
render_error "Invalid form authenticity token."
|
|
||||||
end
|
|
||||||
|
|
||||||
def render_feed(items, options={})
|
def render_feed(items, options={})
|
||||||
@items = items || []
|
@items = items || []
|
||||||
@items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
|
@items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -13,7 +13,8 @@
|
||||||
#++
|
#++
|
||||||
|
|
||||||
class AutoCompletesController < ApplicationController
|
class AutoCompletesController < ApplicationController
|
||||||
before_filter :find_project
|
before_filter :find_project, :only => :issues
|
||||||
|
before_filter :require_admin, :only => :projects
|
||||||
|
|
||||||
def issues
|
def issues
|
||||||
@issues = []
|
@issues = []
|
||||||
|
@ -33,6 +34,38 @@ class AutoCompletesController < ApplicationController
|
||||||
render :layout => false
|
render :layout => false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def users
|
||||||
|
if params[:remove_group_members].present?
|
||||||
|
@group = Group.find(params[:remove_group_members])
|
||||||
|
@removed_users = @group.users
|
||||||
|
end
|
||||||
|
|
||||||
|
if params[:remove_watchers].present? && params[:klass].present?
|
||||||
|
watcher_class = params[:klass].constantize
|
||||||
|
if watcher_class.included_modules.include?(Redmine::Acts::Watchable) # check class is a watching class
|
||||||
|
@object = watcher_class.find(params[:remove_watchers])
|
||||||
|
@removed_users = @object.watcher_users
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@removed_users ||= []
|
||||||
|
|
||||||
|
if params[:include_groups]
|
||||||
|
user_finder = Principal
|
||||||
|
else
|
||||||
|
user_finder = User
|
||||||
|
end
|
||||||
|
|
||||||
|
@users = user_finder.active.like(params[:q]).find(:all, :limit => 100) - @removed_users
|
||||||
|
render :layout => false
|
||||||
|
end
|
||||||
|
|
||||||
|
def projects
|
||||||
|
@principal = Principal.find(params[:id])
|
||||||
|
@projects = Project.active.like(params[:q]).find(:all, :limit => 100) - @principal.projects
|
||||||
|
render :layout => false
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def find_project
|
def find_project
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -21,7 +21,10 @@ class CommentsController < ApplicationController
|
||||||
|
|
||||||
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
def create
|
def create
|
||||||
@comment = Comment.new(params[:comment])
|
raise Unauthorized unless @news.commentable?
|
||||||
|
|
||||||
|
@comment = Comment.new
|
||||||
|
@comment.safe_attributes = params[:comment]
|
||||||
@comment.author = User.current
|
@comment.author = User.current
|
||||||
if @news.comments << @comment
|
if @news.comments << @comment
|
||||||
flash[:notice] = l(:label_comment_added)
|
flash[:notice] = l(:label_comment_added)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -43,20 +43,34 @@ class DocumentsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@document = @project.documents.build(params[:document])
|
@document = @project.documents.build
|
||||||
if request.post? and @document.save
|
@document.safe_attributes = params[:document]
|
||||||
attachments = Attachment.attach_files(@document, params[:attachments])
|
if request.post?
|
||||||
render_attachment_warning_if_needed(@document)
|
if User.current.allowed_to?(:add_document_watchers, @project) && params[:document]['watcher_user_ids'].present?
|
||||||
flash[:notice] = l(:notice_successful_create)
|
@document.watcher_user_ids = params[:document]['watcher_user_ids']
|
||||||
redirect_to :action => 'index', :project_id => @project
|
end
|
||||||
|
|
||||||
|
if @document.save
|
||||||
|
attachments = Attachment.attach_files(@document, params[:attachments])
|
||||||
|
render_attachment_warning_if_needed(@document)
|
||||||
|
flash[:notice] = l(:notice_successful_create)
|
||||||
|
redirect_to :action => 'index', :project_id => @project
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@categories = DocumentCategory.all
|
@categories = DocumentCategory.all
|
||||||
if request.post? and @document.update_attributes(params[:document])
|
|
||||||
flash[:notice] = l(:notice_successful_update)
|
if request.post?
|
||||||
redirect_to :action => 'show', :id => @document
|
if User.current.allowed_to?(:add_document_watchers, @project) && params[:document]['watcher_user_ids'].present?
|
||||||
|
@document.watcher_user_ids = params[:document]['watcher_user_ids']
|
||||||
|
end
|
||||||
|
|
||||||
|
if @document.update_attributes(params[:document])
|
||||||
|
flash[:notice] = l(:notice_successful_update)
|
||||||
|
redirect_to :action => 'show', :id => @document
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -69,7 +83,12 @@ class DocumentsController < ApplicationController
|
||||||
attachments = Attachment.attach_files(@document, params[:attachments])
|
attachments = Attachment.attach_files(@document, params[:attachments])
|
||||||
render_attachment_warning_if_needed(@document)
|
render_attachment_warning_if_needed(@document)
|
||||||
|
|
||||||
Mailer.deliver_attachments_added(attachments[:files]) if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
|
if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
|
||||||
|
# TODO: refactor
|
||||||
|
@document.recipients.each do |recipient|
|
||||||
|
Mailer.deliver_attachments_added(attachments[:files], recipient)
|
||||||
|
end
|
||||||
|
end
|
||||||
redirect_to :action => 'show', :id => @document
|
redirect_to :action => 'show', :id => @document
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -42,7 +42,11 @@ class FilesController < ApplicationController
|
||||||
render_attachment_warning_if_needed(container)
|
render_attachment_warning_if_needed(container)
|
||||||
|
|
||||||
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
||||||
Mailer.deliver_attachments_added(attachments[:files])
|
# TODO: refactor
|
||||||
|
recipients = attachments[:files].first.container.project.notified_users.select {|user| user.allowed_to?(:view_files, container.project)}.collect {|u| u.mail}
|
||||||
|
recipients.each do |recipient|
|
||||||
|
Mailer.deliver_attachments_added(attachments[:files], recipient)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
redirect_to project_files_path(@project)
|
redirect_to project_files_path(@project)
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -126,16 +126,19 @@ class GroupsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def autocomplete_for_user
|
|
||||||
@group = Group.find(params[:id])
|
|
||||||
@users = User.active.not_in_group(@group).like(params[:q]).all(:limit => 100)
|
|
||||||
render :layout => false
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit_membership
|
def edit_membership
|
||||||
@group = Group.find(params[:id])
|
@group = Group.find(params[:id])
|
||||||
@membership = Member.edit_membership(params[:membership_id], params[:membership], @group)
|
|
||||||
@membership.save if request.post?
|
if params[:project_ids] # Multiple memberships, one per project
|
||||||
|
params[:project_ids].each do |project_id|
|
||||||
|
@membership = Member.edit_membership(params[:membership_id], (params[:membership]|| {}).merge(:project_id => project_id), @group)
|
||||||
|
@membership.save if request.post?
|
||||||
|
end
|
||||||
|
else # Single membership
|
||||||
|
@membership = Member.edit_membership(params[:membership_id], params[:membership], @group)
|
||||||
|
@membership.save if request.post?
|
||||||
|
end
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @membership.valid?
|
if @membership.valid?
|
||||||
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
|
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -23,7 +23,8 @@ class IssueCategoriesController < ApplicationController
|
||||||
verify :method => :post, :only => :destroy
|
verify :method => :post, :only => :destroy
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@category = @project.issue_categories.build(params[:category])
|
@category = @project.issue_categories.build
|
||||||
|
@category.safe_attributes = params[:category]
|
||||||
if request.post?
|
if request.post?
|
||||||
if @category.save
|
if @category.save
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
@ -50,7 +51,8 @@ class IssueCategoriesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
if request.post? and @category.update_attributes(params[:category])
|
@category.safe_attributes = params[:category]
|
||||||
|
if request.post? and @category.save
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
|
redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -12,6 +12,8 @@
|
||||||
# See doc/COPYRIGHT.rdoc for more details.
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
#++
|
#++
|
||||||
|
|
||||||
|
require 'diff'
|
||||||
|
|
||||||
class JournalsController < ApplicationController
|
class JournalsController < ApplicationController
|
||||||
before_filter :find_journal, :only => [:edit, :diff]
|
before_filter :find_journal, :only => [:edit, :diff]
|
||||||
before_filter :find_issue, :only => [:new]
|
before_filter :find_issue, :only => [:new]
|
||||||
|
@ -84,6 +86,22 @@ class JournalsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def diff
|
||||||
|
if valid_field?(params[:field])
|
||||||
|
from = @journal.changes[params[:field]][0]
|
||||||
|
to = @journal.changes[params[:field]][1]
|
||||||
|
|
||||||
|
@diff = Redmine::Helpers::Diff.new(to, from)
|
||||||
|
@issue = @journal.journaled
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { }
|
||||||
|
format.js { render :layout => false }
|
||||||
|
end
|
||||||
|
else
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def find_journal
|
def find_journal
|
||||||
|
@ -100,4 +118,9 @@ class JournalsController < ApplicationController
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
render_404
|
render_404
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Is this a valid field for diff'ing?
|
||||||
|
def valid_field?(field)
|
||||||
|
field.to_s.strip == "description"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
class LdapAuthSourcesController < AuthSourcesController
|
class LdapAuthSourcesController < AuthSourcesController
|
||||||
|
|
||||||
|
menu_item :ldap_authentication, :only => [:index]
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def auth_source_class
|
def auth_source_class
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -21,17 +21,19 @@ class MembersController < ApplicationController
|
||||||
|
|
||||||
def new
|
def new
|
||||||
members = []
|
members = []
|
||||||
if params[:member] && request.post?
|
if params[:member]
|
||||||
attrs = params[:member].dup
|
if params[:member][:user_ids]
|
||||||
if (user_ids = attrs.delete(:user_ids))
|
attrs = params[:member].dup
|
||||||
|
user_ids = attrs.delete(:user_ids)
|
||||||
user_ids.each do |user_id|
|
user_ids.each do |user_id|
|
||||||
members << Member.new(attrs.merge(:user_id => user_id))
|
members << Member.new(:role_ids => params[:member][:role_ids], :user_id => user_id)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
members << Member.new(attrs)
|
members << Member.new(:role_ids => params[:member][:role_ids], :user_id => params[:member][:user_id])
|
||||||
end
|
end
|
||||||
@project.members << members
|
@project.members << members
|
||||||
end
|
end
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if members.present? && members.all? {|m| m.valid? }
|
if members.present? && members.all? {|m| m.valid? }
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -48,26 +48,26 @@ class MessagesController < ApplicationController
|
||||||
|
|
||||||
# Create a new topic
|
# Create a new topic
|
||||||
def new
|
def new
|
||||||
@message = Message.new(params[:message])
|
@message = Message.new
|
||||||
@message.author = User.current
|
@message.author = User.current
|
||||||
@message.board = @board
|
@message.board = @board
|
||||||
if params[:message] && User.current.allowed_to?(:edit_messages, @project)
|
@message.safe_attributes = params[:message]
|
||||||
@message.locked = params[:message]['locked']
|
if request.post?
|
||||||
@message.sticky = params[:message]['sticky']
|
if @message.save
|
||||||
end
|
call_hook(:controller_messages_new_after_save, { :params => params, :message => @message})
|
||||||
if request.post? && @message.save
|
attachments = Attachment.attach_files(@message, params[:attachments])
|
||||||
call_hook(:controller_messages_new_after_save, { :params => params, :message => @message})
|
render_attachment_warning_if_needed(@message)
|
||||||
attachments = Attachment.attach_files(@message, params[:attachments])
|
redirect_to :action => 'show', :id => @message
|
||||||
render_attachment_warning_if_needed(@message)
|
end
|
||||||
redirect_to :action => 'show', :id => @message
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Reply to a topic
|
# Reply to a topic
|
||||||
def reply
|
def reply
|
||||||
@reply = Message.new(params[:reply])
|
@reply = Message.new
|
||||||
@reply.author = User.current
|
@reply.author = User.current
|
||||||
@reply.board = @board
|
@reply.board = @board
|
||||||
|
@reply.safe_attributes = params[:reply]
|
||||||
@topic.children << @reply
|
@topic.children << @reply
|
||||||
if !@reply.new_record?
|
if !@reply.new_record?
|
||||||
call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply})
|
call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply})
|
||||||
|
@ -80,11 +80,8 @@ class MessagesController < ApplicationController
|
||||||
# Edit a message
|
# Edit a message
|
||||||
def edit
|
def edit
|
||||||
(render_403; return false) unless @message.editable_by?(User.current)
|
(render_403; return false) unless @message.editable_by?(User.current)
|
||||||
if params[:message]
|
@message.safe_attributes = params[:message]
|
||||||
@message.locked = params[:message]['locked']
|
if request.post? && @message.save
|
||||||
@message.sticky = params[:message]['sticky']
|
|
||||||
end
|
|
||||||
if request.post? && @message.update_attributes(params[:message])
|
|
||||||
attachments = Attachment.attach_files(@message, params[:attachments])
|
attachments = Attachment.attach_files(@message, params[:attachments])
|
||||||
render_attachment_warning_if_needed(@message)
|
render_attachment_warning_if_needed(@message)
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
|
@ -110,7 +107,7 @@ class MessagesController < ApplicationController
|
||||||
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
|
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
|
||||||
content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
|
content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
|
||||||
render(:update) { |page|
|
render(:update) { |page|
|
||||||
page << "$('reply_subject').value = \"#{subject}\";"
|
page << "$('message_subject').value = \"#{subject}\";"
|
||||||
page.<< "$('message_content').value = \"#{content}\";"
|
page.<< "$('message_content').value = \"#{content}\";"
|
||||||
page.show 'reply'
|
page.show 'reply'
|
||||||
page << "Form.Element.focus('message_content');"
|
page << "Form.Element.focus('message_content');"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -59,14 +59,12 @@ class NewsController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@news = News.new(:project => @project, :author => User.current)
|
@news = News.new(:project => @project, :author => User.current)
|
||||||
if request.post?
|
@news.safe_attributes = params[:news]
|
||||||
@news.attributes = params[:news]
|
if @news.save
|
||||||
if @news.save
|
flash[:notice] = l(:notice_successful_create)
|
||||||
flash[:notice] = l(:notice_successful_create)
|
redirect_to :controller => 'news', :action => 'index', :project_id => @project
|
||||||
redirect_to :controller => 'news', :action => 'index', :project_id => @project
|
else
|
||||||
else
|
render :action => 'new'
|
||||||
render :action => 'new'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -74,7 +72,8 @@ class NewsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if request.put? and @news.update_attributes(params[:news])
|
@news.safe_attributes = params[:news]
|
||||||
|
if @news.save
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
redirect_to :action => 'show', :id => @news
|
redirect_to :action => 'show', :id => @news
|
||||||
else
|
else
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -59,7 +59,8 @@ class ProjectsController < ApplicationController
|
||||||
def new
|
def new
|
||||||
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
|
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
|
||||||
@trackers = Tracker.all
|
@trackers = Tracker.all
|
||||||
@project = Project.new(params[:project])
|
@project = Project.new
|
||||||
|
@project.safe_attributes = params[:project]
|
||||||
end
|
end
|
||||||
|
|
||||||
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -20,6 +20,7 @@ class QueriesController < ApplicationController
|
||||||
def new
|
def new
|
||||||
@query = Query.new(params[:query])
|
@query = Query.new(params[:query])
|
||||||
@query.project = params[:query_is_for_all] ? nil : @project
|
@query.project = params[:query_is_for_all] ? nil : @project
|
||||||
|
@query.display_subprojects = params[:display_subprojects] if params[:display_subprojects].present?
|
||||||
@query.user = User.current
|
@query.user = User.current
|
||||||
@query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
|
@query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
|
||||||
|
|
||||||
|
@ -42,6 +43,7 @@ class QueriesController < ApplicationController
|
||||||
@query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f]
|
@query.add_filters(params[:fields] || params[:f], params[:operators] || params[:op], params[:values] || params[:v]) if params[:fields] || params[:f]
|
||||||
@query.attributes = params[:query]
|
@query.attributes = params[:query]
|
||||||
@query.project = nil if params[:query_is_for_all]
|
@query.project = nil if params[:query_is_for_all]
|
||||||
|
@query.display_subprojects = params[:display_subprojects] if params[:display_subprojects].present?
|
||||||
@query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
|
@query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
|
||||||
@query.group_by ||= params[:group_by]
|
@query.group_by ||= params[:group_by]
|
||||||
@query.column_names = params[:c] if params[:c]
|
@query.column_names = params[:c] if params[:c]
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -72,8 +72,7 @@ class TimeEntryReportsController < ApplicationController
|
||||||
@periods = []
|
@periods = []
|
||||||
# Date#at_beginning_of_ not supported in Rails 1.2.x
|
# Date#at_beginning_of_ not supported in Rails 1.2.x
|
||||||
date_from = @from.to_time
|
date_from = @from.to_time
|
||||||
# 100 columns max
|
while date_from <= @to.to_time
|
||||||
while date_from <= @to.to_time && @periods.length < 100
|
|
||||||
case @columns
|
case @columns
|
||||||
when 'year'
|
when 'year'
|
||||||
@periods << "#{date_from.year}"
|
@periods << "#{date_from.year}"
|
||||||
|
@ -161,6 +160,9 @@ class TimeEntryReportsController < ApplicationController
|
||||||
@available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
|
@available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
|
||||||
:klass => Project,
|
:klass => Project,
|
||||||
:label => :label_project},
|
:label => :label_project},
|
||||||
|
'status' => {:sql => "#{Issue.table_name}.status_id",
|
||||||
|
:klass => IssueStatus,
|
||||||
|
:label => :field_status},
|
||||||
'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
|
'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
|
||||||
:klass => Version,
|
:klass => Version,
|
||||||
:label => :label_version},
|
:label => :label_version},
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -97,7 +97,7 @@ class TimelogController < ApplicationController
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
|
@time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
|
||||||
@time_entry.attributes = params[:time_entry]
|
@time_entry.safe_attributes = params[:time_entry]
|
||||||
|
|
||||||
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
||||||
render :action => 'edit'
|
render :action => 'edit'
|
||||||
|
@ -106,7 +106,7 @@ class TimelogController < ApplicationController
|
||||||
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
def create
|
def create
|
||||||
@time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
|
@time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today)
|
||||||
@time_entry.attributes = params[:time_entry]
|
@time_entry.safe_attributes = params[:time_entry]
|
||||||
|
|
||||||
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
||||||
|
|
||||||
|
@ -127,14 +127,14 @@ class TimelogController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@time_entry.attributes = params[:time_entry]
|
@time_entry.safe_attributes = params[:time_entry]
|
||||||
|
|
||||||
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
||||||
end
|
end
|
||||||
|
|
||||||
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
def update
|
def update
|
||||||
@time_entry.attributes = params[:time_entry]
|
@time_entry.safe_attributes = params[:time_entry]
|
||||||
|
|
||||||
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry })
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -197,8 +197,16 @@ class UsersController < ApplicationController
|
||||||
|
|
||||||
|
|
||||||
def edit_membership
|
def edit_membership
|
||||||
@membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
|
if params[:project_ids] # Multiple memberships, one per project
|
||||||
@membership.save if request.post?
|
params[:project_ids].each do |project_id|
|
||||||
|
@membership = Member.edit_membership(params[:membership_id], (params[:membership] || {}).merge(:project_id => project_id), @user)
|
||||||
|
@membership.save if request.post?
|
||||||
|
end
|
||||||
|
else # Single membership
|
||||||
|
@membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
|
||||||
|
@membership.save if request.post?
|
||||||
|
end
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @membership.valid?
|
if @membership.valid?
|
||||||
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
|
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -56,7 +56,7 @@ class VersionsController < ApplicationController
|
||||||
if params[:version]
|
if params[:version]
|
||||||
attributes = params[:version].dup
|
attributes = params[:version].dup
|
||||||
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
|
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
|
||||||
@version.attributes = attributes
|
@version.safe_attributes = attributes
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ class VersionsController < ApplicationController
|
||||||
if params[:version]
|
if params[:version]
|
||||||
attributes = params[:version].dup
|
attributes = params[:version].dup
|
||||||
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
|
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
|
||||||
@version.attributes = attributes
|
@version.safe_attributes = attributes
|
||||||
end
|
end
|
||||||
|
|
||||||
if request.post?
|
if request.post?
|
||||||
|
@ -101,7 +101,8 @@ class VersionsController < ApplicationController
|
||||||
if request.put? && params[:version]
|
if request.put? && params[:version]
|
||||||
attributes = params[:version].dup
|
attributes = params[:version].dup
|
||||||
attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
|
attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
|
||||||
if @version.update_attributes(attributes)
|
@version.safe_attributes = attributes
|
||||||
|
if @version.save
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
|
redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
|
||||||
else
|
else
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -16,6 +16,7 @@ class WatchersController < ApplicationController
|
||||||
before_filter :find_project
|
before_filter :find_project
|
||||||
before_filter :require_login, :check_project_privacy, :only => [:watch, :unwatch]
|
before_filter :require_login, :check_project_privacy, :only => [:watch, :unwatch]
|
||||||
before_filter :authorize, :only => [:new, :destroy]
|
before_filter :authorize, :only => [:new, :destroy]
|
||||||
|
before_filter :authorize_access_to_object, :only => [:new, :destroy]
|
||||||
|
|
||||||
verify :method => :post,
|
verify :method => :post,
|
||||||
:only => [ :watch, :unwatch ],
|
:only => [ :watch, :unwatch ],
|
||||||
|
@ -34,9 +35,12 @@ class WatchersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@watcher = Watcher.new(params[:watcher])
|
params[:user_ids].each do |user_id|
|
||||||
@watcher.watchable = @watched
|
@watcher = Watcher.new((params[:watcher] || {}).merge({:user_id => user_id}))
|
||||||
@watcher.save if request.post?
|
@watcher.watchable = @watched
|
||||||
|
@watcher.save if request.post?
|
||||||
|
end if params[:user_ids].present?
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :back }
|
format.html { redirect_to :back }
|
||||||
format.js do
|
format.js do
|
||||||
|
@ -50,7 +54,7 @@ class WatchersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@watched.set_watcher(User.find(params[:user_id]), false) if request.post?
|
@watched.set_watcher(Principal.find(params[:user_id]), false) if request.post?
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :back }
|
format.html { redirect_to :back }
|
||||||
format.js do
|
format.js do
|
||||||
|
@ -94,4 +98,24 @@ private
|
||||||
rescue ::ActionController::RedirectBackError
|
rescue ::ActionController::RedirectBackError
|
||||||
render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true
|
render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def authorize_access_to_object
|
||||||
|
permission = ''
|
||||||
|
case params[:action]
|
||||||
|
when 'new'
|
||||||
|
permission << 'add_'
|
||||||
|
when 'destroy'
|
||||||
|
permission << 'delete_'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Ends up like: :delete_wiki_page_watchers
|
||||||
|
permission << "#{@watched.class.name.underscore}_watchers"
|
||||||
|
|
||||||
|
if User.current.allowed_to?(permission.to_sym, @project)
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
deny_access
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -19,7 +19,7 @@ class WikisController < ApplicationController
|
||||||
# Create or update a project's wiki
|
# Create or update a project's wiki
|
||||||
def edit
|
def edit
|
||||||
@wiki = @project.wiki || Wiki.new(:project => @project)
|
@wiki = @project.wiki || Wiki.new(:project => @project)
|
||||||
@wiki.attributes = params[:wiki]
|
@wiki.safe_attributes = params[:wiki]
|
||||||
@wiki.save if request.post?
|
@wiki.save if request.post?
|
||||||
render(:update) {|page| page.replace_html "tab-content-wiki", :partial => 'projects/settings/wiki'}
|
render(:update) {|page| page.replace_html "tab-content-wiki", :partial => 'projects/settings/wiki'}
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class BaseDrop < Liquid::Drop
|
||||||
|
def initialize(object)
|
||||||
|
@object = object unless object.respond_to?(:visible?) && !object.visible?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Defines a Liquid method on the drop that is allowed to call the
|
||||||
|
# Ruby method directly. Best used for attributes.
|
||||||
|
#
|
||||||
|
# Based on Module#liquid_methods
|
||||||
|
def self.allowed_methods(*allowed_methods)
|
||||||
|
class_eval do
|
||||||
|
allowed_methods.each do |sym|
|
||||||
|
define_method sym do
|
||||||
|
if @object.respond_to?(:public_send)
|
||||||
|
@object.public_send(sym) rescue nil
|
||||||
|
else
|
||||||
|
@object.send(sym) rescue nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,79 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class IssueDrop < BaseDrop
|
||||||
|
allowed_methods :id
|
||||||
|
allowed_methods :subject
|
||||||
|
allowed_methods :description
|
||||||
|
allowed_methods :project
|
||||||
|
allowed_methods :tracker
|
||||||
|
allowed_methods :status
|
||||||
|
allowed_methods :due_date
|
||||||
|
allowed_methods :category
|
||||||
|
allowed_methods :assigned_to
|
||||||
|
allowed_methods :priority
|
||||||
|
allowed_methods :fixed_version
|
||||||
|
allowed_methods :author
|
||||||
|
allowed_methods :created_on
|
||||||
|
allowed_methods :updated_on
|
||||||
|
allowed_methods :start_date
|
||||||
|
allowed_methods :done_ratio
|
||||||
|
allowed_methods :estimated_hours
|
||||||
|
allowed_methods :parent
|
||||||
|
|
||||||
|
def custom_field(name)
|
||||||
|
return '' unless name.present?
|
||||||
|
custom_field = IssueCustomField.find_by_name(name.strip)
|
||||||
|
return '' unless custom_field.present?
|
||||||
|
custom_value = @object.custom_value_for(custom_field)
|
||||||
|
if custom_value.present?
|
||||||
|
return custom_value.value
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO: both required, method_missing for Ruby and before_method for Liquid
|
||||||
|
|
||||||
|
# Allows accessing custom fields by their name:
|
||||||
|
#
|
||||||
|
# - issue.the_name_of_player => CustomField(:name => "The name Of Player")
|
||||||
|
#
|
||||||
|
def before_method(method_sym)
|
||||||
|
if custom_field_with_matching_name = has_custom_field_with_matching_name?(method_sym)
|
||||||
|
custom_field(custom_field_with_matching_name.name)
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Allows accessing custom fields by their name:
|
||||||
|
#
|
||||||
|
# - issue.the_name_of_player => CustomField(:name => "The name Of Player")
|
||||||
|
#
|
||||||
|
def method_missing(method_sym, *arguments, &block)
|
||||||
|
if custom_field_with_matching_name = has_custom_field_with_matching_name?(method_sym)
|
||||||
|
custom_field(custom_field_with_matching_name.name)
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def has_custom_field_with_matching_name?(method_sym)
|
||||||
|
custom_field_with_matching_name = @object.available_custom_fields.detect {|custom_field|
|
||||||
|
custom_field.name.downcase.underscore.gsub(' ','_') == method_sym.to_s
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,17 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class IssueStatusDrop < BaseDrop
|
||||||
|
allowed_methods :name
|
||||||
|
end
|
|
@ -0,0 +1,17 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class PrincipalDrop < BaseDrop
|
||||||
|
allowed_methods :name
|
||||||
|
end
|
|
@ -0,0 +1,17 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class ProjectDrop < BaseDrop
|
||||||
|
allowed_methods :name, :identifier
|
||||||
|
end
|
|
@ -0,0 +1,17 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class TrackerDrop < BaseDrop
|
||||||
|
allowed_methods :name
|
||||||
|
end
|
|
@ -0,0 +1,17 @@
|
||||||
|
#-- encoding: UTF-8
|
||||||
|
#-- copyright
|
||||||
|
# ChiliProject is a project management system.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class WikiPageDrop < BaseDrop
|
||||||
|
allowed_methods :title
|
||||||
|
end
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -16,9 +16,8 @@ require 'forwardable'
|
||||||
require 'cgi'
|
require 'cgi'
|
||||||
|
|
||||||
module ApplicationHelper
|
module ApplicationHelper
|
||||||
include Redmine::WikiFormatting::Macros::Definitions
|
|
||||||
include Redmine::I18n
|
include Redmine::I18n
|
||||||
include GravatarHelper::PublicMethods
|
include Gravatarify::Helper
|
||||||
|
|
||||||
extend Forwardable
|
extend Forwardable
|
||||||
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
|
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
|
||||||
|
@ -224,17 +223,15 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
# Renders the project quick-jump box
|
# Renders the project quick-jump box
|
||||||
def render_project_jump_box
|
def render_project_jump_box(projects = [], html_options = {})
|
||||||
projects = User.current.memberships.collect(&:project).compact.uniq
|
projects ||= User.current.memberships.collect(&:project).compact.uniq
|
||||||
if projects.any?
|
if projects.any?
|
||||||
s = '<select onchange="if (this.value != \'\') { window.location = this.value; }">' +
|
# option_tags = content_tag :option, l(:label_jump_to_a_project), :value => ""
|
||||||
"<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
|
option_tags = (content_tag :option, "", :value => "" )
|
||||||
'<option value="" disabled="disabled">---</option>'
|
option_tags << project_tree_options_for_select(projects, :selected => @project) do |p|
|
||||||
s << project_tree_options_for_select(projects, :selected => @project) do |p|
|
{ :value => url_for(:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item) }
|
||||||
{ :value => url_for(:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item) }
|
end
|
||||||
end
|
select_tag "", option_tags, html_options.merge({ :onchange => "if (this.value != \'\') { window.location = this.value; }" })
|
||||||
s << '</select>'
|
|
||||||
s
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -288,7 +285,15 @@ module ApplicationHelper
|
||||||
def principals_check_box_tags(name, principals)
|
def principals_check_box_tags(name, principals)
|
||||||
s = ''
|
s = ''
|
||||||
principals.sort.each do |principal|
|
principals.sort.each do |principal|
|
||||||
s << "<label>#{ check_box_tag name, principal.id, false } #{h principal}</label>\n"
|
s << "<label style='display:block;'>#{ check_box_tag name, principal.id, false } #{h principal}</label>\n"
|
||||||
|
end
|
||||||
|
s
|
||||||
|
end
|
||||||
|
|
||||||
|
def projects_check_box_tags(name, projects)
|
||||||
|
s = ''
|
||||||
|
projects.each do |project|
|
||||||
|
s << "<label>#{ check_box_tag name, project.id, false } #{h project}</label>\n"
|
||||||
end
|
end
|
||||||
s
|
s
|
||||||
end
|
end
|
||||||
|
@ -389,7 +394,9 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def page_header_title
|
def page_header_title
|
||||||
if @project.nil? || @project.new_record?
|
if @page_header_title.present?
|
||||||
|
h(@page_header_title)
|
||||||
|
elsif @project.nil? || @project.new_record?
|
||||||
h(Setting.app_title)
|
h(Setting.app_title)
|
||||||
else
|
else
|
||||||
b = []
|
b = []
|
||||||
|
@ -429,8 +436,9 @@ module ApplicationHelper
|
||||||
css << 'theme-' + theme.name
|
css << 'theme-' + theme.name
|
||||||
end
|
end
|
||||||
|
|
||||||
css << 'controller-' + params[:controller]
|
css << 'project-' + @project.id.to_s if @project.present?
|
||||||
css << 'action-' + params[:action]
|
css << 'controller-' + params[:controller] if params[:controller]
|
||||||
|
css << 'action-' + params[:action] if params[:action]
|
||||||
css.join(' ')
|
css.join(' ')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -447,23 +455,55 @@ module ApplicationHelper
|
||||||
case args.size
|
case args.size
|
||||||
when 1
|
when 1
|
||||||
obj = options[:object]
|
obj = options[:object]
|
||||||
text = args.shift
|
input_text = args.shift
|
||||||
when 2
|
when 2
|
||||||
obj = args.shift
|
obj = args.shift
|
||||||
attr = args.shift
|
attr = args.shift
|
||||||
text = obj.send(attr).to_s
|
input_text = obj.send(attr).to_s
|
||||||
else
|
else
|
||||||
raise ArgumentError, 'invalid arguments to textilizable'
|
raise ArgumentError, 'invalid arguments to textilizable'
|
||||||
end
|
end
|
||||||
return '' if text.blank?
|
return '' if input_text.blank?
|
||||||
project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
|
project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
|
||||||
only_path = options.delete(:only_path) == false ? false : true
|
only_path = options.delete(:only_path) == false ? false : true
|
||||||
|
|
||||||
text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) }
|
begin
|
||||||
|
text = ChiliProject::Liquid::Legacy.run_macros(input_text)
|
||||||
|
liquid_template = ChiliProject::Liquid::Template.parse(text)
|
||||||
|
liquid_variables = get_view_instance_variables_for_liquid
|
||||||
|
liquid_variables.merge!({'current_user' => User.current})
|
||||||
|
liquid_variables.merge!({'toc' => '{{toc}}'}) # Pass toc through to replace later
|
||||||
|
liquid_variables.merge!(ChiliProject::Liquid::Variables.all)
|
||||||
|
|
||||||
|
# Pass :view in a register so this view (with helpers) can be used inside of a tag
|
||||||
|
text = liquid_template.render(liquid_variables, :registers => {:view => self, :object => obj, :attribute => attr})
|
||||||
|
|
||||||
|
# Add Liquid errors to the log
|
||||||
|
if Rails.logger && Rails.logger.debug?
|
||||||
|
msg = ""
|
||||||
|
liquid_template.errors.each do |exception|
|
||||||
|
msg << "[Liquid Error] #{exception.message}\n:\n#{exception.backtrace.join("\n")}"
|
||||||
|
msg << "\n\n"
|
||||||
|
end
|
||||||
|
Rails.logger.debug msg
|
||||||
|
end
|
||||||
|
rescue Liquid::SyntaxError => exception
|
||||||
|
msg = "[Liquid Syntax Error] #{exception.message}"
|
||||||
|
if Rails.logger && Rails.logger.debug?
|
||||||
|
log_msg = "#{msg}\n"
|
||||||
|
log_msg << exception.backtrace.collect{ |str| " #{str}" }.join("\n")
|
||||||
|
log_msg << "\n\n"
|
||||||
|
Rails.logger.debug log_msg
|
||||||
|
end
|
||||||
|
|
||||||
|
# Skip Liquid if there is a syntax error
|
||||||
|
text = content_tag(:div, msg, :class => "flash error")
|
||||||
|
text << h(input_text)
|
||||||
|
end
|
||||||
|
|
||||||
@parsed_headings = []
|
@parsed_headings = []
|
||||||
text = parse_non_pre_blocks(text) do |text|
|
text = parse_non_pre_blocks(text) do |text|
|
||||||
[:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name|
|
[:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings, :parse_relative_urls].each do |method_name|
|
||||||
send method_name, text, project, obj, attr, only_path, options
|
send method_name, text, project, obj, attr, only_path, options
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -504,6 +544,41 @@ module ApplicationHelper
|
||||||
parsed
|
parsed
|
||||||
end
|
end
|
||||||
|
|
||||||
|
RELATIVE_LINK_RE = %r{
|
||||||
|
<a
|
||||||
|
(?:
|
||||||
|
(\shref=
|
||||||
|
(?: # the href and link
|
||||||
|
(?:'(\/[^>]+?)')|
|
||||||
|
(?:"(\/[^>]+?)")
|
||||||
|
)
|
||||||
|
)|
|
||||||
|
[^>]
|
||||||
|
)*
|
||||||
|
>
|
||||||
|
[^<]*?<\/a> # content and closing link tag.
|
||||||
|
}x unless const_defined?(:RELATIVE_LINK_RE)
|
||||||
|
|
||||||
|
def parse_relative_urls(text, project, obj, attr, only_path, options)
|
||||||
|
return if only_path
|
||||||
|
text.gsub!(RELATIVE_LINK_RE) do |m|
|
||||||
|
href, relative_url = $1, $2 || $3
|
||||||
|
next m unless href.present?
|
||||||
|
if defined?(request) && request.present?
|
||||||
|
# we have a request!
|
||||||
|
protocol, host_with_port = request.protocol, request.host_with_port
|
||||||
|
elsif @controller
|
||||||
|
# use the same methods as url_for in the Mailer
|
||||||
|
url_opts = @controller.class.default_url_options
|
||||||
|
next m unless url_opts && url_opts[:protocol] && url_opts[:host]
|
||||||
|
protocol, host_with_port = "#{url_opts[:protocol]}://", url_opts[:host]
|
||||||
|
else
|
||||||
|
next m
|
||||||
|
end
|
||||||
|
m.sub href, " href=\"#{protocol}#{host_with_port}#{relative_url}\""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def parse_inline_attachments(text, project, obj, attr, only_path, options)
|
def parse_inline_attachments(text, project, obj, attr, only_path, options)
|
||||||
# when using an image link, try to use an attachment, if possible
|
# when using an image link, try to use an attachment, if possible
|
||||||
if options[:attachments] || (obj && obj.respond_to?(:attachments))
|
if options[:attachments] || (obj && obj.respond_to?(:attachments))
|
||||||
|
@ -712,7 +787,7 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE)
|
TOC_RE = /<p>\{%\s*toc(_right|_left)?\s*%\}<\/p>/i unless const_defined?(:TOC_RE)
|
||||||
|
|
||||||
# Renders the TOC with given headings
|
# Renders the TOC with given headings
|
||||||
def replace_toc(text, headings)
|
def replace_toc(text, headings)
|
||||||
|
@ -720,10 +795,14 @@ module ApplicationHelper
|
||||||
if headings.empty?
|
if headings.empty?
|
||||||
''
|
''
|
||||||
else
|
else
|
||||||
div_class = 'toc'
|
toc_class = 'toc'
|
||||||
div_class << ' right' if $1 == '>'
|
toc_class << ' right' if $1 == '_right'
|
||||||
div_class << ' left' if $1 == '<'
|
toc_class << ' left' if $1 == '_left'
|
||||||
out = "<ul class=\"#{div_class}\"><li>"
|
|
||||||
|
out = "<fieldset class=\"header_collapsible collapsible #{toc_class}\">"
|
||||||
|
out << "<legend onclick=\"toggleFieldset(this);\"><span>#{l(:label_toc)}</span></legend>"
|
||||||
|
out << "<div>"
|
||||||
|
out << "<ul class=\"toc\"><li>"
|
||||||
root = headings.map(&:first).min
|
root = headings.map(&:first).min
|
||||||
current = root
|
current = root
|
||||||
started = false
|
started = false
|
||||||
|
@ -741,6 +820,7 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
out << '</li></ul>' * (current - root)
|
out << '</li></ul>' * (current - root)
|
||||||
out << '</li></ul>'
|
out << '</li></ul>'
|
||||||
|
out << '</div></fieldset>'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -772,7 +852,7 @@ module ApplicationHelper
|
||||||
def back_url_hidden_field_tag
|
def back_url_hidden_field_tag
|
||||||
back_url = params[:back_url] || request.env['HTTP_REFERER']
|
back_url = params[:back_url] || request.env['HTTP_REFERER']
|
||||||
back_url = CGI.unescape(back_url.to_s)
|
back_url = CGI.unescape(back_url.to_s)
|
||||||
hidden_field_tag('back_url', CGI.escape(back_url)) unless back_url.blank?
|
hidden_field_tag('back_url', CGI.escape(back_url), :id => nil) unless back_url.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_all_links(form_name)
|
def check_all_links(form_name)
|
||||||
|
@ -788,12 +868,10 @@ module ApplicationHelper
|
||||||
pcts << (100 - pcts[1] - pcts[0])
|
pcts << (100 - pcts[1] - pcts[0])
|
||||||
width = options[:width] || '100px;'
|
width = options[:width] || '100px;'
|
||||||
legend = options[:legend] || ''
|
legend = options[:legend] || ''
|
||||||
content_tag('table',
|
content_tag('div',
|
||||||
content_tag('tr',
|
content_tag('div', '', :style => "width: #{pcts[0]}%;", :class => 'closed ui-progressbar-value ui-widget-header ui-corner-left') +
|
||||||
(pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed') : '') +
|
content_tag('div', '', :style => "width: #{pcts[1]}%;", :class => 'done ui-progressbar-value ui-widget-header'),
|
||||||
(pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done') : '') +
|
:class => 'progress ui-progressbar ui-widget ui-widget-content ui-corner-all', :style => "width: #{width};") +
|
||||||
(pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2]}%;", :class => 'todo') : '')
|
|
||||||
), :class => 'progress', :style => "width: #{width};") +
|
|
||||||
content_tag('p', legend, :class => 'pourcent')
|
content_tag('p', legend, :class => 'pourcent')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -806,7 +884,7 @@ module ApplicationHelper
|
||||||
def context_menu(url)
|
def context_menu(url)
|
||||||
unless @context_menu_included
|
unless @context_menu_included
|
||||||
content_for :header_tags do
|
content_for :header_tags do
|
||||||
javascript_include_tag('context_menu') +
|
javascript_include_tag('context_menu.jquery') +
|
||||||
stylesheet_link_tag('context_menu')
|
stylesheet_link_tag('context_menu')
|
||||||
end
|
end
|
||||||
if l(:direction) == 'rtl'
|
if l(:direction) == 'rtl'
|
||||||
|
@ -816,7 +894,7 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
@context_menu_included = true
|
@context_menu_included = true
|
||||||
end
|
end
|
||||||
javascript_tag "new ContextMenu('#{ url_for(url) }')"
|
javascript_tag "jQuery(document).ContextMenu('#{ url_for(url) }')"
|
||||||
end
|
end
|
||||||
|
|
||||||
def context_menu_link(name, url, options={})
|
def context_menu_link(name, url, options={})
|
||||||
|
@ -836,33 +914,25 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def calendar_for(field_id)
|
def calendar_for(field_id)
|
||||||
include_calendar_headers_tags
|
javascript_tag("jQuery('##{field_id}').datepicker(datepickerSettings)")
|
||||||
image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
|
|
||||||
javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def include_calendar_headers_tags
|
def jquery_datepicker_settings
|
||||||
unless @calendar_headers_tags_included
|
start_of_week = Setting.start_of_week.to_s
|
||||||
@calendar_headers_tags_included = true
|
start_of_week_string = start_of_week.present? ? "firstDay: '#{start_of_week}', " : ''
|
||||||
content_for :header_tags do
|
script = javascript_tag("var datepickerSettings = {" +
|
||||||
start_of_week = case Setting.start_of_week.to_i
|
start_of_week_string +
|
||||||
when 1
|
"showOn: 'both', " +
|
||||||
'Calendar._FD = 1;' # Monday
|
"buttonImage: '" + path_to_image('/images/calendar.png') + "', " +
|
||||||
when 7
|
"buttonImageOnly: true, " +
|
||||||
'Calendar._FD = 0;' # Sunday
|
"showButtonPanel: true, " +
|
||||||
when 6
|
"dateFormat: 'yy-mm-dd' " +
|
||||||
'Calendar._FD = 6;' # Saturday
|
"}")
|
||||||
else
|
unless current_language == :en
|
||||||
'' # use language
|
jquery_locale = l("jquery.ui", :default => current_language.to_s)
|
||||||
end
|
script << javascript_include_tag("libs/ui/i18n/jquery.ui.datepicker-#{jquery_locale}.js")
|
||||||
|
|
||||||
javascript_include_tag('calendar/calendar') +
|
|
||||||
javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") +
|
|
||||||
javascript_tag(start_of_week) +
|
|
||||||
javascript_include_tag('calendar/calendar-setup') +
|
|
||||||
stylesheet_link_tag('calendar')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
script
|
||||||
end
|
end
|
||||||
|
|
||||||
def content_for(name, content = nil, &block)
|
def content_for(name, content = nil, &block)
|
||||||
|
@ -875,10 +945,29 @@ module ApplicationHelper
|
||||||
(@has_content && @has_content[name]) || false
|
(@has_content && @has_content[name]) || false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the gravatar image tag for the given email
|
||||||
|
# +email+ is a string with an email address
|
||||||
|
def gravatar(email, options={})
|
||||||
|
gravatarify_options = {}
|
||||||
|
gravatarify_options[:secure] = options.delete :ssl
|
||||||
|
[:default, :size, :rating, :filetype].each {|key| gravatarify_options[key] = options.delete key}
|
||||||
|
# Default size is 50x50 px
|
||||||
|
gravatarify_options[:size] ||= 50
|
||||||
|
options[:class] ||= 'gravatar'
|
||||||
|
gravatarify_options[:html] = options
|
||||||
|
gravatar_tag email, gravatarify_options
|
||||||
|
end
|
||||||
|
|
||||||
# Returns the avatar image tag for the given +user+ if avatars are enabled
|
# Returns the avatar image tag for the given +user+ if avatars are enabled
|
||||||
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
|
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
|
||||||
def avatar(user, options = { })
|
def avatar(user, options = { })
|
||||||
if Setting.gravatar_enabled?
|
if Setting.gravatar_enabled?
|
||||||
|
if user.is_a?(Group)
|
||||||
|
size = options[:size] || 50
|
||||||
|
size = "#{size}x#{size}" # image_tag uses WxH
|
||||||
|
options[:class] ||= 'gravatar'
|
||||||
|
return image_tag("group.png", options.merge(:size => size))
|
||||||
|
end
|
||||||
options.merge!({:ssl => (defined?(request) && request.ssl?), :default => Setting.gravatar_default})
|
options.merge!({:ssl => (defined?(request) && request.ssl?), :default => Setting.gravatar_default})
|
||||||
email = nil
|
email = nil
|
||||||
if user.respond_to?(:mail)
|
if user.respond_to?(:mail)
|
||||||
|
@ -898,6 +987,7 @@ module ApplicationHelper
|
||||||
unless User.current.pref.warn_on_leaving_unsaved == '0'
|
unless User.current.pref.warn_on_leaving_unsaved == '0'
|
||||||
tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
|
tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
|
||||||
end
|
end
|
||||||
|
tags << jquery_datepicker_settings
|
||||||
tags
|
tags
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -935,6 +1025,72 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Expands the current menu item using JavaScript based on the params
|
||||||
|
def expand_current_menu
|
||||||
|
current_menu_class =
|
||||||
|
case
|
||||||
|
when params[:controller] == "timelog"
|
||||||
|
"reports"
|
||||||
|
when params[:controller] == 'projects' && params[:action] == 'changelog'
|
||||||
|
"reports"
|
||||||
|
when params[:controller] == 'issues' && ['calendar','gantt'].include?(params[:action])
|
||||||
|
"reports"
|
||||||
|
when params[:controller] == 'projects' && params[:action] == 'roadmap'
|
||||||
|
'roadmap'
|
||||||
|
when params[:controller] == 'versions' && params[:action] == 'show'
|
||||||
|
'roadmap'
|
||||||
|
when params[:controller] == 'projects' && params[:action] == 'settings'
|
||||||
|
'settings'
|
||||||
|
when params[:controller] == 'contracts' || params[:controller] == 'deliverables'
|
||||||
|
'contracts'
|
||||||
|
else
|
||||||
|
params[:controller]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
javascript_tag("jQuery.menu_expand({ menuItem: '.#{current_menu_class}' });")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Menu items for the main top menu
|
||||||
|
def main_top_menu_items
|
||||||
|
split_top_menu_into_main_or_more_menus[:main]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Menu items for the more top menu
|
||||||
|
def more_top_menu_items
|
||||||
|
split_top_menu_into_main_or_more_menus[:more]
|
||||||
|
end
|
||||||
|
|
||||||
|
def help_menu_item
|
||||||
|
split_top_menu_into_main_or_more_menus[:help]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Split the :top_menu into separate :main and :more items
|
||||||
|
def split_top_menu_into_main_or_more_menus
|
||||||
|
unless @top_menu_split
|
||||||
|
items_for_main_level = []
|
||||||
|
items_for_more_level = []
|
||||||
|
help_menu = nil
|
||||||
|
menu_items_for(:top_menu) do |item|
|
||||||
|
if item.name == :home || item.name == :my_page
|
||||||
|
items_for_main_level << item
|
||||||
|
elsif item.name == :help
|
||||||
|
help_menu = item
|
||||||
|
elsif item.name == :projects
|
||||||
|
# Remove, present in layout
|
||||||
|
else
|
||||||
|
items_for_more_level << item
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@top_menu_split = {
|
||||||
|
:main => items_for_main_level,
|
||||||
|
:more => items_for_more_level,
|
||||||
|
:help => help_menu
|
||||||
|
}
|
||||||
|
end
|
||||||
|
@top_menu_split
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def wiki_helper
|
def wiki_helper
|
||||||
|
@ -946,4 +1102,20 @@ module ApplicationHelper
|
||||||
def link_to_content_update(text, url_params = {}, html_options = {})
|
def link_to_content_update(text, url_params = {}, html_options = {})
|
||||||
link_to(text, url_params, html_options)
|
link_to(text, url_params, html_options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_view_instance_variables_for_liquid
|
||||||
|
internal_variables = %w{
|
||||||
|
@output_buffer @cookies @helpers @real_format @assigns_added @assigns
|
||||||
|
@view_paths @controller
|
||||||
|
}
|
||||||
|
self.instance_variables.collect(&:to_s).reject do |ivar|
|
||||||
|
ivar.match(/^@_/) || # Rails "internal" variables: @_foo
|
||||||
|
ivar.match(/^@template/) ||
|
||||||
|
internal_variables.include?(ivar)
|
||||||
|
end.inject({}) do |acc,ivar|
|
||||||
|
acc[ivar.sub('@','')] = instance_variable_get(ivar)
|
||||||
|
acc
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -36,8 +36,7 @@ module CustomFieldsHelper
|
||||||
field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
|
field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
|
||||||
case field_format.try(:edit_as)
|
case field_format.try(:edit_as)
|
||||||
when "date"
|
when "date"
|
||||||
text_field_tag(field_name, custom_value.value, :id => field_id, :size => 10) +
|
date_field_tag(field_name, custom_value.value, :id => field_id, :size => 10)
|
||||||
calendar_for(field_id)
|
|
||||||
when "text"
|
when "text"
|
||||||
text_area_tag(field_name, custom_value.value, :id => field_id, :rows => 3, :style => 'width:90%')
|
text_area_tag(field_name, custom_value.value, :id => field_id, :rows => 3, :style => 'width:90%')
|
||||||
when "bool"
|
when "bool"
|
||||||
|
@ -71,8 +70,7 @@ module CustomFieldsHelper
|
||||||
field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
|
field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
|
||||||
case field_format.try(:edit_as)
|
case field_format.try(:edit_as)
|
||||||
when "date"
|
when "date"
|
||||||
text_field_tag(field_name, '', :id => field_id, :size => 10) +
|
date_field_tag(field_name, '', :id => field_id, :size => 10)
|
||||||
calendar_for(field_id)
|
|
||||||
when "text"
|
when "text"
|
||||||
text_area_tag(field_name, '', :id => field_id, :rows => 3, :style => 'width:90%')
|
text_area_tag(field_name, '', :id => field_id, :rows => 3, :style => 'width:90%')
|
||||||
when "bool"
|
when "bool"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -52,13 +52,14 @@ module IssuesHelper
|
||||||
"<strong>#{@cached_label_priority}</strong>: #{h(issue.priority.name)}"
|
"<strong>#{@cached_label_priority}</strong>: #{h(issue.priority.name)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: deprecate and/or remove
|
||||||
def render_issue_subject_with_tree(issue)
|
def render_issue_subject_with_tree(issue)
|
||||||
s = ''
|
s = ''
|
||||||
ancestors = issue.root? ? [] : issue.ancestors.all
|
ancestors = issue.root? ? [] : issue.ancestors.all
|
||||||
ancestors.each do |ancestor|
|
ancestors.each do |ancestor|
|
||||||
s << '<div>' + content_tag('p', link_to_issue(ancestor))
|
s << '<div>' + content_tag('h2', link_to_issue(ancestor))
|
||||||
end
|
end
|
||||||
s << '<div>' + content_tag('h3', h(issue.subject))
|
s << '<div class="subject">' + content_tag('h2', h(issue.subject))
|
||||||
s << '</div>' * (ancestors.size + 1)
|
s << '</div>' * (ancestors.size + 1)
|
||||||
s
|
s
|
||||||
end
|
end
|
||||||
|
@ -78,6 +79,22 @@ module IssuesHelper
|
||||||
s
|
s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render_parents_and_subtree(issue)
|
||||||
|
return if issue.leaf? && !issue.parent
|
||||||
|
s = '<form><table id="issue_tree" class="list">'
|
||||||
|
issue_list(issue.self_and_ancestors.sort_by(&:lft) + issue.descendants.sort_by(&:lft)) do |el, level|
|
||||||
|
s << content_tag('tr',
|
||||||
|
content_tag('td', check_box_tag("ids[]", el.id, false, :id => nil), :class => 'checkbox') +
|
||||||
|
content_tag('td', link_to_issue(el, :truncate => 60), :class => 'subject') +
|
||||||
|
content_tag('td', h(el.status)) +
|
||||||
|
content_tag('td', link_to_user(el.assigned_to)) +
|
||||||
|
content_tag('td', progress_bar(el.done_ratio, :width => '80px')),
|
||||||
|
:class => "issue issue-#{el.id} #{"self" if el == issue} hascontextmenu #{level > 0 ? "idnt idnt-#{level}" : nil}")
|
||||||
|
end
|
||||||
|
s << '</table></form>'
|
||||||
|
s
|
||||||
|
end
|
||||||
|
|
||||||
def render_custom_fields_rows(issue)
|
def render_custom_fields_rows(issue)
|
||||||
return if issue.custom_field_values.empty?
|
return if issue.custom_field_values.empty?
|
||||||
ordered_values = []
|
ordered_values = []
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -27,24 +27,34 @@ module JournalsHelper
|
||||||
|
|
||||||
def render_journal(model, journal, options = {})
|
def render_journal(model, journal, options = {})
|
||||||
return "" if journal.initial?
|
return "" if journal.initial?
|
||||||
journal_content = render_journal_details(journal, :label_updated_time_by)
|
|
||||||
journal_content += render_notes(model, journal, options) unless journal.notes.blank?
|
journal_classes = journal.css_classes
|
||||||
content_tag "div", journal_content, { :id => "change-#{journal.id}", :class => journal.css_classes }
|
journal_content = render_journal_details(journal, :label_updated_time_by, model, options)
|
||||||
|
|
||||||
|
avatar = avatar(journal.user, :size => "40")
|
||||||
|
unless avatar.blank?
|
||||||
|
profile_wrap = content_tag("div", avatar, {:class => "profile-wrap"}, false)
|
||||||
|
journal_content = profile_wrap + journal_content
|
||||||
|
journal_classes << " has-avatar"
|
||||||
|
end
|
||||||
|
|
||||||
|
content_tag("div", journal_content, :id => "change-#{journal.id}", :class => journal_classes)
|
||||||
end
|
end
|
||||||
|
|
||||||
# This renders a journal entry wiht a header and details
|
# This renders a journal entry with a header and details
|
||||||
def render_journal_details(journal, header_label = :label_updated_time_by)
|
def render_journal_details(journal, header_label = :label_updated_time_by, model=nil, options={})
|
||||||
header = <<-HTML
|
header = <<-HTML
|
||||||
<h4>
|
<h4>
|
||||||
<div style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div>
|
<div class="journal-link" style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div>
|
||||||
#{avatar(journal.user, :size => "24")}
|
|
||||||
#{content_tag('a', '', :name => "note-#{journal.anchor}")}
|
|
||||||
#{authoring journal.created_at, journal.user, :label => header_label}
|
#{authoring journal.created_at, journal.user, :label => header_label}
|
||||||
|
#{content_tag('a', '', :name => "note-#{journal.anchor}")}
|
||||||
</h4>
|
</h4>
|
||||||
HTML
|
HTML
|
||||||
|
|
||||||
|
header << render_notes(model, journal, options) unless journal.notes.blank?
|
||||||
|
|
||||||
if journal.details.any?
|
if journal.details.any?
|
||||||
details = content_tag "ul", :class => "details" do
|
details = content_tag "ul", :class => "journal-attributes details" do
|
||||||
journal.details.collect do |detail|
|
journal.details.collect do |detail|
|
||||||
if d = journal.render_detail(detail)
|
if d = journal.render_detail(detail)
|
||||||
content_tag("li", d)
|
content_tag("li", d)
|
||||||
|
@ -53,7 +63,7 @@ module JournalsHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
content_tag("div", "#{header}#{details}", :id => "change-#{journal.id}", :class => "journal")
|
content_tag "div", "#{header}#{details}", :class => "journal-details"
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_notes(model, journal, options={})
|
def render_notes(model, journal, options={})
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -84,11 +84,12 @@ module QueriesHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@query.group_by = params[:group_by]
|
@query.group_by = params[:group_by]
|
||||||
|
@query.display_subprojects = params[:display_subprojects] if params[:display_subprojects]
|
||||||
@query.column_names = params[:c] || (params[:query] && params[:query][:column_names])
|
@query.column_names = params[:c] || (params[:query] && params[:query][:column_names])
|
||||||
session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names}
|
session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names, :display_subprojects => @query.display_subprojects}
|
||||||
else
|
else
|
||||||
@query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
|
@query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
|
||||||
@query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters], :group_by => session[:query][:group_by], :column_names => session[:query][:column_names])
|
@query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters], :group_by => session[:query][:group_by], :column_names => session[:query][:column_names], :display_subprojects => session[:query][:display_subprojects])
|
||||||
@query.project = @project
|
@query.project = @project
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#-- copyright
|
#-- copyright
|
||||||
# ChiliProject is a project management system.
|
# ChiliProject is a project management system.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010-2012 the ChiliProject Team
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue