[Fusionforge-commits] r11725 - in trunk: . src src/common/include src/db src/debian src/plugins/cvstracker/db src/plugins/scmgit/common src/plugins/scmsvn/common src/www/admin src/www/my src/www/pm tests/func/Testing

Roland Mas lolando at libremir.placard.fr.eu.org
Wed Dec 8 18:42:23 CET 2010


Author: lolando
Date: 2010-12-08 18:42:23 +0100 (Wed, 08 Dec 2010)
New Revision: 11725

Added:
   trunk/src/common/include/DatabaseInstaller.class.php
Modified:
   trunk/
   trunk/src/common/include/Error.class.php
   trunk/src/common/include/Group.class.php
   trunk/src/common/include/Plugin.class.php
   trunk/src/db/upgrade-db.php
   trunk/src/debian/README.Debian.tmpl
   trunk/src/fusionforge.spec
   trunk/src/plugins/cvstracker/db/20050305.sql
   trunk/src/plugins/scmgit/common/GitPlugin.class.php
   trunk/src/plugins/scmsvn/common/SVNPlugin.class.php
   trunk/src/www/admin/pluginman.php
   trunk/src/www/my/dashboard.php
   trunk/src/www/pm/calendar.php
   trunk/tests/func/Testing/RPMSeleniumRemoteSuite.php
   trunk/tests/func/Testing/SeleniumGforge.php
   trunk/tests/func/Testing/TarSeleniumRemoteSuite.php
Log:
Merged from 5.1: improvements to pluginman, doc fixes, other minor changes


Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk:8721-8727
/branches/Branch_5_0:8892,8895,8897-8898,8900,8903-8904,8906-8907,8910,8915,8922,8924,8926,8929,8931-8933,8941,8946,8951,8955,8972-8977,8981,8997,8999,9002,9031-9032,9050,9080-9081,9084-9086,9093-9095,9102-9104,9108,9113-9115,9117-9118,9123,9125,9127-9131,9135-9136,9139,9146,9148-9150,9179-9191,9193-9195,9198,9200,9202,9204,9207,9209,9211,9213,9215,9220-9222,9231,9234-9235,9243,9251,9254,9259,9287,9315,9318,9347-9349,9358,9396,9427,9429,9431-9433,9441-9442,9444-9445,9462,9464,9468,9522-9523,9549,9551-9552,9576-9577,9579,9615,9633-9634,9672-9673,9675-9676,9684,9686-9687,9689,9699,9727,9729,9731,9930-9932,9935,9956,9980,10005-10006,10021,10024,10027,10064,10081-10082,10273,10285,10820-10824,10868,10872,10876-10878,10880,10918,11015,11017,11058-11060,11085-11086,11160-11165,11252-11253,11287,11294,11581,11619-11620,11679
/branches/Branch_4_8:7334-7335,7344-7345,7382,7387,7389-7390,7396,7398,7401-7402,7428-7429,7437,7440,7443,7449-7455,7459,7462,7466,7469-7470,7476-7478,7480,7485,7490-7492,7505,7540,7556-7560,7568,7570-7571,7573,7576,7580,7609-7611,7613,7615,7618,7621-7622,7625-7627,7639,7658,7661,7663-7664,7666-7667,7673,7675,7678,7680,7685,7688-7689,7693,7700,7706-7708,7713,7725,7728-7742,7760,7763-7764,7767,7769-7770,7773,7776,7784-7785,7791,7797,7799,7802-7808,7810-7811,7816,7818,7825-7828,7839,7846-7847,7850,7894,7902,7920-7922,7927-7928,7932,7936-7937,7939,7942,7944-7945,7947,7951,7956,7958,7960,8064,8079-8080,8108,8113,8119,8121,8127-8128,8145,8197,8201-8202,8216,8224,8226,8228,8247-8250,8252,8271-8272,8310-8311,8328,8337,8339-8357,8361,8371,8373-8375,8378-8379,8383-8396,8415,8427-8431,8438-8441,8449,8452-8453,8458,8461,8477-8478,8480,8482,8492,8514,8530,8604-8605,8608,8637,8662,8674,8751,8754,8756,8760-8761,8812,8850,8945,8995,8998,9004-9006,9124,9137,9141,9317,9443,9469,9670,9701,9726,9934,10013
/branches/Branch_5_1:11607-11609,11621,11625,11627,11631,11638,11644,11647-11651,11677,11680-11681,11683-11684
/branches/Branch_4_7:6879,6881,6884,6897,6899,6902,6904,6906,6909,6911,6922,6932,6936,6939,6942,6944,6946-6948,6954,6956,6959,7000-7001,7012,7111,7130-7131,7133-7134,7138,7140-7142,7147-7148,7159-7160,7163,7168,7177,7179,7203,7205,7207,7210,7212,7251-7253,7255,7284,7287,7291,7293,7295-7296,7300,7355,7365-7366,7375-7376,7378,7395,7423-7426,7435,7458,7504,7567,7577,7623-7624,7638,7659-7660,7662,7665,7668,7674,7699,7746-7748,7771,7774,7786,7838

   + /trunk:8721-8727
/branches/Branch_4_7:6879,6881,6884,6897,6899,6902,6904,6906,6909,6911,6922,6932,6936,6939,6942,6944,6946-6948,6954,6956,6959,7000-7001,7012,7111,7130-7131,7133-7134,7138,7140-7142,7147-7148,7159-7160,7163,7168,7177,7179,7203,7205,7207,7210,7212,7251-7253,7255,7284,7287,7291,7293,7295-7296,7300,7355,7365-7366,7375-7376,7378,7395,7423-7426,7435,7458,7504,7567,7577,7623-7624,7638,7659-7660,7662,7665,7668,7674,7699,7746-7748,7771,7774,7786,7838
/branches/Branch_5_1:11607-11609,11621,11625,11627,11631,11638,11644,11647-11651,11677,11680-11681,11683-11684,11719-11720,11724
/branches/Branch_4_8:7334-7335,7344-7345,7382,7387,7389-7390,7396,7398,7401-7402,7428-7429,7437,7440,7443,7449-7455,7459,7462,7466,7469-7470,7476-7478,7480,7485,7490-7492,7505,7540,7556-7560,7568,7570-7571,7573,7576,7580,7609-7611,7613,7615,7618,7621-7622,7625-7627,7639,7658,7661,7663-7664,7666-7667,7673,7675,7678,7680,7685,7688-7689,7693,7700,7706-7708,7713,7725,7728-7742,7760,7763-7764,7767,7769-7770,7773,7776,7784-7785,7791,7797,7799,7802-7808,7810-7811,7816,7818,7825-7828,7839,7846-7847,7850,7894,7902,7920-7922,7927-7928,7932,7936-7937,7939,7942,7944-7945,7947,7951,7956,7958,7960,8064,8079-8080,8108,8113,8119,8121,8127-8128,8145,8197,8201-8202,8216,8224,8226,8228,8247-8250,8252,8271-8272,8310-8311,8328,8337,8339-8357,8361,8371,8373-8375,8378-8379,8383-8396,8415,8427-8431,8438-8441,8449,8452-8453,8458,8461,8477-8478,8480,8482,8492,8514,8530,8604-8605,8608,8637,8662,8674,8751,8754,8756,8760-8761,8812,8850,8945,8995,8998,9004-9006,9124,9137,9141,9317,9443,9469,9670,9701,9726,9934,10013
/branches/Branch_5_0:8892,8895,8897-8898,8900,8903-8904,8906-8907,8910,8915,8922,8924,8926,8929,8931-8933,8941,8946,8951,8955,8972-8977,8981,8997,8999,9002,9031-9032,9050,9080-9081,9084-9086,9093-9095,9102-9104,9108,9113-9115,9117-9118,9123,9125,9127-9131,9135-9136,9139,9146,9148-9150,9179-9191,9193-9195,9198,9200,9202,9204,9207,9209,9211,9213,9215,9220-9222,9231,9234-9235,9243,9251,9254,9259,9287,9315,9318,9347-9349,9358,9396,9427,9429,9431-9433,9441-9442,9444-9445,9462,9464,9468,9522-9523,9549,9551-9552,9576-9577,9579,9615,9633-9634,9672-9673,9675-9676,9684,9686-9687,9689,9699,9727,9729,9731,9930-9932,9935,9956,9980,10005-10006,10021,10024,10027,10064,10081-10082,10273,10285,10820-10824,10868,10872,10876-10878,10880,10918,11015,11017,11058-11060,11085-11086,11160-11165,11252-11253,11287,11294,11581,11619-11620,11679,11722-11723

Modified: svk:merge
   - 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7001
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7012
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7291
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7458
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7623
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7624
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7786
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7838
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:10013
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7335
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7344
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7345
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7396
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7402
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7455
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7459
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7469
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7470
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7476
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7480
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7505
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7540
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7557
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7559
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7560
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7580
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7609
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7615
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7618
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7621
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7622
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7626
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7627
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7708
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7713
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7725
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7729
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7730
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7731
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7732
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7733
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7734
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7737
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7738
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7739
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7742
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7760
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7763
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7764
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7767
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7769
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7773
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7776
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7784
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7785
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7797
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7799
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7811
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7826
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7827
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7828
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7839
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7951
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7958
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7960
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8108
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8113
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8119
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8128
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8145
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8202
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8216
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8224
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8226
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8250
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8337
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8357
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8371
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8375
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8379
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8396
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8415
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8427
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8431
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8441
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8449
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8453
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8530
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8604
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8605
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8608
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8637
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8751
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8756
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8761
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:9141
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10006
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10021
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10064
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10082
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10824
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11017
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11060
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11165
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11253
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11294
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8895
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8898
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8900
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8941
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9115
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9118
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9131
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9136
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9139
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9150
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9188
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9195
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9198
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9202
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9207
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9209
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9213
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9243
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9254
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9358
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9396
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9427
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9433
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9549
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9552
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9579
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9634
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9675
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9676
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9729
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9731
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9932
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9980
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11621
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11627
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11631
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11638
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11651
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11684
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/trunk:8727

   + 9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7001
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7012
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7291
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7458
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7623
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7624
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7786
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_7:7838
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:10013
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7335
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7344
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7345
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7396
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7402
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7455
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7459
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7469
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7470
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7476
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7480
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7505
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7540
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7557
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7559
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7560
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7580
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7609
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7615
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7618
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7621
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7622
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7626
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7627
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7708
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7713
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7725
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7729
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7730
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7731
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7732
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7733
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7734
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7737
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7738
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7739
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7742
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7760
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7763
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7764
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7767
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7769
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7773
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7776
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7784
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7785
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7797
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7799
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7811
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7826
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7827
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7828
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7839
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7951
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7958
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:7960
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8108
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8113
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8119
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8128
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8145
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8202
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8216
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8224
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8226
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8250
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8337
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8357
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8371
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8375
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8379
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8396
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8415
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8427
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8431
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8441
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8449
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8453
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8530
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8604
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8605
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8608
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8637
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8751
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8756
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:8761
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_4_8:9141
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10006
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10021
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10064
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10082
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:10824
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11017
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11060
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11165
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11253
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:11294
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8895
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8898
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8900
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:8941
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9115
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9118
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9131
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9136
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9139
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9150
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9188
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9195
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9198
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9202
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9207
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9209
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9213
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9243
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9254
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9358
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9396
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9427
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9433
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9549
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9552
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9579
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9634
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9675
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9676
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9729
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9731
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9932
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_0:9980
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11621
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11627
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11631
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11638
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11651
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11684
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/branches/Branch_5_1:11724
9d84d37e-dcb1-4aad-b103-6f3d92f53bf6:/trunk:8727


Copied: trunk/src/common/include/DatabaseInstaller.class.php (from rev 11724, branches/Branch_5_1/src/common/include/DatabaseInstaller.class.php)
===================================================================
--- trunk/src/common/include/DatabaseInstaller.class.php	                        (rev 0)
+++ trunk/src/common/include/DatabaseInstaller.class.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -0,0 +1,128 @@
+<?php
+
+class DatabaseInstaller extends Error {
+	
+	function DatabaseInstaller($name='', $path='') {
+		$this->name = $name;
+		$this->path	= $path;	
+	}
+
+	function install() {
+		$name = $this->name;
+		$path = $this->path;
+
+		$init = "$path/$name-init.sql";
+		if (is_file($init)) {
+			$ret = $this->runScript($init);
+			if (!$ret) {
+				return false;
+			}
+			return $this->upgrade($name, $path);
+		}
+		return $this->setError(_('No database installation scripts found.'));
+	}
+	
+	function upgrade() {
+		$name = $this->name;
+		$path = $this->path;
+
+		if ($name) {
+			$prefix = $name.':';
+			$date   = -1;
+		} else {
+			$prefix = '';
+			$date   = $this->getDatabaseDate();
+		}
+
+		$scripts = $this->getScripts($path);
+		$output  = '';
+		foreach ($scripts as $script) {
+			if ((int) $script['date'] > $date) {
+				$res = db_query_params ('SELECT * FROM database_changes WHERE filename=$1',
+					array ($prefix.$script['filename'])) ;
+				if (!$res) {
+					return $this->setError("ERROR-2: ".db_error());
+				} else if (db_numrows($res) == 0) {
+					$output .= "Running script: {$script['filename']}\n";
+					$result = $this->runScript($path.'/'.$script['filename']);
+					if ($result) {
+						$res = db_query_params ('INSERT INTO database_changes (filename) VALUES ($1)',
+							array ($prefix.$script['filename'])) ;
+						if (!$res) {
+							return $this->setError("ERROR-3: ".db_error());
+						}
+					} else {
+						return false;
+					}
+				} else {
+//					$output .= "Skipping script: $prefix{$script['filename']}\n";
+				}
+			}
+		}
+		return $output;
+	}
+	
+	private static function getDatabaseDate() {
+		// Check if table 'database_startpoint' has proper values
+		$res = db_query_params ('SELECT * FROM database_startpoint', array()) ;
+		if (!$res) { // db error
+			return $this->setError("DB-ERROR-3: ".db_error()."\n");
+		} else if (db_numrows($res) == 0) { // table 'database_startpoint' is empty
+			return $this->setError("Table 'database_startpoint' is empty, run startpoint.php first.");
+		} else { // get the start date from the db
+			return (int) db_result($res, 0, 'db_start_date');
+		}
+		return false;
+	}
+
+	private function runScript($file) {
+		// If a condition statement if found, then run the script only if true.
+		$content = file($file);
+		if (preg_match('/^-- TRUE\? (.+)/', $content[0], $match)) {
+			$res = db_query_params($match[1], array());
+			if (db_result($res,0,0) == 'f') {
+				return true;
+			}
+		}
+		$res = db_query_from_file($file);
+		if ($res) {
+			while ($res) {
+				db_free_result($res);
+				$res = db_next_result();
+			}
+		} else {
+			return $this->setError(_('Database initialisation error:').' '.db_error());
+		}
+		return true;
+	}
+
+	private static function getScripts($dir) {
+		$data = array();
+		if (is_dir($dir)) {
+			if ($dh = opendir($dir)) {
+				while (($file = readdir($dh)) !== false) {
+					$pos = strrpos($file, '.');
+					if ($pos !== false && $pos > 0) {
+						$name = substr($file, 0, $pos);
+						if (strlen($name) >= 8) {
+							$date_aux = substr($name, 0, 8);
+							$type_aux = substr($file, $pos + 1);
+							if ((int) $date_aux > 20000000 && ($type_aux=='sql' || $type_aux=='php') 
+								&& strpos($file, 'debian') === false) {
+								$data[] = array('date'=>$date_aux, 'filename'=>$file, 'ext'=>$type_aux);
+							}
+						}
+					}
+				}
+				closedir($dh);
+			}
+			usort($data, array('DatabaseInstaller', 'compare_scripts'));
+			reset($data);
+		}
+		return $data;
+	}
+
+	private static function compare_scripts($script1, $script2) {
+		return strcmp($script1['filename'], $script2['filename']);
+	}
+}

Modified: trunk/src/common/include/Error.class.php
===================================================================
--- trunk/src/common/include/Error.class.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/common/include/Error.class.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -76,6 +76,7 @@
 		$this->error_state=true;
 		$this->error_message=$string;
 		$this->error_code=$code;
+		return false;
 	}
 
 	/**

Modified: trunk/src/common/include/Group.class.php
===================================================================
--- trunk/src/common/include/Group.class.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/common/include/Group.class.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -2172,7 +2172,7 @@
 	 *
 	 *	@return array of User objects for this group.
 	 */
-	function &getMembers() {
+	function getMembers() {
 		return $this->getUsers (true) ;
 	}
 

Modified: trunk/src/common/include/Plugin.class.php
===================================================================
--- trunk/src/common/include/Plugin.class.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/common/include/Plugin.class.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -147,7 +147,78 @@
 		$role =& $params['role'];
 	}
 
-	function groupisactivecheckbox(&$params) {
+	function install() {
+		$this->installCode();
+		$this->installConfig();
+		$this->installDatabase();
+	}
+
+	function installCode() {
+		$name = $this->name;
+		$path = forge_get_config('plugins_path') . '/' . $name;
+		$installdir = $this->getInstallDir();
+
+		// Create a symbolic links to plugins/<plugin>/www (if directory exists).
+		if (is_dir($path . '/www')) { // if the plugin has a www dir make a link to it
+			// The apache group or user should have write perms the www/plugins folder...
+			if (!is_link('../'.$installdir)) {
+				$code = symlink($path . '/www', '../'.$installdir);
+				if (!$code) {
+					$this->setError('['.'../'.$installdir.'->'.$path . '/www]'.
+						'<br />Soft link to www couldn\'t be created. Check the write permissions for apache in gforge www/plugins dir or create the link manually.');
+				}
+			}
+		}
+
+		// Create a symbolic links to plugins/<plugin>/etc/plugins/<plugin> (if directory exists).
+		if (is_dir($path . '/etc/plugins/' . $name)) {
+			// The apache group or user should have write perms in /etc/gforge/plugins folder...
+			if (!is_link(forge_get_config('config_path'). '/plugins/'.$name) && !is_dir(forge_get_config('config_path'). '/plugins/'.$name)) {
+				$code = symlink($path . '/etc/plugins/' . $name, forge_get_config('config_path'). '/plugins/'.$name);
+				if (!$code) {
+					$this->setError('['.forge_get_config('config_path'). '/plugins/'.$name.'->'.$path . '/etc/plugins/' . $name . ']'.
+					_('<br />Config file could not be linked to etc/gforge/plugins/%1$s. Check the write permissions for apache in /etc/gforge/plugins or create the link manually.'), $name);
+				}
+			}
+		}
+	}
+
+	function installConfig() {
+		$name = $this->name;
+		$path = forge_get_config('plugins_path') . '/' . $name;
+
+		// Create a symbolic links to plugins/<plugin>/etc/plugins/<plugin> (if directory exists).
+		if (is_dir($path . '/etc/plugins/' . $name)) {
+			// The apache group or user should have write perms in /etc/gforge/plugins folder...
+			if (!is_link(forge_get_config('config_path'). '/plugins/'.$name) && !is_dir(forge_get_config('config_path'). '/plugins/'.$name)) {
+				$code = symlink($path . '/etc/plugins/' . $name, forge_get_config('config_path'). '/plugins/'.$name);
+				if (!$code) {
+					$this->setError('['.forge_get_config('config_path'). '/plugins/'.$name.'->'.$path . '/etc/plugins/' . $name . ']'.
+					_('<br />Config file could not be linked to etc/gforge/plugins/%1$s. Check the write permissions for apache in /etc/gforge/plugins or create the link manually.'), $name);
+				}
+			}
+		}
+	}
+
+	function installDatabase() {
+		$name = $this->name;
+		$path = forge_get_config('plugins_path') . '/' . $name . '/db';
+
+		require_once $GLOBALS['gfcommon'].'include/DatabaseInstaller.class.php';
+		$di = new DatabaseInstaller($name, $path);
+
+		// Search for database tables, if present then upgrade.
+		$res=db_query_params ('SELECT COUNT(*) FROM pg_class WHERE (relname=$1 OR relname like $2) AND relkind=$3',
+			array ('plugin_'.$name, 'plugin_'.$name.'_%', 'r'));
+		$count = db_result($res,0,0);
+		if ($count == 0) {
+			$di->install();
+		} else {
+			$di->upgrade();
+		}
+	}
+
+	function groupisactivecheckbox (&$params) {
 		//Check if the group is active
 		// this code creates the checkbox in the project edit public info page to activate/deactivate the plugin
 		$display = 1;

Modified: trunk/src/db/upgrade-db.php
===================================================================
--- trunk/src/db/upgrade-db.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/db/upgrade-db.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -1,6 +1,10 @@
 #! /usr/bin/php
 <?php
 
+// upgrade-db.php          => Upgrade the main database.
+// upgrade-db.php all      => Upgrade the main database and active plugins.
+// upgrade-db.php <plugin> => Upgrade only the database of the given active plugin.
+
 require_once dirname(__FILE__).'/../www/env.inc.php';
 require_once $gfcommon.'include/pre.php';
 
@@ -72,37 +76,60 @@
 	exit();
 }
 
-$scripts = get_scripts($db_path);
-
-foreach ($scripts as $script) {
-	if ((int) $script['date'] > $date) {
-		$res = db_query_params ('SELECT * FROM database_changes WHERE filename=$1',
-					array ("{$script['filename']}")) ;
-		if (!$res) {
-			// error
-			show("ERROR-2: ".db_error()."\n");
-			exit();
-		} else if (db_numrows($res) == 0) {
-			show("Running script: {$script['filename']}\n");
-			$result = run_script($script);
-			if ($result) {
-				$res = db_query_params ('INSERT INTO database_changes (filename) VALUES ($1)',
-							array ("{$script['filename']}")) ;
-				if (!$res)
-				{
-					show("ERROR-3: ".db_error()."\n");
+// Upgrade main database if no argument or if all)
+if ($argc == 1 || $argv[1] == 'all') {
+	$scripts = get_scripts($db_path);
+	foreach ($scripts as $script) {
+		if ((int) $script['date'] > $date) {
+			$res = db_query_params ('SELECT * FROM database_changes WHERE filename=$1',
+						array ("{$script['filename']}")) ;
+			if (!$res) {
+				// error
+				show("ERROR-2: ".db_error()."\n");
+				exit();
+			} else if (db_numrows($res) == 0) {
+				show("Running script: {$script['filename']}\n");
+				$result = run_script($script);
+				if ($result) {
+					$res = db_query_params ('INSERT INTO database_changes (filename) VALUES ($1)',
+								array ("{$script['filename']}")) ;
+					if (!$res)
+					{
+						show("ERROR-3: ".db_error()."\n");
+						exit();
+					}
+				} else {
+					// error
 					exit();
 				}
 			} else {
-				// error
-				exit();
+	//			show("Skipping script: {$script['filename']}\n");
 			}
-		} else {	
-			show("Skipping script: {$script['filename']}\n");
 		}
 	}
 }
 
+// Upgrade activated plugins.
+if ($argc == 2) {
+	require_once $gfcommon.'include/DatabaseInstaller.class.php';
+	$plugins = get_installed_plugins();
+	foreach ($plugins as $plugin) {
+		if ($argv[1] == 'all' || $argv[1] == $plugin) {
+			$di = new DatabaseInstaller($plugin, dirname($db_path) . '/plugins/' . $plugin . '/db');
+			echo $di->upgrade();
+		}
+	}
+}
+
+function get_installed_plugins() {
+	$plugins = array();
+	$res = db_query_params ('SELECT plugin_name FROM plugins', array ());
+	while ($row = db_fetch_array($res)) {
+		$plugins[] = $row['plugin_name'];
+	}
+	return $plugins;
+}
+
 function get_scripts($dir) {
 	$data = array();
 	if (is_dir($dir)) {

Modified: trunk/src/debian/README.Debian.tmpl
===================================================================
--- trunk/src/debian/README.Debian.tmpl	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/debian/README.Debian.tmpl	2010-12-08 17:42:23 UTC (rev 11725)
@@ -4,7 +4,7 @@
 @FORGENAME@ is packaged for Debian, and was formerly packaged under
 the 'gforge' source package name. Even though a transition is in
 progress towards renaming it widely, only high-level meta-packages are
-named with the '@FORGENAME@' prefix. The rest of the packages are
+named with the '@PACKAGE@' prefix. The rest of the packages are
 still named with the 'gforge-' prefix, so expect most paths and
 filenames to still be named in relation to 'gforge'.
 
@@ -27,6 +27,8 @@
 
 Note on documentation
 ---------------------
+See contents of /usr/share/doc/@OLDPACKAGE at -common/ first.
+
 Although a few documentation files from upstream are included, they
 are either very out of date or practically useless.  I mostly include
 them for completeness's sake (and per request, too).  The files I'm
@@ -91,7 +93,7 @@
 Should these settings not suit you, it is possible to change
 configuration options by :
 
- 1. modifying /etc/@FORGENAME@/@FORGENAME at .conf which contains the
+ 1. modifying /etc/@PACKAGE@/@PACKAGE at .conf which contains the
     basic settings
  ( 2. Optional : copy some template files from
      /usr/share/gforge/etc/local.d/ to /etc/gforge/local.d/ (TO BE
@@ -99,9 +101,9 @@
  3. regenerate the runtime config files by issueing :
       # fusionforge-config
 
-Customizations in /etc/@FORGENAME@/@FORGENAME at .conf may include :
+Customizations in /etc/@PACKAGE@/@PACKAGE at .conf may include :
  - switching to HTTPS with 'sys_use_ssl=true',
- - setting a custom URL prefix with 'sys_urlprefix=/@FORGENAME@/' for
+ - setting a custom URL prefix with 'sys_urlprefix=/@PACKAGE@/' for
    instance, 
  etc.
 

Modified: trunk/src/fusionforge.spec
===================================================================
--- trunk/src/fusionforge.spec	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/fusionforge.spec	2010-12-08 17:42:23 UTC (rev 11725)
@@ -423,7 +423,7 @@
 ### Plugin setup ###
 %{__cp} $RPM_BUILD_ROOT%{FORGE_DIR}/plugins/*/etc/*.ini $RPM_BUILD_ROOT%{FORGE_CONF_DIR}/config.ini.d/
 %{__cp} $RPM_BUILD_ROOT%{FORGE_DIR}/plugins/*/etc/cron.d/* $RPM_BUILD_ROOT%{_sysconfdir}/cron.d/
-%{__cp} $RPM_BUILD_ROOT%{FORGE_DIR}/plugins/*/etc/httpd.d/* $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/
+%{__cp} $RPM_BUILD_ROOT%{FORGE_DIR}/plugins/*/etc/httpd.d/* $RPM_BUILD_ROOT%{FORGE_CONF_DIR}/httpd.d/
 %{__cp} -rp $RPM_BUILD_ROOT%{FORGE_DIR}/plugins/*/etc/plugins/* $RPM_BUILD_ROOT%{FORGE_CONF_DIR}/plugins/
 %{__rm} -f $RPM_BUILD_ROOT%{FORGE_DIR}/plugins/README
 
@@ -762,7 +762,7 @@
 
 %files plugin-hudson
 %config(noreplace) %{FORGE_CONF_DIR}/plugins/hudson/
-%{_sysconfdir}/httpd/conf.d/62plugin-hudson
+%{FORGE_CONF_DIR}/httpd.d/62plugin-hudson
 %{FORGE_DIR}/plugins/hudson
 %{FORGE_DIR}/www/plugins/hudson
 
@@ -779,7 +779,7 @@
 %files plugin-mediawiki
 %config(noreplace) %{FORGE_CONF_DIR}/config.ini.d/mediawiki.ini
 %config(noreplace) %{FORGE_CONF_DIR}/httpd.d/03mediawiki.conf
-%{_sysconfdir}/httpd/conf.d/61plugin-mediawiki
+%{FORGE_CONF_DIR}/httpd.d/61plugin-mediawiki
 %{FORGE_DIR}/plugins/mediawiki/
 %{FORGE_DIR}/www/plugins/mediawiki
 /usr/share/mediawiki/skins/gforge
@@ -792,7 +792,7 @@
 
 %files plugin-oslc
 %config(noreplace) %{FORGE_CONF_DIR}/plugins/oslc/
-%{_sysconfdir}/httpd/conf.d/plugin-oslc.inc
+%{FORGE_CONF_DIR}/httpd.d/plugin-oslc.inc
 %{FORGE_DIR}/plugins/oslc
 %{FORGE_DIR}/www/plugins/oslc
 
@@ -822,6 +822,7 @@
 %files plugin-scmgit
 %config(noreplace) %{FORGE_CONF_DIR}/plugins/scmgit/
 %config(noreplace) %{FORGE_CONF_DIR}/config.ini.d/scmgit.ini
+%{FORGE_CONF_DIR}/httpd.d/plugin-scmgit.conf
 %{FORGE_DIR}/plugins/scmgit
 %{FORGE_DIR}/www/plugins/scmgit
 
@@ -839,8 +840,8 @@
 %config(noreplace) %{FORGE_CONF_DIR}/plugins/scmcvs/
 %config(noreplace) %{FORGE_CONF_DIR}/config.ini.d/scmcvs.ini
 %{_sysconfdir}/cron.d/%{name}-plugin-scmcvs
-%{_sysconfdir}/httpd/conf.d/30virtualcvs
-%{_sysconfdir}/httpd/conf.d/31virtualcvs.ssl
+%{FORGE_CONF_DIR}/httpd.d/30virtualcvs
+%{FORGE_CONF_DIR}/httpd.d/31virtualcvs.ssl
 %{FORGE_DIR}/plugins/scmcvs
 %{FORGE_DIR}/www/plugins/scmcvs
 %{FORGE_VAR_LIB}/chroot/scmrepos/cvs
@@ -874,7 +875,7 @@
 %files plugin-wiki
 %config(noreplace) %{FORGE_CONF_DIR}/plugins/wiki/
 %{_sysconfdir}/cron.d/cron.wiki
-%{_sysconfdir}/httpd/conf.d/03wiki.conf
+%{FORGE_CONF_DIR}/httpd.d/03wiki.conf
 %{FORGE_DIR}/plugins/wiki
 %{FORGE_DIR}/www/wiki
 
@@ -892,11 +893,11 @@
 
 %files plugin-mailman
 %config(noreplace) %{FORGE_CONF_DIR}/plugins/mailman/
-%{_sysconfdir}/httpd/conf.d/62plugin-list-mailman
-%{_sysconfdir}/httpd/conf.d/200list.vhost
-%{_sysconfdir}/httpd/conf.d/20list
-%{_sysconfdir}/httpd/conf.d/20zlist.vhost
-%{_sysconfdir}/httpd/conf.d/21list.vhost.ssl
+%{FORGE_CONF_DIR}/httpd.d/62plugin-list-mailman
+%{FORGE_CONF_DIR}/httpd.d/200list.vhost
+%{FORGE_CONF_DIR}/httpd.d/20list
+%{FORGE_CONF_DIR}/httpd.d/20zlist.vhost
+%{FORGE_CONF_DIR}/httpd.d/21list.vhost.ssl
 %{FORGE_DIR}/plugins/mailman
 %{FORGE_DIR}/www/plugins/mailman
 

Modified: trunk/src/plugins/cvstracker/db/20050305.sql
===================================================================
--- trunk/src/plugins/cvstracker/db/20050305.sql	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/plugins/cvstracker/db/20050305.sql	2010-12-08 17:42:23 UTC (rev 11725)
@@ -1,3 +1,5 @@
+-- TRUE? SELECT data_type = 'date' FROM information_schema.columns WHERE table_name = 'plugin_cvstracker_data_master' AND column_name='cvs_date';
+
 DROP INDEX plugin_cvstracker_group_artifact_id;
 
 ALTER TABLE plugin_cvstracker_data_master ADD COLUMN cvs_date2 int4;
@@ -11,4 +13,4 @@
 CREATE INDEX plugincvstrackerdataartifact_projecttaskid ON plugin_cvstracker_data_artifact(project_task_id);
 
 CREATE INDEX plugincvstrackerdatamaster_holderid ON plugin_cvstracker_data_master(holder_id);
-CREATE INDEX plugincvstrackerdatamaster_cvsdate ON plugin_cvstracker_data_master(cvs_date);
\ No newline at end of file
+CREATE INDEX plugincvstrackerdatamaster_cvsdate ON plugin_cvstracker_data_master(cvs_date);

Modified: trunk/src/plugins/scmgit/common/GitPlugin.class.php
===================================================================
--- trunk/src/plugins/scmgit/common/GitPlugin.class.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/plugins/scmgit/common/GitPlugin.class.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -27,14 +27,13 @@
 
 class GitPlugin extends SCMPlugin {
 	function GitPlugin () {
-		global $gfconfig;
 		$this->SCMPlugin () ;
 		$this->name = 'scmgit';
 		$this->text = 'Git';
+		$this->hooks[] = 'scm_browser_page';
 		$this->hooks[] = 'scm_update_repolist' ;
-		$this->hooks[] = 'scm_browser_page' ;
+		$this->hooks[] = 'scm_generate_snapshots' ;
 		$this->hooks[] = 'scm_gather_stats' ;
-		$this->hooks[] = 'scm_generate_snapshots' ;
 
 		$this->register () ;
 	}
@@ -69,12 +68,11 @@
 	}
 
 	function getInstructionsForAnon ($project) {
-		$b = '<h2>';
-		$b .= _('Anonymous Git Access');
-		$b .= '</h2>';
+		$b = '<h2>' . _('Anonymous Git Access') . '</h2>';
 		$b .= '<p>';
 		$b .= _('This project\'s Git repository can be checked out through anonymous access with the following command.');
 		$b .= '</p>';
+
 		$b .= '<p>' ;
 		$b .= '<tt>git clone '.util_make_url ('/anonscm/git/'.$project->getUnixName().'/'.$project->getUnixName().'.git').'</tt><br />';
 		$b .= '</p>';
@@ -258,6 +256,7 @@
 
 // 		return $b ;
 // 	}
+
 	function getStatsBlock ($project) {
 		return ;
 	}
@@ -267,7 +266,7 @@
 		if (!$project) {
 			return false ;
 		}
-				
+
 		if (! $project->usesPlugin ($this->name)) {
 			return false;
 		}
@@ -403,55 +402,6 @@
                 return $list;
         }
 
-	function generateSnapshots ($params) {
-
-
-		$project = $this->checkParams ($params) ;
-		if (!$project) {
-			return false ;
-		}
-		
-		$group_name = $project->getUnixName() ;
-
-		$snapshot = forge_get_config('scm_snapshots_path').'/'.$group_name.'-scm-latest.tar.gz';
-		$tarball = forge_get_config('scm_tarballs_path').'/'.$group_name.'-scmroot.tar.gz';
-
-		if (! $project->usesPlugin ($this->name)) {
-			return false;
-		}
-
-		if (! $project->enableAnonSCM()) {
-			unlink ($tarball) ;
-			return false;
-		}
-
-                // TODO: ideally we generate one snapshot per git repository
-		$toprepo = forge_get_config('repos_path', 'scmgit') ;
-		$repo = $toprepo . '/' . $project->getUnixName() . '/' .  $project->getUnixName() . '.git' ;
-
-		if (!is_dir ($repo)) {
-			unlink ($tarball) ;
-			return false ;
-		}
-
-		$today = date ('Y-m-d') ;
-		$tmp = trim (`mktemp -d`) ;
-		if ($tmp == '') {
-			return false ;
-		}
-
-		system ("GIT_DIR=\"$repo\" git archive --format=tar --prefix=$group_name-scm-$today/ HEAD | gzip > $tmp/snapshot.tar.gz");
-		chmod ("$tmp/snapshot.tar.gz", 0644) ;
-		copy ("$tmp/snapshot.tar.gz", $snapshot) ;
-		unlink ("$tmp/snapshot.tar.gz") ;
-
-		system ("tar czCf $toprepo $tmp/tarball.tar.gz " . $project->getUnixName()) ;
-		chmod ("$tmp/tarball.tar.gz", 0644) ;
-		copy ("$tmp/tarball.tar.gz", $tarball) ;
-		unlink ("$tmp/tarball.tar.gz") ;
-		system ("rm -rf $tmp") ;
-	}
-
 	function gatherStats ($params) {
 		global $last_user, $usr_adds, $usr_deletes,
 		$usr_updates, $updates, $adds;
@@ -553,7 +503,7 @@
 				} else {
 					continue;
 				}
-					
+
 				$uu = $usr_updates[$user] ? $usr_updates[$user] : 0 ;
 				$ua = $usr_adds[$user] ? $usr_adds[$user] : 0 ;
 				if ($uu > 0 || $ua > 0) {
@@ -573,8 +523,65 @@
 		}
 		db_commit();
 	}
-  }
 
+	function generateSnapshots ($params) {
+
+		$project = $this->checkParams ($params) ;
+		if (!$project) {
+			return false ;
+		}
+
+		$group_name = $project->getUnixName() ;
+
+		$snapshot = forge_get_config('scm_snapshots_path').'/'.$group_name.'-scm-latest.tar.gz';
+		$tarball = forge_get_config('scm_tarballs_path').'/'.$group_name.'-scmroot.tar.gz';
+
+		if (! $project->usesPlugin ($this->name)) {
+			return false;
+		}
+
+		if (! $project->enableAnonSCM()) {
+			if (is_file($snapshot)) {
+				unlink ($snapshot) ;
+			}
+			if (is_file($tarball)) {
+				unlink ($tarball) ;
+			}
+			return false;
+		}
+
+		// TODO: ideally we generate one snapshot per git repository
+		$toprepo = forge_get_config('repos_path', 'scmgit') ;
+		$repo = $toprepo . '/' . $project->getUnixName() . '/' .  $project->getUnixName() . '.git' ;
+
+		if (!is_dir ($repo)) {
+			if (is_file($snapshot)) {
+				unlink ($snapshot) ;
+			}
+			if (is_file($tarball)) {
+				unlink ($tarball) ;
+			}
+			return false ;
+		}
+
+		$tmp = trim (`mktemp -d`) ;
+		if ($tmp == '') {
+			return false ;
+		}
+		$today = date ('Y-m-d') ;
+		system ("GIT_DIR=\"$repo\" git archive --format=tar --prefix=$group_name-scm-$today/ HEAD | gzip > $tmp/snapshot.tar.gz");
+		chmod ("$tmp/snapshot.tar.gz", 0644) ;
+		copy ("$tmp/snapshot.tar.gz", $snapshot) ;
+		unlink ("$tmp/snapshot.tar.gz") ;
+
+		system ("tar czCf $toprepo $tmp/tarball.tar.gz " . $project->getUnixName()) ;
+		chmod ("$tmp/tarball.tar.gz", 0644) ;
+		copy ("$tmp/tarball.tar.gz", $tarball) ;
+		unlink ("$tmp/tarball.tar.gz") ;
+		system ("rm -rf $tmp") ;
+	}
+}
+
 // Local Variables:
 // mode: php
 // c-file-style: "bsd"

Modified: trunk/src/plugins/scmsvn/common/SVNPlugin.class.php
===================================================================
--- trunk/src/plugins/scmsvn/common/SVNPlugin.class.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/plugins/scmsvn/common/SVNPlugin.class.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -49,7 +49,7 @@
 
 		$this->register () ;
 	}
-	
+
 	function getDefaultServer() {
 		return forge_get_config('default_server', 'scmsvn') ;
 	}
@@ -80,7 +80,7 @@
 	}
 
 	function getInstructionsForAnon ($project) {
-		$b = '<h2>' . _("Anonymous Subversion Access") . '</h2>';
+		$b = '<h2>' . _('Anonymous Subversion Access') . '</h2>';
 		$b .= '<p>';
 		$b .= _("This project's SVN repository can be checked out through anonymous access with the following command(s).");
 		$b .= '</p>';
@@ -338,9 +338,9 @@
 			$start_time = gmmktime( 0, 0, 0, $month, $day, $year);
 			$end_time = $start_time + 86400;
 
+			$adds    = 0 ;
 			$updates = 0 ;
-			$adds = 0 ;
-			$usr_adds = array () ;
+			$usr_adds    = array () ;
 			$usr_updates = array () ;
 
 			$repo = forge_get_config('repos_path', 'scmsvn') . '/' . $project->getUnixName() ;
@@ -423,7 +423,7 @@
 				} else {
 					continue;
 				}
-		
+
 				$uu = $usr_updates[$user] ? $usr_updates[$user] : 0 ;
 				$ua = $usr_adds[$user] ? $usr_adds[$user] : 0 ;
 				if ($uu > 0 || $ua > 0) {
@@ -446,8 +446,6 @@
 
 	function generateSnapshots ($params) {
 
-
-
 		$project = $this->checkParams ($params) ;
 		if (!$project) {
 			return false ;

Modified: trunk/src/www/admin/pluginman.php
===================================================================
--- trunk/src/www/admin/pluginman.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/src/www/admin/pluginman.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -36,26 +36,23 @@
 	$pluginname = getStringFromRequest('update');
 	
 	if ((getStringFromRequest('action')=='deactivate')) {
-		if (getStringFromRequest('delusers')) {
 
-			$res = db_query_params ('DELETE FROM user_plugin WHERE plugin_id = (SELECT plugin_id FROM plugins WHERE plugin_name = $1)',
+		$res = db_query_params ('DELETE FROM user_plugin WHERE plugin_id = (SELECT plugin_id FROM plugins WHERE plugin_name = $1)',
 			array($pluginname));
-			if (!$res) {
-				exit_error(db_error(),'admin');
-			} else {
-				$feedback .= sprintf(ngettext('%d user detached from plugin.', '%d users detached from plugin.', db_affected_rows($res)), db_affected_rows($res));
-			}
+		if (!$res) {
+			exit_error(db_error(),'admin');
+		} else {
+			$feedback .= sprintf(ngettext('%d user detached from plugin.', '%d users detached from plugin.', db_affected_rows($res)), db_affected_rows($res));
 		}
-		if (getStringFromRequest('delgroups')) {
 
-			$res = db_query_params ('DELETE FROM group_plugin WHERE plugin_id = (SELECT plugin_id FROM plugins WHERE plugin_name = $1)',
+		$res = db_query_params ('DELETE FROM group_plugin WHERE plugin_id = (SELECT plugin_id FROM plugins WHERE plugin_name = $1)',
 			array($pluginname));
-			if (!$res) {
-				exit_error(db_error(),'admin');
-			} else {
-				$feedback .= sprintf(ngettext('%d project detached from plugin.', '%d projects detached from plugin.', db_affected_rows($res)), db_affected_rows($res));
-			}
+		if (!$res) {
+			exit_error(db_error(),'admin');
+		} else {
+			$feedback .= sprintf(ngettext('%d project detached from plugin.', '%d projects detached from plugin.', db_affected_rows($res)), db_affected_rows($res));
 		}
+
 		$res = $pm->deactivate($pluginname);
 		if (!$res) {
 			exit_error(db_error(),'admin');
@@ -98,60 +95,11 @@
 			// Load the plugin and now get information from it.
 			$pm = plugin_manager_get_object();
 			$pm->LoadPlugin($pluginname);
-			$plugin = $pm->GetPluginObject($pluginname);
-			$installdir = $plugin->getInstallDir();
 
-			// Create a symbolic links to plugins/<plugin>/www (if directory exists).
-			if (is_dir(forge_get_config('plugins_path') . '/' . $pluginname . '/www')) { // if the plugin has a www dir make a link to it
-				// The apache group or user should have write perms the www/plugins folder...
-				if (!is_link('../'.$installdir)) {
-					$code = symlink(forge_get_config('plugins_path') . '/' . $pluginname . '/www', '../'.$installdir); 
-					if (!$code) {
-						$error_msg .= '<br />['.'../'.$installdir.'->'.forge_get_config('plugins_path') . '/' . $pluginname . '/www]';
-						$error_msg .= _('<br />Soft link to www couldn\'t be created. Check the write permissions for apache in gforge www/plugins dir or create the link manually.');
-					}
-				}
-			}
-
-			// Create a symbolic links to plugins/<plugin>/etc/plugins/<plugin> (if directory exists).
-			if (is_dir(forge_get_config('plugins_path') . '/' . $pluginname . '/etc/plugins/' . $pluginname)) {
-				// The apache group or user should have write perms in /etc/gforge/plugins folder...
-				if (!is_link(forge_get_config('config_path'). '/plugins/'.$pluginname) && !is_dir(forge_get_config('config_path'). '/plugins/'.$pluginname)) {
-					$code = symlink(forge_get_config('plugins_path') . '/' . $pluginname . '/etc/plugins/' . $pluginname, forge_get_config('config_path'). '/plugins/'.$pluginname); 
-					if (!$code) {
-						$error_msg .= '<br />['.forge_get_config('config_path'). '/plugins/'.$pluginname.'->'.forge_get_config('plugins_path') . '/' . $pluginname . '/etc/plugins/' . $pluginname . ']';
-						$error_msg .= sprintf(_('<br />Config file could not be linked to etc/gforge/plugins/%1$s. Check the write permissions for apache in /etc/gforge/plugins or create the link manually.'), $pluginname);
-					}
-				}
-			}
-
-			if (getStringFromRequest('init')) {
-				// now we're going to check if there's a XX-init.sql file and run it
-				$db_init = forge_get_config('plugins_path') . '/' . $pluginname . '/db/' . $pluginname . '-init-pgsql.sql';
-				if (!is_file($db_init)) {
-					$db_init = forge_get_config('plugins_path') . '/' . $pluginname . '/db/' . $pluginname . '-init.sql';
-					if (!is_file($db_init)) {
-						$db_init = 0;
-					}
-				}
-
-				if ($db_init) {
-					$res = db_query_from_file($db_init);
-					
-					if ($res) {
-						while ($res) {
-							db_free_result($res);
-							$res = db_next_result();
-						}
-					} else {
-						$error_msg .= _('Initialisation error<br />Database said: ').db_error();
-					}
-				}
-				//we check for a php script
-				if (is_file(forge_get_config('plugins_path') . '/' . $pluginname . '/script/' . $pluginname . '-init.php')) {
-					include(forge_get_config('plugins_path') . '/' . $pluginname . '/script/' . $pluginname . '-init.php');
-				}
-			}
+			$plugin = $pm->GetPluginObject($pluginname);
+			$plugin->installCode();
+			$plugin->installConfig();
+			$plugin->installDatabase();
 		}
 	}
 }
@@ -160,32 +108,16 @@
 echo '<h1>' . _('Plugin Manager') . '</h1>';
 
 ?>
-<script type="text/javascript">
-<!--
-	function change(url,plugin)
-	{
-		field = document.theform.elements[plugin];
-		if (field.checked) {
-			window.location=(url + "&init=yes");
-		} else {
-			window.location=(url);
-		}
-	}
-
-// -->
-</script>
-
 <form name="theform" action="<?php echo getStringFromServer('PHP_SELF'); ?>" method="get">
 <?php
 echo '<p>';
 echo _('Here you can activate / deactivate site-wide plugins which are in the plugins/ folder. Then, you should activate them also per project, per user or whatever the plugin specifically applies to.');
 echo '</p>';
 echo '<p class="important">' . _('Be careful because some projects/users can be using the plugin. Deactivating it will remove the plugin from all users/projects.') . '</p>';
-echo '<p class="important">' . _('Be EXTRA careful running the SQL init script when a plugin has been deactivated prior use (and you want to re-activate) because some scripts have DROP TABLE statements.') . '</p>';
+
 $title_arr = array( _('Plugin Name'),
 		    _('Status'),
 		    _('Action'),
-		    _('Run Init Script?'),
 		    _('Users Using it'),
 		    _('Projects Using it'),);
 echo $HTML->listTableTop($title_arr);
@@ -206,7 +138,6 @@
 //get the directories from the plugins dir
 
 $filelist = array();
-$has_init = array();
 if($handle = opendir(forge_get_config('plugins_path'))) {
 	while (($filename = readdir($handle)) !== false) {
 		if ($filename != '..' && $filename != '.' && $filename != ".svn" && $filename != "CVS" &&
@@ -236,7 +167,6 @@
 			}
 			if ($addPlugin) {
 				$filelist[] = $filename;
-				$has_init[$filename] = is_dir(forge_get_config('plugins_path').'/'.$filename.'/db');
 			}
 		}
 	}
@@ -247,25 +177,22 @@
 $j = 0;
 
 foreach ($filelist as $filename) {
-	$init = '<input type="hidden" id="'.$filename.'" name="script[]" value="'.$filename.'" />';
 	if ($pm->PluginIsInstalled($filename)) {
 		$msg = _('Active');
-		$status="active";
-		$link = "<a href=\"javascript:change('" . getStringFromServer('PHP_SELF') . "?update=$filename&amp;action=deactivate";
+		$status = "active";
+		$link = util_make_link("/admin/pluginman.php?update=$filename&amp;action=deactivate", _('Deactivate'));
 
-		$res = db_query_params ('SELECT  u.user_name FROM plugins p, user_plugin up, users u WHERE p.plugin_name = $1 and up.user_id = u.user_id and p.plugin_id = up.plugin_id',
+		$res = db_query_params ('SELECT u.user_name FROM plugins p, user_plugin up, users u WHERE p.plugin_name = $1 and up.user_id = u.user_id and p.plugin_id = up.plugin_id',
 			array($filename));
 		if ($res) {
 			if (db_numrows($res)>0) {
-				// tell the form to delete the users, so that we don't re-do the query
-				$link .= "&amp;delusers=1";
 				$users = " ";
 				for($i=0;$i<db_numrows($res);$i++) {
 					$users .= db_result($res,$i,0) . " | ";
 				}
 				$users = substr($users,0,strlen($users) - 3); //remove the last |
 			} else {
-				$users = _("none");
+				$users = _('None');
 			}
 		}
 
@@ -273,30 +200,21 @@
 			array($filename));
 		if ($res) {
 			if (db_numrows($res)>0) {
-				// tell the form to delete the groups, so that we don't re-do the query
-				$link .= "&amp;delgroups=1";
 				$groups = " ";
 				for($i=0;$i<db_numrows($res);$i++) {
 					$groups .= db_result($res,$i,0) . " | ";
 				}
 				$groups = substr($groups,0,strlen($groups) - 3); //remove the last |
 			} else {
-				$groups = _("none");
+				$groups = _('None');
 			}
 		}
-		$link .= "','$filename');" . '">' . _('Deactivate') . "</a>";
-		if ($has_init[$filename]) {
-			$init = '<input id="'.$filename.'" type="checkbox" disabled="disabled" name="script[]" value="'.$filename.'" />';
-		}
 	} else {
 		$msg = _('Inactive');
 		$status = "inactive";
-		$link = "<a href=\"javascript:change('" . getStringFromServer('PHP_SELF') . "?update=$filename&amp;action=activate','$filename');" . '">' . _('Activate') . "</a>";
-		if ($has_init[$filename]) {
-			$init = '<input id="'.$filename.'" type="checkbox" name="script[]" value="'.$filename.'" />';
-		}
-		$users = _("none");
-		$groups = _("none");
+		$link = util_make_link("/admin/pluginman.php?update=$filename&amp;action=activate", _('Activate'));
+		$users = _('None');
+		$groups = _('None');
 	}
 
 	$title = _('Current plugin status:'). ' ' .forge_get_config('plugin_status', $filename);
@@ -304,7 +222,6 @@
 		'<td title="'. $title .'" >'. $filename.'</td>'.
 		'<td class="'.$status.'" style="text-align:center">'. $msg .'</td>'.
 		'<td style="text-align:center;">'. $link .'</td>'.
-		'<td style="text-align:center;">'. $init .'</td>'.
 		'<td style="text-align:left;">'. $users .'</td>'.
 		'<td style="text-align:left;">'. $groups .'</td></tr>'."\n";
 

Modified: trunk/tests/func/Testing/RPMSeleniumRemoteSuite.php
===================================================================
--- trunk/tests/func/Testing/RPMSeleniumRemoteSuite.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/tests/func/Testing/RPMSeleniumRemoteSuite.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -31,6 +31,8 @@
 
 		// Install a fake sendmail to catch all outgoing emails.
 		system("ssh root@".HOST." 'perl -spi -e s#/usr/sbin/sendmail#/usr/share/tests/scripts/catch_mail.php# /etc/gforge/local.inc'");
+
+		system("ssh root@".HOST." 'service crond stop'");
 	}
 }
 ?>

Modified: trunk/tests/func/Testing/SeleniumGforge.php
===================================================================
--- trunk/tests/func/Testing/SeleniumGforge.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/tests/func/Testing/SeleniumGforge.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -203,16 +203,11 @@
 	}
 
 	protected function activatePlugin($pluginName) {
+		$this->switchUser('admin');
 		$this->open( ROOT . '/admin/pluginman.php?update='.$pluginName.'&action=deactivate');
 		$this->waitForPageToLoad("30000");
-		$this->open( ROOT );
+		$this->open( ROOT . '/admin/pluginman.php?update='.$pluginName.'&action=activate');
 		$this->waitForPageToLoad("30000");
-		$this->login('admin');
-		$this->clickAndWait("link=Site Admin");
-		$this->clickAndWait("link=Plugin Manager");
-		$this->click($pluginName);
-		$this->click("//a[contains(@href, \"javascript:change('".ROOT."/admin/pluginman.php?update=$pluginName&action=activate','$pluginName');\")]");
-		$this->waitForPageToLoad("30000");
 		$this->logout();
 	}
 

Modified: trunk/tests/func/Testing/TarSeleniumRemoteSuite.php
===================================================================
--- trunk/tests/func/Testing/TarSeleniumRemoteSuite.php	2010-12-08 17:23:10 UTC (rev 11724)
+++ trunk/tests/func/Testing/TarSeleniumRemoteSuite.php	2010-12-08 17:42:23 UTC (rev 11725)
@@ -27,6 +27,8 @@
 
 		// Install a fake sendmail to catch all outgoing emails.
 		system("ssh root@".HOST." 'perl -spi -e s#/usr/sbin/sendmail#/opt/tests/scripts/catch_mail.php# /etc/gforge/local.inc'");
+
+		system("ssh root@".HOST." 'service crond stop'");
 	}
 }
 ?>




More information about the Fusionforge-commits mailing list