From 155cf6aeea9ba7ecbc39face6442d3ce1b03ad8e Mon Sep 17 00:00:00 2001 From: Nils Schwabe Date: Wed, 4 Jun 2014 14:27:03 +0200 Subject: Add webinterface with functionallity --- management-interface/api/.htaccess | 1 + management-interface/api/models/.htaccess | 1 + management-interface/api/models/Home.php | 21 + management-interface/api/models/Master.php | 54 +- management-interface/api/models/Satellites.php | 203 ++ management-interface/api/models/Template.php | 13 + management-interface/api/models/Users.php | 22 + management-interface/asserts/public_ftp.cer | 14 + management-interface/asserts/tool.tar.gz | Bin 0 -> 1009152 bytes management-interface/composer.json | 15 - management-interface/config/global.cfg | 1 + management-interface/config/mysql.php | 7 + management-interface/css/custom.css | 7 +- management-interface/index.php | 29 +- management-interface/js/custom.js | 12 + management-interface/lib/api/annotated.html | 85 + management-interface/lib/api/bc_s.png | Bin 0 -> 624 bytes management-interface/lib/api/bdwn.png | Bin 0 -> 139 bytes .../lib/api/classAudit-members.html | 58 + management-interface/lib/api/classAudit.html | 412 ++++ management-interface/lib/api/classAudit.png | Bin 0 -> 340 bytes .../lib/api/classAuth-members.html | 54 + management-interface/lib/api/classAuth.html | 439 ++++ .../lib/api/classBase-members.html | 164 ++ management-interface/lib/api/classBase.html | 2221 ++++++++++++++++++++ management-interface/lib/api/classBase.png | Bin 0 -> 338 bytes .../lib/api/classBasket-members.html | 62 + management-interface/lib/api/classBasket.html | 534 +++++ .../lib/api/classBcrypt-members.html | 48 + management-interface/lib/api/classBcrypt.html | 204 ++ management-interface/lib/api/classBcrypt.png | Bin 0 -> 364 bytes .../lib/api/classCache-members.html | 52 + management-interface/lib/api/classCache.html | 314 +++ management-interface/lib/api/classCache.png | Bin 0 -> 352 bytes .../lib/api/classDB_1_1Cursor-members.html | 91 + .../lib/api/classDB_1_1Cursor.html | 999 +++++++++ management-interface/lib/api/classDB_1_1Cursor.png | Bin 0 -> 2201 bytes .../lib/api/classDB_1_1Jig-members.html | 59 + management-interface/lib/api/classDB_1_1Jig.html | 291 +++ .../lib/api/classDB_1_1Jig_1_1Mapper-members.html | 101 + .../lib/api/classDB_1_1Jig_1_1Mapper.html | 750 +++++++ .../lib/api/classDB_1_1Jig_1_1Mapper.png | Bin 0 -> 1083 bytes .../lib/api/classDB_1_1Jig_1_1Session-members.html | 112 + .../lib/api/classDB_1_1Jig_1_1Session.html | 527 +++++ .../lib/api/classDB_1_1Jig_1_1Session.png | Bin 0 -> 1078 bytes .../lib/api/classDB_1_1Mongo-members.html | 54 + management-interface/lib/api/classDB_1_1Mongo.html | 212 ++ management-interface/lib/api/classDB_1_1Mongo.png | Bin 0 -> 419 bytes .../api/classDB_1_1Mongo_1_1Mapper-members.html | 101 + .../lib/api/classDB_1_1Mongo_1_1Mapper.html | 776 +++++++ .../lib/api/classDB_1_1Mongo_1_1Mapper.png | Bin 0 -> 1137 bytes .../api/classDB_1_1Mongo_1_1Session-members.html | 112 + .../lib/api/classDB_1_1Mongo_1_1Session.html | 529 +++++ .../lib/api/classDB_1_1Mongo_1_1Session.png | Bin 0 -> 1127 bytes .../lib/api/classDB_1_1SQL-members.html | 68 + management-interface/lib/api/classDB_1_1SQL.html | 547 +++++ management-interface/lib/api/classDB_1_1SQL.png | Bin 0 -> 327 bytes .../lib/api/classDB_1_1SQL_1_1Mapper-members.html | 106 + .../lib/api/classDB_1_1SQL_1_1Mapper.html | 838 ++++++++ .../lib/api/classDB_1_1SQL_1_1Mapper.png | Bin 0 -> 1087 bytes .../lib/api/classDB_1_1SQL_1_1Session-members.html | 118 ++ .../lib/api/classDB_1_1SQL_1_1Session.html | 553 +++++ .../lib/api/classDB_1_1SQL_1_1Session.png | Bin 0 -> 1084 bytes management-interface/lib/api/classF3-members.html | 43 + management-interface/lib/api/classF3.html | 107 + management-interface/lib/api/classISO-members.html | 377 ++++ management-interface/lib/api/classISO.html | 1148 ++++++++++ management-interface/lib/api/classISO.png | Bin 0 -> 330 bytes .../lib/api/classImage-members.html | 83 + management-interface/lib/api/classImage.html | 906 ++++++++ management-interface/lib/api/classLog-members.html | 45 + management-interface/lib/api/classLog.html | 144 ++ .../lib/api/classMagic-members.html | 53 + management-interface/lib/api/classMagic.html | 450 ++++ management-interface/lib/api/classMagic.png | Bin 0 -> 2601 bytes .../lib/api/classMarkdown-members.html | 63 + management-interface/lib/api/classMarkdown.html | 739 +++++++ management-interface/lib/api/classMarkdown.png | Bin 0 -> 403 bytes .../lib/api/classMatrix-members.html | 47 + management-interface/lib/api/classMatrix.html | 259 +++ management-interface/lib/api/classMatrix.png | Bin 0 -> 350 bytes .../lib/api/classPrefab-members.html | 42 + management-interface/lib/api/classPrefab.html | 103 + management-interface/lib/api/classPrefab.png | Bin 0 -> 2714 bytes .../lib/api/classPreview-members.html | 51 + management-interface/lib/api/classPreview.html | 248 +++ management-interface/lib/api/classPreview.png | Bin 0 -> 619 bytes .../lib/api/classRegistry-members.html | 45 + management-interface/lib/api/classRegistry.html | 201 ++ .../lib/api/classSMTP-members.html | 71 + management-interface/lib/api/classSMTP.html | 482 +++++ management-interface/lib/api/classSMTP.png | Bin 0 -> 544 bytes .../lib/api/classSession-members.html | 53 + management-interface/lib/api/classSession.html | 329 +++ .../lib/api/classTemplate-members.html | 70 + management-interface/lib/api/classTemplate.html | 681 ++++++ management-interface/lib/api/classTemplate.png | Bin 0 -> 618 bytes .../lib/api/classTest-members.html | 49 + management-interface/lib/api/classTest.html | 184 ++ management-interface/lib/api/classUTF-members.html | 56 + management-interface/lib/api/classUTF.html | 543 +++++ management-interface/lib/api/classUTF.png | Bin 0 -> 316 bytes .../lib/api/classView-members.html | 47 + management-interface/lib/api/classView.html | 222 ++ management-interface/lib/api/classView.png | Bin 0 -> 623 bytes management-interface/lib/api/classWeb-members.html | 60 + management-interface/lib/api/classWeb.html | 700 ++++++ management-interface/lib/api/classWeb.png | Bin 0 -> 340 bytes .../lib/api/classWeb_1_1Geo-members.html | 49 + management-interface/lib/api/classWeb_1_1Geo.html | 164 ++ management-interface/lib/api/classWeb_1_1Geo.png | Bin 0 -> 370 bytes .../classWeb_1_1Google_1_1StaticMap-members.html | 49 + .../lib/api/classWeb_1_1Google_1_1StaticMap.html | 130 ++ .../lib/api/classWeb_1_1OpenID-members.html | 63 + .../lib/api/classWeb_1_1OpenID.html | 352 ++++ .../lib/api/classWeb_1_1OpenID.png | Bin 0 -> 595 bytes .../lib/api/classWeb_1_1Pingback-members.html | 52 + .../lib/api/classWeb_1_1Pingback.html | 223 ++ .../lib/api/classWeb_1_1Pingback.png | Bin 0 -> 466 bytes management-interface/lib/api/classes.html | 131 ++ management-interface/lib/api/closed.png | Bin 0 -> 125 bytes .../api/dir_3a960e52dd9a2c9686c19ff6ef19d5fb.html | 48 + .../api/dir_562abdcd8625d4bf7bad2fe6fe01354c.html | 57 + .../api/dir_60985a986063d10a97c0bb7f42d76d6f.html | 50 + .../api/dir_826b1e4cd13f4e7f528ca52e638927e5.html | 50 + .../api/dir_9d4753e6cb22f68b75f0462ac2496f38.html | 50 + .../api/dir_ce5981f09099a3fa6071b9eb8fe67a2c.html | 63 + management-interface/lib/api/doxygen.css | 1382 ++++++++++++ management-interface/lib/api/doxygen.png | Bin 0 -> 3529 bytes .../lib/api/doxygen_8h_source.html | 39 + management-interface/lib/api/dynsections.js | 97 + management-interface/lib/api/ftv2blank.png | Bin 0 -> 86 bytes management-interface/lib/api/ftv2cl.png | Bin 0 -> 416 bytes management-interface/lib/api/ftv2doc.png | Bin 0 -> 652 bytes management-interface/lib/api/ftv2folderclosed.png | Bin 0 -> 493 bytes management-interface/lib/api/ftv2folderopen.png | Bin 0 -> 505 bytes management-interface/lib/api/ftv2lastnode.png | Bin 0 -> 86 bytes management-interface/lib/api/ftv2link.png | Bin 0 -> 652 bytes management-interface/lib/api/ftv2mlastnode.png | Bin 0 -> 241 bytes management-interface/lib/api/ftv2mnode.png | Bin 0 -> 241 bytes management-interface/lib/api/ftv2mo.png | Bin 0 -> 373 bytes management-interface/lib/api/ftv2node.png | Bin 0 -> 86 bytes management-interface/lib/api/ftv2ns.png | Bin 0 -> 370 bytes management-interface/lib/api/ftv2plastnode.png | Bin 0 -> 227 bytes management-interface/lib/api/ftv2pnode.png | Bin 0 -> 227 bytes management-interface/lib/api/ftv2splitbar.png | Bin 0 -> 282 bytes management-interface/lib/api/ftv2vertline.png | Bin 0 -> 86 bytes management-interface/lib/api/functions.html | 224 ++ management-interface/lib/api/functions_0x5f.html | 183 ++ management-interface/lib/api/functions_0x61.html | 56 + management-interface/lib/api/functions_0x62.html | 65 + management-interface/lib/api/functions_0x63.html | 158 ++ management-interface/lib/api/functions_0x64.html | 82 + management-interface/lib/api/functions_0x65.html | 95 + management-interface/lib/api/functions_0x66.html | 77 + management-interface/lib/api/functions_0x67.html | 56 + management-interface/lib/api/functions_0x68.html | 54 + management-interface/lib/api/functions_0x69.html | 87 + management-interface/lib/api/functions_0x6a.html | 41 + management-interface/lib/api/functions_0x6c.html | 75 + management-interface/lib/api/functions_0x6d.html | 68 + management-interface/lib/api/functions_0x6e.html | 47 + management-interface/lib/api/functions_0x6f.html | 71 + management-interface/lib/api/functions_0x70.html | 63 + management-interface/lib/api/functions_0x71.html | 44 + management-interface/lib/api/functions_0x72.html | 116 + management-interface/lib/api/functions_0x73.html | 160 ++ management-interface/lib/api/functions_0x74.html | 55 + management-interface/lib/api/functions_0x75.html | 67 + management-interface/lib/api/functions_0x76.html | 56 + management-interface/lib/api/functions_0x77.html | 56 + management-interface/lib/api/functions_0x78.html | 44 + management-interface/lib/api/functions__.html | 184 ++ management-interface/lib/api/functions_a.html | 65 + management-interface/lib/api/functions_b.html | 74 + management-interface/lib/api/functions_c.html | 165 ++ management-interface/lib/api/functions_d.html | 88 + management-interface/lib/api/functions_e.html | 98 + management-interface/lib/api/functions_f.html | 77 + management-interface/lib/api/functions_func.html | 184 ++ .../lib/api/functions_func_0x61.html | 56 + .../lib/api/functions_func_0x62.html | 65 + .../lib/api/functions_func_0x63.html | 152 ++ .../lib/api/functions_func_0x64.html | 82 + .../lib/api/functions_func_0x65.html | 95 + .../lib/api/functions_func_0x66.html | 77 + .../lib/api/functions_func_0x67.html | 53 + .../lib/api/functions_func_0x68.html | 54 + .../lib/api/functions_func_0x69.html | 87 + .../lib/api/functions_func_0x6a.html | 41 + .../lib/api/functions_func_0x6c.html | 75 + .../lib/api/functions_func_0x6d.html | 65 + .../lib/api/functions_func_0x6e.html | 47 + .../lib/api/functions_func_0x6f.html | 71 + .../lib/api/functions_func_0x70.html | 63 + .../lib/api/functions_func_0x71.html | 44 + .../lib/api/functions_func_0x72.html | 116 + .../lib/api/functions_func_0x73.html | 160 ++ .../lib/api/functions_func_0x74.html | 55 + .../lib/api/functions_func_0x75.html | 64 + .../lib/api/functions_func_0x76.html | 53 + .../lib/api/functions_func_0x77.html | 56 + .../lib/api/functions_func_0x78.html | 44 + management-interface/lib/api/functions_func_a.html | 65 + management-interface/lib/api/functions_func_b.html | 74 + management-interface/lib/api/functions_func_c.html | 159 ++ management-interface/lib/api/functions_func_d.html | 88 + management-interface/lib/api/functions_func_e.html | 98 + management-interface/lib/api/functions_func_f.html | 77 + management-interface/lib/api/functions_func_g.html | 53 + management-interface/lib/api/functions_func_h.html | 54 + management-interface/lib/api/functions_func_i.html | 86 + management-interface/lib/api/functions_func_j.html | 41 + management-interface/lib/api/functions_func_l.html | 75 + management-interface/lib/api/functions_func_m.html | 65 + management-interface/lib/api/functions_func_n.html | 47 + management-interface/lib/api/functions_func_o.html | 71 + management-interface/lib/api/functions_func_p.html | 63 + management-interface/lib/api/functions_func_q.html | 44 + management-interface/lib/api/functions_func_r.html | 119 ++ management-interface/lib/api/functions_func_s.html | 157 ++ management-interface/lib/api/functions_func_t.html | 58 + management-interface/lib/api/functions_func_u.html | 64 + management-interface/lib/api/functions_func_v.html | 53 + management-interface/lib/api/functions_func_w.html | 56 + management-interface/lib/api/functions_g.html | 56 + management-interface/lib/api/functions_h.html | 54 + management-interface/lib/api/functions_i.html | 86 + management-interface/lib/api/functions_j.html | 41 + management-interface/lib/api/functions_l.html | 75 + management-interface/lib/api/functions_m.html | 68 + management-interface/lib/api/functions_n.html | 47 + management-interface/lib/api/functions_o.html | 71 + management-interface/lib/api/functions_p.html | 63 + management-interface/lib/api/functions_q.html | 44 + management-interface/lib/api/functions_r.html | 119 ++ management-interface/lib/api/functions_s.html | 157 ++ management-interface/lib/api/functions_t.html | 58 + management-interface/lib/api/functions_u.html | 67 + management-interface/lib/api/functions_v.html | 56 + management-interface/lib/api/functions_vars.html | 262 +++ management-interface/lib/api/functions_w.html | 56 + management-interface/lib/api/hierarchy.html | 82 + management-interface/lib/api/index.html | 44 + management-interface/lib/api/jquery.js | 31 + management-interface/lib/api/nav_f.png | Bin 0 -> 136 bytes management-interface/lib/api/nav_g.png | Bin 0 -> 95 bytes management-interface/lib/api/nav_h.png | Bin 0 -> 93 bytes management-interface/lib/api/open.png | Bin 0 -> 115 bytes management-interface/lib/api/sync_off.png | Bin 0 -> 815 bytes management-interface/lib/api/sync_on.png | Bin 0 -> 809 bytes management-interface/lib/api/tab_a.png | Bin 0 -> 124 bytes management-interface/lib/api/tab_b.png | Bin 0 -> 149 bytes management-interface/lib/api/tab_h.png | Bin 0 -> 145 bytes management-interface/lib/api/tab_s.png | Bin 0 -> 156 bytes management-interface/lib/api/tabs.css | 60 + management-interface/lib/audit.php | 177 ++ management-interface/lib/auth.php | 233 ++ management-interface/lib/basket.php | 229 ++ management-interface/lib/bcrypt.php | 89 + management-interface/lib/changelog.txt | 416 ++++ management-interface/lib/code.css | 1 + management-interface/lib/db/cursor.php | 313 +++ management-interface/lib/db/jig.php | 133 ++ management-interface/lib/db/jig/mapper.php | 459 ++++ management-interface/lib/db/jig/session.php | 168 ++ management-interface/lib/db/mongo.php | 92 + management-interface/lib/db/mongo/mapper.php | 346 +++ management-interface/lib/db/mongo/session.php | 174 ++ management-interface/lib/db/sql.php | 403 ++++ management-interface/lib/db/sql/mapper.php | 552 +++++ management-interface/lib/db/sql/session.php | 187 ++ management-interface/lib/f3.php | 35 + management-interface/lib/image.php | 571 +++++ management-interface/lib/license.txt | 621 ++++++ management-interface/lib/log.php | 60 + management-interface/lib/magic.php | 140 ++ management-interface/lib/markdown.php | 570 +++++ management-interface/lib/matrix.php | 101 + management-interface/lib/session.php | 180 ++ management-interface/lib/smtp.php | 274 +++ management-interface/lib/template.php | 335 +++ management-interface/lib/test.php | 77 + management-interface/lib/utf.php | 192 ++ management-interface/lib/web.php | 838 ++++++++ management-interface/lib/web/geo.php | 101 + management-interface/lib/web/google/staticmap.php | 58 + management-interface/lib/web/openid.php | 237 +++ management-interface/lib/web/pingback.php | 170 ++ management-interface/template/footer.php | 1 + management-interface/template/menu.php | 44 + management-interface/template/message.php | 6 +- management-interface/template/requestdump.php | 5 + management-interface/views/about.htm | 16 +- management-interface/views/home.htm | 4 - management-interface/views/login.htm | 7 +- management-interface/views/menu.php | 43 - management-interface/views/satellites.htm | 152 +- management-interface/views/users.htm | 26 +- 299 files changed, 40404 insertions(+), 147 deletions(-) create mode 100644 management-interface/api/.htaccess create mode 100644 management-interface/api/models/.htaccess create mode 100644 management-interface/api/models/Home.php create mode 100644 management-interface/api/models/Satellites.php create mode 100644 management-interface/api/models/Template.php create mode 100644 management-interface/api/models/Users.php create mode 100644 management-interface/asserts/public_ftp.cer create mode 100644 management-interface/asserts/tool.tar.gz delete mode 100644 management-interface/composer.json create mode 100644 management-interface/config/mysql.php create mode 100644 management-interface/js/custom.js create mode 100644 management-interface/lib/api/annotated.html create mode 100644 management-interface/lib/api/bc_s.png create mode 100644 management-interface/lib/api/bdwn.png create mode 100644 management-interface/lib/api/classAudit-members.html create mode 100644 management-interface/lib/api/classAudit.html create mode 100644 management-interface/lib/api/classAudit.png create mode 100644 management-interface/lib/api/classAuth-members.html create mode 100644 management-interface/lib/api/classAuth.html create mode 100644 management-interface/lib/api/classBase-members.html create mode 100644 management-interface/lib/api/classBase.html create mode 100644 management-interface/lib/api/classBase.png create mode 100644 management-interface/lib/api/classBasket-members.html create mode 100644 management-interface/lib/api/classBasket.html create mode 100644 management-interface/lib/api/classBcrypt-members.html create mode 100644 management-interface/lib/api/classBcrypt.html create mode 100644 management-interface/lib/api/classBcrypt.png create mode 100644 management-interface/lib/api/classCache-members.html create mode 100644 management-interface/lib/api/classCache.html create mode 100644 management-interface/lib/api/classCache.png create mode 100644 management-interface/lib/api/classDB_1_1Cursor-members.html create mode 100644 management-interface/lib/api/classDB_1_1Cursor.html create mode 100644 management-interface/lib/api/classDB_1_1Cursor.png create mode 100644 management-interface/lib/api/classDB_1_1Jig-members.html create mode 100644 management-interface/lib/api/classDB_1_1Jig.html create mode 100644 management-interface/lib/api/classDB_1_1Jig_1_1Mapper-members.html create mode 100644 management-interface/lib/api/classDB_1_1Jig_1_1Mapper.html create mode 100644 management-interface/lib/api/classDB_1_1Jig_1_1Mapper.png create mode 100644 management-interface/lib/api/classDB_1_1Jig_1_1Session-members.html create mode 100644 management-interface/lib/api/classDB_1_1Jig_1_1Session.html create mode 100644 management-interface/lib/api/classDB_1_1Jig_1_1Session.png create mode 100644 management-interface/lib/api/classDB_1_1Mongo-members.html create mode 100644 management-interface/lib/api/classDB_1_1Mongo.html create mode 100644 management-interface/lib/api/classDB_1_1Mongo.png create mode 100644 management-interface/lib/api/classDB_1_1Mongo_1_1Mapper-members.html create mode 100644 management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.html create mode 100644 management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.png create mode 100644 management-interface/lib/api/classDB_1_1Mongo_1_1Session-members.html create mode 100644 management-interface/lib/api/classDB_1_1Mongo_1_1Session.html create mode 100644 management-interface/lib/api/classDB_1_1Mongo_1_1Session.png create mode 100644 management-interface/lib/api/classDB_1_1SQL-members.html create mode 100644 management-interface/lib/api/classDB_1_1SQL.html create mode 100644 management-interface/lib/api/classDB_1_1SQL.png create mode 100644 management-interface/lib/api/classDB_1_1SQL_1_1Mapper-members.html create mode 100644 management-interface/lib/api/classDB_1_1SQL_1_1Mapper.html create mode 100644 management-interface/lib/api/classDB_1_1SQL_1_1Mapper.png create mode 100644 management-interface/lib/api/classDB_1_1SQL_1_1Session-members.html create mode 100644 management-interface/lib/api/classDB_1_1SQL_1_1Session.html create mode 100644 management-interface/lib/api/classDB_1_1SQL_1_1Session.png create mode 100644 management-interface/lib/api/classF3-members.html create mode 100644 management-interface/lib/api/classF3.html create mode 100644 management-interface/lib/api/classISO-members.html create mode 100644 management-interface/lib/api/classISO.html create mode 100644 management-interface/lib/api/classISO.png create mode 100644 management-interface/lib/api/classImage-members.html create mode 100644 management-interface/lib/api/classImage.html create mode 100644 management-interface/lib/api/classLog-members.html create mode 100644 management-interface/lib/api/classLog.html create mode 100644 management-interface/lib/api/classMagic-members.html create mode 100644 management-interface/lib/api/classMagic.html create mode 100644 management-interface/lib/api/classMagic.png create mode 100644 management-interface/lib/api/classMarkdown-members.html create mode 100644 management-interface/lib/api/classMarkdown.html create mode 100644 management-interface/lib/api/classMarkdown.png create mode 100644 management-interface/lib/api/classMatrix-members.html create mode 100644 management-interface/lib/api/classMatrix.html create mode 100644 management-interface/lib/api/classMatrix.png create mode 100644 management-interface/lib/api/classPrefab-members.html create mode 100644 management-interface/lib/api/classPrefab.html create mode 100644 management-interface/lib/api/classPrefab.png create mode 100644 management-interface/lib/api/classPreview-members.html create mode 100644 management-interface/lib/api/classPreview.html create mode 100644 management-interface/lib/api/classPreview.png create mode 100644 management-interface/lib/api/classRegistry-members.html create mode 100644 management-interface/lib/api/classRegistry.html create mode 100644 management-interface/lib/api/classSMTP-members.html create mode 100644 management-interface/lib/api/classSMTP.html create mode 100644 management-interface/lib/api/classSMTP.png create mode 100644 management-interface/lib/api/classSession-members.html create mode 100644 management-interface/lib/api/classSession.html create mode 100644 management-interface/lib/api/classTemplate-members.html create mode 100644 management-interface/lib/api/classTemplate.html create mode 100644 management-interface/lib/api/classTemplate.png create mode 100644 management-interface/lib/api/classTest-members.html create mode 100644 management-interface/lib/api/classTest.html create mode 100644 management-interface/lib/api/classUTF-members.html create mode 100644 management-interface/lib/api/classUTF.html create mode 100644 management-interface/lib/api/classUTF.png create mode 100644 management-interface/lib/api/classView-members.html create mode 100644 management-interface/lib/api/classView.html create mode 100644 management-interface/lib/api/classView.png create mode 100644 management-interface/lib/api/classWeb-members.html create mode 100644 management-interface/lib/api/classWeb.html create mode 100644 management-interface/lib/api/classWeb.png create mode 100644 management-interface/lib/api/classWeb_1_1Geo-members.html create mode 100644 management-interface/lib/api/classWeb_1_1Geo.html create mode 100644 management-interface/lib/api/classWeb_1_1Geo.png create mode 100644 management-interface/lib/api/classWeb_1_1Google_1_1StaticMap-members.html create mode 100644 management-interface/lib/api/classWeb_1_1Google_1_1StaticMap.html create mode 100644 management-interface/lib/api/classWeb_1_1OpenID-members.html create mode 100644 management-interface/lib/api/classWeb_1_1OpenID.html create mode 100644 management-interface/lib/api/classWeb_1_1OpenID.png create mode 100644 management-interface/lib/api/classWeb_1_1Pingback-members.html create mode 100644 management-interface/lib/api/classWeb_1_1Pingback.html create mode 100644 management-interface/lib/api/classWeb_1_1Pingback.png create mode 100644 management-interface/lib/api/classes.html create mode 100644 management-interface/lib/api/closed.png create mode 100644 management-interface/lib/api/dir_3a960e52dd9a2c9686c19ff6ef19d5fb.html create mode 100644 management-interface/lib/api/dir_562abdcd8625d4bf7bad2fe6fe01354c.html create mode 100644 management-interface/lib/api/dir_60985a986063d10a97c0bb7f42d76d6f.html create mode 100644 management-interface/lib/api/dir_826b1e4cd13f4e7f528ca52e638927e5.html create mode 100644 management-interface/lib/api/dir_9d4753e6cb22f68b75f0462ac2496f38.html create mode 100644 management-interface/lib/api/dir_ce5981f09099a3fa6071b9eb8fe67a2c.html create mode 100644 management-interface/lib/api/doxygen.css create mode 100644 management-interface/lib/api/doxygen.png create mode 100644 management-interface/lib/api/doxygen_8h_source.html create mode 100644 management-interface/lib/api/dynsections.js create mode 100644 management-interface/lib/api/ftv2blank.png create mode 100644 management-interface/lib/api/ftv2cl.png create mode 100644 management-interface/lib/api/ftv2doc.png create mode 100644 management-interface/lib/api/ftv2folderclosed.png create mode 100644 management-interface/lib/api/ftv2folderopen.png create mode 100644 management-interface/lib/api/ftv2lastnode.png create mode 100644 management-interface/lib/api/ftv2link.png create mode 100644 management-interface/lib/api/ftv2mlastnode.png create mode 100644 management-interface/lib/api/ftv2mnode.png create mode 100644 management-interface/lib/api/ftv2mo.png create mode 100644 management-interface/lib/api/ftv2node.png create mode 100644 management-interface/lib/api/ftv2ns.png create mode 100644 management-interface/lib/api/ftv2plastnode.png create mode 100644 management-interface/lib/api/ftv2pnode.png create mode 100644 management-interface/lib/api/ftv2splitbar.png create mode 100644 management-interface/lib/api/ftv2vertline.png create mode 100644 management-interface/lib/api/functions.html create mode 100644 management-interface/lib/api/functions_0x5f.html create mode 100644 management-interface/lib/api/functions_0x61.html create mode 100644 management-interface/lib/api/functions_0x62.html create mode 100644 management-interface/lib/api/functions_0x63.html create mode 100644 management-interface/lib/api/functions_0x64.html create mode 100644 management-interface/lib/api/functions_0x65.html create mode 100644 management-interface/lib/api/functions_0x66.html create mode 100644 management-interface/lib/api/functions_0x67.html create mode 100644 management-interface/lib/api/functions_0x68.html create mode 100644 management-interface/lib/api/functions_0x69.html create mode 100644 management-interface/lib/api/functions_0x6a.html create mode 100644 management-interface/lib/api/functions_0x6c.html create mode 100644 management-interface/lib/api/functions_0x6d.html create mode 100644 management-interface/lib/api/functions_0x6e.html create mode 100644 management-interface/lib/api/functions_0x6f.html create mode 100644 management-interface/lib/api/functions_0x70.html create mode 100644 management-interface/lib/api/functions_0x71.html create mode 100644 management-interface/lib/api/functions_0x72.html create mode 100644 management-interface/lib/api/functions_0x73.html create mode 100644 management-interface/lib/api/functions_0x74.html create mode 100644 management-interface/lib/api/functions_0x75.html create mode 100644 management-interface/lib/api/functions_0x76.html create mode 100644 management-interface/lib/api/functions_0x77.html create mode 100644 management-interface/lib/api/functions_0x78.html create mode 100644 management-interface/lib/api/functions__.html create mode 100644 management-interface/lib/api/functions_a.html create mode 100644 management-interface/lib/api/functions_b.html create mode 100644 management-interface/lib/api/functions_c.html create mode 100644 management-interface/lib/api/functions_d.html create mode 100644 management-interface/lib/api/functions_e.html create mode 100644 management-interface/lib/api/functions_f.html create mode 100644 management-interface/lib/api/functions_func.html create mode 100644 management-interface/lib/api/functions_func_0x61.html create mode 100644 management-interface/lib/api/functions_func_0x62.html create mode 100644 management-interface/lib/api/functions_func_0x63.html create mode 100644 management-interface/lib/api/functions_func_0x64.html create mode 100644 management-interface/lib/api/functions_func_0x65.html create mode 100644 management-interface/lib/api/functions_func_0x66.html create mode 100644 management-interface/lib/api/functions_func_0x67.html create mode 100644 management-interface/lib/api/functions_func_0x68.html create mode 100644 management-interface/lib/api/functions_func_0x69.html create mode 100644 management-interface/lib/api/functions_func_0x6a.html create mode 100644 management-interface/lib/api/functions_func_0x6c.html create mode 100644 management-interface/lib/api/functions_func_0x6d.html create mode 100644 management-interface/lib/api/functions_func_0x6e.html create mode 100644 management-interface/lib/api/functions_func_0x6f.html create mode 100644 management-interface/lib/api/functions_func_0x70.html create mode 100644 management-interface/lib/api/functions_func_0x71.html create mode 100644 management-interface/lib/api/functions_func_0x72.html create mode 100644 management-interface/lib/api/functions_func_0x73.html create mode 100644 management-interface/lib/api/functions_func_0x74.html create mode 100644 management-interface/lib/api/functions_func_0x75.html create mode 100644 management-interface/lib/api/functions_func_0x76.html create mode 100644 management-interface/lib/api/functions_func_0x77.html create mode 100644 management-interface/lib/api/functions_func_0x78.html create mode 100644 management-interface/lib/api/functions_func_a.html create mode 100644 management-interface/lib/api/functions_func_b.html create mode 100644 management-interface/lib/api/functions_func_c.html create mode 100644 management-interface/lib/api/functions_func_d.html create mode 100644 management-interface/lib/api/functions_func_e.html create mode 100644 management-interface/lib/api/functions_func_f.html create mode 100644 management-interface/lib/api/functions_func_g.html create mode 100644 management-interface/lib/api/functions_func_h.html create mode 100644 management-interface/lib/api/functions_func_i.html create mode 100644 management-interface/lib/api/functions_func_j.html create mode 100644 management-interface/lib/api/functions_func_l.html create mode 100644 management-interface/lib/api/functions_func_m.html create mode 100644 management-interface/lib/api/functions_func_n.html create mode 100644 management-interface/lib/api/functions_func_o.html create mode 100644 management-interface/lib/api/functions_func_p.html create mode 100644 management-interface/lib/api/functions_func_q.html create mode 100644 management-interface/lib/api/functions_func_r.html create mode 100644 management-interface/lib/api/functions_func_s.html create mode 100644 management-interface/lib/api/functions_func_t.html create mode 100644 management-interface/lib/api/functions_func_u.html create mode 100644 management-interface/lib/api/functions_func_v.html create mode 100644 management-interface/lib/api/functions_func_w.html create mode 100644 management-interface/lib/api/functions_g.html create mode 100644 management-interface/lib/api/functions_h.html create mode 100644 management-interface/lib/api/functions_i.html create mode 100644 management-interface/lib/api/functions_j.html create mode 100644 management-interface/lib/api/functions_l.html create mode 100644 management-interface/lib/api/functions_m.html create mode 100644 management-interface/lib/api/functions_n.html create mode 100644 management-interface/lib/api/functions_o.html create mode 100644 management-interface/lib/api/functions_p.html create mode 100644 management-interface/lib/api/functions_q.html create mode 100644 management-interface/lib/api/functions_r.html create mode 100644 management-interface/lib/api/functions_s.html create mode 100644 management-interface/lib/api/functions_t.html create mode 100644 management-interface/lib/api/functions_u.html create mode 100644 management-interface/lib/api/functions_v.html create mode 100644 management-interface/lib/api/functions_vars.html create mode 100644 management-interface/lib/api/functions_w.html create mode 100644 management-interface/lib/api/hierarchy.html create mode 100644 management-interface/lib/api/index.html create mode 100644 management-interface/lib/api/jquery.js create mode 100644 management-interface/lib/api/nav_f.png create mode 100644 management-interface/lib/api/nav_g.png create mode 100644 management-interface/lib/api/nav_h.png create mode 100644 management-interface/lib/api/open.png create mode 100644 management-interface/lib/api/sync_off.png create mode 100644 management-interface/lib/api/sync_on.png create mode 100644 management-interface/lib/api/tab_a.png create mode 100644 management-interface/lib/api/tab_b.png create mode 100644 management-interface/lib/api/tab_h.png create mode 100644 management-interface/lib/api/tab_s.png create mode 100644 management-interface/lib/api/tabs.css create mode 100644 management-interface/lib/audit.php create mode 100644 management-interface/lib/auth.php create mode 100644 management-interface/lib/basket.php create mode 100644 management-interface/lib/bcrypt.php create mode 100644 management-interface/lib/changelog.txt create mode 100644 management-interface/lib/code.css create mode 100644 management-interface/lib/db/cursor.php create mode 100644 management-interface/lib/db/jig.php create mode 100644 management-interface/lib/db/jig/mapper.php create mode 100644 management-interface/lib/db/jig/session.php create mode 100644 management-interface/lib/db/mongo.php create mode 100644 management-interface/lib/db/mongo/mapper.php create mode 100644 management-interface/lib/db/mongo/session.php create mode 100644 management-interface/lib/db/sql.php create mode 100644 management-interface/lib/db/sql/mapper.php create mode 100644 management-interface/lib/db/sql/session.php create mode 100644 management-interface/lib/f3.php create mode 100644 management-interface/lib/image.php create mode 100644 management-interface/lib/license.txt create mode 100644 management-interface/lib/log.php create mode 100644 management-interface/lib/magic.php create mode 100644 management-interface/lib/markdown.php create mode 100644 management-interface/lib/matrix.php create mode 100644 management-interface/lib/session.php create mode 100644 management-interface/lib/smtp.php create mode 100644 management-interface/lib/template.php create mode 100644 management-interface/lib/test.php create mode 100644 management-interface/lib/utf.php create mode 100644 management-interface/lib/web.php create mode 100644 management-interface/lib/web/geo.php create mode 100644 management-interface/lib/web/google/staticmap.php create mode 100644 management-interface/lib/web/openid.php create mode 100644 management-interface/lib/web/pingback.php create mode 100644 management-interface/template/menu.php create mode 100644 management-interface/template/requestdump.php delete mode 100644 management-interface/views/menu.php (limited to 'management-interface') diff --git a/management-interface/api/.htaccess b/management-interface/api/.htaccess new file mode 100644 index 0000000..8d2f256 --- /dev/null +++ b/management-interface/api/.htaccess @@ -0,0 +1 @@ +deny from all diff --git a/management-interface/api/models/.htaccess b/management-interface/api/models/.htaccess new file mode 100644 index 0000000..8d2f256 --- /dev/null +++ b/management-interface/api/models/.htaccess @@ -0,0 +1 @@ +deny from all diff --git a/management-interface/api/models/Home.php b/management-interface/api/models/Home.php new file mode 100644 index 0000000..6fd384e --- /dev/null +++ b/management-interface/api/models/Home.php @@ -0,0 +1,21 @@ + 2) { + $f3->set('serverstatus', true); + } else { + $f3->set('serverstatus', false); + } + // now render the view + echo Template::instance()->render('views/home.htm'); + } +} + +?> diff --git a/management-interface/api/models/Master.php b/management-interface/api/models/Master.php index 0566b0a..75b76f2 100644 --- a/management-interface/api/models/Master.php +++ b/management-interface/api/models/Master.php @@ -26,23 +26,27 @@ class Master { echo $this->view->render('template/header.php'); - echo $this->view->render('views/menu.php'); + echo $this->view->render('template/menu.php'); if (!empty($f3->get('message'))) { echo $this->view->render('template/message.php'); } + + // DEBUG !!!! + echo $this->view->render('template/requestdump.php'); - // if we want to list the users: + // let the module choose what to render if ($f3->get('_module') === 'users') { - $this->tabUsers($f3); + (new Users)->tabUsers($f3); } else if($f3->get('_module') === 'home') { - $this->tabHome($f3); + (new Home)->tabHome($f3); } else if ($f3->get('_module') === 'satellites') { - $this->tabSatellite($f3); + (new Satellites)->tabSatellites($f3); + } else { + // if module is not available, display the views/_module.htm + echo Template::instance()->render('views/'.$f3->get('_module').'.htm'); } - echo Template::instance()->render('views/' . $f3->get('_module') . '.htm'); - echo $this->view->render('template/footer.php'); } @@ -55,7 +59,7 @@ class Master { $f3->reroute('@module(@m=home)'); } else { $f3->set('message', 'Login invalid.'); - $f3->reroute('@module(@m=home)'); + $f3->reroute('@module(@m=login)'); } } @@ -64,27 +68,29 @@ class Master { $f3->set('message', 'Logout successful'); $f3->set('loggedin', false); $f3->set('username', 'Guest'); - $this->parse($f3, array('m' => 'login')); - } - - private function tabUsers($f3) { - $f3->set('result',$f3->get('DB')->exec('SELECT userid, username, organization, firstname, lastname, email, lastlogin FROM user')); + $this->parse($f3, array('m' => 'home')); } - private function tabHome($f3) { - // one command is 'sh -c' and the other command is 'grep' - // so we need more than two commands to find the server - if (shell_exec('ps aux | grep "org.openslx.imagemaster.App" | wc -l') > 2) { - $f3->set('serverstatus', true); + public function saveSatellite($f3, $organization, $address, $name, $prefix, $publickey) { + // first save the satellite, then parse the site + $msg = (new Satellites)->save($f3, $organization, $address, $name, $prefix, $publickey); + if ($msg === '') { + $f3->set('action', 'done'); } else { - $f3->set('serverstatus', false); + $f3->set('message', $msg); } + $this->parse($f3, array('m' => 'satellites')); } - - private function tabSatellite($f3) { - $f3->set('result', $f3->get('DB')->exec('SELECT organization, address, name, prefix, publickey FROM satellite')); + + public function newSatellite($f3, $organization, $address, $name, $prefix, $publickey) { + // first save then parse + $msg = (new Satellites)->saveNew($f3, $organization, $address, $name, $prefix, $publickey); + if ($msg === '') { + $f3->set('action', 'done'); + } else { + $f3->set('message', $msg); + } + $this->parse($f3, array('m' => 'satellites')); } - } - ?> diff --git a/management-interface/api/models/Satellites.php b/management-interface/api/models/Satellites.php new file mode 100644 index 0000000..456d74b --- /dev/null +++ b/management-interface/api/models/Satellites.php @@ -0,0 +1,203 @@ +action($f3); + + // load items for table + if (isset($f3->get('GET')['order'])) { + $order = $f3->get('GET')['order']; + if ($order != 'organization' && $order != 'address' && $order != 'name' && $order != 'prefix') { + $order = 'prefix'; + } + } else { + $order = 'prefix'; + } + + if (isset($f3->get('GET')['di'])) { + $di = $f3->get('GET')['di']; + $di = ($di === 'asc')? 'ASC':'DESC'; + } else { + $di = 'ASC'; + } + + $f3->set('order', $order); + $f3->set('di', $di); + $f3->set('result', $f3->get('DB')->exec('SELECT organization, address, name, prefix, publickey FROM satellite ORDER BY '.$order.' '.$di)); + + if (isset( $f3->get('GET')['prefix'] )) { + $f3->set('prefix', $f3->get('GET')['prefix']); + } else { + $f3->set('prefix', ''); + } + // now render the view + echo Template::instance()->render('views/satellites.htm'); + } + + public function action($f3) { + if ($f3->get('action') === 'done') return; + if (isset( $f3->get('REQUEST')['action'] ) && $f3->get('REQUEST')['action'] === 'new') { + // we want to add a new entry + $f3->set('action', 'new'); + + // set the already entered values if possible + if (isset($f3->get('POST')['organization'])) { + $organization = htmlspecialchars($f3->get('POST')['organization']); + } else { + $organization = ''; + } + + if (isset($f3->get('POST')['address'])) { + $address = htmlspecialchars($f3->get('POST')['address']); + } else { + $address = ''; + } + + if (isset($f3->get('POST')['name'])) { + $name = htmlspecialchars($f3->get('POST')['name']); + } else { + $name= ''; + } + + if (isset($f3->get('POST')['prefix'])) { + $prefix = htmlspecialchars($f3->get('POST')['prefix']); + } else { + $prefix= ''; + } + + if (isset($f3->get('POST')['publickey'])) { + $publickey = htmlspecialchars($f3->get('POST')['publickey']); + } else { + $publickey= ''; + } + + // put all the values into a nice array + $f3->set('new', array( + 'organization' => $organization, + 'address' => $address, + 'name' => $name, + 'prefix' => $prefix, + 'publickey' => $publickey + )); + } else if ((isset( $f3->get('GET')['action'] ) && isset( $f3->get('GET')['prefix'])) + || isset($f3->get('POST')['prefix'])) { + if (isset($f3->get('POST')['prefix'])) { + $action = 'edit'; + $wasSubmit = true; + } else { + $action = $f3->get('GET')['action']; + $wasSubmit = false; + } + $prefix = $f3->get('REQUEST')['prefix']; + + // check if actions and prefixes are valid + if ($action === 'edit') { + if (!$wasSubmit && !$this->checkPrefix($f3, $prefix)) { + $action = ''; + } else { + // get entry from db + $result = $f3->get('DB')->exec('SELECT organization, address, name, prefix, publickey FROM satellite WHERE prefix=?', $prefix); + $f3->set('editprefix', $result[0]); + $f3->set('base64key', base64_encode($f3->get('editprefix')['publickey'])); + } + + if ($wasSubmit) { + $f3->set('editprefix', array( + 'organization' => htmlspecialchars($f3->get('POST')['organization']), + 'address' => htmlspecialchars($f3->get('POST')['address']), + 'name' => htmlspecialchars($f3->get('POST')['name']), + 'prefix' => htmlspecialchars($f3->get('POST')['prefix']), + 'publickey' => htmlspecialchars($f3->get('POST')['publickey']))); + $f3->set('base64key', $f3->get('POST')['publickey']); + + } + } else if ($action === 'delete') { + foreach($prefix as $p) { + if (!$this->checkPrefix($f3, $p)) { + $action = ''; + $msg = 'One or more of your Satellites was not valid.'; + break; // found one invalid prefix --> stop + } else { + $this->deletePrefix($f3, $p); + } + } + } else { + $action = ''; + } + + // action is save + $f3->set('action', $action); + } else { + $f3->set('action', ''); + } + } + + /* + * Checks the prefix against the db and saves the unique result to global variable editprefix + */ + public function checkPrefix($f3, $prefix) { + $result = $f3->get('DB')->exec('SELECT organization, address, name, prefix, publickey FROM satellite WHERE prefix=?', $prefix); + if (sizeof($result) != 1) { + return false; + } + return true; + } + + /* + * Saves a new satellite + */ + public function save($f3, $organization, $address, $name, $prefix, $publickey) { + // check inputs + if (empty($organization) || empty($address) || empty($name) || empty($prefix)) return 'Organization, address, name and prefix must not be empty.'; + if (!preg_match('/^[a-zA-Z-]{3,20}\.[a-zA-Z]{2,3}$/', $organization)) return 'Organization must be in form something.de'; + if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $address) + && !preg_match('/^[a-zA-Z-]*\.*[a-zA-Z-]+\.[a-zA-Z]{2,3}$/', $address)) return 'Address must be an ip or hostname.'; + if (!preg_match('/^[\a-zA-ZäüöÄÜÖß \.()-_]*$/', $name)) return "Name must be a string between 0 and 255 characters. (Special chars: ._-())"; + if (!preg_match('/^[a-z]{2,3}$/', $prefix)) return "Prefix must be a string between 2 and 3 characters."; + if (!empty($publickey) && !preg_match('/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/', $publickey)) return 'Public key must be base64 encoded'; + + $pubkeybin = base64_decode($publickey); + + // It will not be checked if this prefix is already in use. It is the primary key and an entry that is existing will be overwritten + $result = $f3->get('DB')->exec('UPDATE satellite SET organization=?, address=?, name=?, publickey=? WHERE prefix=?', + array( 1 => $organization, 2 => $address, 3 => $name, 4 => $pubkeybin, 5 => $prefix)); + + if ($result == 1 || $result == 0) return ''; + else return 'Some weird error occured.'; + } + + public function saveNew($f3, $organization, $address, $name, $prefix, $publickey) { + // check inputs + if (empty($organization) || empty($address) || empty($name) || empty($prefix)) return 'Organization, address, name and prefix must not be empty.'; + if (!preg_match('/^[a-zA-Z-]{3,20}\.[a-zA-Z]{2,3}$/', $organization)) return 'Organization must be in form something.de'; + if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $address) + && !preg_match('/^[a-zA-Z-]*\.*[a-zA-Z-]+\.[a-zA-Z]{2,3}$/', $address)) return 'Address must be an ip or hostname.'; + if (!preg_match('/^[a-zA-ZäüöÄÜÖß \.()-_]*$/', $name)) return "Name must be a string between 0 and 255 characters. (Special chars: ._-())"; + if (!preg_match('/^[a-z]{2,3}$/', $prefix)) return "Prefix must be a string between 2 and 3 characters."; + if (!empty($publickey) && !preg_match('/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/', $publickey)) return 'Public key must be base64 encoded'; + + $pubkeybin = base64_decode($publickey); + + $result = $f3->get('DB')->exec('INSERT INTO satellite SET organization=?, address=?, name=?, publickey=?, prefix=?', + array(1 => $organization, 2 => $address, 3 => $name, 4 => $publickey, 5 => $prefix)); + + if ($result == true) return ''; + else return 'Error while inserting satellite.'; + } + + + public function deletePrefix($f3, $prefix) { + $result = $f3->get('DB')->exec('DELETE FROM satellite WHERE prefix=?', $prefix); + if ($result === 1) return true; + else return false; + } +} + +?> diff --git a/management-interface/api/models/Template.php b/management-interface/api/models/Template.php new file mode 100644 index 0000000..439ab33 --- /dev/null +++ b/management-interface/api/models/Template.php @@ -0,0 +1,13 @@ + diff --git a/management-interface/api/models/Users.php b/management-interface/api/models/Users.php new file mode 100644 index 0000000..f09882b --- /dev/null +++ b/management-interface/api/models/Users.php @@ -0,0 +1,22 @@ +get('GET')['filter'])) { + $filter = '%'.$f3->get('GET')['filter'].'%'; + $f3->set('result',$f3->get('DB')->exec('SELECT userid, username, organization, firstname, lastname, email, lastlogin FROM user WHERE username LIKE ?', $filter)); + $f3->set('oldFilter', htmlspecialchars($f3->get('GET')['filter'])); + } else { + $f3->set('result',$f3->get('DB')->exec('SELECT userid, username, organization, firstname, lastname, email, lastlogin FROM user')); + $f3->set('oldFilter', ''); + } + // now render the view + echo Template::instance()->render('views/users.htm'); + } +} + +?> diff --git a/management-interface/asserts/public_ftp.cer b/management-interface/asserts/public_ftp.cer new file mode 100644 index 0000000..f292f90 --- /dev/null +++ b/management-interface/asserts/public_ftp.cer @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICpDCCAg0CAQMwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUt +U3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0xNDA0MjMxNDI4MTRa +Fw0xNTA0MjMxNDI4MTRaMGwxEDAOBgNVBAYTB1Vua25vd24xEDAOBgNVBAgTB1Vua25vd24xEDAO +BgNVBAcTB1Vua25vd24xEDAOBgNVBAoTB1Vua25vd24xEDAOBgNVBAsTB1Vua25vd24xEDAOBgNV +BAMTB1Vua25vd24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHjkUhfaGap/u8JTaf +7W6GNztD4GhG7ddS93u7csVxcLeKgbtRuEKtfK8rIakqr4JLAFTpErsqGq4F1TQ10sJiby5YOnSP +tuaOZwHcJJafgeivqp65ADhcmiArrQRU//zxf062nbcyzY5cHdadmgefiQEqLPmTxphT133ffiR1 +gLRs0f8haHNnciAJFuRKIwasqXzP8Ys4CPjVnAogjdXZfkuz9hCfZeiwZId95pORtkJEo7mgjTYt +KDrh83KhTDCFqpbA/wXDepY2zM7NV1f/dsCSZFFMRgpMAsmyW0W/JlmEle05HGYlZaVMpMY3OPT0 +frMoAQbmcb46/Duhc6oDAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAomlj8lYcDb2WgrwOqWX4WpnK +Wziz0BxpC6PqDLZId8c1/8M/vNSB4F3EoVJBNGp0aV5wHrTGliZfoXzwAl8fflvMeLhiDxCk+BtK +vR93VHPqyUcWfTmqan7MmaArgaaCds1i1MZjyr2sEh3sHldBruZ/Nk0NS7TIQMaE4SexJ+Y= +-----END CERTIFICATE----- diff --git a/management-interface/asserts/tool.tar.gz b/management-interface/asserts/tool.tar.gz new file mode 100644 index 0000000..1e77bf7 Binary files /dev/null and b/management-interface/asserts/tool.tar.gz differ diff --git a/management-interface/composer.json b/management-interface/composer.json deleted file mode 100644 index 6e60feb..0000000 --- a/management-interface/composer.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "bcosca/fatfree", - "description": "A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!", - "homepage": "http://fatfreeframework.com/", - "license": "GPL-3.0", - "require": { - "php": ">=5.3.0" - }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/bcosca/fatfree" - } - ] -} diff --git a/management-interface/config/global.cfg b/management-interface/config/global.cfg index 172c19e..4607bf2 100644 --- a/management-interface/config/global.cfg +++ b/management-interface/config/global.cfg @@ -16,6 +16,7 @@ title="Masterserver Management" ;accounts user["nils"]="f58cf5e7e10f195e21b553096d092c763ed18b0e" +user["michael"]="f58cf5e7e10f195e21b553096d092c763ed18b0e" ;hostname hostname="http://132.230.4.23/if/" diff --git a/management-interface/config/mysql.php b/management-interface/config/mysql.php new file mode 100644 index 0000000..5ddd58a --- /dev/null +++ b/management-interface/config/mysql.php @@ -0,0 +1,7 @@ + diff --git a/management-interface/css/custom.css b/management-interface/css/custom.css index bd16a7e..1c67398 100644 --- a/management-interface/css/custom.css +++ b/management-interface/css/custom.css @@ -51,7 +51,12 @@ html { } /* fixing in danger boxes */ -p.bg-danger { +.bg-danger { + padding: 15px; + text-align: center; +} + +.bg-success { padding: 15px; text-align: center; } diff --git a/management-interface/index.php b/management-interface/index.php index afee942..c206e66 100644 --- a/management-interface/index.php +++ b/management-interface/index.php @@ -5,6 +5,9 @@ $f3 = require('lib/base.php'); $f3->set('DEBUG', 3); +ini_set('display_errors', 1); +error_reporting(E_ALL); + $f3->set('AUTOLOAD', 'api/models/'); // set defaults @@ -13,11 +16,12 @@ $f3->set('username', (isset($f3->get('SESSION')['username']))?$f3->get('SESSION' $f3->set('message', ''); $f3->config('config/global.cfg'); +require('config/mysql.php'); $f3->set('DB', new DB\SQL( - 'mysql:host=localhost;port=3306;dbname=masterserver', - 'root', - 'password' + 'mysql:host=localhost;port=3306;dbname='.$mysql_database, + $mysql_username, + $mysql_password )); $f3->route('POST /do/@action', @@ -27,11 +31,26 @@ $f3->route('POST /do/@action', if (isset($_POST['user']) && isset($_POST['pass'])) { $master->dologin($f3, $f3->get('POST')['user'], $f3->get('POST')['pass']); } + } else if ($params['action'] === 'savesatellite') { + if(isset($_POST['organization']) && isset($_POST['address']) + && isset($_POST['name']) && isset($_POST['prefix']) && isset($_POST['publickey'])) { + $master->saveSatellite($f3, $_POST['organization'], $_POST['address'], $_POST['name'], $_POST['prefix'], $_POST['publickey']); + } + } else if ($params['action'] === 'newsatellite') { + if(isset($_POST['organization']) && isset($_POST['address']) + && isset($_POST['name']) && isset($_POST['prefix']) && isset($_POST['publickey'])) { + $master->newSatellite($f3, $_POST['organization'], $_POST['address'], $_POST['name'], $_POST['prefix'], $_POST['publickey']); + } + } else { + $f3->reroute('@module(@m=home)'); } - } + }, + 0, + 512 ); + // ^ sending files with a maximum rate of 64 KB/s --> slow responses to prevent attacks -$f3->route('GET @module: /@m', +$f3->route('GET @module: /site/@m', function($f3, $params) { $master = new Master; if ($params['m'] === 'logout') { diff --git a/management-interface/js/custom.js b/management-interface/js/custom.js new file mode 100644 index 0000000..b38738e --- /dev/null +++ b/management-interface/js/custom.js @@ -0,0 +1,12 @@ +var checked = false; + +$("input[name='checkall']").click(function(e) { + checked = !checked; + $("input[type='checkbox']").prop("checked", checked); +}); + +$("tr.organization td").click(function(e) { +}); + +$(function() { +}); diff --git a/management-interface/lib/api/annotated.html b/management-interface/lib/api/annotated.html new file mode 100644 index 0000000..3f8e73f --- /dev/null +++ b/management-interface/lib/api/annotated.html @@ -0,0 +1,85 @@ + + + + + + + +Fat-Free Framework: Class List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oNDB
|oNJig
||oCMapperFlat-file DB mapper
||\CSessionJig-managed session handler
|oNMongo
||oCMapperMongoDB mapper
||\CSessionMongoDB-managed session handler
|oNSQL
||oCMapperSQL data mapper
||\CSessionSQL-managed session handler
|oCCursorSimple cursor implementation
|oCJigFlat-file DB wrapper
|oCMongoMongoDB wrapper
|\CSQLPDO wrapper
oNWeb
|oNGoogle
||\CStaticMapGoogle Static Maps API v2 plug-in
|oCGeoGeo plug-in
|oCOpenIDOpenID consumer
|\CPingbackPingback 1.0 protocol (client and server) implementation
oCAuditData validator
oCAuthAuthorization/authentication plug-in
oCBaseBase structure
oCBasketSession-based pseudo-mapper
oCBcryptLightweight password hashing library
oCCacheCache engine
oCF3Legacy mode enabler
oCImageImage manipulation tools
oCISOISO language/country codes
oCLogCustom logger
oCMagicPHP magic wrapper
oCMarkdownMarkdown-to-HTML converter
oCMatrixGeneric array utilities
oCPrefabFactory class for single-instance objects
oCPreviewLightweight template engine
oCRegistryContainer for singular object instances
oCSessionCache-based session handler
oCSMTPSMTP plug-in
oCTemplateXML-style template engine
oCTestUnit test kit
oCUTFUnicode string manager
oCViewView handler
\CWebWrapper for various HTTP utilities
+
+
diff --git a/management-interface/lib/api/bc_s.png b/management-interface/lib/api/bc_s.png new file mode 100644 index 0000000..fd162ea Binary files /dev/null and b/management-interface/lib/api/bc_s.png differ diff --git a/management-interface/lib/api/bdwn.png b/management-interface/lib/api/bdwn.png new file mode 100644 index 0000000..7c943f0 Binary files /dev/null and b/management-interface/lib/api/bdwn.png differ diff --git a/management-interface/lib/api/classAudit-members.html b/management-interface/lib/api/classAudit-members.html new file mode 100644 index 0000000..2e6813a --- /dev/null +++ b/management-interface/lib/api/classAudit-members.html @@ -0,0 +1,58 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Audit Member List
+
+
+ +

This is the complete list of members for Audit, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
card($id)Audit
email($str, $mx=TRUE)Audit
entropy($str)Audit
instance()Prefabstatic
ipv4($addr)Audit
ipv6($addr)Audit
isbot()Audit
isdesktop()Audit
ismobile()Audit
isprivate($addr)Audit
ispublic($addr)Audit
isreserved($addr)Audit
mod10($id)Audit
UA_Bot (defined in Audit)Audit
UA_Desktop (defined in Audit)Audit
UA_Mobile (defined in Audit)Audit
url($str)Audit
diff --git a/management-interface/lib/api/classAudit.html b/management-interface/lib/api/classAudit.html new file mode 100644 index 0000000..f4c147c --- /dev/null +++ b/management-interface/lib/api/classAudit.html @@ -0,0 +1,412 @@ + + + + + + + +Fat-Free Framework: Audit Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
+
Audit Class Reference
+
+
+ +

Data validator. + More...

+
+ + Inheritance diagram for Audit:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 url ($str)
 
 email ($str, $mx=TRUE)
 
 ipv4 ($addr)
 
 ipv6 ($addr)
 
 isprivate ($addr)
 
 isreserved ($addr)
 
 ispublic ($addr)
 
 isdesktop ()
 
 ismobile ()
 
 isbot ()
 
 mod10 ($id)
 
 card ($id)
 
 entropy ($str)
 
+ + + + + + + + +

+Public Attributes

+const UA_Mobile ='android|blackberry|iphone|ipod|palm|windows\s+ce'
 
+const UA_Desktop ='bsd|linux|os\s+[x9]|solaris|windows'
 
+const UA_Bot ='bot|crawl|slurp|spider'
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Data validator.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
Audit::card ( $id)
+
+

Return credit card type if number is valid

+
Returns
string|FALSE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Audit::email ( $str,
 $mx = TRUE 
)
+
+

Return TRUE if string is a valid e-mail address; Check DNS MX records if specified

+
Returns
bool
+
Parameters
+ + + +
$strstring
$mxboolean
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::entropy ( $str)
+
+

Return entropy estimate of a password (NIST 800-63)

+
Returns
int|float
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::ipv4 ( $addr)
+
+

Return TRUE if string is a valid IPV4 address

+
Returns
bool
+
Parameters
+ + +
$addrstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::ipv6 ( $addr)
+
+

Return TRUE if string is a valid IPV6 address

+
Returns
bool
+
Parameters
+ + +
$addrstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Audit::isbot ()
+
+

Return TRUE if user agent is a Web bot

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + +
Audit::isdesktop ()
+
+

Return TRUE if user agent is a desktop browser

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + +
Audit::ismobile ()
+
+

Return TRUE if user agent is a mobile device

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + + +
Audit::isprivate ( $addr)
+
+

Return TRUE if IP address is within private range

+
Returns
bool
+
Parameters
+ + +
$addrstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::ispublic ( $addr)
+
+

Return TRUE if IP address is neither private nor reserved

+
Returns
bool
+
Parameters
+ + +
$addrstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::isreserved ( $addr)
+
+

Return TRUE if IP address is within reserved range

+
Returns
bool
+
Parameters
+ + +
$addrstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::mod10 ( $id)
+
+

Return TRUE if specified ID has a valid (Luhn) Mod-10 check digit

+
Returns
bool
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Audit::url ( $str)
+
+

Return TRUE if string is a valid URL

+
Returns
bool
+
Parameters
+ + +
$strstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classAudit.png b/management-interface/lib/api/classAudit.png new file mode 100644 index 0000000..f2bb9eb Binary files /dev/null and b/management-interface/lib/api/classAudit.png differ diff --git a/management-interface/lib/api/classAuth-members.html b/management-interface/lib/api/classAuth-members.html new file mode 100644 index 0000000..cd14f20 --- /dev/null +++ b/management-interface/lib/api/classAuth-members.html @@ -0,0 +1,54 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Auth Member List
+
+
+ +

This is the complete list of members for Auth, including all inherited members.

+ + + + + + + + + + + + + + +
$argsAuth
$mapperAuth
$storageAuthprotected
__construct($storage, array $args=NULL)Auth
_jig($id, $pw, $realm)Authprotected
_ldap($id, $pw)Authprotected
_mongo($id, $pw, $realm)Authprotected
_smtp($id, $pw)Authprotected
_sql($id, $pw, $realm)Authprotected
basic($func=NULL)Auth
E_LDAP (defined in Auth)Auth
E_SMTP (defined in Auth)Auth
login($id, $pw, $realm=NULL)Auth
diff --git a/management-interface/lib/api/classAuth.html b/management-interface/lib/api/classAuth.html new file mode 100644 index 0000000..43f1d2e --- /dev/null +++ b/management-interface/lib/api/classAuth.html @@ -0,0 +1,439 @@ + + + + + + + +Fat-Free Framework: Auth Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Auth Class Reference
+
+
+ +

Authorization/authentication plug-in. + More...

+ + + + + + + + +

+Public Member Functions

 login ($id, $pw, $realm=NULL)
 
 basic ($func=NULL)
 
 __construct ($storage, array $args=NULL)
 
+ + + + + + + + + + + + +

+Public Attributes

$mapper
 Mapper object.
 
$args
 Storage options.
 
+const E_LDAP ='LDAP connection failure'
 
+const E_SMTP ='SMTP connection failure'
 
+ + + + + + + + + + + +

+Protected Member Functions

 _jig ($id, $pw, $realm)
 
 _mongo ($id, $pw, $realm)
 
 _sql ($id, $pw, $realm)
 
 _ldap ($id, $pw)
 
 _smtp ($id, $pw)
 
+ + + + +

+Protected Attributes

$storage
 Auth storage.
 
+

Detailed Description

+

Authorization/authentication plug-in.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Auth::__construct ( $storage,
array $args = NULL 
)
+
+

Instantiate class

+
Returns
object
+
Parameters
+ + + +
$storagestring|object
$argsarray
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Auth::_jig ( $id,
 $pw,
 $realm 
)
+
+protected
+
+

Jig storage handler

+
Returns
bool
+
Parameters
+ + + + +
$idstring
$pwstring
$realmstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Auth::_ldap ( $id,
 $pw 
)
+
+protected
+
+

LDAP storage handler

+
Returns
bool
+
Parameters
+ + + +
$idstring
$pwstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Auth::_mongo ( $id,
 $pw,
 $realm 
)
+
+protected
+
+

MongoDB storage handler

+
Returns
bool
+
Parameters
+ + + + +
$idstring
$pwstring
$realmstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Auth::_smtp ( $id,
 $pw 
)
+
+protected
+
+

SMTP storage handler

+
Returns
bool
+
Parameters
+ + + +
$idstring
$pwstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Auth::_sql ( $id,
 $pw,
 $realm 
)
+
+protected
+
+

SQL storage handler

+
Returns
bool
+
Parameters
+ + + + +
$idstring
$pwstring
$realmstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Auth::basic ( $func = NULL)
+
+

HTTP basic auth mechanism

+
Returns
bool
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Auth::login ( $id,
 $pw,
 $realm = NULL 
)
+
+

Login auth mechanism

+
Returns
bool
+
Parameters
+ + + + +
$idstring
$pwstring
$realmstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classBase-members.html b/management-interface/lib/api/classBase-members.html new file mode 100644 index 0000000..d1bbc8e --- /dev/null +++ b/management-interface/lib/api/classBase-members.html @@ -0,0 +1,164 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Base Member List
+
+
+ +

This is the complete list of members for Base, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$fallbackBase
$initBase
$languagesBase
$nullBase
__construct()Base
autoload($class)Baseprotected
base64($data, $mime)Base
blacklisted($ip)Base
build($url)Base
call($func, $args=NULL, $hooks='')Base
camelcase($str)Base
chain($funcs, $args=NULL)Base
clean($arg, $tags=NULL)Base
clear($key)Base
compile($str)Base
concat($key, $val)Base
config($file)Base
copy($src, $dst)Base
CSSBase
csv(array $args)Base
decode($str)Base
devoid($key)Base
dump($expr)Base
dupe($arg)Base
E_Class (defined in Base)Base
E_Fatal (defined in Base)Base
E_Hive (defined in Base)Base
E_Method (defined in Base)Base
E_Named (defined in Base)Base
E_Open (defined in Base)Base
E_Pattern (defined in Base)Base
E_Routes (defined in Base)Base
encode($str)Base
error($code, $text='', array $trace=NULL)Base
exists($key, &$val=NULL)Base
expire($secs=0)Base
fixslashes($str)Base
flip($key)Base
format()Base
get($key, $args=NULL)Base
GLOBALSBase
hash($str)Base
highlight($text)Base
hive()Base
HTTP_100 (defined in Base)Base
HTTP_101 (defined in Base)Base
HTTP_200 (defined in Base)Base
HTTP_201 (defined in Base)Base
HTTP_202 (defined in Base)Base
HTTP_203 (defined in Base)Base
HTTP_204 (defined in Base)Base
HTTP_205 (defined in Base)Base
HTTP_206 (defined in Base)Base
HTTP_300 (defined in Base)Base
HTTP_301 (defined in Base)Base
HTTP_302 (defined in Base)Base
HTTP_303 (defined in Base)Base
HTTP_304 (defined in Base)Base
HTTP_305 (defined in Base)Base
HTTP_307 (defined in Base)Base
HTTP_400 (defined in Base)Base
HTTP_401 (defined in Base)Base
HTTP_402 (defined in Base)Base
HTTP_403 (defined in Base)Base
HTTP_404 (defined in Base)Base
HTTP_405 (defined in Base)Base
HTTP_406 (defined in Base)Base
HTTP_407 (defined in Base)Base
HTTP_408 (defined in Base)Base
HTTP_409 (defined in Base)Base
HTTP_410 (defined in Base)Base
HTTP_411 (defined in Base)Base
HTTP_412 (defined in Base)Base
HTTP_413 (defined in Base)Base
HTTP_414 (defined in Base)Base
HTTP_415 (defined in Base)Base
HTTP_416 (defined in Base)Base
HTTP_417 (defined in Base)Base
HTTP_500 (defined in Base)Base
HTTP_501 (defined in Base)Base
HTTP_502 (defined in Base)Base
HTTP_503 (defined in Base)Base
HTTP_504 (defined in Base)Base
HTTP_505 (defined in Base)Base
instance()Prefabstatic
language($code)Base
lexicon($path)Base
map($url, $class, $ttl=0, $kbps=0)Base
merge($key, $src)Base
mock($pattern, array $args=NULL, array $headers=NULL, $body=NULL)Base
MODEBase
mset(array $vars, $prefix='', $ttl=0)Base
mutex($id, $func, $args=NULL)Base
PACKAGE (defined in Base)Base
parse($str)Base
pop($key)Base
push($key, $val)Base
read($file, $lf=FALSE)Base
recursive($arg, $func, $stack=NULL)Base
ref($key, $add=TRUE)Base
rel($url)Base
relay($funcs, $args=NULL)Base
REQ_AJAX (defined in Base)Base
REQ_SYNC (defined in Base)Base
reroute($url, $permanent=FALSE)Base
route($pattern, $handler, $ttl=0, $kbps=0)Base
run()Base
scrub(&$var, $tags=NULL)Base
serialize($arg)Base
set($key, $val, $ttl=0)Base
shift($key)Base
sign($num)Base
snakecase($str)Base
split($str)Base
status($code)Base
stringify($arg, array $stack=NULL)Base
sync($key)Base
unload($cwd)Base
unserialize($arg)Base
unshift($key, $val)Base
VERBSBase
VERSION (defined in Base)Base
write($file, $data, $append=FALSE)Base
diff --git a/management-interface/lib/api/classBase.html b/management-interface/lib/api/classBase.html new file mode 100644 index 0000000..d12b85c --- /dev/null +++ b/management-interface/lib/api/classBase.html @@ -0,0 +1,2221 @@ + + + + + + + +Fat-Free Framework: Base Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +List of all members
+
+
Base Class Reference
+
+
+ +

Base structure. + More...

+
+ + Inheritance diagram for Base:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 sync ($key)
 
 build ($url)
 
 parse ($str)
 
 compile ($str)
 
ref ($key, $add=TRUE)
 
 exists ($key, &$val=NULL)
 
 devoid ($key)
 
 set ($key, $val, $ttl=0)
 
 get ($key, $args=NULL)
 
 clear ($key)
 
 mset (array $vars, $prefix='', $ttl=0)
 
 hive ()
 
 copy ($src, $dst)
 
 concat ($key, $val)
 
 flip ($key)
 
 push ($key, $val)
 
 pop ($key)
 
 unshift ($key, $val)
 
 shift ($key)
 
 merge ($key, $src)
 
 fixslashes ($str)
 
 split ($str)
 
 stringify ($arg, array $stack=NULL)
 
 csv (array $args)
 
 camelcase ($str)
 
 snakecase ($str)
 
 sign ($num)
 
 hash ($str)
 
 base64 ($data, $mime)
 
 encode ($str)
 
 decode ($str)
 
 dupe ($arg)
 
 recursive ($arg, $func, $stack=NULL)
 
 clean ($arg, $tags=NULL)
 
 scrub (&$var, $tags=NULL)
 
 format ()
 
 language ($code)
 
 lexicon ($path)
 
 serialize ($arg)
 
 unserialize ($arg)
 
 status ($code)
 
 expire ($secs=0)
 
 error ($code, $text='', array $trace=NULL)
 
 mock ($pattern, array $args=NULL, array $headers=NULL, $body=NULL)
 
 route ($pattern, $handler, $ttl=0, $kbps=0)
 
 reroute ($url, $permanent=FALSE)
 
 map ($url, $class, $ttl=0, $kbps=0)
 
 blacklisted ($ip)
 
 run ()
 
 call ($func, $args=NULL, $hooks='')
 
 chain ($funcs, $args=NULL)
 
 relay ($funcs, $args=NULL)
 
 config ($file)
 
 mutex ($id, $func, $args=NULL)
 
 read ($file, $lf=FALSE)
 
 write ($file, $data, $append=FALSE)
 
 highlight ($text)
 
 dump ($expr)
 
 rel ($url)
 
 unload ($cwd)
 
__construct ()
 Bootstrap.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+const GLOBALS ='GET|POST|COOKIE|REQUEST|SESSION|FILES|SERVER|ENV'
 Mapped PHP globals.
 
+const VERBS ='GET|HEAD|POST|PUT|PATCH|DELETE|CONNECT'
 HTTP verbs.
 
+const MODE =0755
 Default directory permissions.
 
+const CSS ='code.css'
 Syntax highlighting stylesheet.
 
$init
 Initial settings.
 
$languages
 Language lookup sequence.
 
$fallback ='en'
 Default fallback language.
 
$null =NULL
 NULL reference.
 
+const PACKAGE ='Fat-Free Framework'
 
+const VERSION ='3.2.2-Release'
 
+const HTTP_100 ='Continue'
 
+const HTTP_101 ='Switching Protocols'
 
+const HTTP_200 ='OK'
 
+const HTTP_201 ='Created'
 
+const HTTP_202 ='Accepted'
 
+const HTTP_203 ='Non-Authorative Information'
 
+const HTTP_204 ='No Content'
 
+const HTTP_205 ='Reset Content'
 
+const HTTP_206 ='Partial Content'
 
+const HTTP_300 ='Multiple Choices'
 
+const HTTP_301 ='Moved Permanently'
 
+const HTTP_302 ='Found'
 
+const HTTP_303 ='See Other'
 
+const HTTP_304 ='Not Modified'
 
+const HTTP_305 ='Use Proxy'
 
+const HTTP_307 ='Temporary Redirect'
 
+const HTTP_400 ='Bad Request'
 
+const HTTP_401 ='Unauthorized'
 
+const HTTP_402 ='Payment Required'
 
+const HTTP_403 ='Forbidden'
 
+const HTTP_404 ='Not Found'
 
+const HTTP_405 ='Method Not Allowed'
 
+const HTTP_406 ='Not Acceptable'
 
+const HTTP_407 ='Proxy Authentication Required'
 
+const HTTP_408 ='Request Timeout'
 
+const HTTP_409 ='Conflict'
 
+const HTTP_410 ='Gone'
 
+const HTTP_411 ='Length Required'
 
+const HTTP_412 ='Precondition Failed'
 
+const HTTP_413 ='Request Entity Too Large'
 
+const HTTP_414 ='Request-URI Too Long'
 
+const HTTP_415 ='Unsupported Media Type'
 
+const HTTP_416 ='Requested Range Not Satisfiable'
 
+const HTTP_417 ='Expectation Failed'
 
+const HTTP_500 ='Internal Server Error'
 
+const HTTP_501 ='Not Implemented'
 
+const HTTP_502 ='Bad Gateway'
 
+const HTTP_503 ='Service Unavailable'
 
+const HTTP_504 ='Gateway Timeout'
 
+const HTTP_505 ='HTTP Version Not Supported'
 
+const REQ_SYNC =1
 
+const REQ_AJAX =2
 
+const E_Pattern ='Invalid routing pattern: %s'
 
+const E_Named ='Named route does not exist: %s'
 
+const E_Fatal ='Fatal error: %s'
 
+const E_Open ='Unable to open %s'
 
+const E_Routes ='No routes specified'
 
+const E_Class ='Invalid class %s'
 
+const E_Method ='Invalid method %s'
 
+const E_Hive ='Invalid hive key %s'
 
+ + + +

+Protected Member Functions

 autoload ($class)
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Base structure.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Base::autoload ( $class)
+
+protected
+
+

Namespace-aware class autoloader

+
Returns
mixed
+
Parameters
+ + +
$classstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::base64 ( $data,
 $mime 
)
+
+

Return Base64-encoded equivalent

+
Returns
string
+
Parameters
+ + + +
$datastring
$mimestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::blacklisted ( $ip)
+
+

Return TRUE if IPv4 address exists in DNSBL

+
Returns
bool
+
Parameters
+ + +
$ipstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::build ( $url)
+
+

Replace tokenized URL with current route's token values

+
Returns
string
+
Parameters
+ + +
$urlarray|string
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::call ( $func,
 $args = NULL,
 $hooks = '' 
)
+
+

Execute callback/hooks (supports 'class->method' format)

+
Returns
mixed|FALSE
+
Parameters
+ + + + +
$funccallback
$argsmixed
$hooksstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::camelcase ( $str)
+
+

Convert snakecase string to camelcase

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::chain ( $funcs,
 $args = NULL 
)
+
+

Execute specified callbacks in succession; Apply same arguments to all callbacks

+
Returns
array
+
Parameters
+ + + +
$funcsarray|string
$argsmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::clean ( $arg,
 $tags = NULL 
)
+
+

Remove HTML tags (except those enumerated) and non-printable characters to mitigate XSS/code injection attacks

+
Returns
mixed
+
Parameters
+ + + +
$argmixed
$tagsstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::clear ( $key)
+
+

Unset hive key

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::compile ( $str)
+
+

Convert JS-style token to PHP expression

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::concat ( $key,
 $val 
)
+
+

Concatenate string to hive string variable

+
Returns
string
+
Parameters
+ + + +
$keystring
$valstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::config ( $file)
+
+

Configure framework according to .ini-style file settings

+
Returns
NULL
+
Parameters
+ + +
$filestring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::copy ( $src,
 $dst 
)
+
+

Copy contents of hive variable to another

+
Returns
mixed
+
Parameters
+ + + +
$srcstring
$dststring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::csv (array $args)
+
+

Flatten array values and return as CSV string

+
Returns
string
+
Parameters
+ + +
$argsarray
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::decode ( $str)
+
+

Convert HTML entities back to characters

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::devoid ( $key)
+
+

Return TRUE if hive key is empty and not cached

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::dump ( $expr)
+
+

Dump expression with syntax highlighting

+
Returns
NULL
+
Parameters
+ + +
$exprmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::dupe ( $arg)
+
+

Attempt to clone object

+
Returns
object
+
+$arg object
+ +
+
+ +
+
+ + + + + + + + +
Base::encode ( $str)
+
+

Convert special characters to HTML entities

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::error ( $code,
 $text = '',
array $trace = NULL 
)
+
+

Log error; Execute ONERROR handler if defined, else display default error page (HTML for synchronous requests, JSON string for AJAX requests)

+
Returns
NULL
+
Parameters
+ + + + +
$codeint
$textstring
$tracearray
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::exists ( $key,
$val = NULL 
)
+
+

Return TRUE if hive key is not set (or return timestamp and TTL if cached)

+
Returns
bool
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::expire ( $secs = 0)
+
+

Send cache metadata to HTTP client

+
Returns
NULL
+
Parameters
+ + +
$secsint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::fixslashes ( $str)
+
+

Convert backslashes to slashes

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::flip ( $key)
+
+

Swap keys and values of hive array variable

+
Returns
array
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
Base::format ()
+
+

Return locale-aware formatted string

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::get ( $key,
 $args = NULL 
)
+
+

Retrieve contents of hive key

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$argsstring|array
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::hash ( $str)
+
+

Generate 64bit/base36 hash

+
Returns
string
+
Parameters
+ + +
$str
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::highlight ( $text)
+
+

Apply syntax highlighting

+
Returns
string
+
Parameters
+ + +
$textstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Base::hive ()
+
+

Publish hive contents

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + +
Base::language ( $code)
+
+

Assign/auto-detect language

+
Returns
string
+
Parameters
+ + +
$codestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::lexicon ( $path)
+
+

Transfer lexicon entries to hive

+
Returns
array
+
Parameters
+ + +
$pathstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base::map ( $url,
 $class,
 $ttl = 0,
 $kbps = 0 
)
+
+

Provide ReST interface by mapping HTTP verb to class method

+
Returns
NULL
+
Parameters
+ + + + + +
$urlstring
$classstring
$ttlint
$kbpsint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::merge ( $key,
 $src 
)
+
+

Merge array with hive array variable

+
Returns
array
+
Parameters
+ + + +
$keystring
$srcstring|array
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base::mock ( $pattern,
array $args = NULL,
array $headers = NULL,
 $body = NULL 
)
+
+

Mock HTTP request

+
Returns
NULL
+
Parameters
+ + + + + +
$patternstring
$argsarray
$headersarray
$bodystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::mset (array $vars,
 $prefix = '',
 $ttl = 0 
)
+
+

Multi-variable assignment using associative array

+
Returns
NULL
+
Parameters
+ + + + +
$varsarray
$prefixstring
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::mutex ( $id,
 $func,
 $args = NULL 
)
+
+

Create mutex, invoke callback then drop ownership when done

+
Returns
mixed
+
Parameters
+ + + + +
$idstring
$funccallback
$argsmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::parse ( $str)
+
+

Parse string containing key-value pairs and use as routing tokens

+
Returns
NULL
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::pop ( $key)
+
+

Remove last element of hive array variable

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::push ( $key,
 $val 
)
+
+

Add element to the end of hive array variable

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::read ( $file,
 $lf = FALSE 
)
+
+

Read file (with option to apply Unix LF as standard line ending)

+
Returns
string
+
Parameters
+ + + +
$filestring
$lfbool
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::recursive ( $arg,
 $func,
 $stack = NULL 
)
+
+

Invoke callback recursively for all data types

+
Returns
mixed
+
Parameters
+ + + + +
$argmixed
$funccallback
$stackarray
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
& Base::ref ( $key,
 $add = TRUE 
)
+
+

Get hive key reference/contents; Add non-existent hive keys, array elements, and object properties by default

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$addbool
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::rel ( $url)
+
+

Return path relative to the base directory

+
Returns
string
+
Parameters
+ + +
$urlstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::relay ( $funcs,
 $args = NULL 
)
+
+

Execute specified callbacks in succession; Relay result of previous callback as argument to the next callback

+
Returns
array
+
Parameters
+ + + +
$funcsarray|string
$argsmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::reroute ( $url,
 $permanent = FALSE 
)
+
+

Reroute to specified URI

+
Returns
NULL
+
Parameters
+ + + +
$urlstring
$permanentbool
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base::route ( $pattern,
 $handler,
 $ttl = 0,
 $kbps = 0 
)
+
+

Bind handler to route pattern

+
Returns
NULL
+
Parameters
+ + + + + +
$patternstring|array
$handlercallback
$ttlint
$kbpsint
+
+
+ +
+
+ +
+
+ + + + + + + +
Base::run ()
+
+

Match routes against incoming URI

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::scrub ($var,
 $tags = NULL 
)
+
+

Similar to clean(), except that variable is passed by reference

+
Returns
mixed
+
Parameters
+ + + +
$varmixed
$tagsstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::serialize ( $arg)
+
+

Return string representation of PHP value

+
Returns
string
+
Parameters
+ + +
$argmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::set ( $key,
 $val,
 $ttl = 0 
)
+
+

Bind value to hive key

+
Returns
mixed
+
Parameters
+ + + + +
$keystring
$valmixed
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::shift ( $key)
+
+

Remove first element of hive array variable

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::sign ( $num)
+
+

Return -1 if specified number is negative, 0 if zero, or 1 if the number is positive

+
Returns
int
+
Parameters
+ + +
$nummixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::snakecase ( $str)
+
+

Convert camelcase string to snakecase

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::split ( $str)
+
+

Split comma-, semi-colon, or pipe-separated string

+
Returns
array
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::status ( $code)
+
+

Send HTTP/1.1 status header; Return text equivalent of status code

+
Returns
string
+
Parameters
+ + +
$codeint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::stringify ( $arg,
array $stack = NULL 
)
+
+

Convert PHP expression/value to compressed exportable string

+
Returns
string
+
Parameters
+ + + +
$argmixed
$stackarray
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::sync ( $key)
+
+

Sync PHP global with corresponding hive key

+
Returns
array
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::unload ( $cwd)
+
+

Execute framework/application shutdown sequence

+
Returns
NULL
+
Parameters
+ + +
$cwdstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Base::unserialize ( $arg)
+
+

Return PHP value derived from string

+
Returns
string
+
Parameters
+ + +
$argmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Base::unshift ( $key,
 $val 
)
+
+

Add element to the beginning of hive array variable

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Base::write ( $file,
 $data,
 $append = FALSE 
)
+
+

Exclusive file write

+
Returns
int|FALSE
+
Parameters
+ + + + +
$filestring
$datamixed
$appendbool
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classBase.png b/management-interface/lib/api/classBase.png new file mode 100644 index 0000000..8b95990 Binary files /dev/null and b/management-interface/lib/api/classBase.png differ diff --git a/management-interface/lib/api/classBasket-members.html b/management-interface/lib/api/classBasket-members.html new file mode 100644 index 0000000..c795886 --- /dev/null +++ b/management-interface/lib/api/classBasket-members.html @@ -0,0 +1,62 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Basket Member List
+
+
+ +

This is the complete list of members for Basket, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
$idBasket
$itemBasket
$keyBasketprotected
__construct($key='basket')Basket
checkout()Basket
clear($key)Basket
copyfrom($key)Basket
copyto($key)Basket
count()Basket
drop()Basket
dry()Basket
E_Field (defined in Basket)Basket
erase($key, $val)Basket
exists($key)Basket
find($key=NULL, $val=NULL)Basket
findone($key, $val)Basket
get($key)Basket
load($key, $val)Basket
reset()Basket
save()Basket
set($key, $val)Basket
diff --git a/management-interface/lib/api/classBasket.html b/management-interface/lib/api/classBasket.html new file mode 100644 index 0000000..bb730b2 --- /dev/null +++ b/management-interface/lib/api/classBasket.html @@ -0,0 +1,534 @@ + + + + + + + +Fat-Free Framework: Basket Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
Basket Class Reference
+
+
+ +

Session-based pseudo-mapper. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 find ($key=NULL, $val=NULL)
 
 findone ($key, $val)
 
 load ($key, $val)
 
 dry ()
 
 count ()
 
 save ()
 
 erase ($key, $val)
 
 reset ()
 
 drop ()
 
 copyfrom ($key)
 
 copyto ($key)
 
 checkout ()
 
 __construct ($key='basket')
 
+ + + + + + + + + + +

+Public Attributes

$id
 Current item identifier.
 
$item =array()
 Current item contents.
 
+const E_Field ='Undefined field %s'
 
+ + + + +

+Protected Attributes

$key
 Session key.
 
+

Detailed Description

+

Session-based pseudo-mapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
Basket::__construct ( $key = 'basket')
+
+

Instantiate class

+
Returns
void
+
Parameters
+ + +
$keystring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Basket::checkout ()
+
+

Check out basket contents

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + +
Basket::clear ( $key)
+
+

Delete field

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Basket::copyfrom ( $key)
+
+

Hydrate item using hive array variable

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Basket::copyto ( $key)
+
+

Populate hive array variable with item contents

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
Basket::count ()
+
+

Return number of items in basket

+
Returns
int
+ +
+
+ +
+
+ + + + + + + +
Basket::drop ()
+
+

Empty basket

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + +
Basket::dry ()
+
+

Return TRUE if current item is empty/undefined

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Basket::erase ( $key,
 $val 
)
+
+

Erase item matching key/value pair

+
Returns
bool
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Basket::exists ( $key)
+
+

Return TRUE if field is defined

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Basket::find ( $key = NULL,
 $val = NULL 
)
+
+

Return items that match key/value pair; If no key/value pair specified, return all items

+
Returns
array|FALSE
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Basket::findone ( $key,
 $val 
)
+
+

Return first item that matches key/value pair

+
Returns
object|FALSE
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Basket::get ( $key)
+
+

Retrieve value of field

+
Returns
scalar|FALSE
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Basket::load ( $key,
 $val 
)
+
+

Map current item to matching key/value pair

+
Returns
array
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + +
Basket::reset ()
+
+

Reset cursor

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + +
Basket::save ()
+
+

Save current item

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Basket::set ( $key,
 $val 
)
+
+

Assign value to field

+
Returns
scalar|FALSE
+
Parameters
+ + + +
$keystring
$valscalar
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classBcrypt-members.html b/management-interface/lib/api/classBcrypt-members.html new file mode 100644 index 0000000..d19472e --- /dev/null +++ b/management-interface/lib/api/classBcrypt-members.html @@ -0,0 +1,48 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Bcrypt Member List
+
+
+ +

This is the complete list of members for Bcrypt, including all inherited members.

+ + + + + + + + +
COSTBcrypt
E_CostArg (defined in Bcrypt)Bcrypt
E_SaltArg (defined in Bcrypt)Bcrypt
hash($pw, $salt=NULL, $cost=self::COST)Bcrypt
instance()Prefabstatic
needs_rehash($hash, $cost=self::COST)Bcrypt
verify($pw, $hash)Bcrypt
diff --git a/management-interface/lib/api/classBcrypt.html b/management-interface/lib/api/classBcrypt.html new file mode 100644 index 0000000..c23dd78 --- /dev/null +++ b/management-interface/lib/api/classBcrypt.html @@ -0,0 +1,204 @@ + + + + + + + +Fat-Free Framework: Bcrypt Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +List of all members
+
+
Bcrypt Class Reference
+
+
+ +

Lightweight password hashing library. + More...

+
+ + Inheritance diagram for Bcrypt:
+
+
+ + + + + + + + + +

+Public Member Functions

 hash ($pw, $salt=NULL, $cost=self::COST)
 
 needs_rehash ($hash, $cost=self::COST)
 
 verify ($pw, $hash)
 
+ + + + + + + + + +

+Public Attributes

+const COST =10
 Default cost.
 
+const E_CostArg ='Invalid cost parameter'
 
+const E_SaltArg ='Salt must be at least 22 alphanumeric characters'
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Lightweight password hashing library.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Bcrypt::hash ( $pw,
 $salt = NULL,
 $cost = self::COST 
)
+
+

Generate bcrypt hash of string

+
Returns
string|FALSE
+
Parameters
+ + + + +
$pwstring
$saltstring
$costint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Bcrypt::needs_rehash ( $hash,
 $cost = self::COST 
)
+
+

Check if password is still strong enough

+
Returns
bool
+
Parameters
+ + + +
$hashstring
$costint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Bcrypt::verify ( $pw,
 $hash 
)
+
+

Verify password against hash using timing attack resistant approach

+
Returns
bool
+
Parameters
+ + + +
$pwstring
$hashstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classBcrypt.png b/management-interface/lib/api/classBcrypt.png new file mode 100644 index 0000000..caea9be Binary files /dev/null and b/management-interface/lib/api/classBcrypt.png differ diff --git a/management-interface/lib/api/classCache-members.html b/management-interface/lib/api/classCache-members.html new file mode 100644 index 0000000..a8e0dcd --- /dev/null +++ b/management-interface/lib/api/classCache-members.html @@ -0,0 +1,52 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Cache Member List
+
+
+ +

This is the complete list of members for Cache, including all inherited members.

+ + + + + + + + + + + + +
$dsnCacheprotected
$prefixCache
$refCache
__construct($dsn=FALSE)Cache
clear($key)Cache
exists($key, &$val=NULL)Cache
get($key)Cache
instance()Prefabstatic
load($dsn)Cache
reset($suffix=NULL, $lifetime=0)Cache
set($key, $val, $ttl=0)Cache
diff --git a/management-interface/lib/api/classCache.html b/management-interface/lib/api/classCache.html new file mode 100644 index 0000000..b605084 --- /dev/null +++ b/management-interface/lib/api/classCache.html @@ -0,0 +1,314 @@ + + + + + + + +Fat-Free Framework: Cache Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
Cache Class Reference
+
+
+ +

Cache engine. + More...

+
+ + Inheritance diagram for Cache:
+
+
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 exists ($key, &$val=NULL)
 
 set ($key, $val, $ttl=0)
 
 get ($key)
 
 clear ($key)
 
 reset ($suffix=NULL, $lifetime=0)
 
 load ($dsn)
 
 __construct ($dsn=FALSE)
 
+ + + + + + + +

+Public Attributes

$prefix
 Prefix for cache entries.
 
$ref
 MemCache or Redis object.
 
+ + + + +

+Protected Attributes

$dsn
 Cache DSN.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Cache engine.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
Cache::__construct ( $dsn = FALSE)
+
+

Class constructor

+
Returns
object
+
Parameters
+ + +
$dsnbool|string
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Cache::clear ( $key)
+
+

Delete cache entry

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Cache::exists ( $key,
$val = NULL 
)
+
+

Return timestamp and TTL of cache entry or FALSE if not found

+
Returns
array|FALSE
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
Cache::get ( $key)
+
+

Retrieve value of cache entry

+
Returns
mixed|FALSE
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Cache::load ( $dsn)
+
+

Load/auto-detect cache backend

+
Returns
string
+
Parameters
+ + +
$dsnbool|string
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Cache::reset ( $suffix = NULL,
 $lifetime = 0 
)
+
+

Clear contents of cache backend

+
Returns
bool
+
Parameters
+ + + +
$suffixstring
$lifetimeint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Cache::set ( $key,
 $val,
 $ttl = 0 
)
+
+

Store value in cache

+
Returns
mixed|FALSE
+
Parameters
+ + + + +
$keystring
$valmixed
$ttlint
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classCache.png b/management-interface/lib/api/classCache.png new file mode 100644 index 0000000..4093d22 Binary files /dev/null and b/management-interface/lib/api/classCache.png differ diff --git a/management-interface/lib/api/classDB_1_1Cursor-members.html b/management-interface/lib/api/classDB_1_1Cursor-members.html new file mode 100644 index 0000000..1eeca6f --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Cursor-members.html @@ -0,0 +1,91 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Cursor Member List
+
+
+ +

This is the complete list of members for DB\Cursor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$ptrDB\Cursor
$queryDB\Cursorprotected
$triggerDB\Cursor
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\Cursor
clear($key)Magic
copyfrom($key, $func=NULL)DB\Cursor
copyto($key)DB\Cursor
count($filter=NULL, $ttl=0)DB\Cursor
dbtype()DB\Cursor
dry()DB\Cursor
E_Field (defined in DB\Cursor)DB\Cursor
erase()DB\Cursor
exists($key)Magic
find($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)Magic
insert()DB\Cursor
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
reset()DB\Cursor
save()DB\Cursor
set($key, $val)Magic
skip($ofs=1)DB\Cursor
update()DB\Cursor
diff --git a/management-interface/lib/api/classDB_1_1Cursor.html b/management-interface/lib/api/classDB_1_1Cursor.html new file mode 100644 index 0000000..3bc6d70 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Cursor.html @@ -0,0 +1,999 @@ + + + + + + + +Fat-Free Framework: DB\Cursor Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
DB\Cursor Class Reference
+
+
+ +

Simple cursor implementation. + More...

+
+ + Inheritance diagram for DB\Cursor:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + +

+Public Attributes

$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
+ + + + +

+Protected Attributes

$query =array()
 Query results.
 
+

Detailed Description

+

Simple cursor implementation.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
DB\Cursor::aftererase ( $func)
+
+

Define aftererase trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::afterinsert ( $func)
+
+

Define afterinsert trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::afterupdate ( $func)
+
+

Define afterupdate trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::beforeerase ( $func)
+
+

Define beforeerase trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::beforeinsert ( $func)
+
+

Define beforeinsert trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::beforeupdate ( $func)
+
+

Define beforeupdate trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DB\Cursor::cast ( $obj = NULL)
+
+abstract
+
+

Return fields of mapper object as an associative array

+
Returns
array
+
Parameters
+ + +
$objobject
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DB\Cursor::copyfrom ( $key,
 $func = NULL 
)
+
+abstract
+
+

Hydrate mapper object using hive array variable

+
Returns
NULL
+
Parameters
+ + + +
$keystring
$funccallback
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DB\Cursor::copyto ( $key)
+
+abstract
+
+

Populate hive array variable with mapper fields

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DB\Cursor::count ( $filter = NULL,
 $ttl = 0 
)
+
+abstract
+
+

Count records that match criteria

+
Returns
int
+
Parameters
+ + + +
$filterarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DB\Cursor::dbtype ()
+
+abstract
+
+

Return database type

+
Returns
string
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::dry ()
+
+

Return TRUE if current cursor position is not mapped to any record

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::erase ()
+
+

Delete current record

+
Returns
int|bool
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\Cursor::find ( $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+abstract
+
+

Return records (array of mapper objects) that match criteria

+
Returns
array
+
Parameters
+ + + + +
$filterstring|array
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\Cursor::findone ( $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Return first record (mapper object) that matches criteria

+
Returns
object|FALSE
+
Parameters
+ + + + +
$filterstring|array
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::first ()
+
+

Map to first record in cursor

+
Returns
mixed
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DB\Cursor::insert ()
+
+abstract
+
+

Insert new record

+
Returns
array
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::last ()
+
+

Map to last record in cursor

+
Returns
mixed
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\Cursor::load ( $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Map to first record that matches criteria

+
Returns
array|FALSE
+
Parameters
+ + + + +
$filterstring|array
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::next ()
+
+

Map next record

+
Returns
mixed
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::onerase ( $func)
+
+

Define onerase trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::oninsert ( $func)
+
+

Define oninsert trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::onload ( $func)
+
+

Define onload trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::onupdate ( $func)
+
+

Define onupdate trigger

+
Returns
callback
+
Parameters
+ + +
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\Cursor::paginate ( $pos = 0,
 $size = 10,
 $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Return array containing subset of records matching criteria, total number of records in superset, specified limit, number of subsets available, and actual subset position

+
Returns
array
+
Parameters
+ + + + + + +
$posint
$sizeint
$filterstring|array
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::prev ()
+
+

Map previous record

+
Returns
mixed
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::reset ()
+
+

Reset cursor

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + +
DB\Cursor::save ()
+
+

Save mapped record

+
Returns
mixed
+ +
+
+ +
+
+ + + + + + + + +
DB\Cursor::skip ( $ofs = 1)
+
+

Map to nth record relative to current cursor position

+
Returns
mixed
+
Parameters
+ + +
$ofsint
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DB\Cursor::update ()
+
+abstract
+
+

Update current record

+
Returns
array
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Cursor.png b/management-interface/lib/api/classDB_1_1Cursor.png new file mode 100644 index 0000000..858faba Binary files /dev/null and b/management-interface/lib/api/classDB_1_1Cursor.png differ diff --git a/management-interface/lib/api/classDB_1_1Jig-members.html b/management-interface/lib/api/classDB_1_1Jig-members.html new file mode 100644 index 0000000..53e9e59 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Jig-members.html @@ -0,0 +1,59 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Jig Member List
+
+
+ +

This is the complete list of members for DB\Jig, including all inherited members.

+ + + + + + + + + + + + + + + +
$dirDB\Jig
$formatDB\Jig
$logDB\Jig
$uuidDB\Jigprotected
__construct($dir, $format=self::FORMAT_JSON)DB\Jig
dir()DB\Jig
drop()DB\Jig
FORMAT_JSON (defined in DB\Jig)DB\Jig
FORMAT_Serialized (defined in DB\Jig)DB\Jig
jot($frame)DB\Jig
log()DB\Jig
read($file)DB\Jig
uuid()DB\Jig
write($file, array $data=NULL)DB\Jig
diff --git a/management-interface/lib/api/classDB_1_1Jig.html b/management-interface/lib/api/classDB_1_1Jig.html new file mode 100644 index 0000000..36a57e2 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Jig.html @@ -0,0 +1,291 @@ + + + + + + + +Fat-Free Framework: DB\Jig Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
DB\Jig Class Reference
+
+
+ +

Flat-file DB wrapper. + More...

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 read ($file)
 
 write ($file, array $data=NULL)
 
 dir ()
 
 uuid ()
 
 log ()
 
 jot ($frame)
 
 drop ()
 
 __construct ($dir, $format=self::FORMAT_JSON)
 
+ + + + + + + + + + + + + + + +

+Public Attributes

$dir
 Storage location.
 
$format
 Current storage format.
 
$log
 Jig log.
 
+const FORMAT_JSON =0
 
+const FORMAT_Serialized =1
 
+ + + + +

+Protected Attributes

$uuid
 UUID.
 
+

Detailed Description

+

Flat-file DB wrapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig::__construct ( $dir,
 $format = self::FORMAT_JSON 
)
+
+

Instantiate class

+
Parameters
+ + + +
$dirstring
$formatint
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
DB\Jig::dir ()
+
+

Return directory

+
Returns
string
+ +
+
+ +
+
+ + + + + + + +
DB\Jig::drop ()
+
+

Clean storage

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig::jot ( $frame)
+
+

Jot down log entry

+
Returns
NULL
+
Parameters
+ + +
$framestring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig::log ()
+
+

Return SQL profiler results

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig::read ( $file)
+
+

Read data from file

+
Returns
array
+
Parameters
+ + +
$filestring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig::uuid ()
+
+

Return UUID

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig::write ( $file,
array $data = NULL 
)
+
+

Write data to file

+
Returns
int
+
Parameters
+ + + +
$filestring
$dataarray
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Jig_1_1Mapper-members.html b/management-interface/lib/api/classDB_1_1Jig_1_1Mapper-members.html new file mode 100644 index 0000000..5648d13 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Jig_1_1Mapper-members.html @@ -0,0 +1,101 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Jig\Mapper Member List
+
+
+ +

This is the complete list of members for DB\Jig\Mapper, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$dbDB\Jig\Mapperprotected
$documentDB\Jig\Mapper
$fileDB\Jig\Mapper
$idDB\Jig\Mapper
$ptrDB\Cursor
$queryDB\Cursorprotected
$triggerDB\Cursor
__construct(\DB\Jig $db, $file)DB\Jig\Mapper
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\Jig\Mapper
clear($key)DB\Jig\Mapper
copyfrom($key, $func=NULL)DB\Jig\Mapper
copyto($key)DB\Jig\Mapper
count($filter=NULL, $ttl=0)DB\Jig\Mapper
dbtype()DB\Jig\Mapper
dry()DB\Cursor
E_Field (defined in DB\Cursor)DB\Cursor
erase($filter=NULL)DB\Jig\Mapper
DB::Cursor::erase()DB\Cursor
exists($key)DB\Jig\Mapper
factory($id, $row)DB\Jig\Mapperprotected
fields()DB\Jig\Mapper
find($filter=NULL, array $options=NULL, $ttl=0, $log=TRUE)DB\Jig\Mapper
DB::Cursor::find($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)DB\Jig\Mapper
insert()DB\Jig\Mapper
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
reset()DB\Jig\Mapper
save()DB\Cursor
set($key, $val)DB\Jig\Mapper
skip($ofs=1)DB\Jig\Mapper
token($str)DB\Jig\Mapper
update()DB\Jig\Mapper
diff --git a/management-interface/lib/api/classDB_1_1Jig_1_1Mapper.html b/management-interface/lib/api/classDB_1_1Jig_1_1Mapper.html new file mode 100644 index 0000000..a208fbb --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Jig_1_1Mapper.html @@ -0,0 +1,750 @@ + + + + + + + +Fat-Free Framework: DB\Jig\Mapper Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
DB\Jig\Mapper Class Reference
+
+
+ +

Flat-file DB mapper. + More...

+
+ + Inheritance diagram for DB\Jig\Mapper:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 dbtype ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 cast ($obj=NULL)
 
 token ($str)
 
 find ($filter=NULL, array $options=NULL, $ttl=0, $log=TRUE)
 
 count ($filter=NULL, $ttl=0)
 
 skip ($ofs=1)
 
 insert ()
 
 update ()
 
 erase ($filter=NULL)
 
 reset ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 fields ()
 
 __construct (\DB\Jig $db, $file)
 
- Public Member Functions inherited from DB\Cursor
 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + + + + + + + + +

+Public Attributes

$file
 Data file.
 
$id
 Document identifier.
 
$document =array()
 Document contents.
 
- Public Attributes inherited from DB\Cursor
$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
+ + + +

+Protected Member Functions

 factory ($id, $row)
 
+ + + + + + + + +

+Protected Attributes

$db
 Flat-file DB wrapper.
 
- Protected Attributes inherited from DB\Cursor
$query =array()
 Query results.
 
+

Detailed Description

+

Flat-file DB mapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Mapper::__construct (\DB\Jig $db,
 $file 
)
+
+

Instantiate class

+
Returns
void
+
Parameters
+ + + +
$dbobject
$filestring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
DB\Jig\Mapper::cast ( $obj = NULL)
+
+

Return fields of mapper object as an associative array

+
Returns
array
+
Parameters
+ + +
$objobject
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::clear ( $key)
+
+

Delete field

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Mapper::copyfrom ( $key,
 $func = NULL 
)
+
+

Hydrate mapper object using hive array variable

+
Returns
NULL
+
Parameters
+ + + +
$keystring
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::copyto ( $key)
+
+

Populate hive array variable with mapper fields

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Mapper::count ( $filter = NULL,
 $ttl = 0 
)
+
+

Count records that match criteria

+
Returns
int
+
Parameters
+ + + +
$filterarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Mapper::dbtype ()
+
+

Return database type

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::erase ( $filter = NULL)
+
+

Delete current record

+
Returns
bool
+
Parameters
+ + +
$filterarray
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::exists ( $key)
+
+

Return TRUE if field is defined

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Mapper::factory ( $id,
 $row 
)
+
+protected
+
+

Convert array to mapper object

+
Returns
object
+
Parameters
+ + + +
$idstring
$rowarray
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Mapper::fields ()
+
+

Return field names

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\Jig\Mapper::find ( $filter = NULL,
array $options = NULL,
 $ttl = 0,
 $log = TRUE 
)
+
+

Return records that match criteria

+
Returns
array|FALSE
+
Parameters
+ + + + + +
$filterarray
$optionsarray
$ttlint
$logbool
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::get ( $key)
+
+

Retrieve value of field

+
Returns
scalar|FALSE
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Mapper::insert ()
+
+

Insert new record

+
Returns
array
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Mapper::reset ()
+
+

Reset cursor

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Mapper::set ( $key,
 $val 
)
+
+

Assign value to field

+
Returns
scalar|FALSE
+
Parameters
+ + + +
$keystring
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::skip ( $ofs = 1)
+
+

Return record at specified offset using criteria of previous load() call and make it active

+
Returns
array
+
Parameters
+ + +
$ofsint
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Mapper::token ( $str)
+
+

Convert tokens in string expression to variable names

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Mapper::update ()
+
+

Update current record

+
Returns
array
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Jig_1_1Mapper.png b/management-interface/lib/api/classDB_1_1Jig_1_1Mapper.png new file mode 100644 index 0000000..b428aa1 Binary files /dev/null and b/management-interface/lib/api/classDB_1_1Jig_1_1Mapper.png differ diff --git a/management-interface/lib/api/classDB_1_1Jig_1_1Session-members.html b/management-interface/lib/api/classDB_1_1Jig_1_1Session-members.html new file mode 100644 index 0000000..66c61de --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Jig_1_1Session-members.html @@ -0,0 +1,112 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Jig\Session Member List
+
+
+ +

This is the complete list of members for DB\Jig\Session, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$dbDB\Jig\Mapperprotected
$documentDB\Jig\Mapper
$fileDB\Jig\Mapper
$idDB\Jig\Mapper
$ptrDB\Cursor
$queryDB\Cursorprotected
$sidDB\Jig\Sessionprotected
$triggerDB\Cursor
__construct(\DB\Jig $db, $table='sessions')DB\Jig\Session
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
agent()DB\Jig\Session
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\Jig\Mapper
cleanup($max)DB\Jig\Session
clear($key)DB\Jig\Mapper
close()DB\Jig\Session
copyfrom($key, $func=NULL)DB\Jig\Mapper
copyto($key)DB\Jig\Mapper
count($filter=NULL, $ttl=0)DB\Jig\Mapper
csrf()DB\Jig\Session
dbtype()DB\Jig\Mapper
destroy($id)DB\Jig\Session
dry()DB\Cursor
E_Field (defined in DB\Cursor)DB\Cursor
erase($filter=NULL)DB\Jig\Mapper
DB::Cursor::erase()DB\Cursor
exists($key)DB\Jig\Mapper
factory($id, $row)DB\Jig\Mapperprotected
fields()DB\Jig\Mapper
find($filter=NULL, array $options=NULL, $ttl=0, $log=TRUE)DB\Jig\Mapper
DB::Cursor::find($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)DB\Jig\Mapper
insert()DB\Jig\Mapper
ip()DB\Jig\Session
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
open($path, $name)DB\Jig\Session
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
read($id)DB\Jig\Session
reset()DB\Jig\Mapper
save()DB\Cursor
set($key, $val)DB\Jig\Mapper
skip($ofs=1)DB\Jig\Mapper
stamp()DB\Jig\Session
token($str)DB\Jig\Mapper
update()DB\Jig\Mapper
write($id, $data)DB\Jig\Session
diff --git a/management-interface/lib/api/classDB_1_1Jig_1_1Session.html b/management-interface/lib/api/classDB_1_1Jig_1_1Session.html new file mode 100644 index 0000000..0408cdf --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Jig_1_1Session.html @@ -0,0 +1,527 @@ + + + + + + + +Fat-Free Framework: DB\Jig\Session Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
DB\Jig\Session Class Reference
+
+
+ +

Jig-managed session handler. + More...

+
+ + Inheritance diagram for DB\Jig\Session:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 open ($path, $name)
 
 close ()
 
 read ($id)
 
 write ($id, $data)
 
 destroy ($id)
 
 cleanup ($max)
 
 csrf ()
 
 ip ()
 
 stamp ()
 
 agent ()
 
 __construct (\DB\Jig $db, $table='sessions')
 
- Public Member Functions inherited from DB\Jig\Mapper
 dbtype ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 cast ($obj=NULL)
 
 token ($str)
 
 find ($filter=NULL, array $options=NULL, $ttl=0, $log=TRUE)
 
 count ($filter=NULL, $ttl=0)
 
 skip ($ofs=1)
 
 insert ()
 
 update ()
 
 erase ($filter=NULL)
 
 reset ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 fields ()
 
 __construct (\DB\Jig $db, $file)
 
- Public Member Functions inherited from DB\Cursor
 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + +

+Protected Attributes

$sid
 Session ID.
 
- Protected Attributes inherited from DB\Jig\Mapper
$db
 Flat-file DB wrapper.
 
- Protected Attributes inherited from DB\Cursor
$query =array()
 Query results.
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from DB\Jig\Mapper
$file
 Data file.
 
$id
 Document identifier.
 
$document =array()
 Document contents.
 
- Public Attributes inherited from DB\Cursor
$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
- Protected Member Functions inherited from DB\Jig\Mapper
 factory ($id, $row)
 
+

Detailed Description

+

Jig-managed session handler.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Session::__construct (\DB\Jig $db,
 $table = 'sessions' 
)
+
+

Instantiate class

+
Parameters
+ + + +
$dbobject
$tablestring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
DB\Jig\Session::agent ()
+
+

Return HTTP user agent

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Session::cleanup ( $max)
+
+

Garbage collector

+
Returns
TRUE
+
Parameters
+ + +
$maxint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Session::close ()
+
+

Close session

+
Returns
TRUE
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Session::csrf ()
+
+

Return anti-CSRF token

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Session::destroy ( $id)
+
+

Destroy session

+
Returns
TRUE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Session::ip ()
+
+

Return IP address

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Session::open ( $path,
 $name 
)
+
+

Open session

+
Returns
TRUE
+
Parameters
+ + + +
$pathstring
$namestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Jig\Session::read ( $id)
+
+

Return session data in serialized format

+
Returns
string|FALSE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Jig\Session::stamp ()
+
+

Return Unix timestamp

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Jig\Session::write ( $id,
 $data 
)
+
+

Write session data

+
Returns
TRUE
+
Parameters
+ + + +
$idstring
$datastring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Jig_1_1Session.png b/management-interface/lib/api/classDB_1_1Jig_1_1Session.png new file mode 100644 index 0000000..47ea951 Binary files /dev/null and b/management-interface/lib/api/classDB_1_1Jig_1_1Session.png differ diff --git a/management-interface/lib/api/classDB_1_1Mongo-members.html b/management-interface/lib/api/classDB_1_1Mongo-members.html new file mode 100644 index 0000000..54814bb --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Mongo-members.html @@ -0,0 +1,54 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Mongo Member List
+
+
+ +

This is the complete list of members for DB\Mongo, including all inherited members.

+ + + + + + + + + + +
$dsnDB\Mongo
$logDB\Mongo
$uuidDB\Mongoprotected
__construct($dsn, $dbname, array $options=NULL)DB\Mongo
drop()DB\Mongo
dsn()DB\Mongo
E_Profiler (defined in DB\Mongo)DB\Mongo
log()DB\Mongo
uuid()DB\Mongo
diff --git a/management-interface/lib/api/classDB_1_1Mongo.html b/management-interface/lib/api/classDB_1_1Mongo.html new file mode 100644 index 0000000..6f231b1 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Mongo.html @@ -0,0 +1,212 @@ + + + + + + + +Fat-Free Framework: DB\Mongo Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
DB\Mongo Class Reference
+
+
+ +

MongoDB wrapper. + More...

+
+ + Inheritance diagram for DB\Mongo:
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

 dsn ()
 
 uuid ()
 
 log ()
 
 drop ()
 
 __construct ($dsn, $dbname, array $options=NULL)
 
+ + + + + + + + + + +

+Public Attributes

$dsn
 Data source name.
 
$log
 MongoDB log.
 
+const E_Profiler ='MongoDB profiler is disabled'
 
+ + + + +

+Protected Attributes

$uuid
 UUID.
 
+

Detailed Description

+

MongoDB wrapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\Mongo::__construct ( $dsn,
 $dbname,
array $options = NULL 
)
+
+

Instantiate class

+
Parameters
+ + + + +
$dsnstring
$dbnamestring
$optionsarray
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
DB\Mongo::drop ()
+
+

Intercept native call to re-enable profiler

+
Returns
int
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo::dsn ()
+
+

Return data source name

+
Returns
string
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo::log ()
+
+

Return MongoDB profiler results

+
Returns
string
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo::uuid ()
+
+

Return UUID

+
Returns
string
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Mongo.png b/management-interface/lib/api/classDB_1_1Mongo.png new file mode 100644 index 0000000..f16e7b6 Binary files /dev/null and b/management-interface/lib/api/classDB_1_1Mongo.png differ diff --git a/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper-members.html b/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper-members.html new file mode 100644 index 0000000..3240d80 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper-members.html @@ -0,0 +1,101 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Mongo\Mapper Member List
+
+
+ +

This is the complete list of members for DB\Mongo\Mapper, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$collectionDB\Mongo\Mapper
$cursorDB\Mongo\Mapper
$dbDB\Mongo\Mapperprotected
$documentDB\Mongo\Mapper
$ptrDB\Cursor
$queryDB\Cursorprotected
$triggerDB\Cursor
__construct(\DB\Mongo $db, $collection)DB\Mongo\Mapper
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\Mongo\Mapper
clear($key)DB\Mongo\Mapper
copyfrom($key, $func=NULL)DB\Mongo\Mapper
copyto($key)DB\Mongo\Mapper
count($filter=NULL, $ttl=0)DB\Mongo\Mapper
cursor()DB\Mongo\Mapper
dbtype()DB\Mongo\Mapper
dry()DB\Cursor
E_Field (defined in DB\Cursor)DB\Cursor
erase($filter=NULL)DB\Mongo\Mapper
DB::Cursor::erase()DB\Cursor
exists($key)DB\Mongo\Mapper
factory($row)DB\Mongo\Mapperprotected
fields()DB\Mongo\Mapper
find($filter=NULL, array $options=NULL, $ttl=0)DB\Mongo\Mapper
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)DB\Mongo\Mapper
insert()DB\Mongo\Mapper
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
reset()DB\Mongo\Mapper
save()DB\Cursor
select($fields=NULL, $filter=NULL, array $options=NULL, $ttl=0)DB\Mongo\Mapper
set($key, $val)DB\Mongo\Mapper
skip($ofs=1)DB\Mongo\Mapper
update()DB\Mongo\Mapper
diff --git a/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.html b/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.html new file mode 100644 index 0000000..650ab21 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.html @@ -0,0 +1,776 @@ + + + + + + + +Fat-Free Framework: DB\Mongo\Mapper Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
DB\Mongo\Mapper Class Reference
+
+
+ +

MongoDB mapper. + More...

+
+ + Inheritance diagram for DB\Mongo\Mapper:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 dbtype ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 cast ($obj=NULL)
 
 select ($fields=NULL, $filter=NULL, array $options=NULL, $ttl=0)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 skip ($ofs=1)
 
 insert ()
 
 update ()
 
 erase ($filter=NULL)
 
 reset ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 fields ()
 
 cursor ()
 
 __construct (\DB\Mongo $db, $collection)
 
- Public Member Functions inherited from DB\Cursor
 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + + + + + + + + +

+Public Attributes

$collection
 Mongo collection.
 
$document =array()
 Mongo document.
 
$cursor
 Mongo cursor.
 
- Public Attributes inherited from DB\Cursor
$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
+ + + +

+Protected Member Functions

 factory ($row)
 
+ + + + + + + + +

+Protected Attributes

$db
 MongoDB wrapper.
 
- Protected Attributes inherited from DB\Cursor
$query =array()
 Query results.
 
+

Detailed Description

+

MongoDB mapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Mapper::__construct (\DB\Mongo $db,
 $collection 
)
+
+

Instantiate class

+
Returns
void
+
Parameters
+ + + +
$dbobject
$collectionstring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::cast ( $obj = NULL)
+
+

Return fields of mapper object as an associative array

+
Returns
array
+
Parameters
+ + +
$objobject
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::clear ( $key)
+
+

Delete field

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Mapper::copyfrom ( $key,
 $func = NULL 
)
+
+

Hydrate mapper object using hive array variable

+
Returns
NULL
+
Parameters
+ + + +
$keystring
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::copyto ( $key)
+
+

Populate hive array variable with mapper fields

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Mapper::count ( $filter = NULL,
 $ttl = 0 
)
+
+

Count records that match criteria

+
Returns
int
+
Parameters
+ + + +
$filterarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Mapper::cursor ()
+
+

Return the cursor from last query

+
Returns
object|NULL
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Mapper::dbtype ()
+
+

Return database type

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::erase ( $filter = NULL)
+
+

Delete current record

+
Returns
bool
+
Parameters
+ + +
$filterarray
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::exists ( $key)
+
+

Return TRUE if field is defined

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DB\Mongo\Mapper::factory ( $row)
+
+protected
+
+

Convert array to mapper object

+
Returns
object
+
Parameters
+ + +
$rowarray
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Mapper::fields ()
+
+

Return field names

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\Mongo\Mapper::find ( $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Return records that match criteria

+
Returns
array
+
Parameters
+ + + + +
$filterarray
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::get ( $key)
+
+

Retrieve value of field

+
Returns
scalar|FALSE
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Mapper::insert ()
+
+

Insert new record

+
Returns
array
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Mapper::reset ()
+
+

Reset cursor

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\Mongo\Mapper::select ( $fields = NULL,
 $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Build query and execute

+
Returns
array
+
Parameters
+ + + + + +
$fieldsstring
$filterarray
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Mapper::set ( $key,
 $val 
)
+
+

Assign value to field

+
Returns
scalar|FALSE
+
Parameters
+ + + +
$keystring
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Mapper::skip ( $ofs = 1)
+
+

Return record at specified offset using criteria of previous load() call and make it active

+
Returns
array
+
Parameters
+ + +
$ofsint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Mapper::update ()
+
+

Update current record

+
Returns
array
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.png b/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.png new file mode 100644 index 0000000..6282b76 Binary files /dev/null and b/management-interface/lib/api/classDB_1_1Mongo_1_1Mapper.png differ diff --git a/management-interface/lib/api/classDB_1_1Mongo_1_1Session-members.html b/management-interface/lib/api/classDB_1_1Mongo_1_1Session-members.html new file mode 100644 index 0000000..e766661 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Mongo_1_1Session-members.html @@ -0,0 +1,112 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\Mongo\Session Member List
+
+
+ +

This is the complete list of members for DB\Mongo\Session, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$collectionDB\Mongo\Mapper
$cursorDB\Mongo\Mapper
$dbDB\Mongo\Mapperprotected
$documentDB\Mongo\Mapper
$ptrDB\Cursor
$queryDB\Cursorprotected
$sidDB\Mongo\Sessionprotected
$triggerDB\Cursor
__construct(\DB\Mongo $db, $table='sessions')DB\Mongo\Session
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
agent()DB\Mongo\Session
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\Mongo\Mapper
cleanup($max)DB\Mongo\Session
clear($key)DB\Mongo\Mapper
close()DB\Mongo\Session
copyfrom($key, $func=NULL)DB\Mongo\Mapper
copyto($key)DB\Mongo\Mapper
count($filter=NULL, $ttl=0)DB\Mongo\Mapper
csrf()DB\Mongo\Session
cursor()DB\Mongo\Mapper
dbtype()DB\Mongo\Mapper
destroy($id)DB\Mongo\Session
dry()DB\Cursor
E_Field (defined in DB\Cursor)DB\Cursor
erase($filter=NULL)DB\Mongo\Mapper
DB::Cursor::erase()DB\Cursor
exists($key)DB\Mongo\Mapper
factory($row)DB\Mongo\Mapperprotected
fields()DB\Mongo\Mapper
find($filter=NULL, array $options=NULL, $ttl=0)DB\Mongo\Mapper
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)DB\Mongo\Mapper
insert()DB\Mongo\Mapper
ip()DB\Mongo\Session
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
open($path, $name)DB\Mongo\Session
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
read($id)DB\Mongo\Session
reset()DB\Mongo\Mapper
save()DB\Cursor
select($fields=NULL, $filter=NULL, array $options=NULL, $ttl=0)DB\Mongo\Mapper
set($key, $val)DB\Mongo\Mapper
skip($ofs=1)DB\Mongo\Mapper
stamp()DB\Mongo\Session
update()DB\Mongo\Mapper
write($id, $data)DB\Mongo\Session
diff --git a/management-interface/lib/api/classDB_1_1Mongo_1_1Session.html b/management-interface/lib/api/classDB_1_1Mongo_1_1Session.html new file mode 100644 index 0000000..44e7996 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1Mongo_1_1Session.html @@ -0,0 +1,529 @@ + + + + + + + +Fat-Free Framework: DB\Mongo\Session Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
DB\Mongo\Session Class Reference
+
+
+ +

MongoDB-managed session handler. + More...

+
+ + Inheritance diagram for DB\Mongo\Session:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 open ($path, $name)
 
 close ()
 
 read ($id)
 
 write ($id, $data)
 
 destroy ($id)
 
 cleanup ($max)
 
 csrf ()
 
 ip ()
 
 stamp ()
 
 agent ()
 
 __construct (\DB\Mongo $db, $table='sessions')
 
- Public Member Functions inherited from DB\Mongo\Mapper
 dbtype ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 cast ($obj=NULL)
 
 select ($fields=NULL, $filter=NULL, array $options=NULL, $ttl=0)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 skip ($ofs=1)
 
 insert ()
 
 update ()
 
 erase ($filter=NULL)
 
 reset ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 fields ()
 
 cursor ()
 
 __construct (\DB\Mongo $db, $collection)
 
- Public Member Functions inherited from DB\Cursor
 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + +

+Protected Attributes

$sid
 Session ID.
 
- Protected Attributes inherited from DB\Mongo\Mapper
$db
 MongoDB wrapper.
 
- Protected Attributes inherited from DB\Cursor
$query =array()
 Query results.
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from DB\Mongo\Mapper
$collection
 Mongo collection.
 
$document =array()
 Mongo document.
 
$cursor
 Mongo cursor.
 
- Public Attributes inherited from DB\Cursor
$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
- Protected Member Functions inherited from DB\Mongo\Mapper
 factory ($row)
 
+

Detailed Description

+

MongoDB-managed session handler.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Session::__construct (\DB\Mongo $db,
 $table = 'sessions' 
)
+
+

Instantiate class

+
Parameters
+ + + +
$dbobject
$tablestring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
DB\Mongo\Session::agent ()
+
+

Return HTTP user agent

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Session::cleanup ( $max)
+
+

Garbage collector

+
Returns
TRUE
+
Parameters
+ + +
$maxint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Session::close ()
+
+

Close session

+
Returns
TRUE
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Session::csrf ()
+
+

Return anti-CSRF token

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Session::destroy ( $id)
+
+

Destroy session

+
Returns
TRUE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Session::ip ()
+
+

Return IP address

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Session::open ( $path,
 $name 
)
+
+

Open session

+
Returns
TRUE
+
Parameters
+ + + +
$pathstring
$namestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\Mongo\Session::read ( $id)
+
+

Return session data in serialized format

+
Returns
string|FALSE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\Mongo\Session::stamp ()
+
+

Return Unix timestamp

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\Mongo\Session::write ( $id,
 $data 
)
+
+

Write session data

+
Returns
TRUE
+
Parameters
+ + + +
$idstring
$datastring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1Mongo_1_1Session.png b/management-interface/lib/api/classDB_1_1Mongo_1_1Session.png new file mode 100644 index 0000000..0f5e194 Binary files /dev/null and b/management-interface/lib/api/classDB_1_1Mongo_1_1Session.png differ diff --git a/management-interface/lib/api/classDB_1_1SQL-members.html b/management-interface/lib/api/classDB_1_1SQL-members.html new file mode 100644 index 0000000..f1a6e62 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1SQL-members.html @@ -0,0 +1,68 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\SQL Member List
+
+
+ +

This is the complete list of members for DB\SQL, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
$dbnameDB\SQL
$dsnDB\SQL
$engineDB\SQL
$logDB\SQL
$rowsDB\SQL
$transDB\SQL
$uuidDB\SQLprotected
__construct($dsn, $user=NULL, $pw=NULL, array $options=NULL)DB\SQL
begin()DB\SQL
commit()DB\SQL
count()DB\SQL
driver()DB\SQL
exec($cmds, $args=NULL, $ttl=0, $log=TRUE)DB\SQL
log()DB\SQL
name()DB\SQL
quote($val, $type=\PDO::PARAM_STR)DB\SQL
quotekey($key)DB\SQL
rollback()DB\SQL
schema($table, $fields=NULL, $ttl=0)DB\SQL
type($val)DB\SQL
uuid()DB\SQL
value($type, $val)DB\SQL
version()DB\SQL
diff --git a/management-interface/lib/api/classDB_1_1SQL.html b/management-interface/lib/api/classDB_1_1SQL.html new file mode 100644 index 0000000..f993b6a --- /dev/null +++ b/management-interface/lib/api/classDB_1_1SQL.html @@ -0,0 +1,547 @@ + + + + + + + +Fat-Free Framework: DB\SQL Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
DB\SQL Class Reference
+
+
+ +

PDO wrapper. + More...

+
+ + Inheritance diagram for DB\SQL:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 begin ()
 
 rollback ()
 
 commit ()
 
 type ($val)
 
 value ($type, $val)
 
 exec ($cmds, $args=NULL, $ttl=0, $log=TRUE)
 
 count ()
 
 log ()
 
 schema ($table, $fields=NULL, $ttl=0)
 
 quote ($val, $type=\PDO::PARAM_STR)
 
 uuid ()
 
 driver ()
 
 version ()
 
 name ()
 
 quotekey ($key)
 
 __construct ($dsn, $user=NULL, $pw=NULL, array $options=NULL)
 
+ + + + + + + + + + + + + + + + + + + +

+Public Attributes

$dsn
 Data source name.
 
$engine
 Database engine.
 
$dbname
 Database name.
 
$trans =FALSE
 Transaction flag.
 
$rows =0
 Number of rows affected by query.
 
$log
 SQL log.
 
+ + + + +

+Protected Attributes

$uuid
 UUID.
 
+

Detailed Description

+

PDO wrapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL::__construct ( $dsn,
 $user = NULL,
 $pw = NULL,
array $options = NULL 
)
+
+

Instantiate class

+
Parameters
+ + + + + +
$dsnstring
$userstring
$pwstring
$optionsarray
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
DB\SQL::begin ()
+
+

Begin SQL transaction

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::commit ()
+
+

Commit SQL transaction

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::count ()
+
+

Return number of rows affected by last query

+
Returns
int
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::driver ()
+
+

Return database engine

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL::exec ( $cmds,
 $args = NULL,
 $ttl = 0,
 $log = TRUE 
)
+
+

Execute SQL statement(s)

+
Returns
array|int|FALSE
+
Parameters
+ + + + + +
$cmdsstring|array
$argsstring|array
$ttlint
$logbool
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::log ()
+
+

Return SQL profiler results

+
Returns
string
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::name ()
+
+

Return database name

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL::quote ( $val,
 $type = \PDO::PARAM_STR 
)
+
+

Quote string

+
Returns
string
+
Parameters
+ + + +
$valmixed
$typeint
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL::quotekey ( $key)
+
+

Return quoted identifier name

+
Returns
string
+
Parameters
+ + +
$key
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::rollback ()
+
+

Rollback SQL transaction

+
Returns
bool
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL::schema ( $table,
 $fields = NULL,
 $ttl = 0 
)
+
+

Retrieve schema of SQL table

+
Returns
array|FALSE
+
Parameters
+ + + + +
$tablestring
$fieldsarray|string
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL::type ( $val)
+
+

Map data type of argument to a PDO constant

+
Returns
int
+
Parameters
+ + +
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::uuid ()
+
+

Return UUID

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL::value ( $type,
 $val 
)
+
+

Cast value to PHP type

+
Returns
scalar
+
Parameters
+ + + +
$typestring
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL::version ()
+
+

Return server version

+
Returns
string
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1SQL.png b/management-interface/lib/api/classDB_1_1SQL.png new file mode 100644 index 0000000..6e2c0ce Binary files /dev/null and b/management-interface/lib/api/classDB_1_1SQL.png differ diff --git a/management-interface/lib/api/classDB_1_1SQL_1_1Mapper-members.html b/management-interface/lib/api/classDB_1_1SQL_1_1Mapper-members.html new file mode 100644 index 0000000..fc882e3 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1SQL_1_1Mapper-members.html @@ -0,0 +1,106 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\SQL\Mapper Member List
+
+
+ +

This is the complete list of members for DB\SQL\Mapper, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$_idDB\SQL\Mapper
$adhocDB\SQL\Mapper
$dbDB\SQL\Mapperprotected
$engineDB\SQL\Mapper
$fieldsDB\SQL\Mapper
$ptrDB\Cursor
$queryDB\Cursorprotected
$sourceDB\SQL\Mapper
$tableDB\SQL\Mapper
$triggerDB\Cursor
__construct(\DB\SQL $db, $table, $fields=NULL, $ttl=60)DB\SQL\Mapper
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\SQL\Mapper
clear($key)DB\SQL\Mapper
copyfrom($key, $func=NULL)DB\SQL\Mapper
copyto($key)DB\SQL\Mapper
count($filter=NULL, $ttl=0)DB\SQL\Mapper
dbtype()DB\SQL\Mapper
dry()DB\Cursor
E_Adhoc (defined in DB\SQL\Mapper)DB\SQL\Mapper
E_Field (defined in DB\Cursor)DB\Cursor
erase($filter=NULL)DB\SQL\Mapper
DB::Cursor::erase()DB\Cursor
exists($key)DB\SQL\Mapper
factory($row)DB\SQL\Mapperprotected
fields($adhoc=TRUE)DB\SQL\Mapper
find($filter=NULL, array $options=NULL, $ttl=0)DB\SQL\Mapper
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)DB\SQL\Mapper
insert()DB\SQL\Mapper
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
reset()DB\SQL\Mapper
save()DB\Cursor
schema()DB\SQL\Mapper
select($fields, $filter=NULL, array $options=NULL, $ttl=0)DB\SQL\Mapper
set($key, $val)DB\SQL\Mapper
skip($ofs=1)DB\SQL\Mapper
type($pdo)DB\SQL\Mapper
update()DB\SQL\Mapper
diff --git a/management-interface/lib/api/classDB_1_1SQL_1_1Mapper.html b/management-interface/lib/api/classDB_1_1SQL_1_1Mapper.html new file mode 100644 index 0000000..b3f3f0c --- /dev/null +++ b/management-interface/lib/api/classDB_1_1SQL_1_1Mapper.html @@ -0,0 +1,838 @@ + + + + + + + +Fat-Free Framework: DB\SQL\Mapper Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
DB\SQL\Mapper Class Reference
+
+
+ +

SQL data mapper. + More...

+
+ + Inheritance diagram for DB\SQL\Mapper:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 dbtype ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 type ($pdo)
 
 cast ($obj=NULL)
 
 select ($fields, $filter=NULL, array $options=NULL, $ttl=0)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 skip ($ofs=1)
 
 insert ()
 
 update ()
 
 erase ($filter=NULL)
 
 reset ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 schema ()
 
 fields ($adhoc=TRUE)
 
 __construct (\DB\SQL $db, $table, $fields=NULL, $ttl=60)
 
- Public Member Functions inherited from DB\Cursor
 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

$engine
 Database engine.
 
$source
 SQL table.
 
$table
 SQL table (quoted)
 
$_id
 Last insert ID.
 
$fields
 Defined fields.
 
$adhoc =array()
 Adhoc fields.
 
+const E_Adhoc ='Unable to process ad hoc field %s'
 
- Public Attributes inherited from DB\Cursor
$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
+ + + +

+Protected Member Functions

 factory ($row)
 
+ + + + + + + + +

+Protected Attributes

$db
 PDO wrapper.
 
- Protected Attributes inherited from DB\Cursor
$query =array()
 Query results.
 
+

Detailed Description

+

SQL data mapper.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL\Mapper::__construct (\DB\SQL $db,
 $table,
 $fields = NULL,
 $ttl = 60 
)
+
+

Instantiate class

+
Parameters
+ + + + + +
$dbobject
$tablestring
$fieldsarray|string
$ttlint
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
DB\SQL\Mapper::cast ( $obj = NULL)
+
+

Return fields of mapper object as an associative array

+
Returns
array
+
Parameters
+ + +
$objobject
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::clear ( $key)
+
+

Clear value of field

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL\Mapper::copyfrom ( $key,
 $func = NULL 
)
+
+

Hydrate mapper object using hive array variable

+
Returns
NULL
+
Parameters
+ + + +
$keystring
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::copyto ( $key)
+
+

Populate hive array variable with mapper fields

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL\Mapper::count ( $filter = NULL,
 $ttl = 0 
)
+
+

Count records that match criteria

+
Returns
int
+
Parameters
+ + + +
$filterstring|array
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Mapper::dbtype ()
+
+

Return database type

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::erase ( $filter = NULL)
+
+

Delete current record

+
Returns
int
+
Parameters
+ + +
$filterstring|array
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::exists ( $key)
+
+

Return TRUE if field is defined

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DB\SQL\Mapper::factory ( $row)
+
+protected
+
+

Convert array to mapper object

+
Returns
object
+
Parameters
+ + +
$rowarray
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::fields ( $adhoc = TRUE)
+
+

Return field names

+
Returns
array
+
Parameters
+ + +
$adhocbool
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL\Mapper::find ( $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Return records that match criteria

+
Returns
array
+
Parameters
+ + + + +
$filterstring|array
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::get ( $key)
+
+

Retrieve value of field

+
Returns
scalar
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Mapper::insert ()
+
+

Insert new record

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Mapper::reset ()
+
+

Reset cursor

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Mapper::schema ()
+
+

Return schema

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL\Mapper::select ( $fields,
 $filter = NULL,
array $options = NULL,
 $ttl = 0 
)
+
+

Build query string and execute

+
Returns
array
+
Parameters
+ + + + + +
$fieldsstring
$filterstring|array
$optionsarray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL\Mapper::set ( $key,
 $val 
)
+
+

Assign value to field

+
Returns
scalar
+
Parameters
+ + + +
$keystring
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::skip ( $ofs = 1)
+
+

Return record at specified offset using same criteria as previous load() call and make it active

+
Returns
array
+
Parameters
+ + +
$ofsint
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Mapper::type ( $pdo)
+
+

Get PHP type equivalent of PDO constant

+
Returns
string
+
Parameters
+ + +
$pdostring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Mapper::update ()
+
+

Update current record

+
Returns
object
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1SQL_1_1Mapper.png b/management-interface/lib/api/classDB_1_1SQL_1_1Mapper.png new file mode 100644 index 0000000..d14e2de Binary files /dev/null and b/management-interface/lib/api/classDB_1_1SQL_1_1Mapper.png differ diff --git a/management-interface/lib/api/classDB_1_1SQL_1_1Session-members.html b/management-interface/lib/api/classDB_1_1SQL_1_1Session-members.html new file mode 100644 index 0000000..16568b5 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1SQL_1_1Session-members.html @@ -0,0 +1,118 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
DB\SQL\Session Member List
+
+
+ +

This is the complete list of members for DB\SQL\Session, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$_idDB\SQL\Mapper
$adhocDB\SQL\Mapper
$dbDB\SQL\Mapperprotected
$engineDB\SQL\Mapper
$fieldsDB\SQL\Mapper
$ptrDB\Cursor
$queryDB\Cursorprotected
$sidDB\SQL\Sessionprotected
$sourceDB\SQL\Mapper
$tableDB\SQL\Mapper
$triggerDB\Cursor
__construct(\DB\SQL $db, $table='sessions', $force=TRUE)DB\SQL\Session
DB::SQL::Mapper::__construct(\DB\SQL $db, $table, $fields=NULL, $ttl=60)DB\SQL\Mapper
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
aftererase($func)DB\Cursor
afterinsert($func)DB\Cursor
afterupdate($func)DB\Cursor
agent()DB\SQL\Session
beforeerase($func)DB\Cursor
beforeinsert($func)DB\Cursor
beforeupdate($func)DB\Cursor
cast($obj=NULL)DB\SQL\Mapper
cleanup($max)DB\SQL\Session
clear($key)DB\SQL\Mapper
close()DB\SQL\Session
copyfrom($key, $func=NULL)DB\SQL\Mapper
copyto($key)DB\SQL\Mapper
count($filter=NULL, $ttl=0)DB\SQL\Mapper
csrf()DB\SQL\Session
dbtype()DB\SQL\Mapper
destroy($id)DB\SQL\Session
dry()DB\Cursor
E_Adhoc (defined in DB\SQL\Mapper)DB\SQL\Mapper
E_Field (defined in DB\Cursor)DB\Cursor
erase($filter=NULL)DB\SQL\Mapper
DB::Cursor::erase()DB\Cursor
exists($key)DB\SQL\Mapper
factory($row)DB\SQL\Mapperprotected
fields($adhoc=TRUE)DB\SQL\Mapper
find($filter=NULL, array $options=NULL, $ttl=0)DB\SQL\Mapper
findone($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
first()DB\Cursor
get($key)DB\SQL\Mapper
insert()DB\SQL\Mapper
ip()DB\SQL\Session
last()DB\Cursor
load($filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
next()DB\Cursor
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
onerase($func)DB\Cursor
oninsert($func)DB\Cursor
onload($func)DB\Cursor
onupdate($func)DB\Cursor
open($path, $name)DB\SQL\Session
paginate($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)DB\Cursor
prev()DB\Cursor
read($id)DB\SQL\Session
reset()DB\SQL\Mapper
save()DB\Cursor
schema()DB\SQL\Mapper
select($fields, $filter=NULL, array $options=NULL, $ttl=0)DB\SQL\Mapper
set($key, $val)DB\SQL\Mapper
skip($ofs=1)DB\SQL\Mapper
stamp()DB\SQL\Session
type($pdo)DB\SQL\Mapper
update()DB\SQL\Mapper
write($id, $data)DB\SQL\Session
diff --git a/management-interface/lib/api/classDB_1_1SQL_1_1Session.html b/management-interface/lib/api/classDB_1_1SQL_1_1Session.html new file mode 100644 index 0000000..33f4381 --- /dev/null +++ b/management-interface/lib/api/classDB_1_1SQL_1_1Session.html @@ -0,0 +1,553 @@ + + + + + + + +Fat-Free Framework: DB\SQL\Session Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
DB\SQL\Session Class Reference
+
+
+ +

SQL-managed session handler. + More...

+
+ + Inheritance diagram for DB\SQL\Session:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 open ($path, $name)
 
 close ()
 
 read ($id)
 
 write ($id, $data)
 
 destroy ($id)
 
 cleanup ($max)
 
 csrf ()
 
 ip ()
 
 stamp ()
 
 agent ()
 
 __construct (\DB\SQL $db, $table='sessions', $force=TRUE)
 
- Public Member Functions inherited from DB\SQL\Mapper
 dbtype ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 type ($pdo)
 
 cast ($obj=NULL)
 
 select ($fields, $filter=NULL, array $options=NULL, $ttl=0)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 skip ($ofs=1)
 
 insert ()
 
 update ()
 
 erase ($filter=NULL)
 
 reset ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 schema ()
 
 fields ($adhoc=TRUE)
 
 __construct (\DB\SQL $db, $table, $fields=NULL, $ttl=60)
 
- Public Member Functions inherited from DB\Cursor
 dbtype ()
 
 cast ($obj=NULL)
 
 find ($filter=NULL, array $options=NULL, $ttl=0)
 
 count ($filter=NULL, $ttl=0)
 
 insert ()
 
 update ()
 
 copyfrom ($key, $func=NULL)
 
 copyto ($key)
 
 dry ()
 
 findone ($filter=NULL, array $options=NULL, $ttl=0)
 
 paginate ($pos=0, $size=10, $filter=NULL, array $options=NULL, $ttl=0)
 
 load ($filter=NULL, array $options=NULL, $ttl=0)
 
 first ()
 
 last ()
 
 skip ($ofs=1)
 
 next ()
 
 prev ()
 
 save ()
 
 erase ()
 
 onload ($func)
 
 beforeinsert ($func)
 
 afterinsert ($func)
 
 oninsert ($func)
 
 beforeupdate ($func)
 
 afterupdate ($func)
 
 onupdate ($func)
 
 beforeerase ($func)
 
 aftererase ($func)
 
 onerase ($func)
 
 reset ()
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + +

+Protected Attributes

$sid
 Session ID.
 
- Protected Attributes inherited from DB\SQL\Mapper
$db
 PDO wrapper.
 
- Protected Attributes inherited from DB\Cursor
$query =array()
 Query results.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from DB\SQL\Mapper
$engine
 Database engine.
 
$source
 SQL table.
 
$table
 SQL table (quoted)
 
$_id
 Last insert ID.
 
$fields
 Defined fields.
 
$adhoc =array()
 Adhoc fields.
 
+const E_Adhoc ='Unable to process ad hoc field %s'
 
- Public Attributes inherited from DB\Cursor
$ptr =0
 Current position.
 
$trigger =array()
 Event listeners.
 
+const E_Field ='Undefined field %s'
 
- Protected Member Functions inherited from DB\SQL\Mapper
 factory ($row)
 
+

Detailed Description

+

SQL-managed session handler.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
DB\SQL\Session::__construct (\DB\SQL $db,
 $table = 'sessions',
 $force = TRUE 
)
+
+

Instantiate class

+
Parameters
+ + + + +
$dbobject
$tablestring
$forcebool
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
DB\SQL\Session::agent ()
+
+

Return HTTP user agent

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Session::cleanup ( $max)
+
+

Garbage collector

+
Returns
TRUE
+
Parameters
+ + +
$maxint
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Session::close ()
+
+

Close session

+
Returns
TRUE
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Session::csrf ()
+
+

Return anti-CSRF token

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Session::destroy ( $id)
+
+

Destroy session

+
Returns
TRUE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Session::ip ()
+
+

Return IP address

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL\Session::open ( $path,
 $name 
)
+
+

Open session

+
Returns
TRUE
+
Parameters
+ + + +
$pathstring
$namestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
DB\SQL\Session::read ( $id)
+
+

Return session data in serialized format

+
Returns
string|FALSE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
DB\SQL\Session::stamp ()
+
+

Return Unix timestamp

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
DB\SQL\Session::write ( $id,
 $data 
)
+
+

Write session data

+
Returns
TRUE
+
Parameters
+ + + +
$idstring
$datastring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classDB_1_1SQL_1_1Session.png b/management-interface/lib/api/classDB_1_1SQL_1_1Session.png new file mode 100644 index 0000000..e9d15ad Binary files /dev/null and b/management-interface/lib/api/classDB_1_1SQL_1_1Session.png differ diff --git a/management-interface/lib/api/classF3-members.html b/management-interface/lib/api/classF3-members.html new file mode 100644 index 0000000..8111244 --- /dev/null +++ b/management-interface/lib/api/classF3-members.html @@ -0,0 +1,43 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
F3 Member List
+
+
+ +

This is the complete list of members for F3, including all inherited members.

+ + + +
$fwF3static
__callstatic($func, array $args)F3static
diff --git a/management-interface/lib/api/classF3.html b/management-interface/lib/api/classF3.html new file mode 100644 index 0000000..a2cf84c --- /dev/null +++ b/management-interface/lib/api/classF3.html @@ -0,0 +1,107 @@ + + + + + + + +Fat-Free Framework: F3 Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Static Public Member Functions | +Static Public Attributes | +List of all members
+
+
F3 Class Reference
+
+
+ +

Legacy mode enabler. + More...

+ + + + +

+Static Public Member Functions

static __callstatic ($func, array $args)
 
+ + + + +

+Static Public Attributes

+static $fw
 Framework instance.
 
+

Detailed Description

+

Legacy mode enabler.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static F3::__callstatic ( $func,
array $args 
)
+
+static
+
+

Forward function calls to framework

+
Returns
mixed
+
Parameters
+ + + +
$funccallback
$argsarray
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classISO-members.html b/management-interface/lib/api/classISO-members.html new file mode 100644 index 0000000..9396d3c --- /dev/null +++ b/management-interface/lib/api/classISO-members.html @@ -0,0 +1,377 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
ISO Member List
+
+
+ +

This is the complete list of members for ISO, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CC_ad (defined in ISO)ISO
CC_ae (defined in ISO)ISO
CC_af (defined in ISO)ISO
CC_ag (defined in ISO)ISO
CC_ai (defined in ISO)ISO
CC_al (defined in ISO)ISO
CC_am (defined in ISO)ISO
CC_ao (defined in ISO)ISO
CC_aq (defined in ISO)ISO
CC_ar (defined in ISO)ISO
CC_as (defined in ISO)ISO
CC_at (defined in ISO)ISO
CC_au (defined in ISO)ISO
CC_aw (defined in ISO)ISO
CC_ax (defined in ISO)ISO
CC_az (defined in ISO)ISO
CC_ba (defined in ISO)ISO
CC_bb (defined in ISO)ISO
CC_bd (defined in ISO)ISO
CC_be (defined in ISO)ISO
CC_bf (defined in ISO)ISO
CC_bg (defined in ISO)ISO
CC_bh (defined in ISO)ISO
CC_bi (defined in ISO)ISO
CC_bj (defined in ISO)ISO
CC_bl (defined in ISO)ISO
CC_bm (defined in ISO)ISO
CC_bn (defined in ISO)ISO
CC_bo (defined in ISO)ISO
CC_bq (defined in ISO)ISO
CC_br (defined in ISO)ISO
CC_bs (defined in ISO)ISO
CC_bt (defined in ISO)ISO
CC_bv (defined in ISO)ISO
CC_bw (defined in ISO)ISO
CC_by (defined in ISO)ISO
CC_bz (defined in ISO)ISO
CC_ca (defined in ISO)ISO
CC_cc (defined in ISO)ISO
CC_cd (defined in ISO)ISO
CC_cf (defined in ISO)ISO
CC_cg (defined in ISO)ISO
CC_ch (defined in ISO)ISO
CC_ci (defined in ISO)ISO
CC_ck (defined in ISO)ISO
CC_cl (defined in ISO)ISO
CC_cm (defined in ISO)ISO
CC_cn (defined in ISO)ISO
CC_co (defined in ISO)ISO
CC_cr (defined in ISO)ISO
CC_cu (defined in ISO)ISO
CC_cv (defined in ISO)ISO
CC_cw (defined in ISO)ISO
CC_cx (defined in ISO)ISO
CC_cy (defined in ISO)ISO
CC_cz (defined in ISO)ISO
CC_de (defined in ISO)ISO
CC_dj (defined in ISO)ISO
CC_dk (defined in ISO)ISO
CC_dm (defined in ISO)ISO
CC_do (defined in ISO)ISO
CC_dz (defined in ISO)ISO
CC_ec (defined in ISO)ISO
CC_ee (defined in ISO)ISO
CC_eg (defined in ISO)ISO
CC_eh (defined in ISO)ISO
CC_er (defined in ISO)ISO
CC_es (defined in ISO)ISO
CC_et (defined in ISO)ISO
CC_fi (defined in ISO)ISO
CC_fj (defined in ISO)ISO
CC_fk (defined in ISO)ISO
CC_fm (defined in ISO)ISO
CC_fo (defined in ISO)ISO
CC_fr (defined in ISO)ISO
CC_ga (defined in ISO)ISO
CC_gb (defined in ISO)ISO
CC_gd (defined in ISO)ISO
CC_ge (defined in ISO)ISO
CC_gf (defined in ISO)ISO
CC_gg (defined in ISO)ISO
CC_gh (defined in ISO)ISO
CC_gi (defined in ISO)ISO
CC_gl (defined in ISO)ISO
CC_gm (defined in ISO)ISO
CC_gn (defined in ISO)ISO
CC_gp (defined in ISO)ISO
CC_gq (defined in ISO)ISO
CC_gr (defined in ISO)ISO
CC_gs (defined in ISO)ISO
CC_gt (defined in ISO)ISO
CC_gu (defined in ISO)ISO
CC_gw (defined in ISO)ISO
CC_gy (defined in ISO)ISO
CC_hk (defined in ISO)ISO
CC_hm (defined in ISO)ISO
CC_hn (defined in ISO)ISO
CC_hr (defined in ISO)ISO
CC_ht (defined in ISO)ISO
CC_hu (defined in ISO)ISO
CC_id (defined in ISO)ISO
CC_ie (defined in ISO)ISO
CC_il (defined in ISO)ISO
CC_im (defined in ISO)ISO
CC_in (defined in ISO)ISO
CC_io (defined in ISO)ISO
CC_iq (defined in ISO)ISO
CC_ir (defined in ISO)ISO
CC_is (defined in ISO)ISO
CC_it (defined in ISO)ISO
CC_je (defined in ISO)ISO
CC_jm (defined in ISO)ISO
CC_jo (defined in ISO)ISO
CC_jp (defined in ISO)ISO
CC_ke (defined in ISO)ISO
CC_kg (defined in ISO)ISO
CC_kh (defined in ISO)ISO
CC_ki (defined in ISO)ISO
CC_km (defined in ISO)ISO
CC_kn (defined in ISO)ISO
CC_kp (defined in ISO)ISO
CC_kr (defined in ISO)ISO
CC_kw (defined in ISO)ISO
CC_ky (defined in ISO)ISO
CC_kz (defined in ISO)ISO
CC_la (defined in ISO)ISO
CC_lb (defined in ISO)ISO
CC_lc (defined in ISO)ISO
CC_li (defined in ISO)ISO
CC_lk (defined in ISO)ISO
CC_lr (defined in ISO)ISO
CC_ls (defined in ISO)ISO
CC_lt (defined in ISO)ISO
CC_lu (defined in ISO)ISO
CC_lv (defined in ISO)ISO
CC_ly (defined in ISO)ISO
CC_ma (defined in ISO)ISO
CC_mc (defined in ISO)ISO
CC_md (defined in ISO)ISO
CC_me (defined in ISO)ISO
CC_mf (defined in ISO)ISO
CC_mg (defined in ISO)ISO
CC_mh (defined in ISO)ISO
CC_mk (defined in ISO)ISO
CC_ml (defined in ISO)ISO
CC_mm (defined in ISO)ISO
CC_mn (defined in ISO)ISO
CC_mo (defined in ISO)ISO
CC_mp (defined in ISO)ISO
CC_mq (defined in ISO)ISO
CC_mr (defined in ISO)ISO
CC_ms (defined in ISO)ISO
CC_mt (defined in ISO)ISO
CC_mu (defined in ISO)ISO
CC_mv (defined in ISO)ISO
CC_mw (defined in ISO)ISO
CC_mx (defined in ISO)ISO
CC_my (defined in ISO)ISO
CC_mz (defined in ISO)ISO
CC_na (defined in ISO)ISO
CC_nc (defined in ISO)ISO
CC_ne (defined in ISO)ISO
CC_nf (defined in ISO)ISO
CC_ng (defined in ISO)ISO
CC_ni (defined in ISO)ISO
CC_nl (defined in ISO)ISO
CC_no (defined in ISO)ISO
CC_np (defined in ISO)ISO
CC_nr (defined in ISO)ISO
CC_nu (defined in ISO)ISO
CC_nz (defined in ISO)ISO
CC_om (defined in ISO)ISO
CC_pa (defined in ISO)ISO
CC_pe (defined in ISO)ISO
CC_pf (defined in ISO)ISO
CC_pg (defined in ISO)ISO
CC_ph (defined in ISO)ISO
CC_pk (defined in ISO)ISO
CC_pl (defined in ISO)ISO
CC_pm (defined in ISO)ISO
CC_pn (defined in ISO)ISO
CC_pr (defined in ISO)ISO
CC_ps (defined in ISO)ISO
CC_pt (defined in ISO)ISO
CC_pw (defined in ISO)ISO
CC_py (defined in ISO)ISO
CC_qa (defined in ISO)ISO
CC_re (defined in ISO)ISO
CC_ro (defined in ISO)ISO
CC_rs (defined in ISO)ISO
CC_ru (defined in ISO)ISO
CC_rw (defined in ISO)ISO
CC_sa (defined in ISO)ISO
CC_sb (defined in ISO)ISO
CC_sc (defined in ISO)ISO
CC_sd (defined in ISO)ISO
CC_se (defined in ISO)ISO
CC_sg (defined in ISO)ISO
CC_sh (defined in ISO)ISO
CC_si (defined in ISO)ISO
CC_sj (defined in ISO)ISO
CC_sk (defined in ISO)ISO
CC_sl (defined in ISO)ISO
CC_sm (defined in ISO)ISO
CC_sn (defined in ISO)ISO
CC_so (defined in ISO)ISO
CC_sr (defined in ISO)ISO
CC_ss (defined in ISO)ISO
CC_st (defined in ISO)ISO
CC_sv (defined in ISO)ISO
CC_sx (defined in ISO)ISO
CC_sy (defined in ISO)ISO
CC_sz (defined in ISO)ISO
CC_tc (defined in ISO)ISO
CC_td (defined in ISO)ISO
CC_tf (defined in ISO)ISO
CC_tg (defined in ISO)ISO
CC_th (defined in ISO)ISO
CC_tj (defined in ISO)ISO
CC_tk (defined in ISO)ISO
CC_tl (defined in ISO)ISO
CC_tm (defined in ISO)ISO
CC_tn (defined in ISO)ISO
CC_to (defined in ISO)ISO
CC_tr (defined in ISO)ISO
CC_tt (defined in ISO)ISO
CC_tv (defined in ISO)ISO
CC_tw (defined in ISO)ISO
CC_tz (defined in ISO)ISO
CC_ua (defined in ISO)ISO
CC_ug (defined in ISO)ISO
CC_um (defined in ISO)ISO
CC_us (defined in ISO)ISO
CC_uy (defined in ISO)ISO
CC_uz (defined in ISO)ISO
CC_va (defined in ISO)ISO
CC_vc (defined in ISO)ISO
CC_ve (defined in ISO)ISO
CC_vg (defined in ISO)ISO
CC_vi (defined in ISO)ISO
CC_vn (defined in ISO)ISO
CC_vu (defined in ISO)ISO
CC_wf (defined in ISO)ISO
CC_ws (defined in ISO)ISO
CC_ye (defined in ISO)ISO
CC_yt (defined in ISO)ISO
CC_za (defined in ISO)ISO
CC_zm (defined in ISO)ISO
CC_zw (defined in ISO)ISO
constants($prefix)ISOprotected
countries()ISO
instance()Prefabstatic
languages()ISO
LC_af (defined in ISO)ISO
LC_am (defined in ISO)ISO
LC_ar (defined in ISO)ISO
LC_as (defined in ISO)ISO
LC_ba (defined in ISO)ISO
LC_be (defined in ISO)ISO
LC_bg (defined in ISO)ISO
LC_bn (defined in ISO)ISO
LC_bo (defined in ISO)ISO
LC_br (defined in ISO)ISO
LC_ca (defined in ISO)ISO
LC_co (defined in ISO)ISO
LC_cs (defined in ISO)ISO
LC_cy (defined in ISO)ISO
LC_da (defined in ISO)ISO
LC_de (defined in ISO)ISO
LC_dv (defined in ISO)ISO
LC_el (defined in ISO)ISO
LC_en (defined in ISO)ISO
LC_es (defined in ISO)ISO
LC_et (defined in ISO)ISO
LC_eu (defined in ISO)ISO
LC_fa (defined in ISO)ISO
LC_fi (defined in ISO)ISO
LC_fo (defined in ISO)ISO
LC_fr (defined in ISO)ISO
LC_gd (defined in ISO)ISO
LC_gl (defined in ISO)ISO
LC_gu (defined in ISO)ISO
LC_he (defined in ISO)ISO
LC_hi (defined in ISO)ISO
LC_hr (defined in ISO)ISO
LC_hu (defined in ISO)ISO
LC_hy (defined in ISO)ISO
LC_id (defined in ISO)ISO
LC_ig (defined in ISO)ISO
LC_is (defined in ISO)ISO
LC_it (defined in ISO)ISO
LC_ja (defined in ISO)ISO
LC_ka (defined in ISO)ISO
LC_kk (defined in ISO)ISO
LC_km (defined in ISO)ISO
LC_kn (defined in ISO)ISO
LC_ko (defined in ISO)ISO
LC_lb (defined in ISO)ISO
LC_lo (defined in ISO)ISO
LC_lt (defined in ISO)ISO
LC_lv (defined in ISO)ISO
LC_mi (defined in ISO)ISO
LC_ml (defined in ISO)ISO
LC_mr (defined in ISO)ISO
LC_ms (defined in ISO)ISO
LC_mt (defined in ISO)ISO
LC_ne (defined in ISO)ISO
LC_nl (defined in ISO)ISO
LC_no (defined in ISO)ISO
LC_oc (defined in ISO)ISO
LC_or (defined in ISO)ISO
LC_pl (defined in ISO)ISO
LC_ps (defined in ISO)ISO
LC_pt (defined in ISO)ISO
LC_qu (defined in ISO)ISO
LC_ro (defined in ISO)ISO
LC_ru (defined in ISO)ISO
LC_rw (defined in ISO)ISO
LC_sa (defined in ISO)ISO
LC_si (defined in ISO)ISO
LC_sk (defined in ISO)ISO
LC_sl (defined in ISO)ISO
LC_sq (defined in ISO)ISO
LC_sv (defined in ISO)ISO
LC_ta (defined in ISO)ISO
LC_te (defined in ISO)ISO
LC_th (defined in ISO)ISO
LC_tk (defined in ISO)ISO
LC_tr (defined in ISO)ISO
LC_tt (defined in ISO)ISO
LC_uk (defined in ISO)ISO
LC_ur (defined in ISO)ISO
LC_vi (defined in ISO)ISO
LC_wo (defined in ISO)ISO
LC_yo (defined in ISO)ISO
LC_zh (defined in ISO)ISO
diff --git a/management-interface/lib/api/classISO.html b/management-interface/lib/api/classISO.html new file mode 100644 index 0000000..d747c6f --- /dev/null +++ b/management-interface/lib/api/classISO.html @@ -0,0 +1,1148 @@ + + + + + + + +Fat-Free Framework: ISO Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Member Functions | +List of all members
+
+
ISO Class Reference
+
+
+ +

ISO language/country codes. + More...

+
+ + Inheritance diagram for ISO:
+
+
+ + + + + + + +

+Public Member Functions

 languages ()
 
 countries ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+const CC_af ='Afghanistan'
 
+const CC_ax ='Åland Islands'
 
+const CC_al ='Albania'
 
+const CC_dz ='Algeria'
 
+const CC_as ='American Samoa'
 
+const CC_ad ='Andorra'
 
+const CC_ao ='Angola'
 
+const CC_ai ='Anguilla'
 
+const CC_aq ='Antarctica'
 
+const CC_ag ='Antigua and Barbuda'
 
+const CC_ar ='Argentina'
 
+const CC_am ='Armenia'
 
+const CC_aw ='Aruba'
 
+const CC_au ='Australia'
 
+const CC_at ='Austria'
 
+const CC_az ='Azerbaijan'
 
+const CC_bs ='Bahamas'
 
+const CC_bh ='Bahrain'
 
+const CC_bd ='Bangladesh'
 
+const CC_bb ='Barbados'
 
+const CC_by ='Belarus'
 
+const CC_be ='Belgium'
 
+const CC_bz ='Belize'
 
+const CC_bj ='Benin'
 
+const CC_bm ='Bermuda'
 
+const CC_bt ='Bhutan'
 
+const CC_bo ='Bolivia'
 
+const CC_bq ='Bonaire, Sint Eustatius and Saba'
 
+const CC_ba ='Bosnia and Herzegovina'
 
+const CC_bw ='Botswana'
 
+const CC_bv ='Bouvet Island'
 
+const CC_br ='Brazil'
 
+const CC_io ='British Indian Ocean Territory'
 
+const CC_bn ='Brunei Darussalam'
 
+const CC_bg ='Bulgaria'
 
+const CC_bf ='Burkina Faso'
 
+const CC_bi ='Burundi'
 
+const CC_kh ='Cambodia'
 
+const CC_cm ='Cameroon'
 
+const CC_ca ='Canada'
 
+const CC_cv ='Cape Verde'
 
+const CC_ky ='Cayman Islands'
 
+const CC_cf ='Central African Republic'
 
+const CC_td ='Chad'
 
+const CC_cl ='Chile'
 
+const CC_cn ='China'
 
+const CC_cx ='Christmas Island'
 
+const CC_cc ='Cocos (Keeling) Islands'
 
+const CC_co ='Colombia'
 
+const CC_km ='Comoros'
 
+const CC_cg ='Congo'
 
+const CC_cd ='Congo, The Democratic Republic of'
 
+const CC_ck ='Cook Islands'
 
+const CC_cr ='Costa Rica'
 
+const CC_ci ='Côte d\'ivoire'
 
+const CC_hr ='Croatia'
 
+const CC_cu ='Cuba'
 
+const CC_cw ='Curaçao'
 
+const CC_cy ='Cyprus'
 
+const CC_cz ='Czech Republic'
 
+const CC_dk ='Denmark'
 
+const CC_dj ='Djibouti'
 
+const CC_dm ='Dominica'
 
+const CC_do ='Dominican Republic'
 
+const CC_ec ='Ecuador'
 
+const CC_eg ='Egypt'
 
+const CC_sv ='El Salvador'
 
+const CC_gq ='Equatorial Guinea'
 
+const CC_er ='Eritrea'
 
+const CC_ee ='Estonia'
 
+const CC_et ='Ethiopia'
 
+const CC_fk ='Falkland Islands (Malvinas)'
 
+const CC_fo ='Faroe Islands'
 
+const CC_fj ='Fiji'
 
+const CC_fi ='Finland'
 
+const CC_fr ='France'
 
+const CC_gf ='French Guiana'
 
+const CC_pf ='French Polynesia'
 
+const CC_tf ='French Southern Territories'
 
+const CC_ga ='Gabon'
 
+const CC_gm ='Gambia'
 
+const CC_ge ='Georgia'
 
+const CC_de ='Germany'
 
+const CC_gh ='Ghana'
 
+const CC_gi ='Gibraltar'
 
+const CC_gr ='Greece'
 
+const CC_gl ='Greenland'
 
+const CC_gd ='Grenada'
 
+const CC_gp ='Guadeloupe'
 
+const CC_gu ='Guam'
 
+const CC_gt ='Guatemala'
 
+const CC_gg ='Guernsey'
 
+const CC_gn ='Guinea'
 
+const CC_gw ='Guinea-Bissau'
 
+const CC_gy ='Guyana'
 
+const CC_ht ='Haiti'
 
+const CC_hm ='Heard Island and McDonald Islands'
 
+const CC_va ='Holy See (Vatican City State)'
 
+const CC_hn ='Honduras'
 
+const CC_hk ='Hong Kong'
 
+const CC_hu ='Hungary'
 
+const CC_is ='Iceland'
 
+const CC_in ='India'
 
+const CC_id ='Indonesia'
 
+const CC_ir ='Iran, Islamic Republic of'
 
+const CC_iq ='Iraq'
 
+const CC_ie ='Ireland'
 
+const CC_im ='Isle of Man'
 
+const CC_il ='Israel'
 
+const CC_it ='Italy'
 
+const CC_jm ='Jamaica'
 
+const CC_jp ='Japan'
 
+const CC_je ='Jersey'
 
+const CC_jo ='Jordan'
 
+const CC_kz ='Kazakhstan'
 
+const CC_ke ='Kenya'
 
+const CC_ki ='Kiribati'
 
+const CC_kp ='Korea, Democratic People\'s Republic of'
 
+const CC_kr ='Korea, Republic of'
 
+const CC_kw ='Kuwait'
 
+const CC_kg ='Kyrgyzstan'
 
+const CC_la ='Lao People\'s Democratic Republic'
 
+const CC_lv ='Latvia'
 
+const CC_lb ='Lebanon'
 
+const CC_ls ='Lesotho'
 
+const CC_lr ='Liberia'
 
+const CC_ly ='Libya'
 
+const CC_li ='Liechtenstein'
 
+const CC_lt ='Lithuania'
 
+const CC_lu ='Luxembourg'
 
+const CC_mo ='Macao'
 
+const CC_mk ='Macedonia, The Former Yugoslav Republic of'
 
+const CC_mg ='Madagascar'
 
+const CC_mw ='Malawi'
 
+const CC_my ='Malaysia'
 
+const CC_mv ='Maldives'
 
+const CC_ml ='Mali'
 
+const CC_mt ='Malta'
 
+const CC_mh ='Marshall Islands'
 
+const CC_mq ='Martinique'
 
+const CC_mr ='Mauritania'
 
+const CC_mu ='Mauritius'
 
+const CC_yt ='Mayotte'
 
+const CC_mx ='Mexico'
 
+const CC_fm ='Micronesia, Federated States of'
 
+const CC_md ='Moldova, Republic of'
 
+const CC_mc ='Monaco'
 
+const CC_mn ='Mongolia'
 
+const CC_me ='Montenegro'
 
+const CC_ms ='Montserrat'
 
+const CC_ma ='Morocco'
 
+const CC_mz ='Mozambique'
 
+const CC_mm ='Myanmar'
 
+const CC_na ='Namibia'
 
+const CC_nr ='Nauru'
 
+const CC_np ='Nepal'
 
+const CC_nl ='Netherlands'
 
+const CC_nc ='New Caledonia'
 
+const CC_nz ='New Zealand'
 
+const CC_ni ='Nicaragua'
 
+const CC_ne ='Niger'
 
+const CC_ng ='Nigeria'
 
+const CC_nu ='Niue'
 
+const CC_nf ='Norfolk Island'
 
+const CC_mp ='Northern Mariana Islands'
 
+const CC_no ='Norway'
 
+const CC_om ='Oman'
 
+const CC_pk ='Pakistan'
 
+const CC_pw ='Palau'
 
+const CC_ps ='Palestinian Territory, Occupied'
 
+const CC_pa ='Panama'
 
+const CC_pg ='Papua New Guinea'
 
+const CC_py ='Paraguay'
 
+const CC_pe ='Peru'
 
+const CC_ph ='Philippines'
 
+const CC_pn ='Pitcairn'
 
+const CC_pl ='Poland'
 
+const CC_pt ='Portugal'
 
+const CC_pr ='Puerto Rico'
 
+const CC_qa ='Qatar'
 
+const CC_re ='Réunion'
 
+const CC_ro ='Romania'
 
+const CC_ru ='Russian Federation'
 
+const CC_rw ='Rwanda'
 
+const CC_bl ='Saint Barthélemy'
 
+const CC_sh ='Saint Helena, Ascension and Tristan da Cunha'
 
+const CC_kn ='Saint Kitts and Nevis'
 
+const CC_lc ='Saint Lucia'
 
+const CC_mf ='Saint Martin (French Part)'
 
+const CC_pm ='Saint Pierre and Miquelon'
 
+const CC_vc ='Saint Vincent and The Grenadines'
 
+const CC_ws ='Samoa'
 
+const CC_sm ='San Marino'
 
+const CC_st ='Sao Tome and Principe'
 
+const CC_sa ='Saudi Arabia'
 
+const CC_sn ='Senegal'
 
+const CC_rs ='Serbia'
 
+const CC_sc ='Seychelles'
 
+const CC_sl ='Sierra Leone'
 
+const CC_sg ='Singapore'
 
+const CC_sk ='Slovakia'
 
+const CC_sx ='Sint Maarten (Dutch Part)'
 
+const CC_si ='Slovenia'
 
+const CC_sb ='Solomon Islands'
 
+const CC_so ='Somalia'
 
+const CC_za ='South Africa'
 
+const CC_gs ='South Georgia and The South Sandwich Islands'
 
+const CC_ss ='South Sudan'
 
+const CC_es ='Spain'
 
+const CC_lk ='Sri Lanka'
 
+const CC_sd ='Sudan'
 
+const CC_sr ='Suriname'
 
+const CC_sj ='Svalbard and Jan Mayen'
 
+const CC_sz ='Swaziland'
 
+const CC_se ='Sweden'
 
+const CC_ch ='Switzerland'
 
+const CC_sy ='Syrian Arab Republic'
 
+const CC_tw ='Taiwan, Province of China'
 
+const CC_tj ='Tajikistan'
 
+const CC_tz ='Tanzania, United Republic of'
 
+const CC_th ='Thailand'
 
+const CC_tl ='Timor-Leste'
 
+const CC_tg ='Togo'
 
+const CC_tk ='Tokelau'
 
+const CC_to ='Tonga'
 
+const CC_tt ='Trinidad and Tobago'
 
+const CC_tn ='Tunisia'
 
+const CC_tr ='Turkey'
 
+const CC_tm ='Turkmenistan'
 
+const CC_tc ='Turks and Caicos Islands'
 
+const CC_tv ='Tuvalu'
 
+const CC_ug ='Uganda'
 
+const CC_ua ='Ukraine'
 
+const CC_ae ='United Arab Emirates'
 
+const CC_gb ='United Kingdom'
 
+const CC_us ='United States'
 
+const CC_um ='United States Minor Outlying Islands'
 
+const CC_uy ='Uruguay'
 
+const CC_uz ='Uzbekistan'
 
+const CC_vu ='Vanuatu'
 
+const CC_ve ='Venezuela'
 
+const CC_vn ='Viet Nam'
 
+const CC_vg ='Virgin Islands, British'
 
+const CC_vi ='Virgin Islands, U.S.'
 
+const CC_wf ='Wallis and Futuna'
 
+const CC_eh ='Western Sahara'
 
+const CC_ye ='Yemen'
 
+const CC_zm ='Zambia'
 
+const CC_zw ='Zimbabwe'
 
+const LC_af ='Afrikaans'
 
+const LC_am ='Amharic'
 
+const LC_ar ='Arabic'
 
+const LC_as ='Assamese'
 
+const LC_ba ='Bashkir'
 
+const LC_be ='Belarusian'
 
+const LC_bg ='Bulgarian'
 
+const LC_bn ='Bengali'
 
+const LC_bo ='Tibetan'
 
+const LC_br ='Breton'
 
+const LC_ca ='Catalan'
 
+const LC_co ='Corsican'
 
+const LC_cs ='Czech'
 
+const LC_cy ='Welsh'
 
+const LC_da ='Danish'
 
+const LC_de ='German'
 
+const LC_dv ='Divehi'
 
+const LC_el ='Greek'
 
+const LC_en ='English'
 
+const LC_es ='Spanish'
 
+const LC_et ='Estonian'
 
+const LC_eu ='Basque'
 
+const LC_fa ='Persian'
 
+const LC_fi ='Finnish'
 
+const LC_fo ='Faroese'
 
+const LC_fr ='French'
 
+const LC_gd ='Scottish Gaelic'
 
+const LC_gl ='Galician'
 
+const LC_gu ='Gujarati'
 
+const LC_he ='Hebrew'
 
+const LC_hi ='Hindi'
 
+const LC_hr ='Croatian'
 
+const LC_hu ='Hungarian'
 
+const LC_hy ='Armenian'
 
+const LC_id ='Indonesian'
 
+const LC_ig ='Igbo'
 
+const LC_is ='Icelandic'
 
+const LC_it ='Italian'
 
+const LC_ja ='Japanese'
 
+const LC_ka ='Georgian'
 
+const LC_kk ='Kazakh'
 
+const LC_km ='Khmer'
 
+const LC_kn ='Kannada'
 
+const LC_ko ='Korean'
 
+const LC_lb ='Luxembourgish'
 
+const LC_lo ='Lao'
 
+const LC_lt ='Lithuanian'
 
+const LC_lv ='Latvian'
 
+const LC_mi ='Maori'
 
+const LC_ml ='Malayalam'
 
+const LC_mr ='Marathi'
 
+const LC_ms ='Malay'
 
+const LC_mt ='Maltese'
 
+const LC_ne ='Nepali'
 
+const LC_nl ='Dutch'
 
+const LC_no ='Norwegian'
 
+const LC_oc ='Occitan'
 
+const LC_or ='Oriya'
 
+const LC_pl ='Polish'
 
+const LC_ps ='Pashto'
 
+const LC_pt ='Portuguese'
 
+const LC_qu ='Quechua'
 
+const LC_ro ='Romanian'
 
+const LC_ru ='Russian'
 
+const LC_rw ='Kinyarwanda'
 
+const LC_sa ='Sanskrit'
 
+const LC_si ='Sinhala'
 
+const LC_sk ='Slovak'
 
+const LC_sl ='Slovenian'
 
+const LC_sq ='Albanian'
 
+const LC_sv ='Swedish'
 
+const LC_ta ='Tamil'
 
+const LC_te ='Telugu'
 
+const LC_th ='Thai'
 
+const LC_tk ='Turkmen'
 
+const LC_tr ='Turkish'
 
+const LC_tt ='Tatar'
 
+const LC_uk ='Ukrainian'
 
+const LC_ur ='Urdu'
 
+const LC_vi ='Vietnamese'
 
+const LC_wo ='Wolof'
 
+const LC_yo ='Yoruba'
 
+const LC_zh ='Chinese'
 
+ + + +

+Protected Member Functions

 constants ($prefix)
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

ISO language/country codes.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ISO::constants ( $prefix)
+
+protected
+
+

Convert class constants to array

+
Returns
array
+
Parameters
+ + +
$prefixstring
+
+
+ +
+
+ +
+
+ + + + + + + +
ISO::countries ()
+
+

Return list of countries indexed by ISO 3166-1 country code

+
Returns
array
+ +
+
+ +
+
+ + + + + + + +
ISO::languages ()
+
+

Return list of languages indexed by ISO 639-1 language code

+
Returns
array
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classISO.png b/management-interface/lib/api/classISO.png new file mode 100644 index 0000000..197c8fd Binary files /dev/null and b/management-interface/lib/api/classISO.png differ diff --git a/management-interface/lib/api/classImage-members.html b/management-interface/lib/api/classImage-members.html new file mode 100644 index 0000000..a64d816 --- /dev/null +++ b/management-interface/lib/api/classImage-members.html @@ -0,0 +1,83 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Image Member List
+
+
+ +

This is the complete list of members for Image, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$countImage
$dataImage
$fileImageprotected
$flagImage
__construct($file=NULL, $flag=FALSE, $path='')Image
__destruct()Image
blur($selective=FALSE)Image
brightness($level)Image
captcha($font, $size=24, $len=5, $key=NULL, $path='', $fg=0xFFFFFF, $bg=0x000000)Image
contrast($level)Image
crop($x1, $y1, $x2, $y2)Image
dump()Image
E_Color (defined in Image)Image
E_Font (defined in Image)Image
E_Length (defined in Image)Image
emboss()Image
grayscale()Image
height()Image
hflip()Image
identicon($str, $size=64, $blocks=4)Image
invert()Image
load($str)Image
overlay(Image $img, $align=NULL)Image
pixelate($size)Image
POS_Bottom (defined in Image)Image
POS_Center (defined in Image)Image
POS_Left (defined in Image)Image
POS_Middle (defined in Image)Image
POS_Right (defined in Image)Image
POS_Top (defined in Image)Image
render()Image
resize($width, $height, $crop=TRUE, $enlarge=TRUE)Image
restore($state=1)Image
rgb($color)Image
rotate($angle)Image
save()Image
sepia()Image
sketch()Image
smooth($level)Image
undo()Image
vflip()Image
width()Image
diff --git a/management-interface/lib/api/classImage.html b/management-interface/lib/api/classImage.html new file mode 100644 index 0000000..31f70e9 --- /dev/null +++ b/management-interface/lib/api/classImage.html @@ -0,0 +1,906 @@ + + + + + + + +Fat-Free Framework: Image Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
Image Class Reference
+
+
+ +

Image manipulation tools. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 rgb ($color)
 
 invert ()
 
 brightness ($level)
 
 contrast ($level)
 
 grayscale ()
 
 smooth ($level)
 
 emboss ()
 
 sepia ()
 
 pixelate ($size)
 
 blur ($selective=FALSE)
 
 sketch ()
 
 hflip ()
 
 vflip ()
 
 crop ($x1, $y1, $x2, $y2)
 
 resize ($width, $height, $crop=TRUE, $enlarge=TRUE)
 
 rotate ($angle)
 
 overlay (Image $img, $align=NULL)
 
 identicon ($str, $size=64, $blocks=4)
 
 captcha ($font, $size=24, $len=5, $key=NULL, $path='', $fg=0xFFFFFF, $bg=0x000000)
 
 width ()
 
 height ()
 
 render ()
 
 dump ()
 
 save ()
 
 restore ($state=1)
 
 undo ()
 
 load ($str)
 
 __construct ($file=NULL, $flag=FALSE, $path='')
 
 __destruct ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

$data
 Image resource.
 
$flag =FALSE
 Enable/disable history.
 
$count =0
 Filter count.
 
+const E_Color ='Invalid color specified: %s'
 
+const E_Font ='CAPTCHA font not found'
 
+const E_Length ='Invalid CAPTCHA length: %s'
 
+const POS_Left =1
 
+const POS_Center =2
 
+const POS_Right =4
 
+const POS_Top =8
 
+const POS_Middle =16
 
+const POS_Bottom =32
 
+ + + + +

+Protected Attributes

$file
 Source filename.
 
+

Detailed Description

+

Image manipulation tools.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Image::__construct ( $file = NULL,
 $flag = FALSE,
 $path = '' 
)
+
+

Instantiate image

+
Parameters
+ + + + +
$filestring
$flagbool
$pathstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Image::__destruct ()
+
+

Wrap-up

+
Returns
NULL
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
Image::blur ( $selective = FALSE)
+
+

Blur the image using Gaussian filter

+
Returns
object
+
Parameters
+ + +
$selectivebool
+
+
+ +
+
+ +
+
+ + + + + + + + +
Image::brightness ( $level)
+
+

Adjust brightness (range:-255 to 255)

+
Returns
object
+
Parameters
+ + +
$levelint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Image::captcha ( $font,
 $size = 24,
 $len = 5,
 $key = NULL,
 $path = '',
 $fg = 0xFFFFFF,
 $bg = 0x000000 
)
+
+

Generate CAPTCHA image

+
Returns
object|FALSE
+
Parameters
+ + + + + + + + +
$fontstring
$sizeint
$lenint
$keystring
$pathstring
$fgint
$bgint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Image::contrast ( $level)
+
+

Adjust contrast (range:-100 to 100)

+
Returns
object
+
Parameters
+ + +
$levelint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Image::crop ( $x1,
 $y1,
 $x2,
 $y2 
)
+
+

Crop the image

+
Returns
object
+
Parameters
+ + + + + +
$x1int
$y1int
$x2int
$y2int
+
+
+ +
+
+ +
+
+ + + + + + + +
Image::dump ()
+
+

Return image as a string

+
Returns
string
+ +
+
+ +
+
+ + + + + + + +
Image::emboss ()
+
+

Emboss the image

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
Image::grayscale ()
+
+

Convert to grayscale

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
Image::height ()
+
+

Return image height

+
Returns
int
+ +
+
+ +
+
+ + + + + + + +
Image::hflip ()
+
+

Flip on horizontal axis

+
Returns
object
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Image::identicon ( $str,
 $size = 64,
 $blocks = 4 
)
+
+

Generate identicon

+
Returns
object
+
Parameters
+ + + + +
$strstring
$sizeint
$blocksint
+
+
+ +
+
+ +
+
+ + + + + + + +
Image::invert ()
+
+

Invert image

+
Returns
object
+ +
+
+ +
+
+ + + + + + + + +
Image::load ( $str)
+
+

Load string

+
Returns
object
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Image::overlay (Image $img,
 $align = NULL 
)
+
+

Apply an image overlay

+
Returns
object
+
Parameters
+ + + +
$imgobject
$alignint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Image::pixelate ( $size)
+
+

Pixelate the image

+
Returns
object
+
Parameters
+ + +
$sizeint
+
+
+ +
+
+ +
+
+ + + + + + + +
Image::render ()
+
+

Send image to HTTP client

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Image::resize ( $width,
 $height,
 $crop = TRUE,
 $enlarge = TRUE 
)
+
+

Resize image (Maintain aspect ratio); Crop relative to center if flag is enabled; Enlargement allowed if flag is enabled

+
Returns
object
+
Parameters
+ + + + + +
$widthint
$heightint
$cropbool
$enlargebool
+
+
+ +
+
+ +
+
+ + + + + + + + +
Image::restore ( $state = 1)
+
+

Revert to specified state

+
Returns
object
+
Parameters
+ + +
$stateint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Image::rgb ( $color)
+
+

Convert RGB hex triad to array

+
Returns
array|FALSE
+
Parameters
+ + +
$colorint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Image::rotate ( $angle)
+
+

Rotate image

+
Returns
object
+
Parameters
+ + +
$angleint
+
+
+ +
+
+ +
+
+ + + + + + + +
Image::save ()
+
+

Save current state

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
Image::sepia ()
+
+

Apply sepia effect

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
Image::sketch ()
+
+

Apply sketch effect

+
Returns
object
+ +
+
+ +
+
+ + + + + + + + +
Image::smooth ( $level)
+
+

Adjust smoothness

+
Returns
object
+
Parameters
+ + +
$levelint
+
+
+ +
+
+ +
+
+ + + + + + + +
Image::undo ()
+
+

Undo most recently applied filter

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
Image::vflip ()
+
+

Flip on vertical axis

+
Returns
object
+ +
+
+ +
+
+ + + + + + + +
Image::width ()
+
+

Return image width

+
Returns
int
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classLog-members.html b/management-interface/lib/api/classLog-members.html new file mode 100644 index 0000000..e16654b --- /dev/null +++ b/management-interface/lib/api/classLog-members.html @@ -0,0 +1,45 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Log Member List
+
+
+ +

This is the complete list of members for Log, including all inherited members.

+ + + + + +
$fileLogprotected
__construct($file)Log
erase()Log
write($text, $format='r')Log
diff --git a/management-interface/lib/api/classLog.html b/management-interface/lib/api/classLog.html new file mode 100644 index 0000000..0e5a202 --- /dev/null +++ b/management-interface/lib/api/classLog.html @@ -0,0 +1,144 @@ + + + + + + + +Fat-Free Framework: Log Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
Log Class Reference
+
+
+ +

Custom logger. + More...

+ + + + + + + + +

+Public Member Functions

 write ($text, $format='r')
 
 erase ()
 
 __construct ($file)
 
+ + + + +

+Protected Attributes

$file
 File name.
 
+

Detailed Description

+

Custom logger.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
Log::__construct ( $file)
+
+

Instantiate class

+
Parameters
+ + +
$filestring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Log::erase ()
+
+

Erase log

+
Returns
NULL
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Log::write ( $text,
 $format = 'r' 
)
+
+

Write specified text to log file

+
Returns
string
+
Parameters
+ + + +
$textstring
$formatstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classMagic-members.html b/management-interface/lib/api/classMagic-members.html new file mode 100644 index 0000000..e8853ee --- /dev/null +++ b/management-interface/lib/api/classMagic-members.html @@ -0,0 +1,53 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Magic Member List
+
+
+ +

This is the complete list of members for Magic, including all inherited members.

+ + + + + + + + + + + + + +
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
clear($key)Magic
exists($key)Magic
get($key)Magic
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
set($key, $val)Magic
diff --git a/management-interface/lib/api/classMagic.html b/management-interface/lib/api/classMagic.html new file mode 100644 index 0000000..84796cd --- /dev/null +++ b/management-interface/lib/api/classMagic.html @@ -0,0 +1,450 @@ + + + + + + + +Fat-Free Framework: Magic Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
+
Magic Class Reference
+
+
+ +

PHP magic wrapper. + More...

+
+ + Inheritance diagram for Magic:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+

Detailed Description

+

PHP magic wrapper.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
Magic::__get ( $key)
+
+

Alias for offsetget()

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Magic::__isset ( $key)
+
+

Alias for offsetexists()

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Magic::__set ( $key,
 $val 
)
+
+

Alias for offsetset()

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + + +
Magic::__unset ( $key)
+
+

Alias for offsetunset()

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Magic::clear ( $key)
+
+abstract
+
+

Unset key

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Magic::exists ( $key)
+
+abstract
+
+

Return TRUE if key is not empty

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Magic::get ( $key)
+
+abstract
+
+

Retrieve contents of key

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Magic::offsetexists ( $key)
+
+

Convenience method for checking property value

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Magic::offsetget ( $key)
+
+

Convenience method for retrieving property value

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Magic::offsetset ( $key,
 $val 
)
+
+

Convenience method for assigning property value

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$valscalar
+
+
+ +
+
+ +
+
+ + + + + + + + +
Magic::offsetunset ( $key)
+
+

Convenience method for checking property value

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Magic::set ( $key,
 $val 
)
+
+abstract
+
+

Bind value to key

+
Returns
mixed
+
Parameters
+ + + +
$keystring
$valmixed
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classMagic.png b/management-interface/lib/api/classMagic.png new file mode 100644 index 0000000..7a6c07c Binary files /dev/null and b/management-interface/lib/api/classMagic.png differ diff --git a/management-interface/lib/api/classMarkdown-members.html b/management-interface/lib/api/classMarkdown-members.html new file mode 100644 index 0000000..0316071 --- /dev/null +++ b/management-interface/lib/api/classMarkdown-members.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Markdown Member List
+
+
+ +

This is the complete list of members for Markdown, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
$blocksMarkdownprotected
$specialMarkdown
_a($str)Markdownprotected
_atx($type, $str)Markdownprotected
_auto($str)Markdownprotected
_blockquote($str)Markdownprotected
_code($str)Markdownprotected
_fence($hint, $str)Markdownprotected
_hr()Markdownprotected
_img($str)Markdownprotected
_li($str)Markdownprotected
_p($str)Markdownprotected
_pre($str)Markdownprotected
_raw($str)Markdownprotected
_setext($str, $type)Markdownprotected
_text($str)Markdownprotected
build($str)Markdownprotected
convert($txt)Markdown
esc($str)Markdown
instance()Prefabstatic
scan($str)Markdown
snip($str)Markdownprotected
diff --git a/management-interface/lib/api/classMarkdown.html b/management-interface/lib/api/classMarkdown.html new file mode 100644 index 0000000..c1fd983 --- /dev/null +++ b/management-interface/lib/api/classMarkdown.html @@ -0,0 +1,739 @@ + + + + + + + +Fat-Free Framework: Markdown Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Markdown Class Reference
+
+
+ +

Markdown-to-HTML converter. + More...

+
+ + Inheritance diagram for Markdown:
+
+
+ + + + + + + + + +

+Public Member Functions

 esc ($str)
 
 scan ($str)
 
 convert ($txt)
 
+ + + + +

+Public Attributes

$special
 Special characters.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

 _blockquote ($str)
 
 _pre ($str)
 
 _fence ($hint, $str)
 
 _hr ()
 
 _atx ($type, $str)
 
 _setext ($str, $type)
 
 _li ($str)
 
 _raw ($str)
 
 _p ($str)
 
 _text ($str)
 
 _img ($str)
 
 _a ($str)
 
 _auto ($str)
 
 _code ($str)
 
 snip ($str)
 
 build ($str)
 
+ + + + +

+Protected Attributes

$blocks
 Parsing rules.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Markdown-to-HTML converter.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_a ( $str)
+
+protected
+
+

Process anchor span

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Markdown::_atx ( $type,
 $str 
)
+
+protected
+
+

Process atx-style heading

+
Returns
string
+
Parameters
+ + + +
$typestring
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_auto ( $str)
+
+protected
+
+

Auto-convert links

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_blockquote ( $str)
+
+protected
+
+

Process blockquote

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_code ( $str)
+
+protected
+
+

Process code span

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Markdown::_fence ( $hint,
 $str 
)
+
+protected
+
+

Process fenced code block

+
Returns
string
+
Parameters
+ + + +
$hintstring
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Markdown::_hr ()
+
+protected
+
+

Process horizontal rule

+
Returns
string
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_img ( $str)
+
+protected
+
+

Process image span

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_li ( $str)
+
+protected
+
+

Process ordered/unordered list

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_p ( $str)
+
+protected
+
+

Process paragraph

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_pre ( $str)
+
+protected
+
+

Process whitespace-prefixed code block

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_raw ( $str)
+
+protected
+
+

Ignore raw HTML

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Markdown::_setext ( $str,
 $type 
)
+
+protected
+
+

Process setext-style heading

+
Returns
string
+
Parameters
+ + + +
$strstring
$typestring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::_text ( $str)
+
+protected
+
+

Process strong/em/strikethrough spans

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::build ( $str)
+
+protected
+
+

Assemble blocks

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Markdown::convert ( $txt)
+
+

Render HTML equivalent of markdown

+
Returns
string
+
Parameters
+ + +
$txtstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Markdown::esc ( $str)
+
+

Convert characters to HTML entities

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Markdown::scan ( $str)
+
+

Scan line for convertible spans

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Markdown::snip ( $str)
+
+protected
+
+

Reduce multiple line feeds

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classMarkdown.png b/management-interface/lib/api/classMarkdown.png new file mode 100644 index 0000000..a544695 Binary files /dev/null and b/management-interface/lib/api/classMarkdown.png differ diff --git a/management-interface/lib/api/classMatrix-members.html b/management-interface/lib/api/classMatrix-members.html new file mode 100644 index 0000000..672ead2 --- /dev/null +++ b/management-interface/lib/api/classMatrix-members.html @@ -0,0 +1,47 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Matrix Member List
+
+
+ +

This is the complete list of members for Matrix, including all inherited members.

+ + + + + + + +
calendar($date='now', $first=0)Matrix
changekey(array &$var, $old, $new)Matrix
instance()Prefabstatic
pick(array $var, $col)Matrix
sort(array &$var, $col, $order=SORT_ASC)Matrix
transpose(array &$var)Matrix
diff --git a/management-interface/lib/api/classMatrix.html b/management-interface/lib/api/classMatrix.html new file mode 100644 index 0000000..9959d17 --- /dev/null +++ b/management-interface/lib/api/classMatrix.html @@ -0,0 +1,259 @@ + + + + + + + +Fat-Free Framework: Matrix Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
+
Matrix Class Reference
+
+
+ +

Generic array utilities. + More...

+
+ + Inheritance diagram for Matrix:
+
+
+ + + + + + + + + + + + + +

+Public Member Functions

 pick (array $var, $col)
 
 transpose (array &$var)
 
 sort (array &$var, $col, $order=SORT_ASC)
 
 changekey (array &$var, $old, $new)
 
 calendar ($date='now', $first=0)
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Generic array utilities.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Matrix::calendar ( $date = 'now',
 $first = 0 
)
+
+

Return month calendar of specified date, with optional setting for first day of week (0 for Sunday)

+
Returns
array
+
Parameters
+ + + +
$datestring
$firstint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Matrix::changekey (array & $var,
 $old,
 $new 
)
+
+

Change the key of a two-dimensional array element

+
Returns
NULL
+
Parameters
+ + + + +
$vararray
$oldstring
$newstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Matrix::pick (array $var,
 $col 
)
+
+

Retrieve values from a specified column of a multi-dimensional array variable

+
Returns
array
+
Parameters
+ + + +
$vararray
$colmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Matrix::sort (array & $var,
 $col,
 $order = SORT_ASC 
)
+
+

Sort a multi-dimensional array variable on a specified column

+
Returns
bool
+
Parameters
+ + + + +
$vararray
$colmixed
$orderint
+
+
+ +
+
+ +
+
+ + + + + + + + +
Matrix::transpose (array & $var)
+
+

Rotate a two-dimensional array variable

+
Returns
NULL
+
Parameters
+ + +
$vararray
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classMatrix.png b/management-interface/lib/api/classMatrix.png new file mode 100644 index 0000000..c256f44 Binary files /dev/null and b/management-interface/lib/api/classMatrix.png differ diff --git a/management-interface/lib/api/classPrefab-members.html b/management-interface/lib/api/classPrefab-members.html new file mode 100644 index 0000000..c80dd7b --- /dev/null +++ b/management-interface/lib/api/classPrefab-members.html @@ -0,0 +1,42 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Prefab Member List
+
+
+ +

This is the complete list of members for Prefab, including all inherited members.

+ + +
instance()Prefabstatic
diff --git a/management-interface/lib/api/classPrefab.html b/management-interface/lib/api/classPrefab.html new file mode 100644 index 0000000..bba947a --- /dev/null +++ b/management-interface/lib/api/classPrefab.html @@ -0,0 +1,103 @@ + + + + + + + +Fat-Free Framework: Prefab Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Static Public Member Functions | +List of all members
+
+
Prefab Class Reference
+
+
+ +

Factory class for single-instance objects. + More...

+
+ + Inheritance diagram for Prefab:
+
+
+ + + + + +

+Static Public Member Functions

static instance ()
 
+

Detailed Description

+

Factory class for single-instance objects.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
static Prefab::instance ()
+
+static
+
+

Return class instance

+
Returns
static
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classPrefab.png b/management-interface/lib/api/classPrefab.png new file mode 100644 index 0000000..3a1297a Binary files /dev/null and b/management-interface/lib/api/classPrefab.png differ diff --git a/management-interface/lib/api/classPreview-members.html b/management-interface/lib/api/classPreview-members.html new file mode 100644 index 0000000..37319b1 --- /dev/null +++ b/management-interface/lib/api/classPreview-members.html @@ -0,0 +1,51 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Preview Member List
+
+
+ +

This is the complete list of members for Preview, including all inherited members.

+ + + + + + + + + + + +
$mimePreviewprotected
$viewViewprotected
build($node)Previewprotected
esc($arg)View
instance()Prefabstatic
raw($arg)View
render($file, $mime='text/html', array $hive=NULL, $ttl=0)Preview
resolve($str, array $hive=NULL)Preview
sandbox(array $hive=NULL)Viewprotected
token($str)Preview
diff --git a/management-interface/lib/api/classPreview.html b/management-interface/lib/api/classPreview.html new file mode 100644 index 0000000..3606e0c --- /dev/null +++ b/management-interface/lib/api/classPreview.html @@ -0,0 +1,248 @@ + + + + + + + +Fat-Free Framework: Preview Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Preview Class Reference
+
+
+ +

Lightweight template engine. + More...

+
+ + Inheritance diagram for Preview:
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

 token ($str)
 
 resolve ($str, array $hive=NULL)
 
 render ($file, $mime='text/html', array $hive=NULL, $ttl=0)
 
- Public Member Functions inherited from View
 esc ($arg)
 
 raw ($arg)
 
 render ($file, $mime='text/html', array $hive=NULL, $ttl=0)
 
+ + + + + + +

+Protected Member Functions

 build ($node)
 
- Protected Member Functions inherited from View
 sandbox (array $hive=NULL)
 
+ + + + + + + + +

+Protected Attributes

$mime
 MIME type.
 
- Protected Attributes inherited from View
$view
 Template file.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Lightweight template engine.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Preview::build ( $node)
+
+protected
+
+

Assemble markup

+
Returns
string
+
Parameters
+ + +
$nodestring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Preview::render ( $file,
 $mime = 'text/html',
array $hive = NULL,
 $ttl = 0 
)
+
+

Render template

+
Returns
string
+
Parameters
+ + + + + +
$filestring
$mimestring
$hivearray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Preview::resolve ( $str,
array $hive = NULL 
)
+
+

Render template string

+
Returns
string
+
Parameters
+ + + +
$strstring
$hivearray
+
+
+ +
+
+ +
+
+ + + + + + + + +
Preview::token ( $str)
+
+

Convert token to variable

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classPreview.png b/management-interface/lib/api/classPreview.png new file mode 100644 index 0000000..1f60c74 Binary files /dev/null and b/management-interface/lib/api/classPreview.png differ diff --git a/management-interface/lib/api/classRegistry-members.html b/management-interface/lib/api/classRegistry-members.html new file mode 100644 index 0000000..90cbcd7 --- /dev/null +++ b/management-interface/lib/api/classRegistry-members.html @@ -0,0 +1,45 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Registry Member List
+
+
+ +

This is the complete list of members for Registry, including all inherited members.

+ + + + + +
clear($key)Registrystatic
exists($key)Registrystatic
get($key)Registrystatic
set($key, $obj)Registrystatic
diff --git a/management-interface/lib/api/classRegistry.html b/management-interface/lib/api/classRegistry.html new file mode 100644 index 0000000..773fd18 --- /dev/null +++ b/management-interface/lib/api/classRegistry.html @@ -0,0 +1,201 @@ + + + + + + + +Fat-Free Framework: Registry Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Static Public Member Functions | +List of all members
+
+
Registry Class Reference
+
+
+ +

Container for singular object instances. + More...

+ + + + + + + + + + +

+Static Public Member Functions

static exists ($key)
 
static set ($key, $obj)
 
static get ($key)
 
static clear ($key)
 
+

Detailed Description

+

Container for singular object instances.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
static Registry::clear ( $key)
+
+static
+
+

Delete object from catalog

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static Registry::exists ( $key)
+
+static
+
+

Return TRUE if object exists in catalog

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static Registry::get ( $key)
+
+static
+
+

Retrieve object from catalog

+
Returns
object
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static Registry::set ( $key,
 $obj 
)
+
+static
+
+

Add object to catalog

+
Returns
object
+
Parameters
+ + + +
$keystring
$objobject
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classSMTP-members.html b/management-interface/lib/api/classSMTP-members.html new file mode 100644 index 0000000..7961675 --- /dev/null +++ b/management-interface/lib/api/classSMTP-members.html @@ -0,0 +1,71 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
SMTP Member List
+
+
+ +

This is the complete list of members for SMTP, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$attachmentsSMTP
$headersSMTPprotected
$hostSMTP
$logSMTP
$portSMTP
$pwSMTP
$schemeSMTP
$socketSMTP
$userSMTP
__construct($host, $port, $scheme, $user, $pw)SMTP
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
attach($file)SMTP
clear($key)SMTP
dialog($cmd=NULL, $log=TRUE)SMTPprotected
E_Attach (defined in SMTP)SMTP
E_Blank (defined in SMTP)SMTP
E_Header (defined in SMTP)SMTP
exists($key)SMTP
fixheader($key)SMTPprotected
get($key)SMTP
log()SMTP
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
send($message, $log=TRUE)SMTP
set($key, $val)SMTP
diff --git a/management-interface/lib/api/classSMTP.html b/management-interface/lib/api/classSMTP.html new file mode 100644 index 0000000..3a30648 --- /dev/null +++ b/management-interface/lib/api/classSMTP.html @@ -0,0 +1,482 @@ + + + + + + + +Fat-Free Framework: SMTP Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
SMTP Class Reference
+
+
+ +

SMTP plug-in. + More...

+
+ + Inheritance diagram for SMTP:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 log ()
 
 attach ($file)
 
 send ($message, $log=TRUE)
 
 __construct ($host, $port, $scheme, $user, $pw)
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

$attachments
 E-mail attachments.
 
$host
 SMTP host.
 
$port
 SMTP port.
 
$scheme
 TLS/SSL.
 
$user
 User ID.
 
$pw
 Password.
 
$socket
 TCP/IP socket.
 
$log
 Server-client conversation.
 
+const E_Header ='%s: header is required'
 
+const E_Blank ='Message must not be blank'
 
+const E_Attach ='Attachment %s not found'
 
+ + + + + +

+Protected Member Functions

 fixheader ($key)
 
 dialog ($cmd=NULL, $log=TRUE)
 
+ + + + +

+Protected Attributes

$headers
 Message properties.
 
+

Detailed Description

+

SMTP plug-in.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SMTP::__construct ( $host,
 $port,
 $scheme,
 $user,
 $pw 
)
+
+

Instantiate class

+
Parameters
+ + + + + + +
$hoststring
$portint
$schemestring
$userstring
$pwstring
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
SMTP::attach ( $file)
+
+

Add e-mail attachment

+
Returns
NULL
+
Parameters
+ + +
$file
+
+
+ +
+
+ +
+
+ + + + + + + + +
SMTP::clear ( $key)
+
+

Remove header

+
Returns
NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
SMTP::dialog ( $cmd = NULL,
 $log = TRUE 
)
+
+protected
+
+

Send SMTP command and record server response

+
Returns
string
+
Parameters
+ + + +
$cmdstring
$logbool
+
+
+ +
+
+ +
+
+ + + + + + + + +
SMTP::exists ( $key)
+
+

Return TRUE if header exists

+
Returns
bool
+
Parameters
+ + +
$key
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
SMTP::fixheader ( $key)
+
+protected
+
+

Fix header

+
Returns
string
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
SMTP::get ( $key)
+
+

Return value of e-mail header

+
Returns
string|NULL
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
SMTP::log ()
+
+

Return client-server conversation history

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
SMTP::send ( $message,
 $log = TRUE 
)
+
+

Transmit message

+
Returns
bool
+
Parameters
+ + + +
$messagestring
$logbool
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
SMTP::set ( $key,
 $val 
)
+
+

Bind value to e-mail header

+
Returns
string
+
Parameters
+ + + +
$keystring
$valstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classSMTP.png b/management-interface/lib/api/classSMTP.png new file mode 100644 index 0000000..87f91c4 Binary files /dev/null and b/management-interface/lib/api/classSMTP.png differ diff --git a/management-interface/lib/api/classSession-members.html b/management-interface/lib/api/classSession-members.html new file mode 100644 index 0000000..04e3346 --- /dev/null +++ b/management-interface/lib/api/classSession-members.html @@ -0,0 +1,53 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Session Member List
+
+
+ +

This is the complete list of members for Session, including all inherited members.

+ + + + + + + + + + + + + +
$sidSessionprotected
__construct()Session
agent()Session
cleanup($max)Session
close()Session
csrf()Session
destroy($id)Session
ip()Session
open($path, $name)Session
read($id)Session
stamp()Session
write($id, $data)Session
diff --git a/management-interface/lib/api/classSession.html b/management-interface/lib/api/classSession.html new file mode 100644 index 0000000..e45ddd2 --- /dev/null +++ b/management-interface/lib/api/classSession.html @@ -0,0 +1,329 @@ + + + + + + + +Fat-Free Framework: Session Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
Session Class Reference
+
+
+ +

Cache-based session handler. + More...

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 open ($path, $name)
 
 close ()
 
 read ($id)
 
 write ($id, $data)
 
 destroy ($id)
 
 cleanup ($max)
 
 csrf ()
 
 ip ()
 
 stamp ()
 
 agent ()
 
 __construct ()
 
+ + + + +

+Protected Attributes

$sid
 Session ID.
 
+

Detailed Description

+

Cache-based session handler.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Session::__construct ()
+
+

Instantiate class

+
Returns
object
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
Session::agent ()
+
+

Return HTTP user agent

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
Session::cleanup ( $max)
+
+

Garbage collector

+
Returns
TRUE
+
Parameters
+ + +
$maxint
+
+
+ +
+
+ +
+
+ + + + + + + +
Session::close ()
+
+

Close session

+
Returns
TRUE
+ +
+
+ +
+
+ + + + + + + +
Session::csrf ()
+
+

Return anti-CSRF token

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + +
Session::destroy ( $id)
+
+

Destroy session

+
Returns
TRUE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Session::ip ()
+
+

Return IP address

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Session::open ( $path,
 $name 
)
+
+

Open session

+
Returns
TRUE
+
Parameters
+ + + +
$pathstring
$namestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Session::read ( $id)
+
+

Return session data in serialized format

+
Returns
string|FALSE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Session::stamp ()
+
+

Return Unix timestamp

+
Returns
string|FALSE
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Session::write ( $id,
 $data 
)
+
+

Write session data

+
Returns
TRUE
+
Parameters
+ + + +
$idstring
$datastring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classTemplate-members.html b/management-interface/lib/api/classTemplate-members.html new file mode 100644 index 0000000..28790f5 --- /dev/null +++ b/management-interface/lib/api/classTemplate-members.html @@ -0,0 +1,70 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Template Member List
+
+
+ +

This is the complete list of members for Template, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
$customTemplate
$mimePreviewprotected
$tagsTemplateprotected
$viewViewprotected
__call($func, array $args)Template
__construct()Template
_case(array $node)Templateprotected
_check(array $node)Templateprotected
_default(array $node)Templateprotected
_exclude()Templateprotected
_false(array $node)Templateprotected
_ignore(array $node)Templateprotected
_include(array $node)Templateprotected
_loop(array $node)Templateprotected
_repeat(array $node)Templateprotected
_set(array $node)Templateprotected
_switch(array $node)Templateprotected
_true(array $node)Templateprotected
build($node)Templateprotected
E_Method (defined in Template)Template
esc($arg)View
extend($tag, $func)Template
instance()Prefabstatic
parse($text)Template
raw($arg)View
render($file, $mime='text/html', array $hive=NULL, $ttl=0)Preview
resolve($str, array $hive=NULL)Preview
sandbox(array $hive=NULL)Viewprotected
token($str)Preview
diff --git a/management-interface/lib/api/classTemplate.html b/management-interface/lib/api/classTemplate.html new file mode 100644 index 0000000..0a3a2f1 --- /dev/null +++ b/management-interface/lib/api/classTemplate.html @@ -0,0 +1,681 @@ + + + + + + + +Fat-Free Framework: Template Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Template Class Reference
+
+
+ +

XML-style template engine. + More...

+
+ + Inheritance diagram for Template:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 extend ($tag, $func)
 
 __call ($func, array $args)
 
 parse ($text)
 
 __construct ()
 
- Public Member Functions inherited from Preview
 token ($str)
 
 resolve ($str, array $hive=NULL)
 
 render ($file, $mime='text/html', array $hive=NULL, $ttl=0)
 
- Public Member Functions inherited from View
 esc ($arg)
 
 raw ($arg)
 
 render ($file, $mime='text/html', array $hive=NULL, $ttl=0)
 
+ + + + + + + +

+Public Attributes

$custom =array()
 Custom tag handlers.
 
+const E_Method ='Call to undefined method %s()'
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

 _set (array $node)
 
 _include (array $node)
 
 _exclude ()
 
 _ignore (array $node)
 
 _loop (array $node)
 
 _repeat (array $node)
 
 _check (array $node)
 
 _true (array $node)
 
 _false (array $node)
 
 _switch (array $node)
 
 _case (array $node)
 
 _default (array $node)
 
 build ($node)
 
- Protected Member Functions inherited from Preview
 build ($node)
 
- Protected Member Functions inherited from View
 sandbox (array $hive=NULL)
 
+ + + + + + + + + + + + +

+Protected Attributes

$tags
 Template tags.
 
- Protected Attributes inherited from Preview
$mime
 MIME type.
 
- Protected Attributes inherited from View
$view
 Template file.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

XML-style template engine.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Template::__construct ()
+
+

Class constructor return object

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Template::__call ( $func,
array $args 
)
+
+

Call custom tag handler

+
Returns
string|FALSE
+
Parameters
+ + + +
$funccallback
$argsarray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_case (array $node)
+
+protected
+
+

Template -case- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_check (array $node)
+
+protected
+
+

Template -check- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_default (array $node)
+
+protected
+
+

Template -default- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Template::_exclude ()
+
+protected
+
+

Template -exclude- tag handler

+
Returns
string
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_false (array $node)
+
+protected
+
+

Template -false- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_ignore (array $node)
+
+protected
+
+

Template -ignore- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_include (array $node)
+
+protected
+
+

Template -include- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_loop (array $node)
+
+protected
+
+

Template -loop- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_repeat (array $node)
+
+protected
+
+

Template -repeat- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_set (array $node)
+
+protected
+
+

Template -set- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_switch (array $node)
+
+protected
+
+

Template -switch- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::_true (array $node)
+
+protected
+
+

Template -true- tag handler

+
Returns
string
+
Parameters
+ + +
$nodearray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Template::build ( $node)
+
+protected
+
+

Assemble markup

+
Returns
string
+
Parameters
+ + +
$nodearray|string
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Template::extend ( $tag,
 $func 
)
+
+

Extend template with custom tag

+
Returns
NULL
+
Parameters
+ + + +
$tagstring
$funccallback
+
+
+ +
+
+ +
+
+ + + + + + + + +
Template::parse ( $text)
+
+

Parse string for template directives and tokens

+
Returns
string|array
+
Parameters
+ + +
$textstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classTemplate.png b/management-interface/lib/api/classTemplate.png new file mode 100644 index 0000000..0a9456f Binary files /dev/null and b/management-interface/lib/api/classTemplate.png differ diff --git a/management-interface/lib/api/classTest-members.html b/management-interface/lib/api/classTest-members.html new file mode 100644 index 0000000..be372a1 --- /dev/null +++ b/management-interface/lib/api/classTest-members.html @@ -0,0 +1,49 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Test Member List
+
+
+ +

This is the complete list of members for Test, including all inherited members.

+ + + + + + + + + +
$dataTestprotected
__construct($level=self::FLAG_Both)Test
expect($cond, $text=NULL)Test
FLAG_Both (defined in Test)Test
FLAG_False (defined in Test)Test
FLAG_True (defined in Test)Test
message($text)Test
results()Test
diff --git a/management-interface/lib/api/classTest.html b/management-interface/lib/api/classTest.html new file mode 100644 index 0000000..e317881 --- /dev/null +++ b/management-interface/lib/api/classTest.html @@ -0,0 +1,184 @@ + + + + + + + +Fat-Free Framework: Test Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
Test Class Reference
+
+
+ +

Unit test kit. + More...

+ + + + + + + + + + +

+Public Member Functions

 results ()
 
 expect ($cond, $text=NULL)
 
 message ($text)
 
 __construct ($level=self::FLAG_Both)
 
+ + + + + + + + +

+Public Attributes

+const FLAG_False =0
 
+const FLAG_True =1
 
+const FLAG_Both =2
 
+ + + + +

+Protected Attributes

$data =array()
 Test results.
 
+

Detailed Description

+

Unit test kit.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
Test::__construct ( $level = self::FLAG_Both)
+
+

Class constructor

+
Returns
NULL
+
Parameters
+ + +
$levelint
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Test::expect ( $cond,
 $text = NULL 
)
+
+

Evaluate condition and save test result

+
Returns
object
+
Parameters
+ + + +
$condbool
$textstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Test::message ( $text)
+
+

Append message to test results

+
Returns
NULL
+
Parameters
+ + +
$textstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Test::results ()
+
+

Return test results

+
Returns
array
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classUTF-members.html b/management-interface/lib/api/classUTF-members.html new file mode 100644 index 0000000..28bcc73 --- /dev/null +++ b/management-interface/lib/api/classUTF-members.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
UTF Member List
+
+
+ +

This is the complete list of members for UTF, including all inherited members.

+ + + + + + + + + + + + + + + + +
bom()UTF
emojify($str)UTF
instance()Prefabstatic
ltrim($str)UTF
rtrim($str)UTF
stripos($stack, $needle, $ofs=0)UTF
stristr($stack, $needle, $before=FALSE)UTF
strlen($str)UTF
strpos($stack, $needle, $ofs=0, $case=FALSE)UTF
strrev($str)UTF
strstr($stack, $needle, $before=FALSE, $case=FALSE)UTF
substr($str, $start, $len=0)UTF
substr_count($stack, $needle)UTF
translate($str)UTF
trim($str)UTF
diff --git a/management-interface/lib/api/classUTF.html b/management-interface/lib/api/classUTF.html new file mode 100644 index 0000000..111f324 --- /dev/null +++ b/management-interface/lib/api/classUTF.html @@ -0,0 +1,543 @@ + + + + + + + +Fat-Free Framework: UTF Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
+
UTF Class Reference
+
+
+ +

Unicode string manager. + More...

+
+ + Inheritance diagram for UTF:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 strlen ($str)
 
 strrev ($str)
 
 stripos ($stack, $needle, $ofs=0)
 
 strpos ($stack, $needle, $ofs=0, $case=FALSE)
 
 stristr ($stack, $needle, $before=FALSE)
 
 strstr ($stack, $needle, $before=FALSE, $case=FALSE)
 
 substr ($str, $start, $len=0)
 
 substr_count ($stack, $needle)
 
 ltrim ($str)
 
 rtrim ($str)
 
 trim ($str)
 
 bom ()
 
 translate ($str)
 
 emojify ($str)
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Unicode string manager.

+

Member Function Documentation

+ +
+
+ + + + + + + +
UTF::bom ()
+
+

Return UTF-8 byte order mark

+
Returns
string
+ +
+
+ +
+
+ + + + + + + + +
UTF::emojify ( $str)
+
+

Translate emoji tokens to Unicode font-supported symbols

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
UTF::ltrim ( $str)
+
+

Strip whitespaces from the beginning of a string

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
UTF::rtrim ( $str)
+
+

Strip whitespaces from the end of a string

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UTF::stripos ( $stack,
 $needle,
 $ofs = 0 
)
+
+

Find position of first occurrence of a string (case-insensitive)

+
Returns
int|FALSE
+
Parameters
+ + + + +
$stackstring
$needlestring
$ofsint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UTF::stristr ( $stack,
 $needle,
 $before = FALSE 
)
+
+

Returns part of haystack string from the first occurrence of needle to the end of haystack (case-insensitive)

+
Returns
string|FALSE
+
Parameters
+ + + + +
$stackstring
$needlestring
$beforebool
+
+
+ +
+
+ +
+
+ + + + + + + + +
UTF::strlen ( $str)
+
+

Get string length

+
Returns
int
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UTF::strpos ( $stack,
 $needle,
 $ofs = 0,
 $case = FALSE 
)
+
+

Find position of first occurrence of a string

+
Returns
int|FALSE
+
Parameters
+ + + + + +
$stackstring
$needlestring
$ofsint
$casebool
+
+
+ +
+
+ +
+
+ + + + + + + + +
UTF::strrev ( $str)
+
+

Reverse a string

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UTF::strstr ( $stack,
 $needle,
 $before = FALSE,
 $case = FALSE 
)
+
+

Returns part of haystack string from the first occurrence of needle to the end of haystack

+
Returns
string|FALSE
+
Parameters
+ + + + + +
$stackstring
$needlestring
$beforebool
$casebool
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UTF::substr ( $str,
 $start,
 $len = 0 
)
+
+

Return part of a string

+
Returns
string|FALSE
+
Parameters
+ + + + +
$strstring
$startint
$lenint
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
UTF::substr_count ( $stack,
 $needle 
)
+
+

Count the number of substring occurrences

+
Returns
int
+
Parameters
+ + + +
$stackstring
$needlestring
+
+
+ +
+
+ +
+
+ + + + + + + + +
UTF::translate ( $str)
+
+

Convert code points to Unicode symbols

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
UTF::trim ( $str)
+
+

Strip whitespaces from the beginning and end of a string

+
Returns
string
+
Parameters
+ + +
$strstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classUTF.png b/management-interface/lib/api/classUTF.png new file mode 100644 index 0000000..2d2df33 Binary files /dev/null and b/management-interface/lib/api/classUTF.png differ diff --git a/management-interface/lib/api/classView-members.html b/management-interface/lib/api/classView-members.html new file mode 100644 index 0000000..adbdecb --- /dev/null +++ b/management-interface/lib/api/classView-members.html @@ -0,0 +1,47 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
View Member List
+
+
+ +

This is the complete list of members for View, including all inherited members.

+ + + + + + + +
$viewViewprotected
esc($arg)View
instance()Prefabstatic
raw($arg)View
render($file, $mime='text/html', array $hive=NULL, $ttl=0)View
sandbox(array $hive=NULL)Viewprotected
diff --git a/management-interface/lib/api/classView.html b/management-interface/lib/api/classView.html new file mode 100644 index 0000000..b52f398 --- /dev/null +++ b/management-interface/lib/api/classView.html @@ -0,0 +1,222 @@ + + + + + + + +Fat-Free Framework: View Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
View Class Reference
+
+
+ +

View handler. + More...

+
+ + Inheritance diagram for View:
+
+
+ + + + + + + + + +

+Public Member Functions

 esc ($arg)
 
 raw ($arg)
 
 render ($file, $mime='text/html', array $hive=NULL, $ttl=0)
 
+ + + +

+Protected Member Functions

 sandbox (array $hive=NULL)
 
+ + + + +

+Protected Attributes

$view
 Template file.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

View handler.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
View::esc ( $arg)
+
+

Encode characters to equivalent HTML entities

+
Returns
string
+
Parameters
+ + +
$argmixed
+
+
+ +
+
+ +
+
+ + + + + + + + +
View::raw ( $arg)
+
+

Decode HTML entities to equivalent characters

+
Returns
string
+
Parameters
+ + +
$argmixed
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
View::render ( $file,
 $mime = 'text/html',
array $hive = NULL,
 $ttl = 0 
)
+
+

Render template

+
Returns
string
+
Parameters
+ + + + + +
$filestring
$mimestring
$hivearray
$ttlint
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
View::sandbox (array $hive = NULL)
+
+protected
+
+

Create sandbox for template execution

+
Returns
string
+
Parameters
+ + +
$hivearray
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classView.png b/management-interface/lib/api/classView.png new file mode 100644 index 0000000..2e24d19 Binary files /dev/null and b/management-interface/lib/api/classView.png differ diff --git a/management-interface/lib/api/classWeb-members.html b/management-interface/lib/api/classWeb-members.html new file mode 100644 index 0000000..2dbcbcc --- /dev/null +++ b/management-interface/lib/api/classWeb-members.html @@ -0,0 +1,60 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Web Member List
+
+
+ +

This is the complete list of members for Web, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
$wrapperWebprotected
_curl($url, $options)Webprotected
_socket($url, $options)Webprotected
_stream($url, $options)Webprotected
acceptable($list=NULL)Web
E_Request (defined in Web)Web
engine($arg='curl')Web
filler($count=1, $max=20, $std=TRUE)Web
instance()Prefabstatic
mime($file)Web
minify($files, $mime=NULL, $header=TRUE, $path='')Web
progress($id)Web
receive($func=NULL, $overwrite=FALSE, $slug=TRUE)Web
request($url, array $options=NULL)Web
rss($url, $max=10, $tags=NULL)Web
send($file, $mime=NULL, $kbps=0, $force=TRUE)Web
slug($text)Web
subst(array &$old, $new)Web
whois($addr, $server='whois.internic.net')Web
diff --git a/management-interface/lib/api/classWeb.html b/management-interface/lib/api/classWeb.html new file mode 100644 index 0000000..77d7702 --- /dev/null +++ b/management-interface/lib/api/classWeb.html @@ -0,0 +1,700 @@ + + + + + + + +Fat-Free Framework: Web Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Web Class Reference
+
+
+ +

Wrapper for various HTTP utilities. + More...

+
+ + Inheritance diagram for Web:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 mime ($file)
 
 acceptable ($list=NULL)
 
 send ($file, $mime=NULL, $kbps=0, $force=TRUE)
 
 receive ($func=NULL, $overwrite=FALSE, $slug=TRUE)
 
 progress ($id)
 
 engine ($arg='curl')
 
 subst (array &$old, $new)
 
 request ($url, array $options=NULL)
 
 minify ($files, $mime=NULL, $header=TRUE, $path='')
 
 rss ($url, $max=10, $tags=NULL)
 
 whois ($addr, $server='whois.internic.net')
 
 slug ($text)
 
 filler ($count=1, $max=20, $std=TRUE)
 
+ + + + +

+Public Attributes

+const E_Request ='No suitable HTTP request engine found'
 
+ + + + + + + +

+Protected Member Functions

 _curl ($url, $options)
 
 _stream ($url, $options)
 
 _socket ($url, $options)
 
+ + + + +

+Protected Attributes

$wrapper
 HTTP request engine.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Wrapper for various HTTP utilities.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Web::_curl ( $url,
 $options 
)
+
+protected
+
+

HTTP request via cURL

+
Returns
array
+
Parameters
+ + + +
$urlstring
$optionsarray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Web::_socket ( $url,
 $options 
)
+
+protected
+
+

HTTP request via low-level TCP/IP socket

+
Returns
array
+
Parameters
+ + + +
$urlstring
$optionsarray
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Web::_stream ( $url,
 $options 
)
+
+protected
+
+

HTTP request via PHP stream wrapper

+
Returns
array
+
Parameters
+ + + +
$urlstring
$optionsarray
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web::acceptable ( $list = NULL)
+
+

Return the MIME types stated in the HTTP Accept header as an array; If a list of MIME types is specified, return the best match; or FALSE if none found

+
Returns
array|string|FALSE
+
Parameters
+ + +
$liststring|array
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web::engine ( $arg = 'curl')
+
+

Specify the HTTP request engine to use; If not available, fall back to an applicable substitute

+
Returns
string
+
Parameters
+ + +
$argstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Web::filler ( $count = 1,
 $max = 20,
 $std = TRUE 
)
+
+

Return chunk of text from standard Lorem Ipsum passage

+
Returns
string
+
Parameters
+ + + + +
$countint
$maxint
$stdbool
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web::mime ( $file)
+
+

Detect MIME type using file extension

+
Returns
string
+
Parameters
+ + +
$filestring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Web::minify ( $files,
 $mime = NULL,
 $header = TRUE,
 $path = '' 
)
+
+

Strip Javascript/CSS files of extraneous whitespaces and comments; Return combined output as a minified string

+
Returns
string
+
Parameters
+ + + + + +
$filesstring|array
$mimestring
$headerbool
$pathstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web::progress ( $id)
+
+

Return upload progress in bytes, FALSE on failure

+
Returns
int|FALSE
+
Parameters
+ + +
$idstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Web::receive ( $func = NULL,
 $overwrite = FALSE,
 $slug = TRUE 
)
+
+

Receive file(s) from HTTP client

+
Returns
array|bool
+
Parameters
+ + + + +
$funccallback
$overwritebool
$slugcallback|bool
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Web::request ( $url,
array $options = NULL 
)
+
+

Submit HTTP request; Use HTTP context options (described in http://www.php.net/manual/en/context.http.php) if specified; Cache the page as instructed by remote server

+
Returns
array|FALSE
+
Parameters
+ + + +
$urlstring
$optionsarray
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Web::rss ( $url,
 $max = 10,
 $tags = NULL 
)
+
+

Retrieve RSS feed and return as an array

+
Returns
array|FALSE
+
Parameters
+ + + + +
$urlstring
$maxint
$tagsstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Web::send ( $file,
 $mime = NULL,
 $kbps = 0,
 $force = TRUE 
)
+
+

Transmit file to HTTP client; Return file size if successful, FALSE otherwise

+
Returns
int|FALSE
+
Parameters
+ + + + + +
$filestring
$mimestring
$kbpsint
$forcebool
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web::slug ( $text)
+
+

Return a URL/filesystem-friendly version of string

+
Returns
string
+
Parameters
+ + +
$textstring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Web::subst (array & $old,
 $new 
)
+
+

Replace old headers with new elements

+
Returns
NULL
+
Parameters
+ + + +
$oldarray
$newstring|array
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Web::whois ( $addr,
 $server = 'whois.internic.net' 
)
+
+

Retrieve information from whois server

+
Returns
string|FALSE
+
Parameters
+ + + +
$addrstring
$serverstring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classWeb.png b/management-interface/lib/api/classWeb.png new file mode 100644 index 0000000..c446b30 Binary files /dev/null and b/management-interface/lib/api/classWeb.png differ diff --git a/management-interface/lib/api/classWeb_1_1Geo-members.html b/management-interface/lib/api/classWeb_1_1Geo-members.html new file mode 100644 index 0000000..e58ff2b --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1Geo-members.html @@ -0,0 +1,49 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
Web\Geo Member List
+
+
+ +

This is the complete list of members for Web\Geo, including all inherited members.

+ + + + + +
instance()Prefabstatic
location($ip=NULL)Web\Geo
tzinfo($zone)Web\Geo
weather($latitude, $longitude)Web\Geo
diff --git a/management-interface/lib/api/classWeb_1_1Geo.html b/management-interface/lib/api/classWeb_1_1Geo.html new file mode 100644 index 0000000..5145b52 --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1Geo.html @@ -0,0 +1,164 @@ + + + + + + + +Fat-Free Framework: Web\Geo Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +List of all members
+
+
Web\Geo Class Reference
+
+
+ +

Geo plug-in. + More...

+
+ + Inheritance diagram for Web\Geo:
+
+
+ + + + + + + + + +

+Public Member Functions

 tzinfo ($zone)
 
 location ($ip=NULL)
 
 weather ($latitude, $longitude)
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Geo plug-in.

+

Member Function Documentation

+ +
+
+ + + + + + + + +
Web\Geo::location ( $ip = NULL)
+
+

Return geolocation data based on specified/auto-detected IP address

+
Returns
array|FALSE
+
Parameters
+ + +
$ipstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web\Geo::tzinfo ( $zone)
+
+

Return information about specified Unix time zone

+
Returns
array
+
Parameters
+ + +
$zonestring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Web\Geo::weather ( $latitude,
 $longitude 
)
+
+

Return weather data based on specified latitude/longitude

+
Returns
array|FALSE
+
Parameters
+ + + +
$latitudefloat
$longitudefloat
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classWeb_1_1Geo.png b/management-interface/lib/api/classWeb_1_1Geo.png new file mode 100644 index 0000000..8a65bfa Binary files /dev/null and b/management-interface/lib/api/classWeb_1_1Geo.png differ diff --git a/management-interface/lib/api/classWeb_1_1Google_1_1StaticMap-members.html b/management-interface/lib/api/classWeb_1_1Google_1_1StaticMap-members.html new file mode 100644 index 0000000..f20968a --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1Google_1_1StaticMap-members.html @@ -0,0 +1,49 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
Web\Google\StaticMap Member List
+
+
+ +

This is the complete list of members for Web\Google\StaticMap, including all inherited members.

+ + + + + +
$queryWeb\Google\StaticMapprotected
__call($func, array $args)Web\Google\StaticMap
dump()Web\Google\StaticMap
URL_StaticWeb\Google\StaticMap
diff --git a/management-interface/lib/api/classWeb_1_1Google_1_1StaticMap.html b/management-interface/lib/api/classWeb_1_1Google_1_1StaticMap.html new file mode 100644 index 0000000..f76ea68 --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1Google_1_1StaticMap.html @@ -0,0 +1,130 @@ + + + + + + + +Fat-Free Framework: Web\Google\StaticMap Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
+
Web\Google\StaticMap Class Reference
+
+
+ +

Google Static Maps API v2 plug-in. + More...

+ + + + + + +

+Public Member Functions

 __call ($func, array $args)
 
 dump ()
 
+ + + + +

+Public Attributes

+const URL_Static ='http://maps.googleapis.com/maps/api/staticmap'
 API URL.
 
+ + + + +

+Protected Attributes

$query =array()
 Query arguments.
 
+

Detailed Description

+

Google Static Maps API v2 plug-in.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Web\Google\StaticMap::__call ( $func,
array $args 
)
+
+

Specify API key-value pair via magic call

+
Returns
object
+
Parameters
+ + + +
$funcstring
$argsarray
+
+
+ +
+
+ +
+
+ + + + + + + +
Web\Google\StaticMap::dump ()
+
+

Generate map

+
Returns
string
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classWeb_1_1OpenID-members.html b/management-interface/lib/api/classWeb_1_1OpenID-members.html new file mode 100644 index 0000000..9e189ae --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1OpenID-members.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
Web\OpenID Member List
+
+
+ +

This is the complete list of members for Web\OpenID, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
$argsWeb\OpenID
$urlWeb\OpenIDprotected
__get($key)Magic
__isset($key)Magic
__set($key, $val)Magic
__unset($key)Magic
auth($proxy=NULL, $attr=array(), array $reqd=NULL)Web\OpenID
clear($key)Web\OpenID
discover($proxy)Web\OpenIDprotected
exists($key)Web\OpenID
get($key)Web\OpenID
offsetexists($key)Magic
offsetget($key)Magic
offsetset($key, $val)Magic
offsetunset($key)Magic
response()Web\OpenID
set($key, $val)Web\OpenID
verified($proxy=NULL)Web\OpenID
diff --git a/management-interface/lib/api/classWeb_1_1OpenID.html b/management-interface/lib/api/classWeb_1_1OpenID.html new file mode 100644 index 0000000..406bbb6 --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1OpenID.html @@ -0,0 +1,352 @@ + + + + + + + +Fat-Free Framework: Web\OpenID Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Web\OpenID Class Reference
+
+
+ +

OpenID consumer. + More...

+
+ + Inheritance diagram for Web\OpenID:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 auth ($proxy=NULL, $attr=array(), array $reqd=NULL)
 
 verified ($proxy=NULL)
 
 response ()
 
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
- Public Member Functions inherited from Magic
 exists ($key)
 
 set ($key, $val)
 
 get ($key)
 
 clear ($key)
 
 offsetexists ($key)
 
 __isset ($key)
 
 offsetset ($key, $val)
 
 __set ($key, $val)
 
 offsetget ($key)
 
 __get ($key)
 
 offsetunset ($key)
 
 __unset ($key)
 
+ + + + +

+Public Attributes

$args =array()
 HTTP request parameters.
 
+ + + +

+Protected Member Functions

 discover ($proxy)
 
+ + + + +

+Protected Attributes

$url
 OpenID provider endpoint URL.
 
+

Detailed Description

+

OpenID consumer.

+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Web\OpenID::auth ( $proxy = NULL,
 $attr = array(),
array $reqd = NULL 
)
+
+

Initiate OpenID authentication sequence; Return FALSE on failure or redirect to OpenID provider URL

+
Returns
bool
+
Parameters
+ + + + +
$proxystring
$attrarray
$reqdstring|array
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web\OpenID::clear ( $key)
+
+

Remove OpenID request parameter

+
Returns
NULL
+
Parameters
+ + +
$key
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Web\OpenID::discover ( $proxy)
+
+protected
+
+

Determine OpenID provider

+
Returns
string|FALSE
+
Parameters
+ + +
$proxystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web\OpenID::exists ( $key)
+
+

Return TRUE if OpenID request parameter exists

+
Returns
bool
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web\OpenID::get ( $key)
+
+

Return value of OpenID request parameter

+
Returns
mixed
+
Parameters
+ + +
$keystring
+
+
+ +
+
+ +
+
+ + + + + + + +
Web\OpenID::response ()
+
+

Return OpenID response fields

+
Returns
array
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Web\OpenID::set ( $key,
 $val 
)
+
+

Bind value to OpenID request parameter

+
Returns
string
+
Parameters
+ + + +
$keystring
$valstring
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web\OpenID::verified ( $proxy = NULL)
+
+

Return TRUE if OpenID verification was successful

+
Returns
bool
+
Parameters
+ + +
$proxystring
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classWeb_1_1OpenID.png b/management-interface/lib/api/classWeb_1_1OpenID.png new file mode 100644 index 0000000..ef874dc Binary files /dev/null and b/management-interface/lib/api/classWeb_1_1OpenID.png differ diff --git a/management-interface/lib/api/classWeb_1_1Pingback-members.html b/management-interface/lib/api/classWeb_1_1Pingback-members.html new file mode 100644 index 0000000..bc9ccc9 --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1Pingback-members.html @@ -0,0 +1,52 @@ + + + + + + + +Fat-Free Framework: Member List + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
Web\Pingback Member List
+
+
+ +

This is the complete list of members for Web\Pingback, including all inherited members.

+ + + + + + + + +
$logWeb\Pingbackprotected
__construct()Web\Pingback
enabled($url)Web\Pingbackprotected
inspect($source)Web\Pingback
instance()Prefabstatic
listen($func, $path=NULL)Web\Pingback
log()Web\Pingback
diff --git a/management-interface/lib/api/classWeb_1_1Pingback.html b/management-interface/lib/api/classWeb_1_1Pingback.html new file mode 100644 index 0000000..fc507ac --- /dev/null +++ b/management-interface/lib/api/classWeb_1_1Pingback.html @@ -0,0 +1,223 @@ + + + + + + + +Fat-Free Framework: Web\Pingback Class Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
Web\Pingback Class Reference
+
+
+ +

Pingback 1.0 protocol (client and server) implementation. + More...

+
+ + Inheritance diagram for Web\Pingback:
+
+
+ + + + + + + + + + + +

+Public Member Functions

 inspect ($source)
 
 listen ($func, $path=NULL)
 
 log ()
 
 __construct ()
 
+ + + +

+Protected Member Functions

 enabled ($url)
 
+ + + + +

+Protected Attributes

$log
 Transaction history.
 
+ + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Prefab
static instance ()
 
+

Detailed Description

+

Pingback 1.0 protocol (client and server) implementation.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Web\Pingback::__construct ()
+
+

Instantiate class

+
Returns
object
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
Web\Pingback::enabled ( $url)
+
+protected
+
+

Return TRUE if URL points to a pingback-enabled resource

+
Returns
bool
+
Parameters
+ + +
$url
+
+
+ +
+
+ +
+
+ + + + + + + + +
Web\Pingback::inspect ( $source)
+
+

Load local page contents, parse HTML anchor tags, find permalinks, and send XML-RPC calls to corresponding pingback servers

+
Returns
NULL
+
Parameters
+ + +
$sourcestring
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Web\Pingback::listen ( $func,
 $path = NULL 
)
+
+

Receive ping, check if local page is pingback-enabled, verify source contents, and return XML-RPC response

+
Returns
string
+
Parameters
+ + + +
$funccallback
$pathstring
+
+
+ +
+
+ +
+
+ + + + + + + +
Web\Pingback::log ()
+
+

Return transaction history

+
Returns
string
+ +
+
+
The documentation for this class was generated from the following file: +
diff --git a/management-interface/lib/api/classWeb_1_1Pingback.png b/management-interface/lib/api/classWeb_1_1Pingback.png new file mode 100644 index 0000000..9caff17 Binary files /dev/null and b/management-interface/lib/api/classWeb_1_1Pingback.png differ diff --git a/management-interface/lib/api/classes.html b/management-interface/lib/api/classes.html new file mode 100644 index 0000000..687cafd --- /dev/null +++ b/management-interface/lib/api/classes.html @@ -0,0 +1,131 @@ + + + + + + + +Fat-Free Framework: Class Index + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Class Index
+
+
+
A | B | C | F | G | I | J | L | M | O | P | R | S | T | U | V | W
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  A  
+
Audit   
Auth   
  B  
+
Base   
Basket   
Bcrypt   
  C  
+
Cache   
Cursor (DB)   
  F  
+
F3   
  G  
+
Web\Geo   
  I  
+
Image   
ISO   
  J  
+
Jig (DB)   
  L  
+
Log   
  M  
+
Magic   
Mongo\Mapper (DB)   
SQL\Mapper (DB)   
Jig\Mapper (DB)   
Markdown   
Matrix   
Mongo (DB)   
  O  
+
Web\OpenID   
  P  
+
Web\Pingback   
Prefab   
Preview   
  R  
+
Registry   
  S  
+
Jig\Session (DB)   
SQL\Session (DB)   
Session   
Mongo\Session (DB)   
SMTP   
SQL (DB)   
StaticMap (Web\Google)   
  T  
+
Template   
Test   
  U  
+
UTF   
  V  
+
View   
  W  
+
Web   
+
A | B | C | F | G | I | J | L | M | O | P | R | S | T | U | V | W
+
diff --git a/management-interface/lib/api/closed.png b/management-interface/lib/api/closed.png new file mode 100644 index 0000000..e4e2b25 Binary files /dev/null and b/management-interface/lib/api/closed.png differ diff --git a/management-interface/lib/api/dir_3a960e52dd9a2c9686c19ff6ef19d5fb.html b/management-interface/lib/api/dir_3a960e52dd9a2c9686c19ff6ef19d5fb.html new file mode 100644 index 0000000..9ee5597 --- /dev/null +++ b/management-interface/lib/api/dir_3a960e52dd9a2c9686c19ff6ef19d5fb.html @@ -0,0 +1,48 @@ + + + + + + + +Fat-Free Framework: web/google Directory Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
google Directory Reference
+
+
+ + + + +

+Files

file  staticmap.php
 
+
diff --git a/management-interface/lib/api/dir_562abdcd8625d4bf7bad2fe6fe01354c.html b/management-interface/lib/api/dir_562abdcd8625d4bf7bad2fe6fe01354c.html new file mode 100644 index 0000000..523804d --- /dev/null +++ b/management-interface/lib/api/dir_562abdcd8625d4bf7bad2fe6fe01354c.html @@ -0,0 +1,57 @@ + + + + + + + +Fat-Free Framework: web Directory Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
web Directory Reference
+
+
+ + + + +

+Directories

directory  google
 
+ + + + + + + +

+Files

file  geo.php
 
file  openid.php
 
file  pingback.php
 
+
diff --git a/management-interface/lib/api/dir_60985a986063d10a97c0bb7f42d76d6f.html b/management-interface/lib/api/dir_60985a986063d10a97c0bb7f42d76d6f.html new file mode 100644 index 0000000..ee5b7be --- /dev/null +++ b/management-interface/lib/api/dir_60985a986063d10a97c0bb7f42d76d6f.html @@ -0,0 +1,50 @@ + + + + + + + +Fat-Free Framework: db/sql Directory Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
sql Directory Reference
+
+
+ + + + + + +

+Files

file  mapper.php
 
file  session.php
 
+
diff --git a/management-interface/lib/api/dir_826b1e4cd13f4e7f528ca52e638927e5.html b/management-interface/lib/api/dir_826b1e4cd13f4e7f528ca52e638927e5.html new file mode 100644 index 0000000..7497da1 --- /dev/null +++ b/management-interface/lib/api/dir_826b1e4cd13f4e7f528ca52e638927e5.html @@ -0,0 +1,50 @@ + + + + + + + +Fat-Free Framework: db/jig Directory Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
jig Directory Reference
+
+
+ + + + + + +

+Files

file  mapper.php
 
file  session.php
 
+
diff --git a/management-interface/lib/api/dir_9d4753e6cb22f68b75f0462ac2496f38.html b/management-interface/lib/api/dir_9d4753e6cb22f68b75f0462ac2496f38.html new file mode 100644 index 0000000..194aec5 --- /dev/null +++ b/management-interface/lib/api/dir_9d4753e6cb22f68b75f0462ac2496f38.html @@ -0,0 +1,50 @@ + + + + + + + +Fat-Free Framework: db/mongo Directory Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
mongo Directory Reference
+
+
+ + + + + + +

+Files

file  mapper.php
 
file  session.php
 
+
diff --git a/management-interface/lib/api/dir_ce5981f09099a3fa6071b9eb8fe67a2c.html b/management-interface/lib/api/dir_ce5981f09099a3fa6071b9eb8fe67a2c.html new file mode 100644 index 0000000..4b33a1b --- /dev/null +++ b/management-interface/lib/api/dir_ce5981f09099a3fa6071b9eb8fe67a2c.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: db Directory Reference + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + + +
+
+
+
db Directory Reference
+
+
+ + + + + + + + +

+Directories

directory  jig
 
directory  mongo
 
directory  sql
 
+ + + + + + + + + +

+Files

file  cursor.php
 
file  jig.php
 
file  mongo.php
 
file  sql.php
 
+
diff --git a/management-interface/lib/api/doxygen.css b/management-interface/lib/api/doxygen.css new file mode 100644 index 0000000..b5b775c --- /dev/null +++ b/management-interface/lib/api/doxygen.css @@ -0,0 +1,1382 @@ +/* The standard CSS for doxygen 1.8.5 */ + +body, table, div, p, dl { + font: 400 16px/22px Ubuntu,Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Ubuntu,Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 0px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 200% Ubuntu,Roboto,sans-serif; + font-weight: bold; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Ubuntu,Roboto,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 75% Ubuntu,Roboto,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectname .menu +{ + font: 75% Ubuntu,Roboto,sans-serif; +} + +#projectname .menu a +{ + padding-left:1em; + text-decoration:none; +} + +#projectname .menu a:hover +{ + color:white; +} + +#titlearea +{ + color: white; + background: black; + padding: 0px; + margin: 0px; + width: 100%; +} + +#titlearea table +{ + width:100%; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Ubuntu,Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* Fluid Fonts */ +@media screen and (max-width:640px){body{font-size:0.81255em!important}} diff --git a/management-interface/lib/api/doxygen.png b/management-interface/lib/api/doxygen.png new file mode 100644 index 0000000..da7e8aa Binary files /dev/null and b/management-interface/lib/api/doxygen.png differ diff --git a/management-interface/lib/api/doxygen_8h_source.html b/management-interface/lib/api/doxygen_8h_source.html new file mode 100644 index 0000000..3a25513 --- /dev/null +++ b/management-interface/lib/api/doxygen_8h_source.html @@ -0,0 +1,39 @@ + + + + + + + +Fat-Free Framework: doxygen.h Source File + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
doxygen.h
+
+
+
1 
+
diff --git a/management-interface/lib/api/dynsections.js b/management-interface/lib/api/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/management-interface/lib/api/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- $ -

+
diff --git a/management-interface/lib/api/functions_0x5f.html b/management-interface/lib/api/functions_0x5f.html new file mode 100644 index 0000000..032e12c --- /dev/null +++ b/management-interface/lib/api/functions_0x5f.html @@ -0,0 +1,183 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- _ -

+
diff --git a/management-interface/lib/api/functions_0x61.html b/management-interface/lib/api/functions_0x61.html new file mode 100644 index 0000000..4cc6a8c --- /dev/null +++ b/management-interface/lib/api/functions_0x61.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
diff --git a/management-interface/lib/api/functions_0x62.html b/management-interface/lib/api/functions_0x62.html new file mode 100644 index 0000000..0cb7301 --- /dev/null +++ b/management-interface/lib/api/functions_0x62.html @@ -0,0 +1,65 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
diff --git a/management-interface/lib/api/functions_0x63.html b/management-interface/lib/api/functions_0x63.html new file mode 100644 index 0000000..60cb378 --- /dev/null +++ b/management-interface/lib/api/functions_0x63.html @@ -0,0 +1,158 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
diff --git a/management-interface/lib/api/functions_0x64.html b/management-interface/lib/api/functions_0x64.html new file mode 100644 index 0000000..0a241b3 --- /dev/null +++ b/management-interface/lib/api/functions_0x64.html @@ -0,0 +1,82 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
diff --git a/management-interface/lib/api/functions_0x65.html b/management-interface/lib/api/functions_0x65.html new file mode 100644 index 0000000..677ee28 --- /dev/null +++ b/management-interface/lib/api/functions_0x65.html @@ -0,0 +1,95 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
diff --git a/management-interface/lib/api/functions_0x66.html b/management-interface/lib/api/functions_0x66.html new file mode 100644 index 0000000..7080074 --- /dev/null +++ b/management-interface/lib/api/functions_0x66.html @@ -0,0 +1,77 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
diff --git a/management-interface/lib/api/functions_0x67.html b/management-interface/lib/api/functions_0x67.html new file mode 100644 index 0000000..0bd3d07 --- /dev/null +++ b/management-interface/lib/api/functions_0x67.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
diff --git a/management-interface/lib/api/functions_0x68.html b/management-interface/lib/api/functions_0x68.html new file mode 100644 index 0000000..555f258 --- /dev/null +++ b/management-interface/lib/api/functions_0x68.html @@ -0,0 +1,54 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
diff --git a/management-interface/lib/api/functions_0x69.html b/management-interface/lib/api/functions_0x69.html new file mode 100644 index 0000000..a0316dd --- /dev/null +++ b/management-interface/lib/api/functions_0x69.html @@ -0,0 +1,87 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
diff --git a/management-interface/lib/api/functions_0x6a.html b/management-interface/lib/api/functions_0x6a.html new file mode 100644 index 0000000..438573b --- /dev/null +++ b/management-interface/lib/api/functions_0x6a.html @@ -0,0 +1,41 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
diff --git a/management-interface/lib/api/functions_0x6c.html b/management-interface/lib/api/functions_0x6c.html new file mode 100644 index 0000000..24c326f --- /dev/null +++ b/management-interface/lib/api/functions_0x6c.html @@ -0,0 +1,75 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
diff --git a/management-interface/lib/api/functions_0x6d.html b/management-interface/lib/api/functions_0x6d.html new file mode 100644 index 0000000..bc75583 --- /dev/null +++ b/management-interface/lib/api/functions_0x6d.html @@ -0,0 +1,68 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
diff --git a/management-interface/lib/api/functions_0x6e.html b/management-interface/lib/api/functions_0x6e.html new file mode 100644 index 0000000..cbfd02a --- /dev/null +++ b/management-interface/lib/api/functions_0x6e.html @@ -0,0 +1,47 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
diff --git a/management-interface/lib/api/functions_0x6f.html b/management-interface/lib/api/functions_0x6f.html new file mode 100644 index 0000000..b5cb49f --- /dev/null +++ b/management-interface/lib/api/functions_0x6f.html @@ -0,0 +1,71 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
diff --git a/management-interface/lib/api/functions_0x70.html b/management-interface/lib/api/functions_0x70.html new file mode 100644 index 0000000..71b152b --- /dev/null +++ b/management-interface/lib/api/functions_0x70.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
diff --git a/management-interface/lib/api/functions_0x71.html b/management-interface/lib/api/functions_0x71.html new file mode 100644 index 0000000..f87cc36 --- /dev/null +++ b/management-interface/lib/api/functions_0x71.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
diff --git a/management-interface/lib/api/functions_0x72.html b/management-interface/lib/api/functions_0x72.html new file mode 100644 index 0000000..14ab5be --- /dev/null +++ b/management-interface/lib/api/functions_0x72.html @@ -0,0 +1,116 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
diff --git a/management-interface/lib/api/functions_0x73.html b/management-interface/lib/api/functions_0x73.html new file mode 100644 index 0000000..ef35112 --- /dev/null +++ b/management-interface/lib/api/functions_0x73.html @@ -0,0 +1,160 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
diff --git a/management-interface/lib/api/functions_0x74.html b/management-interface/lib/api/functions_0x74.html new file mode 100644 index 0000000..4ff0e21 --- /dev/null +++ b/management-interface/lib/api/functions_0x74.html @@ -0,0 +1,55 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
diff --git a/management-interface/lib/api/functions_0x75.html b/management-interface/lib/api/functions_0x75.html new file mode 100644 index 0000000..76acaf5 --- /dev/null +++ b/management-interface/lib/api/functions_0x75.html @@ -0,0 +1,67 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
diff --git a/management-interface/lib/api/functions_0x76.html b/management-interface/lib/api/functions_0x76.html new file mode 100644 index 0000000..a194598 --- /dev/null +++ b/management-interface/lib/api/functions_0x76.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
diff --git a/management-interface/lib/api/functions_0x77.html b/management-interface/lib/api/functions_0x77.html new file mode 100644 index 0000000..6fe98be --- /dev/null +++ b/management-interface/lib/api/functions_0x77.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
diff --git a/management-interface/lib/api/functions_0x78.html b/management-interface/lib/api/functions_0x78.html new file mode 100644 index 0000000..1b4a444 --- /dev/null +++ b/management-interface/lib/api/functions_0x78.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- x -

+
diff --git a/management-interface/lib/api/functions__.html b/management-interface/lib/api/functions__.html new file mode 100644 index 0000000..40d2095 --- /dev/null +++ b/management-interface/lib/api/functions__.html @@ -0,0 +1,184 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- _ -

+
diff --git a/management-interface/lib/api/functions_a.html b/management-interface/lib/api/functions_a.html new file mode 100644 index 0000000..dcec1d2 --- /dev/null +++ b/management-interface/lib/api/functions_a.html @@ -0,0 +1,65 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
diff --git a/management-interface/lib/api/functions_b.html b/management-interface/lib/api/functions_b.html new file mode 100644 index 0000000..f7b9db5 --- /dev/null +++ b/management-interface/lib/api/functions_b.html @@ -0,0 +1,74 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
diff --git a/management-interface/lib/api/functions_c.html b/management-interface/lib/api/functions_c.html new file mode 100644 index 0000000..8254933 --- /dev/null +++ b/management-interface/lib/api/functions_c.html @@ -0,0 +1,165 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
diff --git a/management-interface/lib/api/functions_d.html b/management-interface/lib/api/functions_d.html new file mode 100644 index 0000000..d4519c6 --- /dev/null +++ b/management-interface/lib/api/functions_d.html @@ -0,0 +1,88 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
diff --git a/management-interface/lib/api/functions_e.html b/management-interface/lib/api/functions_e.html new file mode 100644 index 0000000..90d8fa4 --- /dev/null +++ b/management-interface/lib/api/functions_e.html @@ -0,0 +1,98 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
diff --git a/management-interface/lib/api/functions_f.html b/management-interface/lib/api/functions_f.html new file mode 100644 index 0000000..113798e --- /dev/null +++ b/management-interface/lib/api/functions_f.html @@ -0,0 +1,77 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
diff --git a/management-interface/lib/api/functions_func.html b/management-interface/lib/api/functions_func.html new file mode 100644 index 0000000..f3d6218 --- /dev/null +++ b/management-interface/lib/api/functions_func.html @@ -0,0 +1,184 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- _ -

+
diff --git a/management-interface/lib/api/functions_func_0x61.html b/management-interface/lib/api/functions_func_0x61.html new file mode 100644 index 0000000..f316286 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x61.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- a -

+
diff --git a/management-interface/lib/api/functions_func_0x62.html b/management-interface/lib/api/functions_func_0x62.html new file mode 100644 index 0000000..db37cf8 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x62.html @@ -0,0 +1,65 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- b -

+
diff --git a/management-interface/lib/api/functions_func_0x63.html b/management-interface/lib/api/functions_func_0x63.html new file mode 100644 index 0000000..d5eec47 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x63.html @@ -0,0 +1,152 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- c -

+
diff --git a/management-interface/lib/api/functions_func_0x64.html b/management-interface/lib/api/functions_func_0x64.html new file mode 100644 index 0000000..1e23497 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x64.html @@ -0,0 +1,82 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- d -

+
diff --git a/management-interface/lib/api/functions_func_0x65.html b/management-interface/lib/api/functions_func_0x65.html new file mode 100644 index 0000000..c5f238b --- /dev/null +++ b/management-interface/lib/api/functions_func_0x65.html @@ -0,0 +1,95 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- e -

+
diff --git a/management-interface/lib/api/functions_func_0x66.html b/management-interface/lib/api/functions_func_0x66.html new file mode 100644 index 0000000..5a7018d --- /dev/null +++ b/management-interface/lib/api/functions_func_0x66.html @@ -0,0 +1,77 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- f -

+
diff --git a/management-interface/lib/api/functions_func_0x67.html b/management-interface/lib/api/functions_func_0x67.html new file mode 100644 index 0000000..77e7d65 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x67.html @@ -0,0 +1,53 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- g -

+
diff --git a/management-interface/lib/api/functions_func_0x68.html b/management-interface/lib/api/functions_func_0x68.html new file mode 100644 index 0000000..f9d4939 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x68.html @@ -0,0 +1,54 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- h -

+
diff --git a/management-interface/lib/api/functions_func_0x69.html b/management-interface/lib/api/functions_func_0x69.html new file mode 100644 index 0000000..9e38c65 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x69.html @@ -0,0 +1,87 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- i -

+
diff --git a/management-interface/lib/api/functions_func_0x6a.html b/management-interface/lib/api/functions_func_0x6a.html new file mode 100644 index 0000000..080b330 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x6a.html @@ -0,0 +1,41 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- j -

+
diff --git a/management-interface/lib/api/functions_func_0x6c.html b/management-interface/lib/api/functions_func_0x6c.html new file mode 100644 index 0000000..bb7a208 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x6c.html @@ -0,0 +1,75 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- l -

+
diff --git a/management-interface/lib/api/functions_func_0x6d.html b/management-interface/lib/api/functions_func_0x6d.html new file mode 100644 index 0000000..c657218 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x6d.html @@ -0,0 +1,65 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- m -

+
diff --git a/management-interface/lib/api/functions_func_0x6e.html b/management-interface/lib/api/functions_func_0x6e.html new file mode 100644 index 0000000..f37e19d --- /dev/null +++ b/management-interface/lib/api/functions_func_0x6e.html @@ -0,0 +1,47 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- n -

+
diff --git a/management-interface/lib/api/functions_func_0x6f.html b/management-interface/lib/api/functions_func_0x6f.html new file mode 100644 index 0000000..ece5e26 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x6f.html @@ -0,0 +1,71 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- o -

+
diff --git a/management-interface/lib/api/functions_func_0x70.html b/management-interface/lib/api/functions_func_0x70.html new file mode 100644 index 0000000..d1e9efb --- /dev/null +++ b/management-interface/lib/api/functions_func_0x70.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- p -

+
diff --git a/management-interface/lib/api/functions_func_0x71.html b/management-interface/lib/api/functions_func_0x71.html new file mode 100644 index 0000000..8cca107 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x71.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- q -

+
diff --git a/management-interface/lib/api/functions_func_0x72.html b/management-interface/lib/api/functions_func_0x72.html new file mode 100644 index 0000000..33e5d59 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x72.html @@ -0,0 +1,116 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- r -

+
diff --git a/management-interface/lib/api/functions_func_0x73.html b/management-interface/lib/api/functions_func_0x73.html new file mode 100644 index 0000000..d86bc87 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x73.html @@ -0,0 +1,160 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- s -

+
diff --git a/management-interface/lib/api/functions_func_0x74.html b/management-interface/lib/api/functions_func_0x74.html new file mode 100644 index 0000000..76fb3cc --- /dev/null +++ b/management-interface/lib/api/functions_func_0x74.html @@ -0,0 +1,55 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- t -

+
diff --git a/management-interface/lib/api/functions_func_0x75.html b/management-interface/lib/api/functions_func_0x75.html new file mode 100644 index 0000000..5e48214 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x75.html @@ -0,0 +1,64 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- u -

+
diff --git a/management-interface/lib/api/functions_func_0x76.html b/management-interface/lib/api/functions_func_0x76.html new file mode 100644 index 0000000..4fac96b --- /dev/null +++ b/management-interface/lib/api/functions_func_0x76.html @@ -0,0 +1,53 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- v -

+
diff --git a/management-interface/lib/api/functions_func_0x77.html b/management-interface/lib/api/functions_func_0x77.html new file mode 100644 index 0000000..75553ea --- /dev/null +++ b/management-interface/lib/api/functions_func_0x77.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- w -

+
diff --git a/management-interface/lib/api/functions_func_0x78.html b/management-interface/lib/api/functions_func_0x78.html new file mode 100644 index 0000000..fda6468 --- /dev/null +++ b/management-interface/lib/api/functions_func_0x78.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.0 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- x -

+
diff --git a/management-interface/lib/api/functions_func_a.html b/management-interface/lib/api/functions_func_a.html new file mode 100644 index 0000000..045a846 --- /dev/null +++ b/management-interface/lib/api/functions_func_a.html @@ -0,0 +1,65 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- a -

+
diff --git a/management-interface/lib/api/functions_func_b.html b/management-interface/lib/api/functions_func_b.html new file mode 100644 index 0000000..0ca4abd --- /dev/null +++ b/management-interface/lib/api/functions_func_b.html @@ -0,0 +1,74 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- b -

+
diff --git a/management-interface/lib/api/functions_func_c.html b/management-interface/lib/api/functions_func_c.html new file mode 100644 index 0000000..5c93412 --- /dev/null +++ b/management-interface/lib/api/functions_func_c.html @@ -0,0 +1,159 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- c -

+
diff --git a/management-interface/lib/api/functions_func_d.html b/management-interface/lib/api/functions_func_d.html new file mode 100644 index 0000000..d4ea8eb --- /dev/null +++ b/management-interface/lib/api/functions_func_d.html @@ -0,0 +1,88 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- d -

+
diff --git a/management-interface/lib/api/functions_func_e.html b/management-interface/lib/api/functions_func_e.html new file mode 100644 index 0000000..71f8238 --- /dev/null +++ b/management-interface/lib/api/functions_func_e.html @@ -0,0 +1,98 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- e -

+
diff --git a/management-interface/lib/api/functions_func_f.html b/management-interface/lib/api/functions_func_f.html new file mode 100644 index 0000000..5ff02ea --- /dev/null +++ b/management-interface/lib/api/functions_func_f.html @@ -0,0 +1,77 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- f -

+
diff --git a/management-interface/lib/api/functions_func_g.html b/management-interface/lib/api/functions_func_g.html new file mode 100644 index 0000000..9d39e09 --- /dev/null +++ b/management-interface/lib/api/functions_func_g.html @@ -0,0 +1,53 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- g -

+
diff --git a/management-interface/lib/api/functions_func_h.html b/management-interface/lib/api/functions_func_h.html new file mode 100644 index 0000000..7a521fd --- /dev/null +++ b/management-interface/lib/api/functions_func_h.html @@ -0,0 +1,54 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- h -

+
diff --git a/management-interface/lib/api/functions_func_i.html b/management-interface/lib/api/functions_func_i.html new file mode 100644 index 0000000..c1b2db9 --- /dev/null +++ b/management-interface/lib/api/functions_func_i.html @@ -0,0 +1,86 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- i -

+
diff --git a/management-interface/lib/api/functions_func_j.html b/management-interface/lib/api/functions_func_j.html new file mode 100644 index 0000000..149e77d --- /dev/null +++ b/management-interface/lib/api/functions_func_j.html @@ -0,0 +1,41 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- j -

+
diff --git a/management-interface/lib/api/functions_func_l.html b/management-interface/lib/api/functions_func_l.html new file mode 100644 index 0000000..1c6b0dd --- /dev/null +++ b/management-interface/lib/api/functions_func_l.html @@ -0,0 +1,75 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- l -

+
diff --git a/management-interface/lib/api/functions_func_m.html b/management-interface/lib/api/functions_func_m.html new file mode 100644 index 0000000..3c169ca --- /dev/null +++ b/management-interface/lib/api/functions_func_m.html @@ -0,0 +1,65 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- m -

+
diff --git a/management-interface/lib/api/functions_func_n.html b/management-interface/lib/api/functions_func_n.html new file mode 100644 index 0000000..291eb37 --- /dev/null +++ b/management-interface/lib/api/functions_func_n.html @@ -0,0 +1,47 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- n -

+
diff --git a/management-interface/lib/api/functions_func_o.html b/management-interface/lib/api/functions_func_o.html new file mode 100644 index 0000000..baf8338 --- /dev/null +++ b/management-interface/lib/api/functions_func_o.html @@ -0,0 +1,71 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- o -

+
diff --git a/management-interface/lib/api/functions_func_p.html b/management-interface/lib/api/functions_func_p.html new file mode 100644 index 0000000..4f5afc9 --- /dev/null +++ b/management-interface/lib/api/functions_func_p.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- p -

+
diff --git a/management-interface/lib/api/functions_func_q.html b/management-interface/lib/api/functions_func_q.html new file mode 100644 index 0000000..0e16f6a --- /dev/null +++ b/management-interface/lib/api/functions_func_q.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- q -

+
diff --git a/management-interface/lib/api/functions_func_r.html b/management-interface/lib/api/functions_func_r.html new file mode 100644 index 0000000..b31816f --- /dev/null +++ b/management-interface/lib/api/functions_func_r.html @@ -0,0 +1,119 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- r -

+
diff --git a/management-interface/lib/api/functions_func_s.html b/management-interface/lib/api/functions_func_s.html new file mode 100644 index 0000000..470bcd9 --- /dev/null +++ b/management-interface/lib/api/functions_func_s.html @@ -0,0 +1,157 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- s -

+
diff --git a/management-interface/lib/api/functions_func_t.html b/management-interface/lib/api/functions_func_t.html new file mode 100644 index 0000000..c45fcf6 --- /dev/null +++ b/management-interface/lib/api/functions_func_t.html @@ -0,0 +1,58 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- t -

+
diff --git a/management-interface/lib/api/functions_func_u.html b/management-interface/lib/api/functions_func_u.html new file mode 100644 index 0000000..6b0d492 --- /dev/null +++ b/management-interface/lib/api/functions_func_u.html @@ -0,0 +1,64 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- u -

+
diff --git a/management-interface/lib/api/functions_func_v.html b/management-interface/lib/api/functions_func_v.html new file mode 100644 index 0000000..f259caf --- /dev/null +++ b/management-interface/lib/api/functions_func_v.html @@ -0,0 +1,53 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- v -

+
diff --git a/management-interface/lib/api/functions_func_w.html b/management-interface/lib/api/functions_func_w.html new file mode 100644 index 0000000..373f650 --- /dev/null +++ b/management-interface/lib/api/functions_func_w.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members - Functions + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- w -

+
diff --git a/management-interface/lib/api/functions_g.html b/management-interface/lib/api/functions_g.html new file mode 100644 index 0000000..8104c44 --- /dev/null +++ b/management-interface/lib/api/functions_g.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
diff --git a/management-interface/lib/api/functions_h.html b/management-interface/lib/api/functions_h.html new file mode 100644 index 0000000..15c3b79 --- /dev/null +++ b/management-interface/lib/api/functions_h.html @@ -0,0 +1,54 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
diff --git a/management-interface/lib/api/functions_i.html b/management-interface/lib/api/functions_i.html new file mode 100644 index 0000000..05ef17b --- /dev/null +++ b/management-interface/lib/api/functions_i.html @@ -0,0 +1,86 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
diff --git a/management-interface/lib/api/functions_j.html b/management-interface/lib/api/functions_j.html new file mode 100644 index 0000000..7d2e6ff --- /dev/null +++ b/management-interface/lib/api/functions_j.html @@ -0,0 +1,41 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
diff --git a/management-interface/lib/api/functions_l.html b/management-interface/lib/api/functions_l.html new file mode 100644 index 0000000..446e260 --- /dev/null +++ b/management-interface/lib/api/functions_l.html @@ -0,0 +1,75 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
diff --git a/management-interface/lib/api/functions_m.html b/management-interface/lib/api/functions_m.html new file mode 100644 index 0000000..0530b06 --- /dev/null +++ b/management-interface/lib/api/functions_m.html @@ -0,0 +1,68 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
diff --git a/management-interface/lib/api/functions_n.html b/management-interface/lib/api/functions_n.html new file mode 100644 index 0000000..01d38e5 --- /dev/null +++ b/management-interface/lib/api/functions_n.html @@ -0,0 +1,47 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
diff --git a/management-interface/lib/api/functions_o.html b/management-interface/lib/api/functions_o.html new file mode 100644 index 0000000..a8447d9 --- /dev/null +++ b/management-interface/lib/api/functions_o.html @@ -0,0 +1,71 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
diff --git a/management-interface/lib/api/functions_p.html b/management-interface/lib/api/functions_p.html new file mode 100644 index 0000000..ffd6b03 --- /dev/null +++ b/management-interface/lib/api/functions_p.html @@ -0,0 +1,63 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
diff --git a/management-interface/lib/api/functions_q.html b/management-interface/lib/api/functions_q.html new file mode 100644 index 0000000..1addcca --- /dev/null +++ b/management-interface/lib/api/functions_q.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
diff --git a/management-interface/lib/api/functions_r.html b/management-interface/lib/api/functions_r.html new file mode 100644 index 0000000..721c899 --- /dev/null +++ b/management-interface/lib/api/functions_r.html @@ -0,0 +1,119 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
diff --git a/management-interface/lib/api/functions_s.html b/management-interface/lib/api/functions_s.html new file mode 100644 index 0000000..19df494 --- /dev/null +++ b/management-interface/lib/api/functions_s.html @@ -0,0 +1,157 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
diff --git a/management-interface/lib/api/functions_t.html b/management-interface/lib/api/functions_t.html new file mode 100644 index 0000000..0712b58 --- /dev/null +++ b/management-interface/lib/api/functions_t.html @@ -0,0 +1,58 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
diff --git a/management-interface/lib/api/functions_u.html b/management-interface/lib/api/functions_u.html new file mode 100644 index 0000000..a809f52 --- /dev/null +++ b/management-interface/lib/api/functions_u.html @@ -0,0 +1,67 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
diff --git a/management-interface/lib/api/functions_v.html b/management-interface/lib/api/functions_v.html new file mode 100644 index 0000000..759ff42 --- /dev/null +++ b/management-interface/lib/api/functions_v.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
diff --git a/management-interface/lib/api/functions_vars.html b/management-interface/lib/api/functions_vars.html new file mode 100644 index 0000000..4846786 --- /dev/null +++ b/management-interface/lib/api/functions_vars.html @@ -0,0 +1,262 @@ + + + + + + + +Fat-Free Framework: Class Members - Variables + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+  + +

- $ -

+ + +

- c -

+ + +

- g -

+ + +

- m -

+ + +

- u -

+ + +

- v -

+
diff --git a/management-interface/lib/api/functions_w.html b/management-interface/lib/api/functions_w.html new file mode 100644 index 0000000..2255bea --- /dev/null +++ b/management-interface/lib/api/functions_w.html @@ -0,0 +1,56 @@ + + + + + + + +Fat-Free Framework: Class Members + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
diff --git a/management-interface/lib/api/hierarchy.html b/management-interface/lib/api/hierarchy.html new file mode 100644 index 0000000..5f96ee4 --- /dev/null +++ b/management-interface/lib/api/hierarchy.html @@ -0,0 +1,82 @@ + + + + + + + +Fat-Free Framework: Class Hierarchy + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oCArrayAccess
|\CMagicPHP magic wrapper
| oCDB\CursorSimple cursor implementation
| |oCDB\Jig\MapperFlat-file DB mapper
| ||\CDB\Jig\SessionJig-managed session handler
| |oCDB\Mongo\MapperMongoDB mapper
| ||\CDB\Mongo\SessionMongoDB-managed session handler
| |\CDB\SQL\MapperSQL data mapper
| | \CDB\SQL\SessionSQL-managed session handler
| oCSMTPSMTP plug-in
| \CWeb\OpenIDOpenID consumer
oCAuthAuthorization/authentication plug-in
oCBasketSession-based pseudo-mapper
oCF3Legacy mode enabler
oCImageImage manipulation tools
oCDB\JigFlat-file DB wrapper
oCLogCustom logger
oCMongoDB
|\CDB\MongoMongoDB wrapper
oCPDO
|\CDB\SQLPDO wrapper
oCPrefabFactory class for single-instance objects
|oCAuditData validator
|oCBaseBase structure
|oCBcryptLightweight password hashing library
|oCCacheCache engine
|oCISOISO language/country codes
|oCMarkdownMarkdown-to-HTML converter
|oCMatrixGeneric array utilities
|oCUTFUnicode string manager
|oCViewView handler
||\CPreviewLightweight template engine
|| \CTemplateXML-style template engine
|oCWebWrapper for various HTTP utilities
|oCWeb\GeoGeo plug-in
|\CWeb\PingbackPingback 1.0 protocol (client and server) implementation
oCRegistryContainer for singular object instances
oCSessionCache-based session handler
oCWeb\Google\StaticMapGoogle Static Maps API v2 plug-in
\CTestUnit test kit
+
+
diff --git a/management-interface/lib/api/index.html b/management-interface/lib/api/index.html new file mode 100644 index 0000000..7be8620 --- /dev/null +++ b/management-interface/lib/api/index.html @@ -0,0 +1,44 @@ + + + + + + + +Fat-Free Framework: Overview + + + + + + +
+
+ + + + + + +
+
Fat-Free Framework +  3.2.2 +  Overview Class List Hierarchy +
+
+
+ + +
+
+
+
Overview
+
+
+

A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!

+

Condensed in a single ~50KB file, F3 (as we fondly call it) gives you solid foundation, a mature code base, and a no-nonsense approach to writing Web applications. Under the hood is an easy-to-use Web development tool kit, a high-performance URL routing and cache engine, built-in code highlighting, and support for multilingual applications. It's lightweight, easy-to-use, and fast. Most of all, it doesn't get in your way.

+

Whether you're a novice or an expert PHP programmer, F3 will get you up and running in no time. No unnecessary and painstaking installation procedures. No complex configuration required. No convoluted directory structures. There's no better time to start developing Web applications the easy way than right now!

+

F3 supports both SQL and NoSQL databases off-the-shelf: MySQL, SQLite, MSSQL/Sybase, PostgreSQL, DB2, and MongoDB. It also comes with powerful object-relational mappers for data abstraction and modeling that are just as lightweight as the framework. No configuration needed.

+

Unlike other frameworks, F3 aims to be usable - not usual.

+

The philosophy behind the framework and its approach to software architecture is towards minimalism in structural components, avoiding application complexity and striking a balance between code elegance, application performance and programmer productivity.

+
diff --git a/management-interface/lib/api/jquery.js b/management-interface/lib/api/jquery.js new file mode 100644 index 0000000..c197801 --- /dev/null +++ b/management-interface/lib/api/jquery.js @@ -0,0 +1,31 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/management-interface/lib/api/nav_f.png b/management-interface/lib/api/nav_f.png new file mode 100644 index 0000000..5ceae87 Binary files /dev/null and b/management-interface/lib/api/nav_f.png differ diff --git a/management-interface/lib/api/nav_g.png b/management-interface/lib/api/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/management-interface/lib/api/nav_g.png differ diff --git a/management-interface/lib/api/nav_h.png b/management-interface/lib/api/nav_h.png new file mode 100644 index 0000000..e619809 Binary files /dev/null and b/management-interface/lib/api/nav_h.png differ diff --git a/management-interface/lib/api/open.png b/management-interface/lib/api/open.png new file mode 100644 index 0000000..7e740cc Binary files /dev/null and b/management-interface/lib/api/open.png differ diff --git a/management-interface/lib/api/sync_off.png b/management-interface/lib/api/sync_off.png new file mode 100644 index 0000000..b856624 Binary files /dev/null and b/management-interface/lib/api/sync_off.png differ diff --git a/management-interface/lib/api/sync_on.png b/management-interface/lib/api/sync_on.png new file mode 100644 index 0000000..e5044af Binary files /dev/null and b/management-interface/lib/api/sync_on.png differ diff --git a/management-interface/lib/api/tab_a.png b/management-interface/lib/api/tab_a.png new file mode 100644 index 0000000..170a784 Binary files /dev/null and b/management-interface/lib/api/tab_a.png differ diff --git a/management-interface/lib/api/tab_b.png b/management-interface/lib/api/tab_b.png new file mode 100644 index 0000000..7774499 Binary files /dev/null and b/management-interface/lib/api/tab_b.png differ diff --git a/management-interface/lib/api/tab_h.png b/management-interface/lib/api/tab_h.png new file mode 100644 index 0000000..e1dddef Binary files /dev/null and b/management-interface/lib/api/tab_h.png differ diff --git a/management-interface/lib/api/tab_s.png b/management-interface/lib/api/tab_s.png new file mode 100644 index 0000000..3dc07b0 Binary files /dev/null and b/management-interface/lib/api/tab_s.png differ diff --git a/management-interface/lib/api/tabs.css b/management-interface/lib/api/tabs.css new file mode 100644 index 0000000..71145bb --- /dev/null +++ b/management-interface/lib/api/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #434343; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/management-interface/lib/audit.php b/management-interface/lib/audit.php new file mode 100644 index 0000000..32a64a9 --- /dev/null +++ b/management-interface/lib/audit.php @@ -0,0 +1,177 @@ +get('AGENT'); + return (bool)preg_match('/('.self::UA_Desktop.')/i',$agent) && + !$this->ismobile(); + } + + /** + * Return TRUE if user agent is a mobile device + * @return bool + **/ + function ismobile() { + $agent=Base::instance()->get('AGENT'); + return (bool)preg_match('/('.self::UA_Mobile.')/i',$agent); + } + + /** + * Return TRUE if user agent is a Web bot + * @return bool + **/ + function isbot() { + $agent=Base::instance()->get('AGENT'); + return (bool)preg_match('/('.self::UA_Bot.')/i',$agent); + } + + /** + * Return TRUE if specified ID has a valid (Luhn) Mod-10 check digit + * @return bool + * @param $id string + **/ + function mod10($id) { + if (!ctype_digit($id)) + return FALSE; + $id=strrev($id); + $sum=0; + for ($i=0,$l=strlen($id);$i<$l;$i++) + $sum+=$id[$i]+$i%2*(($id[$i]>4)*-4+$id[$i]%5); + return !($sum%10); + } + + /** + * Return credit card type if number is valid + * @return string|FALSE + * @param $id string + **/ + function card($id) { + $id=preg_replace('/[^\d]/','',$id); + if ($this->mod10($id)) { + if (preg_match('/^3[47][0-9]{13}$/',$id)) + return 'American Express'; + if (preg_match('/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/',$id)) + return 'Diners Club'; + if (preg_match('/^6(?:011|5[0-9][0-9])[0-9]{12}$/',$id)) + return 'Discover'; + if (preg_match('/^(?:2131|1800|35\d{3})\d{11}$/',$id)) + return 'JCB'; + if (preg_match('/^5[1-5][0-9]{14}$/',$id)) + return 'MasterCard'; + if (preg_match('/^4[0-9]{12}(?:[0-9]{3})?$/',$id)) + return 'Visa'; + } + return FALSE; + } + + /** + * Return entropy estimate of a password (NIST 800-63) + * @return int|float + * @param $str string + **/ + function entropy($str) { + $len=strlen($str); + return 4*min($len,1)+($len>1?(2*(min($len,8)-1)):0)+ + ($len>8?(1.5*(min($len,20)-8)):0)+($len>20?($len-20):0)+ + 6*(bool)(preg_match( + '/[A-Z].*?[0-9[:punct:]]|[0-9[:punct:]].*?[A-Z]/',$str)); + } + +} diff --git a/management-interface/lib/auth.php b/management-interface/lib/auth.php new file mode 100644 index 0000000..78a068c --- /dev/null +++ b/management-interface/lib/auth.php @@ -0,0 +1,233 @@ +mapper,'load'), + array( + array_merge( + array( + '@'.$this->args['id'].'==? AND '. + '@'.$this->args['pw'].'==?'. + (isset($this->args['realm'])? + (' AND @'.$this->args['realm'].'==?'):''), + $id,$pw + ), + (isset($this->args['realm'])?array($realm):array()) + ) + ) + ); + } + + /** + * MongoDB storage handler + * @return bool + * @param $id string + * @param $pw string + * @param $realm string + **/ + protected function _mongo($id,$pw,$realm) { + return (bool) + $this->mapper->load( + array( + $this->args['id']=>$id, + $this->args['pw']=>$pw + )+ + (isset($this->args['realm'])? + array($this->args['realm']=>$realm):array()) + ); + } + + /** + * SQL storage handler + * @return bool + * @param $id string + * @param $pw string + * @param $realm string + **/ + protected function _sql($id,$pw,$realm) { + return (bool) + call_user_func_array( + array($this->mapper,'load'), + array( + array_merge( + array( + $this->args['id'].'=? AND '. + $this->args['pw'].'=?'. + (isset($this->args['realm'])? + (' AND '.$this->args['realm'].'=?'):''), + $id,$pw + ), + (isset($this->args['realm'])?array($realm):array()) + ) + ) + ); + } + + /** + * LDAP storage handler + * @return bool + * @param $id string + * @param $pw string + **/ + protected function _ldap($id,$pw) { + $dc=@ldap_connect($this->args['dc']); + if ($dc && + ldap_set_option($dc,LDAP_OPT_PROTOCOL_VERSION,3) && + ldap_set_option($dc,LDAP_OPT_REFERRALS,0) && + ldap_bind($dc,$this->args['rdn'],$this->args['pw']) && + ($result=ldap_search($dc,$this->args['base_dn'], + 'uid='.$id)) && + ldap_count_entries($dc,$result) && + ($info=ldap_get_entries($dc,$result)) && + @ldap_bind($dc,$info[0]['dn'],$pw) && + @ldap_close($dc)) { + return $info[0]['uid'][0]==$id; + } + user_error(self::E_LDAP); + } + + /** + * SMTP storage handler + * @return bool + * @param $id string + * @param $pw string + **/ + protected function _smtp($id,$pw) { + $socket=@fsockopen( + (strtolower($this->args['scheme'])=='ssl'? + 'ssl://':'').$this->args['host'], + $this->args['port']); + $dialog=function($cmd=NULL) use($socket) { + if (!is_null($cmd)) + fputs($socket,$cmd."\r\n"); + $reply=''; + while (!feof($socket) && + ($info=stream_get_meta_data($socket)) && + !$info['timed_out'] && $str=fgets($socket,4096)) { + $reply.=$str; + if (preg_match('/(?:^|\n)\d{3} .+\r\n/s', + $reply)) + break; + } + return $reply; + }; + if ($socket) { + stream_set_blocking($socket,TRUE); + $dialog(); + $fw=Base::instance(); + $dialog('EHLO '.$fw->get('HOST')); + if (strtolower($this->args['scheme'])=='tls') { + $dialog('STARTTLS'); + stream_socket_enable_crypto( + $socket,TRUE,STREAM_CRYPTO_METHOD_TLS_CLIENT); + $dialog('EHLO '.$fw->get('HOST')); + } + // Authenticate + $dialog('AUTH LOGIN'); + $dialog(base64_encode($id)); + $reply=$dialog(base64_encode($pw)); + $dialog('QUIT'); + fclose($socket); + return (bool)preg_match('/^235 /',$reply); + } + user_error(self::E_SMTP); + } + + /** + * Login auth mechanism + * @return bool + * @param $id string + * @param $pw string + * @param $realm string + **/ + function login($id,$pw,$realm=NULL) { + return $this->{'_'.$this->storage}($id,$pw,$realm); + } + + /** + * HTTP basic auth mechanism + * @return bool + * @param $func callback + **/ + function basic($func=NULL) { + $fw=Base::instance(); + $realm=$fw->get('REALM'); + $hdr=NULL; + if (isset($_SERVER['HTTP_AUTHORIZATION'])) + $hdr=$_SERVER['HTTP_AUTHORIZATION']; + elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) + $hdr=$_SERVER['REDIRECT_HTTP_AUTHORIZATION']; + if (!empty($hdr)) + list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'])= + explode(':',base64_decode(substr($hdr,6))); + if (isset($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) && + $this->login( + $_SERVER['PHP_AUTH_USER'], + $func? + $fw->call($func,$_SERVER['PHP_AUTH_PW']): + $_SERVER['PHP_AUTH_PW'], + $realm + )) + return TRUE; + if (PHP_SAPI!='cli') + header('WWW-Authenticate: Basic realm="'.$realm.'"'); + $fw->status(401); + return FALSE; + } + + /** + * Instantiate class + * @return object + * @param $storage string|object + * @param $args array + **/ + function __construct($storage,array $args=NULL) { + if (is_object($storage) && is_a($storage,'DB\Cursor')) { + $this->storage=$storage->dbtype(); + $this->mapper=$storage; + unset($ref); + } + else + $this->storage=$storage; + $this->args=$args; + } + +} diff --git a/management-interface/lib/basket.php b/management-interface/lib/basket.php new file mode 100644 index 0000000..3db2b5d --- /dev/null +++ b/management-interface/lib/basket.php @@ -0,0 +1,229 @@ +item); + } + + /** + * Assign value to field + * @return scalar|FALSE + * @param $key string + * @param $val scalar + **/ + function set($key,$val) { + return ($key=='_id')?FALSE:($this->item[$key]=$val); + } + + /** + * Retrieve value of field + * @return scalar|FALSE + * @param $key string + **/ + function get($key) { + if ($key=='_id') + return $this->id; + if (array_key_exists($key,$this->item)) + return $this->item[$key]; + user_error(sprintf(self::E_Field,$key)); + return FALSE; + } + + /** + * Delete field + * @return NULL + * @param $key string + **/ + function clear($key) { + unset($this->item[$key]); + } + + /** + * Return items that match key/value pair; + * If no key/value pair specified, return all items + * @return array|FALSE + * @param $key string + * @param $val mixed + **/ + function find($key=NULL,$val=NULL) { + if (isset($_SESSION[$this->key])) { + $out=array(); + foreach ($_SESSION[$this->key] as $id=>$item) + if (!isset($key) || + array_key_exists($key,$item) && $item[$key]==$val) { + $obj=clone($this); + $obj->id=$id; + $obj->item=$item; + $out[]=$obj; + } + return $out; + } + return FALSE; + } + + /** + * Return first item that matches key/value pair + * @return object|FALSE + * @param $key string + * @param $val mixed + **/ + function findone($key,$val) { + return ($data=$this->find($key,$val))?$data[0]:FALSE; + } + + /** + * Map current item to matching key/value pair + * @return array + * @param $key string + * @param $val mixed + **/ + function load($key,$val) { + if ($found=$this->find($key,$val)) { + $this->id=$found[0]->id; + return $this->item=$found[0]->item; + } + $this->reset(); + return array(); + } + + /** + * Return TRUE if current item is empty/undefined + * @return bool + **/ + function dry() { + return !$this->item; + } + + /** + * Return number of items in basket + * @return int + **/ + function count() { + return isset($_SESSION[$this->key])?count($_SESSION[$this->key]):0; + } + + /** + * Save current item + * @return array + **/ + function save() { + if (!$this->id) + $this->id=uniqid(NULL,TRUE); + $_SESSION[$this->key][$this->id]=$this->item; + return $this->item; + } + + /** + * Erase item matching key/value pair + * @return bool + * @param $key string + * @param $val mixed + **/ + function erase($key,$val) { + $found=$this->find($key,$val); + if ($found && $id=$found[0]->id) { + unset($_SESSION[$this->key][$id]); + if ($id==$this->id) + $this->reset(); + return TRUE; + } + return FALSE; + } + + /** + * Reset cursor + * @return NULL + **/ + function reset() { + $this->id=NULL; + $this->item=array(); + } + + /** + * Empty basket + * @return NULL + **/ + function drop() { + unset($_SESSION[$this->key]); + } + + /** + * Hydrate item using hive array variable + * @return NULL + * @param $key string + **/ + function copyfrom($key) { + foreach (\Base::instance()->get($key) as $key=>$val) + $this->item[$key]=$val; + } + + /** + * Populate hive array variable with item contents + * @return NULL + * @param $key string + **/ + function copyto($key) { + $var=&\Base::instance()->ref($key); + foreach ($this->item as $key=>$field) + $var[$key]=$field; + } + + /** + * Check out basket contents + * @return array + **/ + function checkout() { + if (isset($_SESSION[$this->key])) { + $out=$_SESSION[$this->key]; + unset($_SESSION[$this->key]); + return $out; + } + return array(); + } + + /** + * Instantiate class + * @return void + * @param $key string + **/ + function __construct($key='basket') { + $this->key=$key; + @session_start(); + Base::instance()->sync('SESSION'); + $this->reset(); + } + +} diff --git a/management-interface/lib/bcrypt.php b/management-interface/lib/bcrypt.php new file mode 100644 index 0000000..311c1e3 --- /dev/null +++ b/management-interface/lib/bcrypt.php @@ -0,0 +1,89 @@ +31) + user_error(self::E_CostArg); + $len=22; + if ($salt) { + if (!preg_match('/^[[:alnum:]\.\/]{'.$len.',}$/',$salt)) + user_error(self::E_SaltArg); + } + else { + $raw=16; + $iv=''; + if (extension_loaded('mcrypt')) + $iv=mcrypt_create_iv($raw,MCRYPT_DEV_URANDOM); + if (!$iv && extension_loaded('openssl')) + $iv=openssl_random_pseudo_bytes($raw); + if (!$iv) + for ($i=0;$i<$raw;$i++) + $iv.=chr(mt_rand(0,255)); + $salt=str_replace('+','.',base64_encode($iv)); + } + $salt=substr($salt,0,$len); + $hash=crypt($pw,sprintf('$2y$%02d$',$cost).$salt); + return strlen($hash)>13?$hash:FALSE; + } + + /** + * Check if password is still strong enough + * @return bool + * @param $hash string + * @param $cost int + **/ + function needs_rehash($hash,$cost=self::COST) { + list($pwcost)=sscanf($hash,"$2y$%d$"); + return $pwcost<$cost; + } + + /** + * Verify password against hash using timing attack resistant approach + * @return bool + * @param $pw string + * @param $hash string + **/ + function verify($pw,$hash) { + $val=crypt($pw,$hash); + $len=strlen($val); + if ($len!=strlen($hash) || $len<14) + return FALSE; + $out=0; + for ($i=0;$i<$len;$i++) + $out|=(ord($val[$i])^ord($hash[$i])); + return $out===0; + } + +} diff --git a/management-interface/lib/changelog.txt b/management-interface/lib/changelog.txt new file mode 100644 index 0000000..7ae905b --- /dev/null +++ b/management-interface/lib/changelog.txt @@ -0,0 +1,416 @@ +CHANGELOG + +3.2.2 (19 March 2014) +* NEW: Locales set automatically (Feature request #522) +* NEW: Mapper dbtype() +* NEW: before- and after- triggers for all mappers +* NEW: Decode HTML5 entities if PHP>5.3 detected (Feature request #552) +* NEW: Send credentials only if AUTH is present in the SMTP extension + response (Feature request #545) +* NEW: BITMASK variable to allow ENT_COMPAT override +* NEW: Redis support for caching +* Enable SMTP feature detection +* Enable extended ICU custom date format (Feature request #555) +* Enable custom time ICU format +* Add option to turn off session table creation (Feature request #557) +* Enhanced template token rendering and custom filters (Feature request + #550) +* Avert multiple loads in DB-managed sessions (Feature request #558) +* Add EXEC to associative fetch +* Bug fix: Building template tokens breaks on inline OR condition (Issue + #573) +* Bug fix: SMTP->send does not use the $log parameter (Issue #571) +* Bug fix: Allow setting sqlsrv primary keys on insert (Issue #570) +* Bug fix: Generated query for obtaining table schema in sqlsrv incorrect + (Bug #565) +* Bug fix: SQL mapper flag set even when value has not changed (Bug #562) +* Bug fix: Add XFRAME config option (Feature request #546) +* Bug fix: Incorrect parsing of comments (Issue #541) +* Bug fix: Multiple Set-Cookie headers (Issue #533) +* Bug fix: Mapper is dry after save() +* Bug fix: Prevent infinite loop when error handler is triggered + (Issue #361) +* Bug fix: Mapper tweaks not passing primary keys as arguments +* Bug fix: Zero indexes in dot-notated arrays fail to compile +* Bug fix: Prevent GROUP clause double-escaping +* Bug fix: Regression of zlib compression bug +* Bug fix: Method copyto() does not include ad hoc fields +* Check existence of OpenID mode (Issue #529) +* Generate a 404 when a tokenized class doesn't exist +* Fix SQLite quotes (Issue #521) +* Bug fix: BASE is incorrect on Windows + +3.2.1 (7 January 2014) +* NEW: EMOJI variable, UTF->translate(), UTF->emojify(), and UTF->strrev() +* Allow empty strings in config() +* Add support for turning off php://input buffering via RAW + (FALSE by default) +* Add Cursor->load() and Cursor->find() TTL support +* Support Web->receive() large file downloads via PUT +* ONERROR safety check +* Fix session CSRF cookie detection +* Framework object now passed to route handler contructors +* Allow override of DIACRITICS +* Various code optimizations +* Support log disabling (Issue #483) +* Implicit mapper load() on authentication +* Declare abstract methods for Cursor derivatives +* Support single-quoted HTML/XML attributes (Feature request #503) +* Relax property visibility of mappers and derivatives +* Deprecated: {{~ ~}} instructions and {{* *}} comments; Use {~ ~} and + {* *} instead +* Minor fix: Audit->ipv4() return value +* Bug fix: Backslashes in BASE not converted on Windows +* Bug fix: UTF->substr() with negative offset and specified length +* Bug fix: Replace named URL tokens on render() +* Bug fix: BASE is not empty when run from document root +* Bug fix: stringify() recursion + +3.2.0 (18 December 2013) +* NEW: Automatic CSRF protection (with IP and User-Agent checks) for + sessions mapped to SQL-, Jig-, Mongo- and Cache-based backends +* NEW: Named routes +* NEW: PATH variable; returns the URL relative to BASE +* NEW: Image->captcha() color parameters +* NEW: Ability to access MongoCuror thru the cursor() method +* NEW: Mapper->fields() method returns array of field names +* NEW: Mapper onload(), oninsert(), onupdate(), and onerase() event + listeners/triggers +* NEW: Preview class (a lightweight template engine) +* NEW: rel() method derives path from URL relative to BASE; useful for + rerouting +* NEW: PREFIX variable for prepending a string to a dictionary term; + Enable support for prefixed dictionary arrays and .ini files (Feature + request #440) +* NEW: Google static map plugin +* NEW: devoid() method +* Introduce clean(); similar to scrub(), except that arg is passed by + value +* Use $ttl for cookie expiration (Issue #457) +* Fix needs_rehash() cost comparison +* Add pass-by-reference argument to exists() so if method returns TRUE, + a subsequent get() is unnecessary +* Improve MySQL support +* Move esc(), raw(), and dupe() to View class where they more + appropriately belong +* Allow user-defined fields in SQL mapper constructor (Feature request + #450) +* Re-implement the pre-3.0 template resolve() feature +* Remove redundant instances of session_commit() +* Add support for input filtering in Mapper->copyfrom() +* Prevent intrusive behavior of Mapper->copyfrom() +* Support multiple SQL primary keys +* Support custom tag attributes/inline tokens defined at runtime + (Feature request #438) +* Broader support for HTTP basic auth +* Prohibit Jig _id clear() +* Add support for detailed stringify() output +* Add base directory to UI path as fallback +* Support Test->expect() chaining +* Support __tostring() in stringify() +* Trigger error on invalid CAPTCHA length (Issue #458) +* Bug fix: exists() pass-by-reference argument returns incorrect value +* Bug fix: DB Exec does not return affected row if query contains a + sub-SELECT (Issue #437) +* Improve seed generator and add code for detecting of acceptable + limits in Image->captcha() (Feature request #460) +* Add decimal format ICU extension +* Bug fix: 404-reported URI contains HTTP query +* Bug fix: Data type detection in DB->schema() +* Bug fix: TZ initialization +* Bug fix: paginate() passes incorrect argument to count() +* Bug fix: Incorrect query when reloading after insert() +* Bug fix: SQL preg_match error in pdo_type matching (Issue #447) +* Bug fix: Missing merge() function (Issue #444) +* Bug fix: BASE misdefined in command line mode +* Bug fix: Stringifying hive may run infinite (Issue #436) +* Bug fix: Incomplete stringify() when DEBUG<3 (Issue #432) +* Bug fix: Redirection of basic auth (Issue #430) +* Bug fix: Filter only PHP code (including short tags) in templates +* Bug fix: Markdown paragraph parser does not convert PHP code blocks + properly +* Bug fix: identicon() colors on same keys are randomized +* Bug fix: quotekey() fails on aliased keys +* Bug fix: Missing _id in Jig->find() return value +* Bug fix: LANGUAGE/LOCALES handling +* Bug fix: Loose comparison in stringify() + +3.1.2 (5 November 2013) +* Abandon .chm help format; Package API documentation in plain HTML; + (Launch lib/api/index.html in your browser) +* Deprecate BAIL in favor of HALT (default: TRUE) +* Revert to 3.1.0 autoload behavior; Add support for lowercase folder + names +* Allow Spring-style HTTP method overrides +* Add support for SQL Server-based sessions +* Capture full X-Forwarded-For header +* Add protection against malicious scripts; Extra check if file was really + uploaded +* Pass-thru page limit in return value of Cursor->paginate() +* Optimize code: Implement single-pass escaping +* Short circuit Jig->find() if source file is empty +* Bug fix: PHP globals passed by reference in hive() result (Issue #424) +* Bug fix: ZIP mime type incorrect behavior +* Bug fix: Jig->erase() filter malfunction +* Bug fix: Mongo->select() group +* Bug fix: Unknown bcrypt constant + +3.1.1 (13 October 2013) +* NEW: Support OpenID attribute exchange +* NEW: BAIL variable enables/disables continuance of execution on non-fatal + errors +* Deprecate BAIL in favor of HALT (default: FALSE) +* Add support for Oracle +* Mark cached queries in log (Feature Request #405) +* Implement Bcrypt->needs_reshash() +* Add entropy to SQL cache hash; Add uuid() method to DB backends +* Find real document root; Simplify debug paths +* Permit OpenID required fields to be declared as comma-separated string or + array +* Pass modified filename as argument to user-defined function in + Web->receive() +* Quote keys in optional SQL clauses (Issue #408) +* Allow UNLOAD to override fatal error detection (Issue #404) +* Mutex operator precedence error (Issue #406) +* Bug fix: exists() malfunction (Issue #401) +* Bug fix: Jig mapper triggers error when loading from CACHE (Issue #403) +* Bug fix: Array index check +* Bug fix: OpenID verified() return value +* Bug fix: Basket->find() should return a set of results (Issue #407); + Also implemented findone() for consistency with mappers +* Bug fix: PostgreSQL last insert ID (Issue #410) +* Bug fix: $port component URL overwritten by _socket() +* Bug fix: Calculation of elapsed time + +3.1.0 (20 August 2013) +* NEW: Web->filler() returns a chunk of text from the standard + Lorem Ipsum passage +* Change in behavior: Drop support for JSON serialization +* SQL->exec() now returns value of RETURNING clause +* Add support for $ttl argument in count() (Issue #393) +* Allow UI to be overridden by custom $path +* Return result of PDO primitives: begintransaction(), rollback(), and + commit() +* Full support for PHP 5.5 +* Flush buffers only when DEBUG=0 +* Support class->method, class::method, and lambda functions as + Web->basic() arguments +* Commit session on Basket->save() +* Optional enlargement in Image->resize() +* Support authentication on hosts running PHP-CGI +* Change visibility level of Cache properties +* Prevent ONERROR recursion +* Work around Apache pre-2.4 VirtualDocumentRoot bug +* Prioritize cURL in HTTP engine detection +* Bug fix: Minify tricky JS +* Bug fix: desktop() detection +* Bug fix: Double-slash on TEMP-relative path +* Bug fix: Cursor mapping of first() and last() records +* Bug fix: Premature end of Web->receive() on multiple files +* Bug fix: German umlaute to its corresponding grammatically-correct + equivalent + +3.0.9 (12 June 2013) +* NEW: Web->whois() +* NEW: Template tags +* Improve CACHE consistency +* Case-insensitive MIME type detection +* Support pre-PHP 5.3.4 in Prefab->instance() +* Refactor isdesktop() and ismobile(); Add isbot() +* Add support for Markdown strike-through +* Work around ODBC's lack of quote() support +* Remove useless Prefab destructor +* Support multiple cache instances +* Bug fix: Underscores in OpenId keys mangled +* Refactor format() +* Numerous tweaks +* Bug fix: MongoId object not preserved +* Bug fix: Double-quotes included in lexicon() string (Issue #341) +* Bug fix: UTF-8 formatting mangled on Windows (Issue #342) +* Bug fix: Cache->load() error when CACHE is FALSE (Issue #344) +* Bug fix: send() ternary expression +* Bug fix: Country code constants + +3.0.8 (17 May 2013) +* NEW: Bcrypt lightweight hashing library\ +* Return total number of records in superset in Cursor->paginate() +* ONERROR short-circuit (Enhancement #334) +* Apply quotes/backticks on DB identifiers +* Allow enabling/disabling of SQL log +* Normalize glob() behavior (Issue #330) +* Bug fix: mbstring 2-byte text truncation (Issue #325) +* Bug fix: Unsupported operand types (Issue #324) + +3.0.7 (2 May 2013) +* NEW: route() now allows an array of routing patterns as first argument; + support array as first argument of map() +* NEW: entropy() for calculating password strength (NIST 800-63) +* NEW: AGENT variable containing auto-detected HTTP user agent string +* NEW: ismobile() and isdesktop() methods +* NEW: Prefab class and descendants now accept constructor arguments +* Change in behavior: Cache->exists() now returns timestamp and TTL of + cache entry or FALSE if not found (Feature request #315) +* Preserve timestamp and TTL when updating cache entry (Feature request + #316) +* Improved currency formatting with C99 compliance +* Suppress unnecessary program halt at startup caused by misconfigured + server +* Add support for dashes in custom attribute names in templates +* Bug fix: Routing precedene (Issue #313) +* Bug fix: Remove Jig _id element from document property +* Bug fix: Web->rss() error when not enough items in the feed (Issue #299) +* Bug fix: Web engine fallback (Issue #300) +* Bug fix: and formatting +* Bug fix: Text rendering of text with trailing punctuation (Issue #303) +* Bug fix: Incorrect regex in SMTP + +3.0.6 (31 Mar 2013) +* NEW: Image->crop() +* Modify documentation blocks for PHPDoc interoperability +* Allow user to control whether Base->rerouet() uses a permanent or + temporary redirect +* Allow JAR elements to be set individually +* Refactor DB\SQL\Mapper->insert() to cope with autoincrement fields +* Trigger error when captcha() font is missing +* Remove unnecessary markdown regex recursion +* Check for scalars instead of DB\SQL strings +* Implement more comprehensive diacritics table +* Add option for disabling 401 errors when basic auth() fails +* Add markdown syntax highlighting for Apache configuration +* Markdown->render() deprecated to remove dependency on UI variable; + Feature replaced by Markdown->convert() to enable translation from + markdown string to HTML +* Optimize factory() code of all data mappers +* Apply backticks on MySQL table names +* Bug fix: Routing failure when directory path contains a tilde (Issue #291) +* Bug fix: Incorrect markdown parsing of strong/em sequences and inline HTML +* Bug fix: Cached page not echoed (Issue #278) +* Bug fix: Object properties not escaped when rendering +* Bug fix: OpenID error response ignored +* Bug fix: memcache_get_extended_stats() timeout +* Bug fix: Base->set() doesn't pass TTL to Cache->set() +* Bug fix: Base->scrub() ignores pass-thru * argument (Issue #274) + +3.0.5 (16 Feb 2013) +* NEW: Markdown class with PHP, HTML, and .ini syntax highlighting support +* NEW: Options for caching of select() and find() results +* NEW: Web->acceptable() +* Add send() argument for forcing downloads +* Provide read() option for applying Unix LF as standard line ending +* Bypass lexicon() call if LANGUAGE is undefined +* Load fallback language dictionary if LANGUAGE is undefined +* map() now checks existence of class/methods for non-tokenized URLs +* Improve error reporting of non-existent Template methods +* Address output buffer issues on some servers +* Bug fix: Setting DEBUG to 0 won't suppress the stack trace when the + content type is application/json (Issue #257) +* Bug fix: Image dump/render additional arguments shifted +* Bug fix: ob_clean() causes buffer issues with zlib compression +* Bug fix: minify() fails when commenting CSS @ rules (Issue #251) +* Bug fix: Handling of commas inside quoted strings +* Bug fix: Glitch in stringify() handling of closures +* Bug fix: dry() in mappers returns TRUE despite being hydrated by + factory() (Issue #265) +* Bug fix: expect() not handling flags correctly +* Bug fix: weather() fails when server is unreachable + +3.0.4 (29 Jan 2013) +* NEW: Support for ICU/CLDR pluralization +* NEW: User-defined FALLBACK language +* NEW: minify() now recognizes CSS @import directives +* NEW: UTF->bom() returns byte order mark for UTF-8 encoding +* Expose SQL\Mapper->schema() +* Change in behavior: Send error response as JSON string if AJAX request is + detected +* Deprecated: afind*() methods +* Discard output buffer in favor of debug output +* Make _id available to Jig queries +* Magic class now implements ArrayAccess +* Abort execution on startup errors +* Suppress stack trace on DEBUG level 0 +* Allow single = as equality operator in Jig query expressions +* Abort OpenID discovery if Web->request() fails +* Mimic PHP *RECURSION* in stringify() +* Modify Jig parser to allow wildcard-search using preg_match() +* Abort execution after error() execution +* Concatenate cached/uncached minify() iterations; Prevent spillover + caching of previous minify() result +* Work around obscure PHP session id regeneration bug +* Revise algorithm for Jig filter involving undefined fields (Issue #230) +* Use checkdnsrr() instead of gethostbyname() in DNSBL check +* Auto-adjust pagination to cursor boundaries +* Add Romanian diacritics +* Bug fix: Root namespace reference and sorting with undefined Jig fields +* Bug fix: Greedy receive() regex +* Bug fix: Default LANGUAGE always 'en' +* Bug fix: minify() hammers cache backend +* Bug fix: Previous values of primary keys not saved during factory() + instantiation +* Bug fix: Jig find() fails when search key is not present in all records +* Bug fix: Jig SORT_DESC (Issue #233) +* Bug fix: Error reporting (Issue #225) +* Bug fix: language() return value + +3.0.3 (29 Dec 2013) +* NEW: [ajax] and [sync] routing pattern modifiers +* NEW: Basket class (session-based pseudo-mapper, shopping cart, etc.) +* NEW: Test->message() method +* NEW: DB profiling via DB->log() +* NEW: Matrix->calendar() +* NEW: Audit->card() and Audit->mod10() for credit card verification +* NEW: Geo->weather() +* NEW: Base->relay() accepts comma-separated callbacks; but unlike + Base->chain(), result of previous callback becomes argument of the next +* Numerous performance tweaks +* Interoperability with new MongoClient class +* Web->request() now recognizes gzip and deflate encoding +* Differences in behavior of Web->request() engines rectified +* mutex() now uses an ID as argument (instead of filename to make it clear + that specified file is not the target being locked, but a primitive + cross-platform semaphore) +* DB\SQL\Mapper field _id now returned even in the absence of any + auto-increment field +* Magic class spinned off as a separate file +* ISO 3166-1 alpha-2 table updated +* Apache redirect emulation for PHP 5.4 CLI server mode +* Framework instance now passed as argument to any user-defined shutdown + function +* Cache engine now used as storage for Web->minify() output +* Flag added for enabling/disabling Image class filter history +* Bug fix: Trailing routing token consumes HTTP query +* Bug fix: LANGUAGE spills over to LOCALES setting +* Bug fix: Inconsistent dry() return value +* Bug fix: URL-decoding + +3.0.2 (23 Dec 2013) +* NEW: Syntax-highlighted stack traces via Base->highlight(); boolean + HIGHLIGHT global variable can be used to enable/disable this feature +* NEW: Template engine tag +* NEW: Image->captcha() +* NEW: DNSBL-based spammer detection (ported from 2.x) +* NEW: paginate(), first(), and last() methods for data mappers +* NEW: X-HTTP-Method-Override header now recognized +* NEW: Base->chain() method for executing callbacks in succession +* NEW: HOST global variable; derived from either $_SERVER['SERVER_NAME'] or + gethostname() +* NEW: REALM global variable representing full canonical URI +* NEW: Auth plug-in +* NEW: Pingback plug-in (implements both Pingback 1.0 protocol client and + server) +* NEW: DEBUG verbosity can now reach up to level 3; Base->stringify() drills + down to object properties at this setting +* NEW: HTTP PATCH method added to recognized HTTP ReST methods +* Web->slug() now trims trailing dashes +* Web->request() now allows relative local URLs as argument +* Use of PARAMS in route handlers now unnecessary; framework now passes two + arguments to route handlers: the framework object instance and an array + containing the captured values of tokens in route patterns +* Standardized timeout settings among Web->request() backends +* Session IDs regenerated for additional security +* Automatic HTTP 404 responses by Base->call() now restricted to route + handlers +* Empty comments in ini-style files now parsed properly +* Use file_get_contents() in methods that don't involve high concurrency + +3.0.1 (14 Dec 2013) +* Major rewrite of much of the framework's core features diff --git a/management-interface/lib/code.css b/management-interface/lib/code.css new file mode 100644 index 0000000..618703f --- /dev/null +++ b/management-interface/lib/code.css @@ -0,0 +1 @@ +code{word-wrap:break-word;color:black}.comment,.doc_comment,.ml_comment{color:dimgray;font-style:italic}.variable{color:blueviolet}.const,.constant_encapsed_string,.class_c,.dir,.file,.func_c,.halt_compiler,.line,.method_c,.lnumber,.dnumber{color:crimson}.string,.and_equal,.boolean_and,.boolean_or,.concat_equal,.dec,.div_equal,.inc,.is_equal,.is_greater_or_equal,.is_identical,.is_not_equal,.is_not_identical,.is_smaller_or_equal,.logical_and,.logical_or,.logical_xor,.minus_equal,.mod_equal,.mul_equal,.ns_c,.ns_separator,.or_equal,.plus_equal,.sl,.sl_equal,.sr,.sr_equal,.xor_equal,.start_heredoc,.end_heredoc,.object_operator,.paamayim_nekudotayim{color:black}.abstract,.array,.array_cast,.as,.break,.case,.catch,.class,.clone,.continue,.declare,.default,.do,.echo,.else,.elseif,.empty.enddeclare,.endfor,.endforach,.endif,.endswitch,.endwhile,.eval,.exit,.extends,.final,.for,.foreach,.function,.global,.goto,.if,.implements,.include,.include_once,.instanceof,.interface,.isset,.list,.namespace,.new,.print,.private,.public,.protected,.require,.require_once,.return,.static,.switch,.throw,.try,.unset,.use,.var,.while{color:royalblue}.open_tag,.open_tag_with_echo,.close_tag{color:orange}.ini_section{color:black}.ini_key{color:royalblue}.ini_value{color:crimson}.xml_tag{color:dodgerblue}.xml_attr{color:blueviolet}.xml_data{color:red}.section{color:black}.directive{color:blue}.data{color:dimgray} diff --git a/management-interface/lib/db/cursor.php b/management-interface/lib/db/cursor.php new file mode 100644 index 0000000..354c683 --- /dev/null +++ b/management-interface/lib/db/cursor.php @@ -0,0 +1,313 @@ +query[$this->ptr]); + } + + /** + * Return first record (mapper object) that matches criteria + * @return object|FALSE + * @param $filter string|array + * @param $options array + * @param $ttl int + **/ + function findone($filter=NULL,array $options=NULL,$ttl=0) { + return ($data=$this->find($filter,$options,$ttl))?$data[0]:FALSE; + } + + /** + * Return array containing subset of records matching criteria, + * total number of records in superset, specified limit, number of + * subsets available, and actual subset position + * @return array + * @param $pos int + * @param $size int + * @param $filter string|array + * @param $options array + * @param $ttl int + **/ + function paginate( + $pos=0,$size=10,$filter=NULL,array $options=NULL,$ttl=0) { + $total=$this->count($filter,$ttl); + $count=ceil($total/$size); + $pos=max(0,min($pos,$count-1)); + return array( + 'subset'=>$this->find($filter, + array_merge( + $options?:array(), + array('limit'=>$size,'offset'=>$pos*$size) + ), + $ttl + ), + 'total'=>$total, + 'limit'=>$size, + 'count'=>$count, + 'pos'=>$pos<$count?$pos:0 + ); + } + + /** + * Map to first record that matches criteria + * @return array|FALSE + * @param $filter string|array + * @param $options array + * @param $ttl int + **/ + function load($filter=NULL,array $options=NULL,$ttl=0) { + return ($this->query=$this->find($filter,$options,$ttl)) && + $this->skip(0)?$this->query[$this->ptr=0]:FALSE; + } + + /** + * Map to first record in cursor + * @return mixed + **/ + function first() { + return $this->skip(-$this->ptr); + } + + /** + * Map to last record in cursor + * @return mixed + **/ + function last() { + return $this->skip(($ofs=count($this->query)-$this->ptr)?$ofs-1:0); + } + + /** + * Map to nth record relative to current cursor position + * @return mixed + * @param $ofs int + **/ + function skip($ofs=1) { + $this->ptr+=$ofs; + return $this->ptr>-1 && $this->ptrquery)? + $this->query[$this->ptr]:FALSE; + } + + /** + * Map next record + * @return mixed + **/ + function next() { + return $this->skip(); + } + + /** + * Map previous record + * @return mixed + **/ + function prev() { + return $this->skip(-1); + } + + /** + * Save mapped record + * @return mixed + **/ + function save() { + return $this->query?$this->update():$this->insert(); + } + + /** + * Delete current record + * @return int|bool + **/ + function erase() { + $this->query=array_slice($this->query,0,$this->ptr,TRUE)+ + array_slice($this->query,$this->ptr,NULL,TRUE); + $this->ptr=0; + } + + /** + * Define onload trigger + * @return callback + * @param $func callback + **/ + function onload($func) { + return $this->trigger['load']=$func; + } + + /** + * Define beforeinsert trigger + * @return callback + * @param $func callback + **/ + function beforeinsert($func) { + return $this->trigger['beforeinsert']=$func; + } + + /** + * Define afterinsert trigger + * @return callback + * @param $func callback + **/ + function afterinsert($func) { + return $this->trigger['afterinsert']=$func; + } + + /** + * Define oninsert trigger + * @return callback + * @param $func callback + **/ + function oninsert($func) { + return $this->afterinsert($func); + } + + /** + * Define beforeupdate trigger + * @return callback + * @param $func callback + **/ + function beforeupdate($func) { + return $this->trigger['beforeupdate']=$func; + } + + /** + * Define afterupdate trigger + * @return callback + * @param $func callback + **/ + function afterupdate($func) { + return $this->trigger['afterupdate']=$func; + } + + /** + * Define onupdate trigger + * @return callback + * @param $func callback + **/ + function onupdate($func) { + return $this->afterupdate($func); + } + + /** + * Define beforeerase trigger + * @return callback + * @param $func callback + **/ + function beforeerase($func) { + return $this->trigger['beforeerase']=$func; + } + + /** + * Define aftererase trigger + * @return callback + * @param $func callback + **/ + function aftererase($func) { + return $this->trigger['aftererase']=$func; + } + + /** + * Define onerase trigger + * @return callback + * @param $func callback + **/ + function onerase($func) { + return $this->aftererase($func); + } + + /** + * Reset cursor + * @return NULL + **/ + function reset() { + $this->query=array(); + $this->ptr=0; + } + +} diff --git a/management-interface/lib/db/jig.php b/management-interface/lib/db/jig.php new file mode 100644 index 0000000..16f2255 --- /dev/null +++ b/management-interface/lib/db/jig.php @@ -0,0 +1,133 @@ +dir.$file)) + return array(); + $raw=$fw->read($dst); + switch ($this->format) { + case self::FORMAT_JSON: + $data=json_decode($raw,TRUE); + break; + case self::FORMAT_Serialized: + $data=$fw->unserialize($raw); + break; + } + return $data; + } + + /** + * Write data to file + * @return int + * @param $file string + * @param $data array + **/ + function write($file,array $data=NULL) { + $fw=\Base::instance(); + switch ($this->format) { + case self::FORMAT_JSON: + $out=json_encode($data,@constant('JSON_PRETTY_PRINT')); + break; + case self::FORMAT_Serialized: + $out=$fw->serialize($data); + break; + } + return $fw->write($this->dir.$file,$out); + } + + /** + * Return directory + * @return string + **/ + function dir() { + return $this->dir; + } + + /** + * Return UUID + * @return string + **/ + function uuid() { + return $this->uuid; + } + + /** + * Return SQL profiler results + * @return string + **/ + function log() { + return $this->log; + } + + /** + * Jot down log entry + * @return NULL + * @param $frame string + **/ + function jot($frame) { + if ($frame) + $this->log.=date('r').' '.$frame.PHP_EOL; + } + + /** + * Clean storage + * @return NULL + **/ + function drop() { + if ($glob=@glob($this->dir.'/*',GLOB_NOSORT)) + foreach ($glob as $file) + @unlink($file); + } + + /** + * Instantiate class + * @param $dir string + * @param $format int + **/ + function __construct($dir,$format=self::FORMAT_JSON) { + if (!is_dir($dir)) + mkdir($dir,\Base::MODE,TRUE); + $this->uuid=\Base::instance()->hash($this->dir=$dir); + $this->format=$format; + } + +} diff --git a/management-interface/lib/db/jig/mapper.php b/management-interface/lib/db/jig/mapper.php new file mode 100644 index 0000000..3ac3d21 --- /dev/null +++ b/management-interface/lib/db/jig/mapper.php @@ -0,0 +1,459 @@ +document); + } + + /** + * Assign value to field + * @return scalar|FALSE + * @param $key string + * @param $val scalar + **/ + function set($key,$val) { + return ($key=='_id')?FALSE:($this->document[$key]=$val); + } + + /** + * Retrieve value of field + * @return scalar|FALSE + * @param $key string + **/ + function get($key) { + if ($key=='_id') + return $this->id; + if (array_key_exists($key,$this->document)) + return $this->document[$key]; + user_error(sprintf(self::E_Field,$key)); + return FALSE; + } + + /** + * Delete field + * @return NULL + * @param $key string + **/ + function clear($key) { + if ($key!='_id') + unset($this->document[$key]); + } + + /** + * Convert array to mapper object + * @return object + * @param $id string + * @param $row array + **/ + protected function factory($id,$row) { + $mapper=clone($this); + $mapper->reset(); + $mapper->id=$id; + foreach ($row as $field=>$val) + $mapper->document[$field]=$val; + $mapper->query=array(clone($mapper)); + if (isset($mapper->trigger['load'])) + \Base::instance()->call($mapper->trigger['load'],$mapper); + return $mapper; + } + + /** + * Return fields of mapper object as an associative array + * @return array + * @param $obj object + **/ + function cast($obj=NULL) { + if (!$obj) + $obj=$this; + return $obj->document+array('_id'=>$this->id); + } + + /** + * Convert tokens in string expression to variable names + * @return string + * @param $str string + **/ + function token($str) { + $self=$this; + $str=preg_replace_callback( + '/(?stringify(substr($expr[1],1)): + (preg_match('/^\w+/', + $mix=$self->token($expr[2]))? + $fw->stringify($mix): + $mix)). + ']'; + }, + $token[1] + ); + }, + $str + ); + return trim($str); + } + + /** + * Return records that match criteria + * @return array|FALSE + * @param $filter array + * @param $options array + * @param $ttl int + * @param $log bool + **/ + function find($filter=NULL,array $options=NULL,$ttl=0,$log=TRUE) { + if (!$options) + $options=array(); + $options+=array( + 'order'=>NULL, + 'limit'=>0, + 'offset'=>0 + ); + $fw=\Base::instance(); + $cache=\Cache::instance(); + $db=$this->db; + $now=microtime(TRUE); + $data=array(); + if (!$fw->get('CACHE') || !$ttl || !($cached=$cache->exists( + $hash=$fw->hash($this->db->dir(). + $fw->stringify(array($filter,$options))).'.jig',$data)) || + $cached[0]+$ttlread($this->file); + if (is_null($data)) + return FALSE; + foreach ($data as $id=>&$doc) { + $doc['_id']=$id; + unset($doc); + } + if ($filter) { + if (!is_array($filter)) + return FALSE; + // Normalize equality operator + $expr=preg_replace('/(?<=[^<>!=])=(?!=)/','==',$filter[0]); + // Prepare query arguments + $args=isset($filter[1]) && is_array($filter[1])? + $filter[1]: + array_slice($filter,1,NULL,TRUE); + $args=is_array($args)?$args:array(1=>$args); + $keys=$vals=array(); + $tokens=array_slice( + token_get_all('token($expr)),1); + $data=array_filter($data, + function($_row) use($fw,$args,$tokens) { + $_expr=''; + $ctr=0; + $named=FALSE; + foreach ($tokens as $token) { + if (is_string($token)) + if ($token=='?') { + // Positional + $ctr++; + $key=$ctr; + } + else { + if ($token==':') + $named=TRUE; + else + $_expr.=$token; + continue; + } + elseif ($named && + token_name($token[0])=='T_STRING') { + $key=':'.$token[1]; + $named=FALSE; + } + else { + $_expr.=$token[1]; + continue; + } + $_expr.=$fw->stringify( + is_string($args[$key])? + addcslashes($args[$key],'\''): + $args[$key]); + } + // Avoid conflict with user code + unset($fw,$tokens,$args,$ctr,$token,$key,$named); + extract($_row); + // Evaluate pseudo-SQL expression + return eval('return '.$_expr.';'); + } + ); + } + if (isset($options['order'])) { + $cols=$fw->split($options['order']); + uasort( + $data, + function($val1,$val2) use($cols) { + foreach ($cols as $col) { + $parts=explode(' ',$col,2); + $order=empty($parts[1])? + SORT_ASC: + constant($parts[1]); + $col=$parts[0]; + if (!array_key_exists($col,$val1)) + $val1[$col]=NULL; + if (!array_key_exists($col,$val2)) + $val2[$col]=NULL; + list($v1,$v2)=array($val1[$col],$val2[$col]); + if ($out=strnatcmp($v1,$v2)* + (($order==SORT_ASC)*2-1)) + return $out; + } + return 0; + } + ); + } + $data=array_slice($data, + $options['offset'],$options['limit']?:NULL,TRUE); + if ($fw->get('CACHE') && $ttl) + // Save to cache backend + $cache->set($hash,$data,$ttl); + } + $out=array(); + foreach ($data as $id=>&$doc) { + unset($doc['_id']); + $out[]=$this->factory($id,$doc); + unset($doc); + } + if ($log && isset($args)) { + if ($filter) + foreach ($args as $key=>$val) { + $vals[]=$fw->stringify(is_array($val)?$val[0]:$val); + $keys[]='/'.(is_numeric($key)?'\?':preg_quote($key)).'/'; + } + $db->jot('('.sprintf('%.1f',1e3*(microtime(TRUE)-$now)).'ms) '. + $this->file.' [find] '. + ($filter?preg_replace($keys,$vals,$filter[0],1):'')); + } + return $out; + } + + /** + * Count records that match criteria + * @return int + * @param $filter array + * @param $ttl int + **/ + function count($filter=NULL,$ttl=0) { + $now=microtime(TRUE); + $out=count($this->find($filter,NULL,$ttl,FALSE)); + $this->db->jot('('.sprintf('%.1f',1e3*(microtime(TRUE)-$now)).'ms) '. + $this->file.' [count] '.($filter?json_encode($filter):'')); + return $out; + } + + /** + * Return record at specified offset using criteria of previous + * load() call and make it active + * @return array + * @param $ofs int + **/ + function skip($ofs=1) { + $this->document=($out=parent::skip($ofs))?$out->document:array(); + $this->id=$out?$out->id:NULL; + if ($this->document && isset($this->trigger['load'])) + \Base::instance()->call($this->trigger['load'],$this); + return $out; + } + + /** + * Insert new record + * @return array + **/ + function insert() { + if ($this->id) + return $this->update(); + $db=$this->db; + $now=microtime(TRUE); + while (($id=uniqid(NULL,TRUE)) && + ($data=$db->read($this->file)) && isset($data[$id]) && + !connection_aborted()) + usleep(mt_rand(0,100)); + $this->id=$id; + $data[$id]=$this->document; + $pkey=array('_id'=>$this->id); + if (isset($this->trigger['beforeinsert'])) + \Base::instance()->call($this->trigger['beforeinsert'], + array($this,$pkey)); + $db->write($this->file,$data); + $db->jot('('.sprintf('%.1f',1e3*(microtime(TRUE)-$now)).'ms) '. + $this->file.' [insert] '.json_encode($this->document)); + if (isset($this->trigger['afterinsert'])) + \Base::instance()->call($this->trigger['afterinsert'], + array($this,$pkey)); + $this->load(array('@_id=?',$this->id)); + return $this->document; + } + + /** + * Update current record + * @return array + **/ + function update() { + $db=$this->db; + $now=microtime(TRUE); + $data=$db->read($this->file); + $data[$this->id]=$this->document; + if (isset($this->trigger['beforeupdate'])) + \Base::instance()->call($this->trigger['beforeupdate'], + array($this,array('_id'=>$this->id))); + $db->write($this->file,$data); + $db->jot('('.sprintf('%.1f',1e3*(microtime(TRUE)-$now)).'ms) '. + $this->file.' [update] '.json_encode($this->document)); + if (isset($this->trigger['afterupdate'])) + \Base::instance()->call($this->trigger['afterupdate'], + array($this,array('_id'=>$this->id))); + return $this->document; + } + + /** + * Delete current record + * @return bool + * @param $filter array + **/ + function erase($filter=NULL) { + $db=$this->db; + $now=microtime(TRUE); + $data=$db->read($this->file); + if ($filter) { + foreach ($this->find($filter,NULL,FALSE) as $mapper) + if (!$mapper->erase()) + return FALSE; + return TRUE; + } + elseif (isset($this->id)) { + $pkey=array('_id'=>$this->id); + unset($data[$this->id]); + parent::erase(); + $this->skip(0); + } + else + return FALSE; + if (isset($this->trigger['beforeerase'])) + \Base::instance()->call($this->trigger['beforeerase'], + array($this,$pkey)); + $db->write($this->file,$data); + if ($filter) { + $args=isset($filter[1]) && is_array($filter[1])? + $filter[1]: + array_slice($filter,1,NULL,TRUE); + $args=is_array($args)?$args:array(1=>$args); + foreach ($args as $key=>$val) { + $vals[]=\Base::instance()-> + stringify(is_array($val)?$val[0]:$val); + $keys[]='/'.(is_numeric($key)?'\?':preg_quote($key)).'/'; + } + } + $db->jot('('.sprintf('%.1f',1e3*(microtime(TRUE)-$now)).'ms) '. + $this->file.' [erase] '. + ($filter?preg_replace($keys,$vals,$filter[0],1):'')); + if (isset($this->trigger['aftererase'])) + \Base::instance()->call($this->trigger['aftererase'], + array($this,$pkey)); + return TRUE; + } + + /** + * Reset cursor + * @return NULL + **/ + function reset() { + $this->id=NULL; + $this->document=array(); + parent::reset(); + } + + /** + * Hydrate mapper object using hive array variable + * @return NULL + * @param $key string + * @param $func callback + **/ + function copyfrom($key,$func=NULL) { + $var=\Base::instance()->get($key); + if ($func) + $var=$func($var); + foreach ($var as $key=>$val) + $this->document[$key]=$val; + } + + /** + * Populate hive array variable with mapper fields + * @return NULL + * @param $key string + **/ + function copyto($key) { + $var=&\Base::instance()->ref($key); + foreach ($this->document as $key=>$field) + $var[$key]=$field; + } + + /** + * Return field names + * @return array + **/ + function fields() { + return array_keys($this->document); + } + + /** + * Instantiate class + * @return void + * @param $db object + * @param $file string + **/ + function __construct(\DB\Jig $db,$file) { + $this->db=$db; + $this->file=$file; + $this->reset(); + } + +} diff --git a/management-interface/lib/db/jig/session.php b/management-interface/lib/db/jig/session.php new file mode 100644 index 0000000..705cbce --- /dev/null +++ b/management-interface/lib/db/jig/session.php @@ -0,0 +1,168 @@ +sid) + $this->load(array('@session_id=?',$this->sid=$id)); + return $this->dry()?FALSE:$this->get('data'); + } + + /** + * Write session data + * @return TRUE + * @param $id string + * @param $data string + **/ + function write($id,$data) { + $fw=\Base::instance(); + $sent=headers_sent(); + $headers=$fw->get('HEADERS'); + if ($id!=$this->sid) + $this->load(array('@session_id=?',$this->sid=$id)); + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + $this->set('session_id',$id); + $this->set('data',$data); + $this->set('csrf',$sent?$this->csrf():$csrf); + $this->set('ip',$fw->get('IP')); + $this->set('agent', + isset($headers['User-Agent'])?$headers['User-Agent']:''); + $this->set('stamp',time()); + $this->save(); + return TRUE; + } + + /** + * Destroy session + * @return TRUE + * @param $id string + **/ + function destroy($id) { + $this->erase(array('@session_id=?',$id)); + setcookie(session_name(),'',strtotime('-1 year')); + unset($_COOKIE[session_name()]); + header_remove('Set-Cookie'); + return TRUE; + } + + /** + * Garbage collector + * @return TRUE + * @param $max int + **/ + function cleanup($max) { + $this->erase(array('@stamp+?dry()?FALSE:$this->get('csrf'); + } + + /** + * Return IP address + * @return string|FALSE + **/ + function ip() { + return $this->dry()?FALSE:$this->get('ip'); + } + + /** + * Return Unix timestamp + * @return string|FALSE + **/ + function stamp() { + return $this->dry()?FALSE:$this->get('stamp'); + } + + /** + * Return HTTP user agent + * @return string|FALSE + **/ + function agent() { + return $this->dry()?FALSE:$this->get('agent'); + } + + /** + * Instantiate class + * @param $db object + * @param $table string + **/ + function __construct(\DB\Jig $db,$table='sessions') { + parent::__construct($db,'sessions'); + session_set_save_handler( + array($this,'open'), + array($this,'close'), + array($this,'read'), + array($this,'write'), + array($this,'destroy'), + array($this,'cleanup') + ); + register_shutdown_function('session_commit'); + @session_start(); + $fw=\Base::instance(); + $headers=$fw->get('HEADERS'); + if (($ip=$this->ip()) && $ip!=$fw->get('IP') || + ($agent=$this->agent()) && + (!isset($headers['User-Agent']) || + $agent!=$headers['User-Agent'])) { + session_destroy(); + $fw->error(403); + } + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + if ($this->load(array('@session_id=?',$this->sid=session_id()))) { + $this->set('csrf',$csrf); + $this->save(); + } + } + +} diff --git a/management-interface/lib/db/mongo.php b/management-interface/lib/db/mongo.php new file mode 100644 index 0000000..833f160 --- /dev/null +++ b/management-interface/lib/db/mongo.php @@ -0,0 +1,92 @@ +dsn; + } + + /** + * Return UUID + * @return string + **/ + function uuid() { + return $this->uuid; + } + + /** + * Return MongoDB profiler results + * @return string + **/ + function log() { + $cursor=$this->selectcollection('system.profile')->find(); + foreach (iterator_to_array($cursor) as $frame) + if (!preg_match('/\.system\..+$/',$frame['ns'])) + $this->log.=date('r',$frame['ts']->sec).' ('. + sprintf('%.1f',$frame['millis']).'ms) '. + $frame['ns'].' ['.$frame['op'].'] '. + (empty($frame['query'])? + '':json_encode($frame['query'])). + (empty($frame['command'])? + '':json_encode($frame['command'])). + PHP_EOL; + return $this->log; + } + + /** + * Intercept native call to re-enable profiler + * @return int + **/ + function drop() { + $out=parent::drop(); + $this->setprofilinglevel(2); + return $out; + } + + /** + * Instantiate class + * @param $dsn string + * @param $dbname string + * @param $options array + **/ + function __construct($dsn,$dbname,array $options=NULL) { + $this->uuid=\Base::instance()->hash($this->dsn=$dsn); + $class=class_exists('\MongoClient')?'\MongoClient':'\Mongo'; + parent::__construct(new $class($dsn,$options?:array()),$dbname); + $this->setprofilinglevel(2); + } + +} diff --git a/management-interface/lib/db/mongo/mapper.php b/management-interface/lib/db/mongo/mapper.php new file mode 100644 index 0000000..bcb7f6e --- /dev/null +++ b/management-interface/lib/db/mongo/mapper.php @@ -0,0 +1,346 @@ +document); + } + + /** + * Assign value to field + * @return scalar|FALSE + * @param $key string + * @param $val scalar + **/ + function set($key,$val) { + return $this->document[$key]=$val; + } + + /** + * Retrieve value of field + * @return scalar|FALSE + * @param $key string + **/ + function get($key) { + if ($this->exists($key)) + return $this->document[$key]; + user_error(sprintf(self::E_Field,$key)); + return FALSE; + } + + /** + * Delete field + * @return NULL + * @param $key string + **/ + function clear($key) { + unset($this->document[$key]); + } + + /** + * Convert array to mapper object + * @return object + * @param $row array + **/ + protected function factory($row) { + $mapper=clone($this); + $mapper->reset(); + foreach ($row as $key=>$val) + $mapper->document[$key]=$val; + $mapper->query=array(clone($mapper)); + if (isset($mapper->trigger['load'])) + \Base::instance()->call($mapper->trigger['load'],$mapper); + return $mapper; + } + + /** + * Return fields of mapper object as an associative array + * @return array + * @param $obj object + **/ + function cast($obj=NULL) { + if (!$obj) + $obj=$this; + return $obj->document; + } + + /** + * Build query and execute + * @return array + * @param $fields string + * @param $filter array + * @param $options array + * @param $ttl int + **/ + function select($fields=NULL,$filter=NULL,array $options=NULL,$ttl=0) { + if (!$options) + $options=array(); + $options+=array( + 'group'=>NULL, + 'order'=>NULL, + 'limit'=>0, + 'offset'=>0 + ); + $fw=\Base::instance(); + $cache=\Cache::instance(); + if (!($cached=$cache->exists($hash=$fw->hash($this->db->dsn(). + $fw->stringify(array($fields,$filter,$options))).'.mongo', + $result)) || !$ttl || $cached[0]+$ttlcollection->group( + $options['group']['keys'], + $options['group']['initial'], + $options['group']['reduce'], + array( + 'condition'=>$filter, + 'finalize'=>$options['group']['finalize'] + ) + ); + $tmp=$this->db->selectcollection( + $fw->get('HOST').'.'.$fw->get('BASE').'.'. + uniqid(NULL,TRUE).'.tmp' + ); + $tmp->batchinsert($grp['retval'],array('safe'=>TRUE)); + $filter=array(); + $collection=$tmp; + } + else { + $filter=$filter?:array(); + $collection=$this->collection; + } + $this->cursor=$collection->find($filter,$fields?:array()); + if ($options['order']) + $this->cursor=$this->cursor->sort($options['order']); + if ($options['limit']) + $this->cursor=$this->cursor->limit($options['limit']); + if ($options['offset']) + $this->cursor=$this->cursor->skip($options['offset']); + $result=array(); + while ($this->cursor->hasnext()) + $result[]=$this->cursor->getnext(); + if ($options['group']) + $tmp->drop(); + if ($fw->get('CACHE') && $ttl) + // Save to cache backend + $cache->set($hash,$result,$ttl); + } + $out=array(); + foreach ($result as $doc) + $out[]=$this->factory($doc); + return $out; + } + + /** + * Return records that match criteria + * @return array + * @param $filter array + * @param $options array + * @param $ttl int + **/ + function find($filter=NULL,array $options=NULL,$ttl=0) { + if (!$options) + $options=array(); + $options+=array( + 'group'=>NULL, + 'order'=>NULL, + 'limit'=>0, + 'offset'=>0 + ); + return $this->select(NULL,$filter,$options,$ttl); + } + + /** + * Count records that match criteria + * @return int + * @param $filter array + * @param $ttl int + **/ + function count($filter=NULL,$ttl=0) { + $fw=\Base::instance(); + $cache=\Cache::instance(); + if (!($cached=$cache->exists($hash=$fw->hash($fw->stringify( + array($filter))).'.mongo',$result)) || !$ttl || + $cached[0]+$ttlcollection->count($filter); + if ($fw->get('CACHE') && $ttl) + // Save to cache backend + $cache->set($hash,$result,$ttl); + } + return $result; + } + + /** + * Return record at specified offset using criteria of previous + * load() call and make it active + * @return array + * @param $ofs int + **/ + function skip($ofs=1) { + $this->document=($out=parent::skip($ofs))?$out->document:array(); + if ($this->document && isset($this->trigger['load'])) + \Base::instance()->call($this->trigger['load'],$this); + return $out; + } + + /** + * Insert new record + * @return array + **/ + function insert() { + if (isset($this->document['_id'])) + return $this->update(); + if (isset($this->trigger['beforeinsert'])) + \Base::instance()->call($this->trigger['beforeinsert'], + array($this,$pkey)); + $this->collection->insert($this->document); + $pkey=array('_id'=>$this->document['_id']); + if (isset($this->trigger['afterinsert'])) + \Base::instance()->call($this->trigger['afterinsert'], + array($this,$pkey)); + $this->load(array('_id'=>$this->document['_id'])); + return $this->document; + } + + /** + * Update current record + * @return array + **/ + function update() { + if (isset($this->trigger['beforeupdate'])) + \Base::instance()->call($this->trigger['beforeupdate'], + array($this,$pkey)); + $this->collection->update( + $pkey=array('_id'=>$this->document['_id']), + $this->document, + array('upsert'=>TRUE) + ); + if (isset($this->trigger['afterupdate'])) + \Base::instance()->call($this->trigger['afterupdate'], + array($this,$pkey)); + return $this->document; + } + + /** + * Delete current record + * @return bool + * @param $filter array + **/ + function erase($filter=NULL) { + if ($filter) + return $this->collection->remove($filter); + $pkey=array('_id'=>$this->document['_id']); + if (isset($this->trigger['beforeerase'])) + \Base::instance()->call($this->trigger['beforeerase'], + array($this,$pkey)); + $result=$this->collection-> + remove(array('_id'=>$this->document['_id'])); + parent::erase(); + $this->skip(0); + if (isset($this->trigger['aftererase'])) + \Base::instance()->call($this->trigger['aftererase'], + array($this,$pkey)); + return $result; + } + + /** + * Reset cursor + * @return NULL + **/ + function reset() { + $this->document=array(); + parent::reset(); + } + + /** + * Hydrate mapper object using hive array variable + * @return NULL + * @param $key string + * @param $func callback + **/ + function copyfrom($key,$func=NULL) { + $var=\Base::instance()->get($key); + if ($func) + $var=$func($var); + foreach ($var as $key=>$val) + $this->document[$key]=$val; + } + + /** + * Populate hive array variable with mapper fields + * @return NULL + * @param $key string + **/ + function copyto($key) { + $var=&\Base::instance()->ref($key); + foreach ($this->document as $key=>$field) + $var[$key]=$field; + } + + /** + * Return field names + * @return array + **/ + function fields() { + return array_keys($this->document); + } + + /** + * Return the cursor from last query + * @return object|NULL + **/ + function cursor() { + return $this->cursor; + } + + /** + * Instantiate class + * @return void + * @param $db object + * @param $collection string + **/ + function __construct(\DB\Mongo $db,$collection) { + $this->db=$db; + $this->collection=$db->{$collection}; + $this->reset(); + } + +} diff --git a/management-interface/lib/db/mongo/session.php b/management-interface/lib/db/mongo/session.php new file mode 100644 index 0000000..e3c6665 --- /dev/null +++ b/management-interface/lib/db/mongo/session.php @@ -0,0 +1,174 @@ +sid) + $this->load(array('session_id'=>$this->sid=$id)); + return $this->dry()?FALSE:$this->get('data'); + } + + /** + * Write session data + * @return TRUE + * @param $id string + * @param $data string + **/ + function write($id,$data) { + $fw=\Base::instance(); + $sent=headers_sent(); + $headers=$fw->get('HEADERS'); + if ($id!=$this->sid) + $this->load(array('session_id'=>$this->sid=$id)); + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + $this->set('session_id',$id); + $this->set('data',$data); + $this->set('csrf',$sent?$this->csrf():$csrf); + $this->set('ip',$fw->get('IP')); + $this->set('agent', + isset($headers['User-Agent'])?$headers['User-Agent']:''); + $this->set('stamp',time()); + $this->save(); + if (!$sent) { + if (isset($_COOKIE['_'])) + setcookie('_','',strtotime('-1 year')); + call_user_func_array('setcookie', + array('_',$csrf)+$fw->get('JAR')); + } + return TRUE; + } + + /** + * Destroy session + * @return TRUE + * @param $id string + **/ + function destroy($id) { + $this->erase(array('session_id'=>$id)); + setcookie(session_name(),'',strtotime('-1 year')); + unset($_COOKIE[session_name()]); + header_remove('Set-Cookie'); + return TRUE; + } + + /** + * Garbage collector + * @return TRUE + * @param $max int + **/ + function cleanup($max) { + $this->erase(array('$where'=>'this.stamp+'.$max.'<'.time())); + return TRUE; + } + + /** + * Return anti-CSRF token + * @return string|FALSE + **/ + function csrf() { + return $this->dry()?FALSE:$this->get('csrf'); + } + + /** + * Return IP address + * @return string|FALSE + **/ + function ip() { + return $this->dry()?FALSE:$this->get('ip'); + } + + /** + * Return Unix timestamp + * @return string|FALSE + **/ + function stamp() { + return $this->dry()?FALSE:$this->get('stamp'); + } + + /** + * Return HTTP user agent + * @return string|FALSE + **/ + function agent() { + return $this->dry()?FALSE:$this->get('agent'); + } + + /** + * Instantiate class + * @param $db object + * @param $table string + **/ + function __construct(\DB\Mongo $db,$table='sessions') { + parent::__construct($db,$table); + session_set_save_handler( + array($this,'open'), + array($this,'close'), + array($this,'read'), + array($this,'write'), + array($this,'destroy'), + array($this,'cleanup') + ); + register_shutdown_function('session_commit'); + @session_start(); + $fw=\Base::instance(); + $headers=$fw->get('HEADERS'); + if (($ip=$this->ip()) && $ip!=$fw->get('IP') || + ($agent=$this->agent()) && + (!isset($headers['User-Agent']) || + $agent!=$headers['User-Agent'])) { + session_destroy(); + $fw->error(403); + } + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + if ($this->load(array('session_id'=>$this->sid=session_id()))) { + $this->set('csrf',$csrf); + $this->save(); + } + } + +} diff --git a/management-interface/lib/db/sql.php b/management-interface/lib/db/sql.php new file mode 100644 index 0000000..88e34dc --- /dev/null +++ b/management-interface/lib/db/sql.php @@ -0,0 +1,403 @@ +trans=TRUE; + return $out; + } + + /** + * Rollback SQL transaction + * @return bool + **/ + function rollback() { + $out=parent::rollback(); + $this->trans=FALSE; + return $out; + } + + /** + * Commit SQL transaction + * @return bool + **/ + function commit() { + $out=parent::commit(); + $this->trans=FALSE; + return $out; + } + + /** + * Map data type of argument to a PDO constant + * @return int + * @param $val scalar + **/ + function type($val) { + switch (gettype($val)) { + case 'NULL': + return \PDO::PARAM_NULL; + case 'boolean': + return \PDO::PARAM_BOOL; + case 'integer': + return \PDO::PARAM_INT; + default: + return \PDO::PARAM_STR; + } + } + + /** + * Cast value to PHP type + * @return scalar + * @param $type string + * @param $val scalar + **/ + function value($type,$val) { + switch ($type) { + case \PDO::PARAM_NULL: + return (unset)$val; + case \PDO::PARAM_INT: + return (int)$val; + case \PDO::PARAM_BOOL: + return (bool)$val; + case \PDO::PARAM_STR: + return (string)$val; + } + } + + /** + * Execute SQL statement(s) + * @return array|int|FALSE + * @param $cmds string|array + * @param $args string|array + * @param $ttl int + * @param $log bool + **/ + function exec($cmds,$args=NULL,$ttl=0,$log=TRUE) { + $auto=FALSE; + if (is_null($args)) + $args=array(); + elseif (is_scalar($args)) + $args=array(1=>$args); + if (is_array($cmds)) { + if (count($args)<($count=count($cmds))) + // Apply arguments to SQL commands + $args=array_fill(0,$count,$args); + if (!$this->trans) { + $this->begin(); + $auto=TRUE; + } + } + else { + $cmds=array($cmds); + $args=array($args); + } + $fw=\Base::instance(); + $cache=\Cache::instance(); + $result=FALSE; + foreach (array_combine($cmds,$args) as $cmd=>$arg) { + if (!preg_replace('/(^\s+|[\s;]+$)/','',$cmd)) + continue; + $now=microtime(TRUE); + $keys=$vals=array(); + if ($fw->get('CACHE') && $ttl && ($cached=$cache->exists( + $hash=$fw->hash($this->dsn.$cmd. + $fw->stringify($arg)).'.sql',$result)) && + $cached[0]+$ttl>microtime(TRUE)) { + foreach ($arg as $key=>$val) { + $vals[]=$fw->stringify(is_array($val)?$val[0]:$val); + $keys[]='/'.(is_numeric($key)?'\?':preg_quote($key)).'/'; + } + } + elseif (is_object($query=$this->prepare($cmd))) { + foreach ($arg as $key=>$val) { + if (is_array($val)) { + // User-specified data type + $query->bindvalue($key,$val[0],$val[1]); + $vals[]=$fw->stringify($this->value($val[1],$val[0])); + } + else { + // Convert to PDO data type + $query->bindvalue($key,$val, + $type=$this->type($val)); + $vals[]=$fw->stringify($this->value($type,$val)); + } + $keys[]='/'.(is_numeric($key)?'\?':preg_quote($key)).'/'; + } + $query->execute(); + $error=$query->errorinfo(); + if ($error[0]!=\PDO::ERR_NONE) { + // Statement-level error occurred + if ($this->trans) + $this->rollback(); + user_error('PDOStatement: '.$error[2]); + } + if (preg_match('/^\s*'. + '(?:CALL|EXPLAIN|SELECT|PRAGMA|SHOW|RETURNING|EXEC)\b/is', + $cmd)) { + $result=$query->fetchall(\PDO::FETCH_ASSOC); + // Work around SQLite quote bug + if (preg_match('/sqlite2?/',$this->engine)) + foreach ($result as $pos=>$rec) { + unset($result[$pos]); + $result[$pos]=array(); + foreach ($rec as $key=>$val) + $result[$pos][trim($key,'\'"[]`')]=$val; + } + $this->rows=count($result); + if ($fw->get('CACHE') && $ttl) + // Save to cache backend + $cache->set($hash,$result,$ttl); + } + else + $this->rows=$result=$query->rowcount(); + $query->closecursor(); + unset($query); + } + else { + $error=$this->errorinfo(); + if ($error[0]!=\PDO::ERR_NONE) { + // PDO-level error occurred + if ($this->trans) + $this->rollback(); + user_error('PDO: '.$error[2]); + } + } + if ($log) + $this->log.=date('r').' ('. + sprintf('%.1f',1e3*(microtime(TRUE)-$now)).'ms) '. + (empty($cached)?'':'[CACHED] '). + preg_replace($keys,$vals,$cmd,1).PHP_EOL; + } + if ($this->trans && $auto) + $this->commit(); + return $result; + } + + /** + * Return number of rows affected by last query + * @return int + **/ + function count() { + return $this->rows; + } + + /** + * Return SQL profiler results + * @return string + **/ + function log() { + return $this->log; + } + + /** + * Retrieve schema of SQL table + * @return array|FALSE + * @param $table string + * @param $fields array|string + * @param $ttl int + **/ + function schema($table,$fields=NULL,$ttl=0) { + // Supported engines + $cmd=array( + 'sqlite2?'=>array( + 'PRAGMA table_info("'.$table.'");', + 'name','type','dflt_value','notnull',0,'pk',TRUE), + 'mysql'=>array( + 'SHOW columns FROM `'.$this->dbname.'`.`'.$table.'`;', + 'Field','Type','Default','Null','YES','Key','PRI'), + 'mssql|sqlsrv|sybase|dblib|pgsql|odbc'=>array( + 'SELECT '. + 'c.column_name AS field,'. + 'c.data_type AS type,'. + 'c.column_default AS defval,'. + 'c.is_nullable AS nullable,'. + 't.constraint_type AS pkey '. + 'FROM information_schema.columns AS c '. + 'LEFT OUTER JOIN '. + 'information_schema.key_column_usage AS k '. + 'ON '. + 'c.table_name=k.table_name AND '. + 'c.column_name=k.column_name AND '. + 'c.table_schema=k.table_schema '. + ($this->dbname? + ('AND c.table_catalog=k.table_catalog '):''). + 'LEFT OUTER JOIN '. + 'information_schema.table_constraints AS t ON '. + 'k.table_name=t.table_name AND '. + 'k.constraint_name=t.constraint_name '. + 'k.table_schema=t.table_schema '. + ($this->dbname? + ('AND k.table_catalog=t.table_catalog '):''). + 'WHERE '. + 'c.table_name='.$this->quote($table).' '. + ($this->dbname? + ('AND c.table_catalog='. + $this->quote($this->dbname)):''). + ';', + 'field','type','defval','nullable','YES','pkey','PRIMARY KEY'), + 'oci'=>array( + 'SELECT c.column_name AS field, '. + 'c.data_type AS type, '. + 'c.data_default AS defval, '. + 'c.nullable AS nullable, '. + '(SELECT t.constraint_type '. + 'FROM all_cons_columns acc '. + 'LEFT OUTER JOIN all_constraints t '. + 'ON acc.constraint_name=t.constraint_name '. + 'WHERE acc.table_name='.$this->quote($table).' '. + 'AND acc.column_name=c.column_name '. + 'AND constraint_type='.$this->quote('P').') AS pkey '. + 'FROM all_tab_cols c '. + 'WHERE c.table_name='.$this->quote($table), + 'FIELD','TYPE','DEFVAL','NULLABLE','Y','PKEY','P') + ); + if (is_string($fields)) + $fields=\Base::instance()->split($fields); + foreach ($cmd as $key=>$val) + if (preg_match('/'.$key.'/',$this->engine)) { + // Improve InnoDB performance on MySQL with + // SET GLOBAL innodb_stats_on_metadata=0; + // This requires SUPER privilege! + $rows=array(); + foreach ($this->exec($val[0],NULL,$ttl) as $row) { + if (!$fields || in_array($row[$val[1]],$fields)) + $rows[$row[$val[1]]]=array( + 'type'=>$row[$val[2]], + 'pdo_type'=> + preg_match('/int\b|int(?=eger)|bool/i', + $row[$val[2]],$parts)? + constant('\PDO::PARAM_'. + strtoupper($parts[0])): + \PDO::PARAM_STR, + 'default'=>$row[$val[3]], + 'nullable'=>$row[$val[4]]==$val[5], + 'pkey'=>$row[$val[6]]==$val[7] + ); + } + return $rows; + } + return FALSE; + } + + /** + * Quote string + * @return string + * @param $val mixed + * @param $type int + **/ + function quote($val,$type=\PDO::PARAM_STR) { + return $this->engine=='odbc'? + (is_string($val)? + \Base::instance()->stringify(str_replace('\'','\'\'',$val)): + $val): + parent::quote($val,$type); + } + + /** + * Return UUID + * @return string + **/ + function uuid() { + return $this->uuid; + } + + /** + * Return database engine + * @return string + **/ + function driver() { + return $this->engine; + } + + /** + * Return server version + * @return string + **/ + function version() { + return parent::getattribute(parent::ATTR_SERVER_VERSION); + } + + /** + * Return database name + * @return string + **/ + function name() { + return $this->dbname; + } + + /** + * Return quoted identifier name + * @return string + * @param $key + **/ + function quotekey($key) { + if ($this->engine=='mysql') + $key="`".implode('`.`',explode('.',$key))."`"; + elseif (preg_match('/sybase|dblib/',$this->engine)) + $key="'".implode("'.'",explode('.',$key))."'"; + elseif (preg_match('/sqlite2?|pgsql|oci/',$this->engine)) + $key='"'.implode('"."',explode('.',$key)).'"'; + elseif (preg_match('/mssql|sqlsrv|odbc/',$this->engine)) + $key="[".implode('].[',explode('.',$key))."]"; + return $key; + } + + /** + * Instantiate class + * @param $dsn string + * @param $user string + * @param $pw string + * @param $options array + **/ + function __construct($dsn,$user=NULL,$pw=NULL,array $options=NULL) { + $fw=\Base::instance(); + $this->uuid=$fw->hash($this->dsn=$dsn); + if (preg_match('/^.+?(?:dbname|database)=(.+?)(?=;|$)/i',$dsn,$parts)) + $this->dbname=$parts[1]; + if (!$options) + $options=array(); + if (isset($parts[0]) && strstr($parts[0],':',TRUE)=='mysql') + $options+=array(\PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES '. + strtolower(str_replace('-','',$fw->get('ENCODING'))).';'); + parent::__construct($dsn,$user,$pw,$options); + $this->engine=parent::getattribute(parent::ATTR_DRIVER_NAME); + } + +} diff --git a/management-interface/lib/db/sql/mapper.php b/management-interface/lib/db/sql/mapper.php new file mode 100644 index 0000000..6af4675 --- /dev/null +++ b/management-interface/lib/db/sql/mapper.php @@ -0,0 +1,552 @@ +fields+$this->adhoc); + } + + /** + * Assign value to field + * @return scalar + * @param $key string + * @param $val scalar + **/ + function set($key,$val) { + if (array_key_exists($key,$this->fields)) { + $val=is_null($val) && $this->fields[$key]['nullable']? + NULL:$this->db->value($this->fields[$key]['pdo_type'],$val); + if ($this->fields[$key]['value']!==$val || + $this->fields[$key]['default']!==$val && is_null($val)) + $this->fields[$key]['changed']=TRUE; + return $this->fields[$key]['value']=$val; + } + // Parenthesize expression in case it's a subquery + $this->adhoc[$key]=array('expr'=>'('.$val.')','value'=>NULL); + return $val; + } + + /** + * Retrieve value of field + * @return scalar + * @param $key string + **/ + function get($key) { + if ($key=='_id') + return $this->_id; + elseif (array_key_exists($key,$this->fields)) + return $this->fields[$key]['value']; + elseif (array_key_exists($key,$this->adhoc)) + return $this->adhoc[$key]['value']; + user_error(sprintf(self::E_Field,$key)); + } + + /** + * Clear value of field + * @return NULL + * @param $key string + **/ + function clear($key) { + if (array_key_exists($key,$this->adhoc)) + unset($this->adhoc[$key]); + } + + /** + * Get PHP type equivalent of PDO constant + * @return string + * @param $pdo string + **/ + function type($pdo) { + switch ($pdo) { + case \PDO::PARAM_NULL: + return 'unset'; + case \PDO::PARAM_INT: + return 'int'; + case \PDO::PARAM_BOOL: + return 'bool'; + case \PDO::PARAM_STR: + return 'string'; + } + } + + /** + * Convert array to mapper object + * @return object + * @param $row array + **/ + protected function factory($row) { + $mapper=clone($this); + $mapper->reset(); + foreach ($row as $key=>$val) { + if (array_key_exists($key,$this->fields)) + $var='fields'; + elseif (array_key_exists($key,$this->adhoc)) + $var='adhoc'; + else + continue; + $mapper->{$var}[$key]['value']=$val; + if ($var=='fields' && $mapper->{$var}[$key]['pkey']) + $mapper->{$var}[$key]['previous']=$val; + } + $mapper->query=array(clone($mapper)); + if (isset($mapper->trigger['load'])) + \Base::instance()->call($mapper->trigger['load'],$mapper); + return $mapper; + } + + /** + * Return fields of mapper object as an associative array + * @return array + * @param $obj object + **/ + function cast($obj=NULL) { + if (!$obj) + $obj=$this; + return array_map( + function($row) { + return $row['value']; + }, + $obj->fields+$obj->adhoc + ); + } + + /** + * Build query string and execute + * @return array + * @param $fields string + * @param $filter string|array + * @param $options array + * @param $ttl int + **/ + function select($fields,$filter=NULL,array $options=NULL,$ttl=0) { + if (!$options) + $options=array(); + $options+=array( + 'group'=>NULL, + 'order'=>NULL, + 'limit'=>0, + 'offset'=>0 + ); + $sql='SELECT '.$fields.' FROM '.$this->table; + $args=array(); + if ($filter) { + if (is_array($filter)) { + $args=isset($filter[1]) && is_array($filter[1])? + $filter[1]: + array_slice($filter,1,NULL,TRUE); + $args=is_array($args)?$args:array(1=>$args); + list($filter)=$filter; + } + $sql.=' WHERE '.$filter; + } + $db=$this->db; + if ($options['group']) + $sql.=' GROUP BY '.implode(',',array_map( + function($str) use($db) { + return preg_match('/^(\w+)(?:\h+HAVING|\h*(?:,|$))/i', + $str,$parts)? + ($db->quotekey($parts[1]). + (isset($parts[2])?(' '.$parts[2]):'')):$str; + }, + explode(',',$options['group']))); + if ($options['order']) { + $sql.=' ORDER BY '.implode(',',array_map( + function($str) use($db) { + return preg_match('/^(\w+)(?:\h+(ASC|DESC))?\h*(?:,|$)/i', + $str,$parts)? + ($db->quotekey($parts[1]). + (isset($parts[2])?(' '.$parts[2]):'')):$str; + }, + explode(',',$options['order']))); + } + if ($options['limit']) + $sql.=' LIMIT '.(int)$options['limit']; + if ($options['offset']) + $sql.=' OFFSET '.(int)$options['offset']; + $result=$this->db->exec($sql,$args,$ttl); + $out=array(); + foreach ($result as &$row) { + foreach ($row as $field=>&$val) { + if (array_key_exists($field,$this->fields)) { + if (!is_null($val) || !$this->fields[$field]['nullable']) + $val=$this->db->value( + $this->fields[$field]['pdo_type'],$val); + } + elseif (array_key_exists($field,$this->adhoc)) + $this->adhoc[$field]['value']=$val; + unset($val); + } + $out[]=$this->factory($row); + unset($row); + } + return $out; + } + + /** + * Return records that match criteria + * @return array + * @param $filter string|array + * @param $options array + * @param $ttl int + **/ + function find($filter=NULL,array $options=NULL,$ttl=0) { + if (!$options) + $options=array(); + $options+=array( + 'group'=>NULL, + 'order'=>NULL, + 'limit'=>0, + 'offset'=>0 + ); + $adhoc=''; + foreach ($this->adhoc as $key=>$field) + $adhoc.=','.$field['expr'].' AS '.$this->db->quotekey($key); + return $this->select(implode(',', + array_map(array($this->db,'quotekey'),array_keys($this->fields))). + $adhoc,$filter,$options,$ttl); + } + + /** + * Count records that match criteria + * @return int + * @param $filter string|array + * @param $ttl int + **/ + function count($filter=NULL,$ttl=0) { + $sql='SELECT COUNT(*) AS '. + $this->db->quotekey('rows').' FROM '.$this->table; + $args=array(); + if ($filter) { + if (is_array($filter)) { + $args=isset($filter[1]) && is_array($filter[1])? + $filter[1]: + array_slice($filter,1,NULL,TRUE); + $args=is_array($args)?$args:array(1=>$args); + list($filter)=$filter; + } + $sql.=' WHERE '.$filter; + } + $result=$this->db->exec($sql,$args,$ttl); + return $result[0]['rows']; + } + + /** + * Return record at specified offset using same criteria as + * previous load() call and make it active + * @return array + * @param $ofs int + **/ + function skip($ofs=1) { + $out=parent::skip($ofs); + $dry=$this->dry(); + foreach ($this->fields as $key=>&$field) { + $field['value']=$dry?NULL:$out->fields[$key]['value']; + $field['changed']=FALSE; + if ($field['pkey']) + $field['previous']=$dry?NULL:$out->fields[$key]['value']; + unset($field); + } + foreach ($this->adhoc as $key=>&$field) { + $field['value']=$dry?NULL:$out->adhoc[$key]['value']; + unset($field); + } + if (isset($this->trigger['load'])) + \Base::instance()->call($this->trigger['load'],$this); + return $out; + } + + /** + * Insert new record + * @return object + **/ + function insert() { + $args=array(); + $ctr=0; + $fields=''; + $values=''; + $filter=''; + $pkeys=array(); + $nkeys=array(); + $ckeys=array(); + $inc=NULL; + foreach ($this->fields as $key=>$field) + if ($field['pkey']) + $pkeys[$key]=$field['previous']; + if (isset($this->trigger['beforeinsert'])) + \Base::instance()->call($this->trigger['beforeinsert'], + array($this,$pkeys)); + foreach ($this->fields as $key=>&$field) { + if ($field['pkey']) { + $field['previous']=$field['value']; + if (!$inc && $field['pdo_type']==\PDO::PARAM_INT && + empty($field['value']) && !$field['nullable']) + $inc=$key; + $filter.=($filter?' AND ':'').$this->db->quotekey($key).'=?'; + $nkeys[$ctr+1]=array($field['value'],$field['pdo_type']); + } + if ($field['changed'] && $key!=$inc) { + $fields.=($ctr?',':'').$this->db->quotekey($key); + $values.=($ctr?',':'').'?'; + $args[$ctr+1]=array($field['value'],$field['pdo_type']); + $ctr++; + $ckeys[]=$key; + } + $field['changed']=FALSE; + unset($field); + } + if ($fields) { + $this->db->exec( + (preg_match('/mssql|dblib|sqlsrv/',$this->engine) && + array_intersect(array_keys($pkeys),$ckeys)? + 'SET IDENTITY_INSERT '.$this->table.' ON;':''). + 'INSERT INTO '.$this->table.' ('.$fields.') '. + 'VALUES ('.$values.')',$args + ); + $seq=NULL; + if ($this->engine=='pgsql') { + $names=array_keys($pkeys); + $seq=$this->source.'_'.end($names).'_seq'; + } + if ($this->engine!='oci') + $this->_id=$this->db->lastinsertid($seq); + // Reload to obtain default and auto-increment field values + $this->load($inc? + array($inc.'=?',$this->db->value( + $this->fields[$inc]['pdo_type'],$this->_id)): + array($filter,$nkeys)); + if (isset($this->trigger['afterinsert'])) + \Base::instance()->call($this->trigger['afterinsert'], + array($this,$pkeys)); + } + return $this; + } + + /** + * Update current record + * @return object + **/ + function update() { + $args=array(); + $ctr=0; + $pairs=''; + $filter=''; + $pkeys=array(); + foreach ($this->fields as $key=>$field) + if ($field['pkey']) + $pkeys[$key]=$field['previous']; + if (isset($this->trigger['beforeupdate'])) + \Base::instance()->call($this->trigger['beforeupdate'], + array($this,$pkeys)); + foreach ($this->fields as $key=>$field) + if ($field['changed']) { + $pairs.=($pairs?',':'').$this->db->quotekey($key).'=?'; + $args[$ctr+1]=array($field['value'],$field['pdo_type']); + $ctr++; + } + foreach ($this->fields as $key=>$field) + if ($field['pkey']) { + $filter.=($filter?' AND ':'').$this->db->quotekey($key).'=?'; + $args[$ctr+1]=array($field['previous'],$field['pdo_type']); + $ctr++; + } + if ($pairs) { + $sql='UPDATE '.$this->table.' SET '.$pairs; + if ($filter) + $sql.=' WHERE '.$filter; + $this->db->exec($sql,$args); + if (isset($this->trigger['afterupdate'])) + \Base::instance()->call($this->trigger['afterupdate'], + array($this,$pkeys)); + } + return $this; + } + + /** + * Delete current record + * @return int + * @param $filter string|array + **/ + function erase($filter=NULL) { + if ($filter) { + $args=array(); + if (is_array($filter)) { + $args=isset($filter[1]) && is_array($filter[1])? + $filter[1]: + array_slice($filter,1,NULL,TRUE); + $args=is_array($args)?$args:array(1=>$args); + list($filter)=$filter; + } + return $this->db-> + exec('DELETE FROM '.$this->table.' WHERE '.$filter.';',$args); + } + $args=array(); + $ctr=0; + $filter=''; + $pkeys=array(); + foreach ($this->fields as $key=>&$field) { + if ($field['pkey']) { + $filter.=($filter?' AND ':'').$this->db->quotekey($key).'=?'; + $args[$ctr+1]=array($field['previous'],$field['pdo_type']); + $pkeys[$key]=$field['previous']; + $ctr++; + } + $field['value']=NULL; + $field['changed']=(bool)$field['default']; + if ($field['pkey']) + $field['previous']=NULL; + unset($field); + } + foreach ($this->adhoc as &$field) { + $field['value']=NULL; + unset($field); + } + parent::erase(); + $this->skip(0); + if (isset($this->trigger['beforeerase'])) + \Base::instance()->call($this->trigger['beforeerase'], + array($this,$pkeys)); + $out=$this->db-> + exec('DELETE FROM '.$this->table.' WHERE '.$filter.';',$args); + if (isset($this->trigger['aftererase'])) + \Base::instance()->call($this->trigger['aftererase'], + array($this,$pkeys)); + return $out; + } + + /** + * Reset cursor + * @return NULL + **/ + function reset() { + foreach ($this->fields as &$field) { + $field['value']=NULL; + $field['changed']=FALSE; + if ($field['pkey']) + $field['previous']=NULL; + unset($field); + } + foreach ($this->adhoc as &$field) { + $field['value']=NULL; + unset($field); + } + parent::reset(); + } + + /** + * Hydrate mapper object using hive array variable + * @return NULL + * @param $key string + * @param $func callback + **/ + function copyfrom($key,$func=NULL) { + $var=\Base::instance()->get($key); + if ($func) + $var=$func($var); + foreach ($var as $key=>$val) + if (in_array($key,array_keys($this->fields))) { + $field=&$this->fields[$key]; + if ($field['value']!==$val) { + $field['value']=$val; + $field['changed']=TRUE; + } + unset($field); + } + } + + /** + * Populate hive array variable with mapper fields + * @return NULL + * @param $key string + **/ + function copyto($key) { + $var=&\Base::instance()->ref($key); + foreach ($this->fields+$this->adhoc as $key=>$field) + $var[$key]=$field['value']; + } + + /** + * Return schema + * @return array + **/ + function schema() { + return $this->fields; + } + + /** + * Return field names + * @return array + * @param $adhoc bool + **/ + function fields($adhoc=TRUE) { + return array_keys($this->fields+($adhoc?$this->adhoc:array())); + } + + /** + * Instantiate class + * @param $db object + * @param $table string + * @param $fields array|string + * @param $ttl int + **/ + function __construct(\DB\SQL $db,$table,$fields=NULL,$ttl=60) { + $this->db=$db; + $this->engine=$db->driver(); + if ($this->engine=='oci') + $table=strtoupper($table); + $this->source=$table; + $this->table=$this->db->quotekey($table); + $this->fields=$db->schema($table,$fields,$ttl); + $this->reset(); + } + +} diff --git a/management-interface/lib/db/sql/session.php b/management-interface/lib/db/sql/session.php new file mode 100644 index 0000000..48050ec --- /dev/null +++ b/management-interface/lib/db/sql/session.php @@ -0,0 +1,187 @@ +sid) + $this->load(array('session_id=?',$this->sid=$id)); + return $this->dry()?FALSE:$this->get('data'); + } + + /** + * Write session data + * @return TRUE + * @param $id string + * @param $data string + **/ + function write($id,$data) { + $fw=\Base::instance(); + $sent=headers_sent(); + $headers=$fw->get('HEADERS'); + if ($id!=$this->sid) + $this->load(array('session_id=?',$this->sid=$id)); + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + $this->set('session_id',$id); + $this->set('data',$data); + $this->set('csrf',$sent?$this->csrf():$csrf); + $this->set('ip',$fw->get('IP')); + $this->set('agent', + isset($headers['User-Agent'])?$headers['User-Agent']:''); + $this->set('stamp',time()); + $this->save(); + return TRUE; + } + + /** + * Destroy session + * @return TRUE + * @param $id string + **/ + function destroy($id) { + $this->erase(array('session_id=?',$id)); + setcookie(session_name(),'',strtotime('-1 year')); + unset($_COOKIE[session_name()]); + header_remove('Set-Cookie'); + return TRUE; + } + + /** + * Garbage collector + * @return TRUE + * @param $max int + **/ + function cleanup($max) { + $this->erase(array('stamp+?dry()?FALSE:$this->get('csrf'); + } + + /** + * Return IP address + * @return string|FALSE + **/ + function ip() { + return $this->dry()?FALSE:$this->get('ip'); + } + + /** + * Return Unix timestamp + * @return string|FALSE + **/ + function stamp() { + return $this->dry()?FALSE:$this->get('stamp'); + } + + /** + * Return HTTP user agent + * @return string|FALSE + **/ + function agent() { + return $this->dry()?FALSE:$this->get('agent'); + } + + /** + * Instantiate class + * @param $db object + * @param $table string + * @param $force bool + **/ + function __construct(\DB\SQL $db,$table='sessions',$force=TRUE) { + if ($force) + $db->exec( + (preg_match('/mssql|sqlsrv|sybase/',$db->driver())? + ('IF NOT EXISTS (SELECT * FROM sysobjects WHERE '. + 'name='.$db->quote($table).' AND xtype=\'U\') '. + 'CREATE TABLE dbo.'): + ('CREATE TABLE IF NOT EXISTS '. + (($name=$db->name())?($name.'.'):''))). + $table.' ('. + 'session_id VARCHAR(40),'. + 'data TEXT,'. + 'csrf TEXT,'. + 'ip VARCHAR(40),'. + 'agent VARCHAR(255),'. + 'stamp INTEGER,'. + 'PRIMARY KEY(session_id)'. + ');' + ); + parent::__construct($db,$table); + session_set_save_handler( + array($this,'open'), + array($this,'close'), + array($this,'read'), + array($this,'write'), + array($this,'destroy'), + array($this,'cleanup') + ); + register_shutdown_function('session_commit'); + @session_start(); + $fw=\Base::instance(); + $headers=$fw->get('HEADERS'); + if (($ip=$this->ip()) && $ip!=$fw->get('IP') || + ($agent=$this->agent()) && + (!isset($headers['User-Agent']) || + $agent!=$headers['User-Agent'])) { + session_destroy(); + $fw->error(403); + } + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + if ($this->load(array('session_id=?',$this->sid=session_id()))) { + $this->set('csrf',$csrf); + $this->save(); + } + } + +} diff --git a/management-interface/lib/f3.php b/management-interface/lib/f3.php new file mode 100644 index 0000000..4788d58 --- /dev/null +++ b/management-interface/lib/f3.php @@ -0,0 +1,35 @@ +6) + user_error(sprintf(self::E_Color,'0x'.$hex)); + $color=str_split($hex,$len/3); + foreach ($color as &$hue) { + $hue=hexdec(str_repeat($hue,6/$len)); + unset($hue); + } + return $color; + } + + /** + * Invert image + * @return object + **/ + function invert() { + imagefilter($this->data,IMG_FILTER_NEGATE); + return $this->save(); + } + + /** + * Adjust brightness (range:-255 to 255) + * @return object + * @param $level int + **/ + function brightness($level) { + imagefilter($this->data,IMG_FILTER_BRIGHTNESS,$level); + return $this->save(); + } + + /** + * Adjust contrast (range:-100 to 100) + * @return object + * @param $level int + **/ + function contrast($level) { + imagefilter($this->data,IMG_FILTER_CONTRAST,$level); + return $this->save(); + } + + /** + * Convert to grayscale + * @return object + **/ + function grayscale() { + imagefilter($this->data,IMG_FILTER_GRAYSCALE); + return $this->save(); + } + + /** + * Adjust smoothness + * @return object + * @param $level int + **/ + function smooth($level) { + imagefilter($this->data,IMG_FILTER_SMOOTH,$level); + return $this->save(); + } + + /** + * Emboss the image + * @return object + **/ + function emboss() { + imagefilter($this->data,IMG_FILTER_EMBOSS); + return $this->save(); + } + + /** + * Apply sepia effect + * @return object + **/ + function sepia() { + imagefilter($this->data,IMG_FILTER_GRAYSCALE); + imagefilter($this->data,IMG_FILTER_COLORIZE,90,60,45); + return $this->save(); + } + + /** + * Pixelate the image + * @return object + * @param $size int + **/ + function pixelate($size) { + imagefilter($this->data,IMG_FILTER_PIXELATE,$size,TRUE); + return $this->save(); + } + + /** + * Blur the image using Gaussian filter + * @return object + * @param $selective bool + **/ + function blur($selective=FALSE) { + imagefilter($this->data, + $selective?IMG_FILTER_SELECTIVE_BLUR:IMG_FILTER_GAUSSIAN_BLUR); + return $this->save(); + } + + /** + * Apply sketch effect + * @return object + **/ + function sketch() { + imagefilter($this->data,IMG_FILTER_MEAN_REMOVAL); + return $this->save(); + } + + /** + * Flip on horizontal axis + * @return object + **/ + function hflip() { + $tmp=imagecreatetruecolor( + $width=$this->width(),$height=$this->height()); + imagesavealpha($tmp,TRUE); + imagefill($tmp,0,0,IMG_COLOR_TRANSPARENT); + imagecopyresampled($tmp,$this->data, + 0,0,$width-1,0,$width,$height,-$width,$height); + imagedestroy($this->data); + $this->data=$tmp; + return $this->save(); + } + + /** + * Flip on vertical axis + * @return object + **/ + function vflip() { + $tmp=imagecreatetruecolor( + $width=$this->width(),$height=$this->height()); + imagesavealpha($tmp,TRUE); + imagefill($tmp,0,0,IMG_COLOR_TRANSPARENT); + imagecopyresampled($tmp,$this->data, + 0,0,0,$height-1,$width,$height,$width,-$height); + imagedestroy($this->data); + $this->data=$tmp; + return $this->save(); + } + + /** + * Crop the image + * @return object + * @param $x1 int + * @param $y1 int + * @param $x2 int + * @param $y2 int + **/ + function crop($x1,$y1,$x2,$y2) { + $tmp=imagecreatetruecolor($width=$x2-$x1+1,$height=$y2-$y1+1); + imagesavealpha($tmp,TRUE); + imagefill($tmp,0,0,IMG_COLOR_TRANSPARENT); + imagecopyresampled($tmp,$this->data, + 0,0,$x1,$y1,$width,$height,$width,$height); + imagedestroy($this->data); + $this->data=$tmp; + return $this->save(); + } + + /** + * Resize image (Maintain aspect ratio); Crop relative to center + * if flag is enabled; Enlargement allowed if flag is enabled + * @return object + * @param $width int + * @param $height int + * @param $crop bool + * @param $enlarge bool + **/ + function resize($width,$height,$crop=TRUE,$enlarge=TRUE) { + // Adjust dimensions; retain aspect ratio + $ratio=($origw=imagesx($this->data))/($origh=imagesy($this->data)); + if (!$crop) + if ($width/$ratio<=$height) + $height=$width/$ratio; + else + $width=$height*$ratio; + if (!$enlarge) { + $width=min($origw,$width); + $height=min($origh,$height); + } + // Create blank image + $tmp=imagecreatetruecolor($width,$height); + imagesavealpha($tmp,TRUE); + imagefill($tmp,0,0,IMG_COLOR_TRANSPARENT); + // Resize + if ($crop) { + if ($width/$ratio<=$height) { + $cropw=$origh*$width/$height; + imagecopyresampled($tmp,$this->data, + 0,0,($origw-$cropw)/2,0,$width,$height,$cropw,$origh); + } + else { + $croph=$origw*$height/$width; + imagecopyresampled($tmp,$this->data, + 0,0,0,($origh-$croph)/2,$width,$height,$origw,$croph); + } + } + else + imagecopyresampled($tmp,$this->data, + 0,0,0,0,$width,$height,$origw,$origh); + imagedestroy($this->data); + $this->data=$tmp; + return $this->save(); + } + + /** + * Rotate image + * @return object + * @param $angle int + **/ + function rotate($angle) { + $this->data=imagerotate($this->data,$angle, + imagecolorallocatealpha($this->data,0,0,0,127)); + imagesavealpha($this->data,TRUE); + return $this->save(); + } + + /** + * Apply an image overlay + * @return object + * @param $img object + * @param $align int + **/ + function overlay(Image $img,$align=NULL) { + if (is_null($align)) + $align=self::POS_Right|self::POS_Bottom; + $ovr=imagecreatefromstring($img->dump()); + imagesavealpha($ovr,TRUE); + $imgw=$this->width(); + $imgh=$this->height(); + $ovrw=imagesx($ovr); + $ovrh=imagesy($ovr); + if ($align & self::POS_Left) + $posx=0; + if ($align & self::POS_Center) + $posx=($imgw-$ovrw)/2; + if ($align & self::POS_Right) + $posx=$imgw-$ovrw; + if ($align & self::POS_Top) + $posy=0; + if ($align & self::POS_Middle) + $posy=($imgh-$ovrh)/2; + if ($align & self::POS_Bottom) + $posy=$imgh-$ovrh; + if (empty($posx)) + $posx=0; + if (empty($posy)) + $posy=0; + imagecopy($this->data,$ovr,$posx,$posy,0,0,$ovrw,$ovrh); + return $this->save(); + } + + /** + * Generate identicon + * @return object + * @param $str string + * @param $size int + * @param $blocks int + **/ + function identicon($str,$size=64,$blocks=4) { + $sprites=array( + array(.5,1,1,0,1,1), + array(.5,0,1,0,.5,1,0,1), + array(.5,0,1,0,1,1,.5,1,1,.5), + array(0,.5,.5,0,1,.5,.5,1,.5,.5), + array(0,.5,1,0,1,1,0,1,1,.5), + array(1,0,1,1,.5,1,1,.5,.5,.5), + array(0,0,1,0,1,.5,0,0,.5,1,0,1), + array(0,0,.5,0,1,.5,.5,1,0,1,.5,.5), + array(.5,0,.5,.5,1,.5,1,1,.5,1,.5,.5,0,.5), + array(0,0,1,0,.5,.5,1,.5,.5,1,.5,.5,0,1), + array(0,.5,.5,1,1,.5,.5,0,1,0,1,1,0,1), + array(.5,0,1,0,1,1,.5,1,1,.75,.5,.5,1,.25), + array(0,.5,.5,0,.5,.5,1,0,1,.5,.5,1,.5,.5,0,1), + array(0,0,1,0,1,1,0,1,1,.5,.5,.25,.5,.75,0,.5,.5,.25), + array(0,.5,.5,.5,.5,0,1,0,.5,.5,1,.5,.5,1,.5,.5,0,1), + array(0,0,1,0,.5,.5,.5,0,0,.5,1,.5,.5,1,.5,.5,0,1) + ); + $hash=sha1($str); + $this->data=imagecreatetruecolor($size,$size); + list($r,$g,$b)=$this->rgb(hexdec(substr($hash,-3))); + $fg=imagecolorallocate($this->data,$r,$g,$b); + imagefill($this->data,0,0,IMG_COLOR_TRANSPARENT); + $ctr=count($sprites); + $dim=$blocks*floor($size/$blocks)*2/$blocks; + for ($j=0,$y=ceil($blocks/2);$j<$y;$j++) + for ($i=$j,$x=$blocks-1-$j;$i<$x;$i++) { + $sprite=imagecreatetruecolor($dim,$dim); + imagefill($sprite,0,0,IMG_COLOR_TRANSPARENT); + if ($block=$sprites[ + hexdec($hash[($j*$blocks+$i)*2])%$ctr]) { + for ($k=0,$pts=count($block);$k<$pts;$k++) + $block[$k]*=$dim; + imagefilledpolygon($sprite,$block,$pts/2,$fg); + } + $sprite=imagerotate($sprite, + 90*(hexdec($hash[($j*$blocks+$i)*2+1])%4), + imagecolorallocatealpha($sprite,0,0,0,127)); + for ($k=0;$k<4;$k++) { + imagecopyresampled($this->data,$sprite, + $i*$dim/2,$j*$dim/2,0,0,$dim/2,$dim/2,$dim,$dim); + $this->data=imagerotate($this->data,90, + imagecolorallocatealpha($this->data,0,0,0,127)); + } + imagedestroy($sprite); + } + imagesavealpha($this->data,TRUE); + return $this->save(); + } + + /** + * Generate CAPTCHA image + * @return object|FALSE + * @param $font string + * @param $size int + * @param $len int + * @param $key string + * @param $path string + * @param $fg int + * @param $bg int + **/ + function captcha($font,$size=24,$len=5, + $key=NULL,$path='',$fg=0xFFFFFF,$bg=0x000000) { + if ((!$ssl=extension_loaded('openssl')) && ($len<4 || $len>13)) { + user_error(sprintf(self::E_Length,$len)); + return FALSE; + } + $fw=Base::instance(); + foreach ($fw->split($path?:$fw->get('UI').';./') as $dir) + if (is_file($path=$dir.$font)) { + $seed=strtoupper(substr( + $ssl?bin2hex(openssl_random_pseudo_bytes($len)):uniqid(), + -$len)); + $block=$size*3; + $tmp=array(); + for ($i=0,$width=0,$height=0;$i<$len;$i++) { + // Process at 2x magnification + $box=imagettfbbox($size*2,0,$path,$seed[$i]); + $w=$box[2]-$box[0]; + $h=$box[1]-$box[5]; + $char=imagecreatetruecolor($block,$block); + imagefill($char,0,0,$bg); + imagettftext($char,$size*2,0, + ($block-$w)/2,$block-($block-$h)/2, + $fg,$path,$seed[$i]); + $char=imagerotate($char,mt_rand(-30,30), + imagecolorallocatealpha($char,0,0,0,127)); + // Reduce to normal size + $tmp[$i]=imagecreatetruecolor( + ($w=imagesx($char))/2,($h=imagesy($char))/2); + imagefill($tmp[$i],0,0,IMG_COLOR_TRANSPARENT); + imagecopyresampled($tmp[$i],$char,0,0,0,0,$w/2,$h/2,$w,$h); + imagedestroy($char); + $width+=$i+1<$len?$block/2:$w/2; + $height=max($height,$h/2); + } + $this->data=imagecreatetruecolor($width,$height); + imagefill($this->data,0,0,IMG_COLOR_TRANSPARENT); + for ($i=0;$i<$len;$i++) { + imagecopy($this->data,$tmp[$i], + $i*$block/2,($height-imagesy($tmp[$i]))/2,0,0, + imagesx($tmp[$i]),imagesy($tmp[$i])); + imagedestroy($tmp[$i]); + } + imagesavealpha($this->data,TRUE); + if ($key) + $fw->set($key,$seed); + return $this->save(); + } + user_error(self::E_Font); + return FALSE; + } + + /** + * Return image width + * @return int + **/ + function width() { + return imagesx($this->data); + } + + /** + * Return image height + * @return int + **/ + function height() { + return imagesy($this->data); + } + + /** + * Send image to HTTP client + * @return NULL + **/ + function render() { + $args=func_get_args(); + $format=$args?array_shift($args):'png'; + if (PHP_SAPI!='cli') { + header('Content-Type: image/'.$format); + header('X-Powered-By: '.Base::instance()->get('PACKAGE')); + } + call_user_func_array('image'.$format, + array_merge(array($this->data),$args)); + } + + /** + * Return image as a string + * @return string + **/ + function dump() { + $args=func_get_args(); + $format=$args?array_shift($args):'png'; + ob_start(); + call_user_func_array('image'.$format, + array_merge(array($this->data),$args)); + return ob_get_clean(); + } + + /** + * Save current state + * @return object + **/ + function save() { + $fw=Base::instance(); + if ($this->flag) { + if (!is_dir($dir=$fw->get('TEMP'))) + mkdir($dir,Base::MODE,TRUE); + $this->count++; + $fw->write($dir.'/'. + $fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash($this->file).'-'.$this->count.'.png', + $this->dump()); + } + return $this; + } + + /** + * Revert to specified state + * @return object + * @param $state int + **/ + function restore($state=1) { + $fw=Base::instance(); + if ($this->flag && is_file($file=($path=$fw->get('TEMP'). + $fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash($this->file).'-').$state.'.png')) { + if (is_resource($this->data)) + imagedestroy($this->data); + $this->data=imagecreatefromstring($fw->read($file)); + imagesavealpha($this->data,TRUE); + foreach (glob($path.'*.png',GLOB_NOSORT) as $match) + if (preg_match('/-(\d+)\.png/',$match,$parts) && + $parts[1]>$state) + @unlink($match); + $this->count=$state; + } + return $this; + } + + /** + * Undo most recently applied filter + * @return object + **/ + function undo() { + if ($this->flag) { + if ($this->count) + $this->count--; + return $this->restore($this->count); + } + return $this; + } + + /** + * Load string + * @return object + * @param $str string + **/ + function load($str) { + $this->data=imagecreatefromstring($str); + imagesavealpha($this->data,TRUE); + $this->save(); + return $this; + } + + /** + * Instantiate image + * @param $file string + * @param $flag bool + * @param $path string + **/ + function __construct($file=NULL,$flag=FALSE,$path='') { + $this->flag=$flag; + if ($file) { + $fw=Base::instance(); + // Create image from file + $this->file=$file; + foreach ($fw->split($path?:$fw->get('UI').';./') as $dir) + if (is_file($dir.$file)) + return $this->load($fw->read($dir.$file)); + } + } + + /** + * Wrap-up + * @return NULL + **/ + function __destruct() { + if (is_resource($this->data)) { + imagedestroy($this->data); + $fw=Base::instance(); + $path=$fw->get('TEMP'). + $fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash($this->file); + if ($glob=@glob($path.'*.png',GLOB_NOSORT)) + foreach ($glob as $match) + if (preg_match('/-(\d+)\.png/',$match)) + @unlink($match); + } + } + +} diff --git a/management-interface/lib/license.txt b/management-interface/lib/license.txt new file mode 100644 index 0000000..3c7236c --- /dev/null +++ b/management-interface/lib/license.txt @@ -0,0 +1,621 @@ +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + +a) The work must carry prominent notices stating that you modified +it, and giving a relevant date. + +b) The work must carry prominent notices stating that it is +released under this License and any conditions added under section +7. This requirement modifies the requirement in section 4 to +"keep intact all notices". + +c) You must license the entire work, as a whole, under this +License to anyone who comes into possession of a copy. This +License will therefore apply, along with any applicable section 7 +additional terms, to the whole of the work, and all its parts, +regardless of how they are packaged. This License gives no +permission to license the work in any other way, but it does not +invalidate such permission if you have separately received it. + +d) If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your +work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + +a) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium +customarily used for software interchange. + +b) Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a +written offer, valid for at least three years and valid for as +long as you offer spare parts or customer support for that product +model, to give anyone who possesses the object code either (1) a +copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical +medium customarily used for software interchange, for a price no +more than your reasonable cost of physically performing this +conveying of source, or (2) access to copy the +Corresponding Source from a network server at no charge. + +c) Convey individual copies of the object code with a copy of the +written offer to provide the Corresponding Source. This +alternative is allowed only occasionally and noncommercially, and +only if you received the object code with such an offer, in accord +with subsection 6b. + +d) Convey the object code by offering access from a designated +place (gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to +copy the object code is a network server, the Corresponding Source +may be on a different server (operated by you or a third party) +that supports equivalent copying facilities, provided you maintain +clear directions next to the object code saying where to find the +Corresponding Source. Regardless of what server hosts the +Corresponding Source, you remain obligated to ensure that it is +available for as long as needed to satisfy these requirements. + +e) Convey the object code using peer-to-peer transmission, provided +you inform other peers where the object code and Corresponding +Source of the work are being offered to the general public at no +charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the +terms of sections 15 and 16 of this License; or + +b) Requiring preservation of specified reasonable legal notices or +author attributions in that material or in the Appropriate Legal +Notices displayed by works containing it; or + +c) Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +d) Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +e) Declining to grant rights under trademark law for use of some +trade names, trademarks, or service marks; or + +f) Requiring indemnification of licensors and authors of that +material by anyone who conveys the material (or modified versions of +it) with contractual assumptions of liability to the recipient, for +any liability that these contractual assumptions directly impose on +those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS diff --git a/management-interface/lib/log.php b/management-interface/lib/log.php new file mode 100644 index 0000000..7ec78c0 --- /dev/null +++ b/management-interface/lib/log.php @@ -0,0 +1,60 @@ +write( + $this->file, + date($format). + (isset($_SERVER['REMOTE_ADDR'])? + (' ['.$_SERVER['REMOTE_ADDR'].']'):'').' '. + trim($text).PHP_EOL, + TRUE + ); + } + + /** + * Erase log + * @return NULL + **/ + function erase() { + @unlink($this->file); + } + + /** + * Instantiate class + * @param $file string + **/ + function __construct($file) { + $fw=Base::instance(); + if (!is_dir($dir=$fw->get('LOGS'))) + mkdir($dir,Base::MODE,TRUE); + $this->file=$dir.$file; + } + +} diff --git a/management-interface/lib/magic.php b/management-interface/lib/magic.php new file mode 100644 index 0000000..d17d180 --- /dev/null +++ b/management-interface/lib/magic.php @@ -0,0 +1,140 @@ +isprivate(); + unset($ref); + return $out; + } + return FALSE; + } + + /** + * Convenience method for checking property value + * @return mixed + * @param $key string + **/ + function offsetexists($key) { + return $this->visible($key)?isset($this->$key):$this->exists($key); + } + + /** + * Alias for offsetexists() + * @return mixed + * @param $key string + **/ + function __isset($key) { + return $this->offsetexists($key); + } + + /** + * Convenience method for assigning property value + * @return mixed + * @param $key string + * @param $val scalar + **/ + function offsetset($key,$val) { + return $this->visible($key)?($this->key=$val):$this->set($key,$val); + } + + /** + * Alias for offsetset() + * @return mixed + * @param $key string + * @param $val scalar + **/ + function __set($key,$val) { + return $this->offsetset($key,$val); + } + + /** + * Convenience method for retrieving property value + * @return mixed + * @param $key string + **/ + function offsetget($key) { + return $this->visible($key)?$this->$key:$this->get($key); + } + + /** + * Alias for offsetget() + * @return mixed + * @param $key string + **/ + function __get($key) { + return $this->offsetget($key); + } + + /** + * Convenience method for checking property value + * @return NULL + * @param $key string + **/ + function offsetunset($key) { + if ($this->visible($key)) + unset($this->$key); + else + $this->clear($key); + } + + /** + * Alias for offsetunset() + * @return NULL + * @param $key string + **/ + function __unset($key) { + $this->offsetunset($key); + } + +} diff --git a/management-interface/lib/markdown.php b/management-interface/lib/markdown.php new file mode 100644 index 0000000..bc6cfd4 --- /dev/null +++ b/management-interface/lib/markdown.php @@ -0,0 +1,570 @@ +\h?(.*?(?:\n+|$))/','\1',$str); + return strlen($str)? + ('
'.$this->build($str).'
'."\n\n"):''; + } + + /** + * Process whitespace-prefixed code block + * @return string + * @param $str string + **/ + protected function _pre($str) { + $str=preg_replace('/(?<=^|\n)(?: {4}|\t)(.+?(?:\n+|$))/','\1', + $this->esc($str)); + return strlen($str)? + ('
'.
+				$this->esc($this->snip($str)).
+			'
'."\n\n"): + ''; + } + + /** + * Process fenced code block + * @return string + * @param $hint string + * @param $str string + **/ + protected function _fence($hint,$str) { + $str=$this->snip($str); + $fw=Base::instance(); + if ($fw->get('HIGHLIGHT')) { + switch (strtolower($hint)) { + case 'php': + $str=$fw->highlight($str); + break; + case 'apache': + preg_match_all('/(?<=^|\n)(\h*)'. + '(?:(<\/?)(\w+)((?:\h+[^>]+)*)(>)|'. + '(?:(\w+)(\h.+?)))(\h*(?:\n+|$))/', + $str,$matches,PREG_SET_ORDER); + $out=''; + foreach ($matches as $match) + $out.=$match[1]. + ($match[3]? + (''. + $this->esc($match[2]).$match[3]. + ''. + ($match[4]? + (''. + $this->esc($match[4]). + ''): + ''). + ''. + $this->esc($match[5]). + ''): + (''. + $match[6]. + ''. + ''. + $this->esc($match[7]). + '')). + $match[8]; + $str=''.$out.''; + break; + case 'html': + preg_match_all( + '/(?:(?:<(\/?)(\w+)'. + '((?:\h+(?:\w+\h*=\h*)?".+?"|[^>]+)*|'. + '\h+.+?)(\h*\/?)>)|(.+?))/s', + $str,$matches,PREG_SET_ORDER + ); + $out=''; + foreach ($matches as $match) { + if ($match[2]) { + $out.='<'. + $match[1].$match[2].''; + if ($match[3]) { + preg_match_all( + '/(?:\h+(?:(?:(\w+)\h*=\h*)?'. + '(".+?")|(.+)))/', + $match[3],$parts,PREG_SET_ORDER + ); + foreach ($parts as $part) + $out.=' '. + (empty($part[3])? + ((empty($part[1])? + '': + (''. + $part[1].'=')). + ''. + $part[2].''): + (''. + $part[3].'')); + } + $out.=''. + $match[4].'>'; + } + else + $out.=$this->esc($match[5]); + } + $str=''.$out.''; + break; + case 'ini': + preg_match_all( + '/(?<=^|\n)(?:'. + '(;[^\n]*)|(?:<\?php.+?\?>?)|'. + '(?:\[(.+?)\])|'. + '(.+?)\h*=\h*'. + '((?:\\\\\h*\r?\n|.+?)*)'. + ')((?:\r?\n)+|$)/', + $str,$matches,PREG_SET_ORDER + ); + $out=''; + foreach ($matches as $match) { + if ($match[1]) + $out.=''.$match[1]. + ''; + elseif ($match[2]) + $out.='['.$match[2].']'. + ''; + elseif ($match[3]) + $out.=''.$match[3]. + '='. + ($match[4]? + (''. + $match[4].''):''); + else + $out.=$match[0]; + if (isset($match[5])) + $out.=$match[5]; + } + $str=''.$out.''; + break; + default: + $str=''.$this->esc($str).''; + break; + } + } + else + $str=''.$this->esc($str).''; + return '
'.$str.'
'."\n\n"; + } + + /** + * Process horizontal rule + * @return string + **/ + protected function _hr() { + return '
'."\n\n"; + } + + /** + * Process atx-style heading + * @return string + * @param $type string + * @param $str string + **/ + protected function _atx($type,$str) { + $level=strlen($type); + return ''. + $this->scan($str).''."\n\n"; + } + + /** + * Process setext-style heading + * @return string + * @param $str string + * @param $type string + **/ + protected function _setext($str,$type) { + $level=strpos('=-',$type)+1; + return ''. + $this->scan($str).''."\n\n"; + } + + /** + * Process ordered/unordered list + * @return string + * @param $str string + **/ + protected function _li($str) { + // Initialize list parser + $len=strlen($str); + $ptr=0; + $dst=''; + $first=TRUE; + $tight=TRUE; + $type='ul'; + // Main loop + while ($ptr<$len) { + if (preg_match('/^\h*[*-](?:\h?[*-]){2,}(?:\n+|$)/', + substr($str,$ptr),$match)) { + $ptr+=strlen($match[0]); + // Embedded horizontal rule + return (strlen($dst)? + ('<'.$type.'>'."\n".$dst.''."\n\n"):''). + '
'."\n\n".$this->build(substr($str,$ptr)); + } + elseif (preg_match('/(?<=^|\n)([*+-]|\d+\.)\h'. + '(.+?(?:\n+|$))((?:(?: {4}|\t)+.+?(?:\n+|$))*)/s', + substr($str,$ptr),$match)) { + $match[3]=preg_replace('/(?<=^|\n)(?: {4}|\t)/','',$match[3]); + $found=FALSE; + foreach (array_slice($this->blocks,0,-1) as $regex) + if (preg_match($regex,$match[3])) { + $found=TRUE; + break; + } + // List + if ($first) { + // First pass + if (is_numeric($match[1])) + $type='ol'; + if (preg_match('/\n{2,}$/',$match[2]. + ($found?'':$match[3]))) + // Loose structure; Use paragraphs + $tight=FALSE; + $first=FALSE; + } + // Strip leading whitespaces + $ptr+=strlen($match[0]); + $tmp=$this->snip($match[2].$match[3]); + if ($tight) { + if ($found) + $tmp=$match[2].$this->build($this->snip($match[3])); + } + else + $tmp=$this->build($tmp); + $dst.='
  • '.$this->scan(trim($tmp)).'
  • '."\n"; + } + } + return strlen($dst)? + ('<'.$type.'>'."\n".$dst.''."\n\n"):''; + } + + /** + * Ignore raw HTML + * @return string + * @param $str string + **/ + protected function _raw($str) { + return $str; + } + + /** + * Process paragraph + * @return string + * @param $str string + **/ + protected function _p($str) { + $str=trim($str); + if (strlen($str)) { + if (preg_match('/^(.+?\n)([>#].+)$/s',$str,$parts)) + return $this->_p($parts[1]).$this->build($parts[2]); + $self=$this; + $str=preg_replace_callback( + '/([^<>\[]+)?(<[\?%].+?[\?%]>|<.+?>|\[.+?\]\s*\(.+?\))|'. + '(.+)/s', + function($expr) use($self) { + $tmp=''; + if (isset($expr[4])) + $tmp.=$self->esc($expr[4]); + else { + if (isset($expr[1])) + $tmp.=$self->esc($expr[1]); + $tmp.=$expr[2]; + if (isset($expr[3])) + $tmp.=$self->esc($expr[3]); + } + return $tmp; + }, + $str + ); + return '

    '.$this->scan($str).'

    '."\n\n"; + } + return ''; + } + + /** + * Process strong/em/strikethrough spans + * @return string + * @param $str string + **/ + protected function _text($str) { + $tmp=''; + while ($str!=$tmp) + $str=preg_replace_callback( + '/(?'.$expr[2].'
    '; + case 2: + return ''.$expr[2].''; + case 3: + return ''.$expr[2].''; + } + }, + preg_replace( + '/(?\1', + $tmp=$str + ) + ); + return $str; + } + + /** + * Process image span + * @return string + * @param $str string + **/ + protected function _img($str) { + $self=$this; + return preg_replace_callback( + '/!(?:\[(.+?)\])?\h*\(?(?:\h*"(.*?)"\h*)?\)/', + function($expr) use($self) { + return ''.$self->esc($expr[1]).''; + }, + $str + ); + } + + /** + * Process anchor span + * @return string + * @param $str string + **/ + protected function _a($str) { + $self=$this; + return preg_replace_callback( + '/(??(?:\h*"(.*?)"\h*)?\)/', + function($expr) use($self) { + return ''.$self->scan($expr[1]).''; + }, + $str + ); + } + + /** + * Auto-convert links + * @return string + * @param $str string + **/ + protected function _auto($str) { + $self=$this; + return preg_replace_callback( + '/`.*?<(.+?)>.*?`|<(.+?)>/', + function($expr) use($self) { + if (empty($expr[1]) && parse_url($expr[2],PHP_URL_SCHEME)) { + $expr[2]=$self->esc($expr[2]); + return ''.$expr[2].''; + } + return $expr[0]; + }, + $str + ); + } + + /** + * Process code span + * @return string + * @param $str string + **/ + protected function _code($str) { + $self=$this; + return preg_replace_callback( + '/`` (.+?) ``|(?'. + $self->esc(empty($expr[1])?$expr[2]:$expr[1]).''; + }, + $str + ); + } + + /** + * Convert characters to HTML entities + * @return string + * @param $str string + **/ + function esc($str) { + if (!$this->special) + $this->special=array( + '...'=>'…', + '(tm)'=>'™', + '(r)'=>'®', + '(c)'=>'©' + ); + foreach ($this->special as $key=>$val) + $str=preg_replace('/'.preg_quote($key,'/').'/i',$val,$str); + return htmlspecialchars($str,ENT_COMPAT, + Base::instance()->get('ENCODING'),FALSE); + } + + /** + * Reduce multiple line feeds + * @return string + * @param $str string + **/ + protected function snip($str) { + return preg_replace('/(?:(?<=\n)\n+)|\n+$/',"\n",$str); + } + + /** + * Scan line for convertible spans + * @return string + * @param $str string + **/ + function scan($str) { + $inline=array('img','a','text','auto','code'); + foreach ($inline as $func) + $str=$this->{'_'.$func}($str); + return $str; + } + + /** + * Assemble blocks + * @return string + * @param $str string + **/ + protected function build($str) { + if (!$this->blocks) { + // Regexes for capturing entire blocks + $this->blocks=array( + 'blockquote'=>'/^(?:\h?>\h?.*?(?:\n+|$))+/', + 'pre'=>'/^(?:(?: {4}|\t).+?(?:\n+|$))+/', + 'fence'=>'/^`{3}\h*(\w+)?.*?[^\n]*\n+(.+?)`{3}[^\n]*'. + '(?:\n+|$)/s', + 'hr'=>'/^\h*[*_-](?:\h?[\*_-]){2,}\h*(?:\n+|$)/', + 'atx'=>'/^\h*(#{1,6})\h?(.+?)\h*(?:#.*)?(?:\n+|$)/', + 'setext'=>'/^\h*(.+?)\h*\n([=-])+\h*(?:\n+|$)/', + 'li'=>'/^(?:(?:[*+-]|\d+\.)\h.+?(?:\n+|$)'. + '(?:(?: {4}|\t)+.+?(?:\n+|$))*)+/s', + 'raw'=>'/^((?:|'. + '<(address|article|aside|audio|blockquote|canvas|dd|'. + 'div|dl|fieldset|figcaption|figure|footer|form|h\d|'. + 'header|hgroup|hr|noscript|object|ol|output|p|pre|'. + 'section|table|tfoot|ul|video).*?'. + '(?:\/>|>(?:(?>[^><]+)|(?R))*<\/\2>))'. + '\h*(?:\n{2,}|\n*$)|<[\?%].+?[\?%]>\h*(?:\n?$|\n*))/s', + 'p'=>'/^(.+?(?:\n{2,}|\n*$))/s' + ); + } + $self=$this; + // Treat lines with nothing but whitespaces as empty lines + $str=preg_replace('/\n\h+(?=\n)/',"\n",$str); + // Initialize block parser + $len=strlen($str); + $ptr=0; + $dst=''; + // Main loop + while ($ptr<$len) { + if (preg_match('/^ {0,3}\[([^\[\]]+)\]:\s*?\s*'. + '(?:"([^\n]*)")?(?:\n+|$)/s',substr($str,$ptr),$match)) { + // Reference-style link; Backtrack + $ptr+=strlen($match[0]); + $tmp=''; + // Catch line breaks in title attribute + $ref=preg_replace('/\h/','\s',preg_quote($match[1],'/')); + while ($dst!=$tmp) { + $dst=preg_replace_callback( + '/(?esc($match[2]).'"'. + (empty($match[3])? + '': + (' title="'. + $self->esc($match[3]).'"')).'>'. + // Link + $self->scan( + empty($expr[3])? + (empty($expr[1])? + $expr[4]: + $expr[1]): + $expr[3] + ).''): + // Image + (''.
+										$self->esc($expr[3]).''); + }, + $tmp=$dst + ); + } + } + else + foreach ($this->blocks as $func=>$regex) + if (preg_match($regex,substr($str,$ptr),$match)) { + $ptr+=strlen($match[0]); + $dst.=call_user_func_array( + array($this,'_'.$func), + count($match)>1?array_slice($match,1):$match + ); + break; + } + } + return $dst; + } + + /** + * Render HTML equivalent of markdown + * @return string + * @param $txt string + **/ + function convert($txt) { + $txt=preg_replace_callback( + '/(.+?<\/code>|'. + '<[^>\n]+>|\([^\n\)]+\)|"[^"\n]+")|'. + '\\\\(.)/s', + function($expr) { + // Process escaped characters + return empty($expr[1])?$expr[2]:$expr[1]; + }, + $this->build(preg_replace('/\r\n|\r/',"\n",$txt)) + ); + return $this->snip($txt); + } + +} diff --git a/management-interface/lib/matrix.php b/management-interface/lib/matrix.php new file mode 100644 index 0000000..70ae3de --- /dev/null +++ b/management-interface/lib/matrix.php @@ -0,0 +1,101 @@ +$cols) + foreach ($cols as $keyy=>$valy) + $out[$keyy][$keyx]=$valy; + $var=$out; + } + + /** + * Sort a multi-dimensional array variable on a specified column + * @return bool + * @param $var array + * @param $col mixed + * @param $order int + **/ + function sort(array &$var,$col,$order=SORT_ASC) { + uasort( + $var, + function($val1,$val2) use($col,$order) { + list($v1,$v2)=array($val1[$col],$val2[$col]); + $out=is_numeric($v1) && is_numeric($v2)? + Base::instance()->sign($v1-$v2):strcmp($v1,$v2); + if ($order==SORT_DESC) + $out=-$out; + return $out; + } + ); + $var=array_values($var); + } + + /** + * Change the key of a two-dimensional array element + * @return NULL + * @param $var array + * @param $old string + * @param $new string + **/ + function changekey(array &$var,$old,$new) { + $keys=array_keys($var); + $vals=array_values($var); + $keys[array_search($old,$keys)]=$new; + $var=array_combine($keys,$vals); + } + + /** + * Return month calendar of specified date, with optional setting for + * first day of week (0 for Sunday) + * @return array + * @param $date string + * @param $first int + **/ + function calendar($date='now',$first=0) { + $parts=getdate(strtotime($date)); + $days=cal_days_in_month(CAL_GREGORIAN,$parts['mon'],$parts['year']); + $ref=date('w',strtotime(date('Y-m',$parts[0]).'-01'))+(7-$first)%7; + $out=array(); + for ($i=0;$i<$days;$i++) + $out[floor(($ref+$i)/7)][($ref+$i)%7]=$i+1; + return $out; + } + +} diff --git a/management-interface/lib/session.php b/management-interface/lib/session.php new file mode 100644 index 0000000..fcc45fc --- /dev/null +++ b/management-interface/lib/session.php @@ -0,0 +1,180 @@ +sid) + $this->sid=$id; + return Cache::instance()->exists($id.'.@',$data)?$data['data']:FALSE; + } + + /** + * Write session data + * @return TRUE + * @param $id string + * @param $data string + **/ + function write($id,$data) { + $fw=Base::instance(); + $sent=headers_sent(); + $headers=$fw->get('HEADERS'); + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + $jar=$fw->get('JAR'); + if ($id!=$this->sid) + $this->sid=$id; + Cache::instance()->set($id.'.@', + array( + 'data'=>$data, + 'csrf'=>$sent?$this->csrf():$csrf, + 'ip'=>$fw->get('IP'), + 'agent'=>isset($headers['User-Agent'])? + $headers['User-Agent']:'', + 'stamp'=>time() + ), + $jar['expire']?($jar['expire']-time()):0 + ); + return TRUE; + } + + /** + * Destroy session + * @return TRUE + * @param $id string + **/ + function destroy($id) { + Cache::instance()->clear($id.'.@'); + setcookie(session_name(),'',strtotime('-1 year')); + unset($_COOKIE[session_name()]); + header_remove('Set-Cookie'); + return TRUE; + } + + /** + * Garbage collector + * @return TRUE + * @param $max int + **/ + function cleanup($max) { + Cache::instance()->reset('.@',$max); + return TRUE; + } + + /** + * Return anti-CSRF token + * @return string|FALSE + **/ + function csrf() { + return Cache::instance()-> + exists(($this->sid?:session_id()).'.@',$data)? + $data['csrf']:FALSE; + } + + /** + * Return IP address + * @return string|FALSE + **/ + function ip() { + return Cache::instance()-> + exists(($this->sid?:session_id()).'.@',$data)? + $data['ip']:FALSE; + } + + /** + * Return Unix timestamp + * @return string|FALSE + **/ + function stamp() { + return Cache::instance()-> + exists(($this->sid?:session_id()).'.@',$data)? + $data['stamp']:FALSE; + } + + /** + * Return HTTP user agent + * @return string|FALSE + **/ + function agent() { + return Cache::instance()-> + exists(($this->sid?:session_id()).'.@',$data)? + $data['agent']:FALSE; + } + + /** + * Instantiate class + * @return object + **/ + function __construct() { + session_set_save_handler( + array($this,'open'), + array($this,'close'), + array($this,'read'), + array($this,'write'), + array($this,'destroy'), + array($this,'cleanup') + ); + register_shutdown_function('session_commit'); + @session_start(); + $fw=\Base::instance(); + $headers=$fw->get('HEADERS'); + if (($ip=$this->ip()) && $ip!=$fw->get('IP') || + ($agent=$this->agent()) && + (!isset($headers['User-Agent']) || + $agent!=$headers['User-Agent'])) { + session_destroy(); + \Base::instance()->error(403); + } + $csrf=$fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(mt_rand()); + $jar=$fw->get('JAR'); + if (Cache::instance()->exists(($this->sid=session_id()).'.@',$data)) { + $data['csrf']=$csrf; + Cache::instance()->set($this->sid.'.@', + $data, + $jar['expire']?($jar['expire']-time()):0 + ); + } + } + +} diff --git a/management-interface/lib/smtp.php b/management-interface/lib/smtp.php new file mode 100644 index 0000000..d9041b5 --- /dev/null +++ b/management-interface/lib/smtp.php @@ -0,0 +1,274 @@ +fixheader($key); + return isset($this->headers[$key]); + } + + /** + * Bind value to e-mail header + * @return string + * @param $key string + * @param $val string + **/ + function set($key,$val) { + $key=$this->fixheader($key); + return $this->headers[$key]=$val; + } + + /** + * Return value of e-mail header + * @return string|NULL + * @param $key string + **/ + function get($key) { + $key=$this->fixheader($key); + return isset($this->headers[$key])?$this->headers[$key]:NULL; + } + + /** + * Remove header + * @return NULL + * @param $key string + **/ + function clear($key) { + $key=$this->fixheader($key); + unset($this->headers[$key]); + } + + /** + * Return client-server conversation history + * @return string + **/ + function log() { + return str_replace("\n",PHP_EOL,$this->log); + } + + /** + * Send SMTP command and record server response + * @return string + * @param $cmd string + * @param $log bool + **/ + protected function dialog($cmd=NULL,$log=TRUE) { + $socket=&$this->socket; + if (!is_null($cmd)) + fputs($socket,$cmd."\r\n"); + $reply=''; + while (!feof($socket) && ($info=stream_get_meta_data($socket)) && + !$info['timed_out'] && $str=fgets($socket,4096)) { + $reply.=$str; + if (preg_match('/(?:^|\n)\d{3} .+?\r\n/s',$reply)) + break; + } + if ($log) { + $this->log.=$cmd."\n"; + $this->log.=str_replace("\r",'',$reply); + } + return $reply; + } + + /** + * Add e-mail attachment + * @return NULL + * @param $file + **/ + function attach($file) { + if (!is_file($file)) + user_error(sprintf(self::E_Attach,$file)); + $this->attachments[]=$file; + } + + /** + * Transmit message + * @return bool + * @param $message string + * @param $log bool + **/ + function send($message,$log=TRUE) { + if ($this->scheme=='ssl' && !extension_loaded('openssl')) + return FALSE; + // Message should not be blank + if (!$message) + user_error(self::E_Blank); + $fw=Base::instance(); + // Retrieve headers + $headers=$this->headers; + // Connect to the server + $socket=&$this->socket; + $socket=@fsockopen($this->host,$this->port); + if (!$socket) + return FALSE; + stream_set_blocking($socket,TRUE); + // Get server's initial response + $this->dialog(NULL,FALSE); + // Announce presence + $reply=$this->dialog('EHLO '.$fw->get('HOST'),$log); + if (strtolower($this->scheme)=='tls') { + $this->dialog('STARTTLS',$log); + stream_socket_enable_crypto( + $socket,TRUE,STREAM_CRYPTO_METHOD_TLS_CLIENT); + $reply=$this->dialog('EHLO '.$fw->get('HOST'),$log); + if (preg_match('/8BITMIME/',$reply)) + $headers['Content-Transfer-Encoding']='8bit'; + else { + $headers['Content-Transfer-Encoding']='quoted-printable'; + $message=quoted_printable_encode($message); + } + } + if ($this->user && $this->pw && preg_match('/AUTH/',$reply)) { + // Authenticate + $this->dialog('AUTH LOGIN',$log); + $this->dialog(base64_encode($this->user),$log); + $this->dialog(base64_encode($this->pw),$log); + } + // Required headers + $reqd=array('From','To','Subject'); + foreach ($reqd as $id) + if (empty($headers[$id])) + user_error(sprintf(self::E_Header,$id)); + $eol="\r\n"; + $str=''; + // Stringify headers + foreach ($headers as $key=>$val) + if (!in_array($key,$reqd)) + $str.=$key.': '.$val.$eol; + // Start message dialog + $this->dialog('MAIL FROM: '.strstr($headers['From'],'<'),$log); + foreach ($fw->split($headers['To']. + (isset($headers['Cc'])?(';'.$headers['Cc']):''). + (isset($headers['Bcc'])?(';'.$headers['Bcc']):'')) as $dst) + $this->dialog('RCPT TO: '.strstr($dst,'<'),$log); + $this->dialog('DATA',$log); + if ($this->attachments) { + // Replace Content-Type + $hash=uniqid(NULL,TRUE); + $type=$headers['Content-Type']; + $headers['Content-Type']='multipart/mixed; '. + 'boundary="'.$hash.'"'; + // Send mail headers + $out=''; + foreach ($headers as $key=>$val) + if ($key!='Bcc') + $out.=$key.': '.$val.$eol; + $out.=$eol; + $out.='This is a multi-part message in MIME format'.$eol; + $out.=$eol; + $out.='--'.$hash.$eol; + $out.='Content-Type: '.$type.$eol; + $out.=$eol; + $out.=$message.$eol; + foreach ($this->attachments as $attachment) { + $out.='--'.$hash.$eol; + $out.='Content-Type: application/octet-stream'.$eol; + $out.='Content-Transfer-Encoding: base64'.$eol; + $out.='Content-Disposition: attachment; '. + 'filename="'.basename($attachment).'"'.$eol; + $out.=$eol; + $out.=chunk_split( + base64_encode(file_get_contents($attachment))).$eol; + } + $out.=$eol; + $out.='--'.$hash.'--'.$eol; + $out.='.'; + $this->dialog($out,FALSE); + } + else { + // Send mail headers + $out=''; + foreach ($headers as $key=>$val) + if ($key!='Bcc') + $out.=$key.': '.$val.$eol; + $out.=$eol; + $out.=$message.$eol; + $out.='.'; + // Send message + $this->dialog($out); + } + $this->dialog('QUIT',$log); + if ($socket) + fclose($socket); + return TRUE; + } + + /** + * Instantiate class + * @param $host string + * @param $port int + * @param $scheme string + * @param $user string + * @param $pw string + **/ + function __construct($host,$port,$scheme,$user,$pw) { + $this->headers=array( + 'MIME-Version'=>'1.0', + 'Content-Type'=>'text/plain; '. + 'charset='.Base::instance()->get('ENCODING') + ); + $this->host=$host; + if (strtolower($this->scheme=strtolower($scheme))=='ssl') + $this->host='ssl://'.$host; + $this->port=$port; + $this->user=$user; + $this->pw=$pw; + } + +} diff --git a/management-interface/lib/template.php b/management-interface/lib/template.php new file mode 100644 index 0000000..59ccb97 --- /dev/null +++ b/management-interface/lib/template.php @@ -0,0 +1,335 @@ +$val) + $out.='$'.$key.'='. + (preg_match('/\{\{(.+?)\}\}/',$val)? + $this->token($val): + Base::instance()->stringify($val)).'; '; + return ''; + } + + /** + * Template -include- tag handler + * @return string + * @param $node array + **/ + protected function _include(array $node) { + $attrib=$node['@attrib']; + return + 'token($attrib['if']).') '):''). + ('echo $this->render('. + (preg_match('/\{\{(.+?)\}\}/',$attrib['href'])? + $this->token($attrib['href']): + Base::instance()->stringify($attrib['href'])).','. + '$this->mime,get_defined_vars()); ?>'); + } + + /** + * Template -exclude- tag handler + * @return string + **/ + protected function _exclude() { + return ''; + } + + /** + * Template -ignore- tag handler + * @return string + * @param $node array + **/ + protected function _ignore(array $node) { + return $node[0]; + } + + /** + * Template -loop- tag handler + * @return string + * @param $node array + **/ + protected function _loop(array $node) { + $attrib=$node['@attrib']; + unset($node['@attrib']); + return + 'token($attrib['from']).';'. + $this->token($attrib['to']).';'. + $this->token($attrib['step']).'): ?>'. + $this->build($node). + ''; + } + + /** + * Template -repeat- tag handler + * @return string + * @param $node array + **/ + protected function _repeat(array $node) { + $attrib=$node['@attrib']; + unset($node['@attrib']); + return + 'token($attrib['counter'])).'=0; '):''). + 'foreach (('. + $this->token($attrib['group']).'?:array()) as '. + (isset($attrib['key'])? + ($this->token($attrib['key']).'=>'):''). + $this->token($attrib['value']).'):'. + (isset($ctr)?(' '.$ctr.'++;'):'').' ?>'. + $this->build($node). + ''; + } + + /** + * Template -check- tag handler + * @return string + * @param $node array + **/ + protected function _check(array $node) { + $attrib=$node['@attrib']; + unset($node['@attrib']); + // Grab and blocks + foreach ($node as $pos=>$block) + if (isset($block['true'])) + $true=array($pos,$block); + elseif (isset($block['false'])) + $false=array($pos,$block); + if (isset($true,$false) && $true[0]>$false[0]) + // Reverse and blocks + list($node[$true[0]],$node[$false[0]])=array($false[1],$true[1]); + return + 'token($attrib['if']).'): ?>'. + $this->build($node). + ''; + } + + /** + * Template -true- tag handler + * @return string + * @param $node array + **/ + protected function _true(array $node) { + return $this->build($node); + } + + /** + * Template -false- tag handler + * @return string + * @param $node array + **/ + protected function _false(array $node) { + return ''.$this->build($node); + } + + /** + * Template -switch- tag handler + * @return string + * @param $node array + **/ + protected function _switch(array $node) { + $attrib=$node['@attrib']; + unset($node['@attrib']); + foreach ($node as $pos=>$block) + if (is_string($block) && !preg_replace('/\s+/','',$block)) + unset($node[$pos]); + return + 'token($attrib['expr']).'): ?>'. + $this->build($node). + ''; + } + + /** + * Template -case- tag handler + * @return string + * @param $node array + **/ + protected function _case(array $node) { + $attrib=$node['@attrib']; + unset($node['@attrib']); + return + 'token($attrib['value']): + Base::instance()->stringify($attrib['value'])).': ?>'. + $this->build($node). + 'token($attrib['break']).') ':''). + 'break; ?>'; + } + + /** + * Template -default- tag handler + * @return string + * @param $node array + **/ + protected function _default(array $node) { + return + ''. + $this->build($node). + ''; + } + + /** + * Assemble markup + * @return string + * @param $node array|string + **/ + protected function build($node) { + if (is_string($node)) + return parent::build($node); + $out=''; + foreach ($node as $key=>$val) + $out.=is_int($key)?$this->build($val):$this->{'_'.$key}($val); + return $out; + } + + /** + * Extend template with custom tag + * @return NULL + * @param $tag string + * @param $func callback + **/ + function extend($tag,$func) { + $this->tags.='|'.$tag; + $this->custom['_'.$tag]=$func; + } + + /** + * Call custom tag handler + * @return string|FALSE + * @param $func callback + * @param $args array + **/ + function __call($func,array $args) { + if ($func[0]=='_') + return call_user_func_array($this->custom[$func],$args); + if (method_exists($this,$func)) + return call_user_func_array(array($this,$func),$args); + user_error(sprintf(self::E_Method,$func)); + } + + /** + * Parse string for template directives and tokens + * @return string|array + * @param $text string + **/ + function parse($text) { + // Build tree structure + for ($ptr=0,$len=strlen($text),$tree=array(),$node=&$tree, + $stack=array(),$depth=0,$tmp='';$ptr<$len;) + if (preg_match('/^<(\/?)(?:F3:)?'. + '('.$this->tags.')\b((?:\h+[\w-]+'. + '(?:\h*=\h*(?:"(?:.+?)"|\'(?:.+?)\'))?|'. + '\h*\{\{.+?\}\})*)\h*(\/?)>/is', + substr($text,$ptr),$match)) { + if (strlen($tmp)) + $node[]=$tmp; + // Element node + if ($match[1]) { + // Find matching start tag + $save=$depth; + $found=FALSE; + while ($depth>0) { + $depth--; + foreach ($stack[$depth] as $item) + if (is_array($item) && isset($item[$match[2]])) { + // Start tag found + $found=TRUE; + break 2; + } + } + if (!$found) + // Unbalanced tag + $depth=$save; + $node=&$stack[$depth]; + } + else { + // Start tag + $stack[$depth]=&$node; + $node=&$node[][$match[2]]; + if ($match[3]) { + // Process attributes + preg_match_all( + '/(?:\b([\w-]+)\h*'. + '(?:=\h*(?:"(.+?)"|\'(.+?)\'))?|'. + '(\{\{.+?\}\}))/s', + $match[3],$attr,PREG_SET_ORDER); + foreach ($attr as $kv) + if (isset($kv[4])) + $node['@attrib'][]=$kv[4]; + else + $node['@attrib'][$kv[1]]= + (empty($kv[2])? + (empty($kv[3])?NULL:$kv[3]):$kv[2]); + } + if ($match[4]) + // Empty tag + $node=&$stack[$depth]; + else + $depth++; + } + $tmp=''; + $ptr+=strlen($match[0]); + } + else { + // Text node + $tmp.=substr($text,$ptr,1); + $ptr++; + } + if (strlen($tmp)) + // Append trailing text + $node[]=$tmp; + // Break references + unset($node); + unset($stack); + return $tree; + } + + /** + * Class constructor + * return object + **/ + function __construct() { + $ref=new ReflectionClass(__CLASS__); + $this->tags=''; + foreach ($ref->getmethods() as $method) + if (preg_match('/^_(?=[[:alpha:]])/',$method->name)) + $this->tags.=(strlen($this->tags)?'|':''). + substr($method->name,1); + } + +} diff --git a/management-interface/lib/test.php b/management-interface/lib/test.php new file mode 100644 index 0000000..3a36abd --- /dev/null +++ b/management-interface/lib/test.php @@ -0,0 +1,77 @@ +data; + } + + /** + * Evaluate condition and save test result + * @return object + * @param $cond bool + * @param $text string + **/ + function expect($cond,$text=NULL) { + $out=(bool)$cond; + if ($this->level==$out || $this->level==self::FLAG_Both) { + $data=array('status'=>$out,'text'=>$text,'source'=>NULL); + foreach (debug_backtrace() as $frame) + if (isset($frame['file'])) { + $data['source']=Base::instance()-> + fixslashes($frame['file']).':'.$frame['line']; + break; + } + $this->data[]=$data; + } + return $this; + } + + /** + * Append message to test results + * @return NULL + * @param $text string + **/ + function message($text) { + $this->expect(TRUE,$text); + } + + /** + * Class constructor + * @return NULL + * @param $level int + **/ + function __construct($level=self::FLAG_Both) { + $this->level=$level; + } + +} diff --git a/management-interface/lib/utf.php b/management-interface/lib/utf.php new file mode 100644 index 0000000..63dcb3a --- /dev/null +++ b/management-interface/lib/utf.php @@ -0,0 +1,192 @@ +strpos($stack,$needle,$ofs,TRUE); + } + + /** + * Find position of first occurrence of a string + * @return int|FALSE + * @param $stack string + * @param $needle string + * @param $ofs int + * @param $case bool + **/ + function strpos($stack,$needle,$ofs=0,$case=FALSE) { + return preg_match('/^(.{'.$ofs.'}.*?)'. + preg_quote($needle,'/').'/us'.($case?'i':''),$stack,$match)? + $this->strlen($match[1]):FALSE; + } + + /** + * Returns part of haystack string from the first occurrence of + * needle to the end of haystack (case-insensitive) + * @return string|FALSE + * @param $stack string + * @param $needle string + * @param $before bool + **/ + function stristr($stack,$needle,$before=FALSE) { + return $this->strstr($stack,$needle,$before,TRUE); + } + + /** + * Returns part of haystack string from the first occurrence of + * needle to the end of haystack + * @return string|FALSE + * @param $stack string + * @param $needle string + * @param $before bool + * @param $case bool + **/ + function strstr($stack,$needle,$before=FALSE,$case=FALSE) { + if (!$needle) + return FALSE; + preg_match('/^(.*?)'.preg_quote($needle,'/').'/us'.($case?'i':''), + $stack,$match); + return isset($match[1])? + ($before? + $match[1]: + $this->substr($stack,$this->strlen($match[1]))): + FALSE; + } + + /** + * Return part of a string + * @return string|FALSE + * @param $str string + * @param $start int + * @param $len int + **/ + function substr($str,$start,$len=0) { + if ($start<0) + $start=$this->strlen($str)+$start; + if (!$len) + $len=$this->strlen($str)-$start; + return preg_match('/^.{'.$start.'}(.{0,'.$len.'})/us',$str,$match)? + $match[1]:FALSE; + } + + /** + * Count the number of substring occurrences + * @return int + * @param $stack string + * @param $needle string + **/ + function substr_count($stack,$needle) { + preg_match_all('/'.preg_quote($needle,'/').'/us',$stack, + $matches,PREG_SET_ORDER); + return count($matches); + } + + /** + * Strip whitespaces from the beginning of a string + * @return string + * @param $str string + **/ + function ltrim($str) { + return preg_replace('/^[\pZ\pC]+/u','',$str); + } + + /** + * Strip whitespaces from the end of a string + * @return string + * @param $str string + **/ + function rtrim($str) { + return preg_replace('/[\pZ\pC]+$/u','',$str); + } + + /** + * Strip whitespaces from the beginning and end of a string + * @return string + * @param $str string + **/ + function trim($str) { + return preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u','',$str); + } + + /** + * Return UTF-8 byte order mark + * @return string + **/ + function bom() { + return chr(0xef).chr(0xbb).chr(0xbf); + } + + /** + * Convert code points to Unicode symbols + * @return string + * @param $str string + **/ + function translate($str) { + return html_entity_decode( + preg_replace('/\\\\u([[:xdigit:]]+)/i','&#x\1;',$str)); + } + + /** + * Translate emoji tokens to Unicode font-supported symbols + * @return string + * @param $str string + **/ + function emojify($str) { + $map=array( + ':('=>'\u2639', // frown + ':)'=>'\u263a', // smile + '<3'=>'\u2665', // heart + ':D'=>'\u1f603', // grin + 'XD'=>'\u1f606', // laugh + ';)'=>'\u1f609', // wink + ':P'=>'\u1f60b', // tongue + ':,'=>'\u1f60f', // think + ':/'=>'\u1f623', // skeptic + '8O'=>'\u1f632', // oops + )+Base::instance()->get('EMOJI'); + return $this->translate(str_replace(array_keys($map), + array_values($map),$str)); + } + +} diff --git a/management-interface/lib/web.php b/management-interface/lib/web.php new file mode 100644 index 0000000..6af5a83 --- /dev/null +++ b/management-interface/lib/web.php @@ -0,0 +1,838 @@ +'audio/basic', + 'avi'=>'video/avi', + 'bmp'=>'image/bmp', + 'bz2'=>'application/x-bzip2', + 'css'=>'text/css', + 'dtd'=>'application/xml-dtd', + 'doc'=>'application/msword', + 'gif'=>'image/gif', + 'gz'=>'application/x-gzip', + 'hqx'=>'application/mac-binhex40', + 'html?'=>'text/html', + 'jar'=>'application/java-archive', + 'jpe?g'=>'image/jpeg', + 'js'=>'application/x-javascript', + 'midi'=>'audio/x-midi', + 'mp3'=>'audio/mpeg', + 'mpe?g'=>'video/mpeg', + 'ogg'=>'audio/vorbis', + 'pdf'=>'application/pdf', + 'png'=>'image/png', + 'ppt'=>'application/vnd.ms-powerpoint', + 'ps'=>'application/postscript', + 'qt'=>'video/quicktime', + 'ram?'=>'audio/x-pn-realaudio', + 'rdf'=>'application/rdf', + 'rtf'=>'application/rtf', + 'sgml?'=>'text/sgml', + 'sit'=>'application/x-stuffit', + 'svg'=>'image/svg+xml', + 'swf'=>'application/x-shockwave-flash', + 'tgz'=>'application/x-tar', + 'tiff'=>'image/tiff', + 'txt'=>'text/plain', + 'wav'=>'audio/wav', + 'xls'=>'application/vnd.ms-excel', + 'xml'=>'application/xml', + 'zip'=>'application/x-zip-compressed' + ); + foreach ($map as $key=>$val) + if (preg_match('/'.$key.'/',strtolower($ext[0]))) + return $val; + } + return 'application/octet-stream'; + } + + /** + * Return the MIME types stated in the HTTP Accept header as an array; + * If a list of MIME types is specified, return the best match; or + * FALSE if none found + * @return array|string|FALSE + * @param $list string|array + **/ + function acceptable($list=NULL) { + $accept=array(); + foreach (explode(',',str_replace(' ','',$_SERVER['HTTP_ACCEPT'])) + as $mime) + if (preg_match('/(.+?)(?:;q=([\d\.]+)|$)/',$mime,$parts)) + $accept[$parts[1]]=isset($parts[2])?$parts[2]:1; + if (!$accept) + $accept['*/*']=1; + else { + krsort($accept); + arsort($accept); + } + if ($list) { + if (is_string($list)) + $list=explode(',',$list); + foreach ($accept as $mime=>$q) + if ($q && $out=preg_grep('/'. + str_replace('\*','.*',preg_quote($mime,'/')).'/',$list)) + return current($out); + return FALSE; + } + return $accept; + } + + /** + * Transmit file to HTTP client; Return file size if successful, + * FALSE otherwise + * @return int|FALSE + * @param $file string + * @param $mime string + * @param $kbps int + * @param $force bool + **/ + function send($file,$mime=NULL,$kbps=0,$force=TRUE) { + if (!is_file($file)) + return FALSE; + if (PHP_SAPI!='cli') { + header('Content-Type: '.($mime?:$this->mime($file))); + if ($force) + header('Content-Disposition: attachment; '. + 'filename='.basename($file)); + header('Accept-Ranges: bytes'); + header('Content-Length: '.$size=filesize($file)); + header('X-Powered-By: '.Base::instance()->get('PACKAGE')); + } + $ctr=0; + $handle=fopen($file,'rb'); + $start=microtime(TRUE); + while (!feof($handle) && + ($info=stream_get_meta_data($handle)) && + !$info['timed_out'] && !connection_aborted()) { + if ($kbps) { + // Throttle output + $ctr++; + if ($ctr/$kbps>$elapsed=microtime(TRUE)-$start) + usleep(1e6*($ctr/$kbps-$elapsed)); + } + // Send 1KiB and reset timer + echo fread($handle,1024); + } + fclose($handle); + return $size; + } + + /** + * Receive file(s) from HTTP client + * @return array|bool + * @param $func callback + * @param $overwrite bool + * @param $slug callback|bool + **/ + function receive($func=NULL,$overwrite=FALSE,$slug=TRUE) { + $fw=Base::instance(); + $dir=$fw->get('UPLOADS'); + if (!is_dir($dir)) + mkdir($dir,Base::MODE,TRUE); + if ($fw->get('VERB')=='PUT') { + $tmp=$fw->get('TEMP'). + $fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(uniqid()); + if (!$fw->get('RAW')) + $fw->write($tmp,$fw->get('BODY')); + else { + $src=@fopen('php://input','r'); + $dst=@fopen($tmp,'w'); + if (!$src || !$dst) + return FALSE; + while (!feof($src) && + ($info=stream_get_meta_data($src)) && + !$info['timed_out'] && $str=fgets($src,4096)) + fputs($dst,$str,strlen($str)); + fclose($dst); + fclose($src); + } + $base=basename($fw->get('URI')); + $file=array( + 'name'=>$dir. + ($slug && preg_match('/(.+?)(\.\w+)?$/',$base,$parts)? + (is_callable($slug)? + $slug($base): + ($this->slug($parts[1]). + (isset($parts[2])?$parts[2]:''))): + $base), + 'tmp_name'=>$tmp, + 'type'=>$this->mime($base), + 'size'=>filesize($tmp) + ); + return (!file_exists($file['name']) || $overwrite) && + (!$func || $fw->call($func,array($file))!==FALSE) && + rename($tmp,$file['name']); + } + $out=array(); + foreach ($_FILES as $item) { + if (is_array($item['name'])) { + // Transpose array + $tmp=array(); + foreach ($item as $keyx=>$cols) + foreach ($cols as $keyy=>$valy) + $tmp[$keyy][$keyx]=$valy; + $item=$tmp; + } + else + $item=array($item); + foreach ($item as $file) { + if (empty($file['name'])) + continue; + $base=basename($file['name']); + $file['name']=$dir. + ($slug && preg_match('/(.+?)(\.\w+)?$/',$base,$parts)? + (is_callable($slug)? + $slug($base): + ($this->slug($parts[1]). + (isset($parts[2])?$parts[2]:''))): + $base); + $out[$file['name']]=!$file['error'] && + is_uploaded_file($file['tmp_name']) && + (!file_exists($file['name']) || $overwrite) && + (!$func || $fw->call($func,array($file))!==FALSE) && + move_uploaded_file($file['tmp_name'],$file['name']); + } + } + return $out; + } + + /** + * Return upload progress in bytes, FALSE on failure + * @return int|FALSE + * @param $id string + **/ + function progress($id) { + // ID returned by session.upload_progress.name + return ini_get('session.upload_progress.enabled') && + isset($_SESSION[$id]['bytes_processed'])? + $_SESSION[$id]['bytes_processed']:FALSE; + } + + /** + * HTTP request via cURL + * @return array + * @param $url string + * @param $options array + **/ + protected function _curl($url,$options) { + $curl=curl_init($url); + curl_setopt($curl,CURLOPT_FOLLOWLOCATION, + $options['follow_location']); + curl_setopt($curl,CURLOPT_MAXREDIRS, + $options['max_redirects']); + curl_setopt($curl,CURLOPT_CUSTOMREQUEST,$options['method']); + if (isset($options['header'])) + curl_setopt($curl,CURLOPT_HTTPHEADER,$options['header']); + if (isset($options['user_agent'])) + curl_setopt($curl,CURLOPT_USERAGENT,$options['user_agent']); + if (isset($options['content'])) + curl_setopt($curl,CURLOPT_POSTFIELDS,$options['content']); + curl_setopt($curl,CURLOPT_ENCODING,'gzip,deflate'); + $timeout=isset($options['timeout'])? + $options['timeout']: + ini_get('default_socket_timeout'); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,$timeout); + curl_setopt($curl,CURLOPT_TIMEOUT,$timeout); + $headers=array(); + curl_setopt($curl,CURLOPT_HEADERFUNCTION, + // Callback for response headers + function($curl,$line) use(&$headers) { + if ($trim=trim($line)) + $headers[]=$trim; + return strlen($line); + } + ); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); + ob_start(); + curl_exec($curl); + curl_close($curl); + $body=ob_get_clean(); + return array( + 'body'=>$body, + 'headers'=>$headers, + 'engine'=>'cURL', + 'cached'=>FALSE + ); + } + + /** + * HTTP request via PHP stream wrapper + * @return array + * @param $url string + * @param $options array + **/ + protected function _stream($url,$options) { + $eol="\r\n"; + $options['header']=implode($eol,$options['header']); + $body=@file_get_contents($url,FALSE, + stream_context_create(array('http'=>$options))); + $headers=isset($http_response_header)? + $http_response_header:array(); + $match=NULL; + foreach ($headers as $header) + if (preg_match('/Content-Encoding: (.+)/',$header,$match)) + break; + if ($match) + switch ($match[1]) { + case 'gzip': + $body=gzdecode($body); + break; + case 'deflate': + $body=gzuncompress($body); + break; + } + return array( + 'body'=>$body, + 'headers'=>$headers, + 'engine'=>'stream', + 'cached'=>FALSE + ); + } + + /** + * HTTP request via low-level TCP/IP socket + * @return array + * @param $url string + * @param $options array + **/ + protected function _socket($url,$options) { + $eol="\r\n"; + $headers=array(); + $body=''; + $parts=parse_url($url); + $empty=empty($parts['port']); + if ($parts['scheme']=='https') { + $parts['host']='ssl://'.$parts['host']; + if ($empty) + $parts['port']=443; + } + elseif ($empty) + $parts['port']=80; + if (empty($parts['path'])) + $parts['path']='/'; + if (empty($parts['query'])) + $parts['query']=''; + $socket=@fsockopen($parts['host'],$parts['port']); + if (!$socket) + return FALSE; + stream_set_blocking($socket,TRUE); + fputs($socket,$options['method'].' '.$parts['path']. + ($parts['query']?('?'.$parts['query']):'').' HTTP/1.0'.$eol + ); + fputs($socket,implode($eol,$options['header']).$eol.$eol); + if (isset($options['content'])) + fputs($socket,$options['content'].$eol); + // Get response + $content=''; + while (!feof($socket) && + ($info=stream_get_meta_data($socket)) && + !$info['timed_out'] && $str=fgets($socket,4096)) + $content.=$str; + fclose($socket); + $html=explode($eol.$eol,$content,2); + $body=isset($html[1])?$html[1]:''; + $headers=array_merge($headers,$current=explode($eol,$html[0])); + $match=NULL; + foreach ($current as $header) + if (preg_match('/Content-Encoding: (.+)/',$header,$match)) + break; + if ($match) + switch ($match[1]) { + case 'gzip': + $body=gzdecode($body); + break; + case 'deflate': + $body=gzuncompress($body); + break; + } + if ($options['follow_location'] && + preg_match('/Location: (.+?)'.preg_quote($eol).'/', + $html[0],$loc)) { + $options['max_redirects']--; + return $this->request($loc[1],$options); + } + return array( + 'body'=>$body, + 'headers'=>$headers, + 'engine'=>'socket', + 'cached'=>FALSE + ); + } + + /** + * Specify the HTTP request engine to use; If not available, + * fall back to an applicable substitute + * @return string + * @param $arg string + **/ + function engine($arg='curl') { + $arg=strtolower($arg); + $flags=array( + 'curl'=>extension_loaded('curl'), + 'stream'=>ini_get('allow_url_fopen'), + 'socket'=>function_exists('fsockopen') + ); + if ($flags[$arg]) + return $this->wrapper=$arg; + foreach ($flags as $key=>$val) + if ($val) + return $this->wrapper=$key; + user_error(E_Request); + } + + /** + * Replace old headers with new elements + * @return NULL + * @param $old array + * @param $new string|array + **/ + function subst(array &$old,$new) { + if (is_string($new)) + $new=array($new); + foreach ($new as $hdr) { + $old=preg_grep('/'.preg_quote(strstr($hdr,':',TRUE),'/').':.+/', + $old,PREG_GREP_INVERT); + array_push($old,$hdr); + } + } + + /** + * Submit HTTP request; Use HTTP context options (described in + * http://www.php.net/manual/en/context.http.php) if specified; + * Cache the page as instructed by remote server + * @return array|FALSE + * @param $url string + * @param $options array + **/ + function request($url,array $options=NULL) { + $fw=Base::instance(); + $parts=parse_url($url); + if (empty($parts['scheme'])) { + // Local URL + $url=$fw->get('SCHEME').'://'. + $fw->get('HOST'). + ($url[0]!='/'?($fw->get('BASE').'/'):'').$url; + $parts=parse_url($url); + } + elseif (!preg_match('/https?/',$parts['scheme'])) + return FALSE; + if (!is_array($options)) + $options=array(); + if (empty($options['header'])) + $options['header']=array(); + elseif (is_string($options['header'])) + $options['header']=array($options['header']); + if (!$this->wrapper) + $this->engine(); + if ($this->wrapper!='stream') { + // PHP streams can't cope with redirects when Host header is set + foreach ($options['header'] as &$header) + if (preg_match('/^Host:/',$header)) { + $header='Host: '.$parts['host']; + unset($header); + break; + } + $this->subst($options['header'],'Host: '.$parts['host']); + } + $this->subst($options['header'], + array( + 'Accept-Encoding: gzip,deflate', + 'User-Agent: Mozilla/5.0 (compatible; '.php_uname('s').')', + 'Connection: close' + ) + ); + if (isset($options['content'])) { + if ($options['method']=='POST') + $this->subst($options['header'], + 'Content-Type: application/x-www-form-urlencoded'); + $this->subst($options['header'], + 'Content-Length: '.strlen($options['content'])); + } + if (isset($parts['user'],$parts['pass'])) + $this->subst($options['header'], + 'Authorization: Basic '. + base64_encode($parts['user'].':'.$parts['pass']) + ); + $options+=array( + 'method'=>'GET', + 'header'=>$options['header'], + 'follow_location'=>TRUE, + 'max_redirects'=>20, + 'ignore_errors'=>FALSE + ); + $eol="\r\n"; + if ($fw->get('CACHE') && + preg_match('/GET|HEAD/',$options['method'])) { + $cache=Cache::instance(); + if ($cache->exists( + $hash=$fw->hash($options['method'].' '.$url).'.url',$data)) { + if (preg_match('/Last-Modified: (.+?)'.preg_quote($eol).'/', + implode($eol,$data['headers']),$mod)) + $this->subst($options['header'], + 'If-Modified-Since: '.$mod[1]); + } + } + $result=$this->{'_'.$this->wrapper}($url,$options); + if ($result && isset($cache)) { + if (preg_match('/HTTP\/1\.\d 304/', + implode($eol,$result['headers']))) { + $result=$cache->get($hash); + $result['cached']=TRUE; + } + elseif (preg_match('/Cache-Control: max-age=(.+?)'. + preg_quote($eol).'/',implode($eol,$result['headers']),$exp)) + $cache->set($hash,$result,$exp[1]); + } + return $result; + } + + /** + * Strip Javascript/CSS files of extraneous whitespaces and comments; + * Return combined output as a minified string + * @return string + * @param $files string|array + * @param $mime string + * @param $header bool + * @param $path string + **/ + function minify($files,$mime=NULL,$header=TRUE,$path='') { + $fw=Base::instance(); + if (is_string($files)) + $files=$fw->split($files); + if (!$mime) + $mime=$this->mime($files[0]); + preg_match('/\w+$/',$files[0],$ext); + $cache=Cache::instance(); + $dst=''; + foreach ($fw->split($path?:$fw->get('UI').';./') as $dir) + foreach ($files as $file) + if (is_file($save=$fw->fixslashes($dir.$file))) { + if ($fw->get('CACHE') && + ($cached=$cache->exists( + $hash=$fw->hash($save).'.'.$ext[0],$data)) && + $cached[0]>filemtime($save)) + $dst.=$data; + else { + $data=''; + $src=$fw->read($save); + for ($ptr=0,$len=strlen($src);$ptr<$len;) { + if (preg_match('/^@import\h+url'. + '\(\h*([\'"])(.+?)\1\h*\)[^;]*;/', + substr($src,$ptr),$parts)) { + $path=dirname($file); + $data.=$this->minify( + ($path?($path.'/'):'').$parts[2], + $mime,$header + ); + $ptr+=strlen($parts[0]); + continue; + } + if ($src[$ptr]=='/') { + if ($src[$ptr+1]=='*') { + // Multiline comment + $str=strstr( + substr($src,$ptr+2),'*/',TRUE); + $ptr+=strlen($str)+4; + } + elseif ($src[$ptr+1]=='/') { + // Single-line comment + $str=strstr( + substr($src,$ptr+2),"\n",TRUE); + $ptr+=strlen($str)+2; + } + else { + // Presume it's a regex pattern + $regex=TRUE; + // Backtrack and validate + for ($ofs=$ptr;$ofs;$ofs--) { + // Pattern should be preceded by + // open parenthesis, colon, + // object property or operator + if (preg_match( + '/(return|[(:=!+\-*&|])$/', + substr($src,0,$ofs))) { + $data.='/'; + $ptr++; + while ($ptr<$len) { + $data.=$src[$ptr]; + $ptr++; + if ($src[$ptr-1]=='\\') { + $data.=$src[$ptr]; + $ptr++; + } + elseif ($src[$ptr-1]=='/') + break; + } + break; + } + elseif (!ctype_space($src[$ofs-1])) { + // Not a regex pattern + $regex=FALSE; + break; + } + } + if (!$regex) { + // Division operator + $data.=$src[$ptr]; + $ptr++; + } + } + continue; + } + if (in_array($src[$ptr],array('\'','"'))) { + $match=$src[$ptr]; + $data.=$match; + $ptr++; + // String literal + while ($ptr<$len) { + $data.=$src[$ptr]; + $ptr++; + if ($src[$ptr-1]=='\\') { + $data.=$src[$ptr]; + $ptr++; + } + elseif ($src[$ptr-1]==$match) + break; + } + continue; + } + if (ctype_space($src[$ptr])) { + if ($ptr+1get('CACHE')) + $cache->set($hash,$data); + $dst.=$data; + } + } + if (PHP_SAPI!='cli' && $header) + header('Content-Type: '.$mime.'; charset='.$fw->get('ENCODING')); + return $dst; + } + + /** + * Retrieve RSS feed and return as an array + * @return array|FALSE + * @param $url string + * @param $max int + * @param $tags string + **/ + function rss($url,$max=10,$tags=NULL) { + if (!$data=$this->request($url)) + return FALSE; + // Suppress errors caused by invalid XML structures + libxml_use_internal_errors(TRUE); + $xml=simplexml_load_string($data['body'], + NULL,LIBXML_NOBLANKS|LIBXML_NOERROR); + if (!is_object($xml)) + return FALSE; + $out=array(); + if (isset($xml->channel)) { + $out['source']=(string)$xml->channel->title; + $max=min($max,count($xml->channel->item)); + for ($i=0;$i<$max;$i++) { + $item=$xml->channel->item[$i]; + $list=array(''=>NULL)+$item->getnamespaces(TRUE); + $fields=array(); + foreach ($list as $ns=>$uri) + foreach ($item->children($uri) as $key=>$val) + $fields[$ns.($ns?':':'').$key]=(string)$val; + $out['feed'][]=$fields; + } + } + else + return FALSE; + Base::instance()->scrub($out,$tags); + return $out; + } + + /** + * Retrieve information from whois server + * @return string|FALSE + * @param $addr string + * @param $server string + **/ + function whois($addr,$server='whois.internic.net') { + $socket=@fsockopen($server,43,$errno,$errstr); + if (!$socket) + // Can't establish connection + return FALSE; + // Set connection timeout parameters + stream_set_blocking($socket,TRUE); + stream_set_timeout($socket,ini_get('default_socket_timeout')); + // Send request + fputs($socket,$addr."\r\n"); + $info=stream_get_meta_data($socket); + // Get response + $response=''; + while (!feof($socket) && !$info['timed_out']) { + $response.=fgets($socket,4096); // MDFK97 + $info=stream_get_meta_data($socket); + } + fclose($socket); + return $info['timed_out']?FALSE:trim($response); + } + + /** + * Return a URL/filesystem-friendly version of string + * @return string + * @param $text string + **/ + function slug($text) { + return trim(strtolower(preg_replace('/([^\pL\pN])+/u','-', + trim(strtr(str_replace('\'','',$text), + array( + 'Ǎ'=>'A','А'=>'A','Ā'=>'A','Ă'=>'A','Ą'=>'A','Å'=>'A', + 'Ǻ'=>'A','Ä'=>'Ae','Á'=>'A','À'=>'A','Ã'=>'A','Â'=>'A', + 'Æ'=>'AE','Ǽ'=>'AE','Б'=>'B','Ç'=>'C','Ć'=>'C','Ĉ'=>'C', + 'Č'=>'C','Ċ'=>'C','Ц'=>'C','Ч'=>'Ch','Ð'=>'Dj','Đ'=>'Dj', + 'Ď'=>'Dj','Д'=>'Dj','É'=>'E','Ę'=>'E','Ё'=>'E','Ė'=>'E', + 'Ê'=>'E','Ě'=>'E','Ē'=>'E','È'=>'E','Е'=>'E','Э'=>'E', + 'Ë'=>'E','Ĕ'=>'E','Ф'=>'F','Г'=>'G','Ģ'=>'G','Ġ'=>'G', + 'Ĝ'=>'G','Ğ'=>'G','Х'=>'H','Ĥ'=>'H','Ħ'=>'H','Ï'=>'I', + 'Ĭ'=>'I','İ'=>'I','Į'=>'I','Ī'=>'I','Í'=>'I','Ì'=>'I', + 'И'=>'I','Ǐ'=>'I','Ĩ'=>'I','Î'=>'I','IJ'=>'IJ','Ĵ'=>'J', + 'Й'=>'J','Я'=>'Ja','Ю'=>'Ju','К'=>'K','Ķ'=>'K','Ĺ'=>'L', + 'Л'=>'L','Ł'=>'L','Ŀ'=>'L','Ļ'=>'L','Ľ'=>'L','М'=>'M', + 'Н'=>'N','Ń'=>'N','Ñ'=>'N','Ņ'=>'N','Ň'=>'N','Ō'=>'O', + 'О'=>'O','Ǿ'=>'O','Ǒ'=>'O','Ơ'=>'O','Ŏ'=>'O','Ő'=>'O', + 'Ø'=>'O','Ö'=>'Oe','Õ'=>'O','Ó'=>'O','Ò'=>'O','Ô'=>'O', + 'Œ'=>'OE','П'=>'P','Ŗ'=>'R','Р'=>'R','Ř'=>'R','Ŕ'=>'R', + 'Ŝ'=>'S','Ş'=>'S','Š'=>'S','Ș'=>'S','Ś'=>'S','С'=>'S', + 'Ш'=>'Sh','Щ'=>'Shch','Ť'=>'T','Ŧ'=>'T','Ţ'=>'T','Ț'=>'T', + 'Т'=>'T','Ů'=>'U','Ű'=>'U','Ŭ'=>'U','Ũ'=>'U','Ų'=>'U', + 'Ū'=>'U','Ǜ'=>'U','Ǚ'=>'U','Ù'=>'U','Ú'=>'U','Ü'=>'Ue', + 'Ǘ'=>'U','Ǖ'=>'U','У'=>'U','Ư'=>'U','Ǔ'=>'U','Û'=>'U', + 'В'=>'V','Ŵ'=>'W','Ы'=>'Y','Ŷ'=>'Y','Ý'=>'Y','Ÿ'=>'Y', + 'Ź'=>'Z','З'=>'Z','Ż'=>'Z','Ž'=>'Z','Ж'=>'Zh','á'=>'a', + 'ă'=>'a','â'=>'a','à'=>'a','ā'=>'a','ǻ'=>'a','å'=>'a', + 'ä'=>'ae','ą'=>'a','ǎ'=>'a','ã'=>'a','а'=>'a','ª'=>'a', + 'æ'=>'ae','ǽ'=>'ae','б'=>'b','č'=>'c','ç'=>'c','ц'=>'c', + 'ċ'=>'c','ĉ'=>'c','ć'=>'c','ч'=>'ch','ð'=>'dj','ď'=>'dj', + 'д'=>'dj','đ'=>'dj','э'=>'e','é'=>'e','ё'=>'e','ë'=>'e', + 'ê'=>'e','е'=>'e','ĕ'=>'e','è'=>'e','ę'=>'e','ě'=>'e', + 'ė'=>'e','ē'=>'e','ƒ'=>'f','ф'=>'f','ġ'=>'g','ĝ'=>'g', + 'ğ'=>'g','г'=>'g','ģ'=>'g','х'=>'h','ĥ'=>'h','ħ'=>'h', + 'ǐ'=>'i','ĭ'=>'i','и'=>'i','ī'=>'i','ĩ'=>'i','į'=>'i', + 'ı'=>'i','ì'=>'i','î'=>'i','í'=>'i','ï'=>'i','ij'=>'ij', + 'ĵ'=>'j','й'=>'j','я'=>'ja','ю'=>'ju','ķ'=>'k','к'=>'k', + 'ľ'=>'l','ł'=>'l','ŀ'=>'l','ĺ'=>'l','ļ'=>'l','л'=>'l', + 'м'=>'m','ņ'=>'n','ñ'=>'n','ń'=>'n','н'=>'n','ň'=>'n', + 'ʼn'=>'n','ó'=>'o','ò'=>'o','ǒ'=>'o','ő'=>'o','о'=>'o', + 'ō'=>'o','º'=>'o','ơ'=>'o','ŏ'=>'o','ô'=>'o','ö'=>'oe', + 'õ'=>'o','ø'=>'o','ǿ'=>'o','œ'=>'oe','п'=>'p','р'=>'r', + 'ř'=>'r','ŕ'=>'r','ŗ'=>'r','ſ'=>'s','ŝ'=>'s','ș'=>'s', + 'š'=>'s','ś'=>'s','с'=>'s','ş'=>'s','ш'=>'sh','щ'=>'shch', + 'ß'=>'ss','ţ'=>'t','т'=>'t','ŧ'=>'t','ť'=>'t','ț'=>'t', + 'у'=>'u','ǘ'=>'u','ŭ'=>'u','û'=>'u','ú'=>'u','ų'=>'u', + 'ù'=>'u','ű'=>'u','ů'=>'u','ư'=>'u','ū'=>'u','ǚ'=>'u', + 'ǜ'=>'u','ǔ'=>'u','ǖ'=>'u','ũ'=>'u','ü'=>'ue','в'=>'v', + 'ŵ'=>'w','ы'=>'y','ÿ'=>'y','ý'=>'y','ŷ'=>'y','ź'=>'z', + 'ž'=>'z','з'=>'z','ż'=>'z','ж'=>'zh' + )+Base::instance()->get('DIACRITICS'))))),'-'); + } + + /** + * Return chunk of text from standard Lorem Ipsum passage + * @return string + * @param $count int + * @param $max int + * @param $std bool + **/ + function filler($count=1,$max=20,$std=TRUE) { + $out=''; + if ($std) + $out='Lorem ipsum dolor sit amet, consectetur adipisicing elit, '. + 'sed do eiusmod tempor incididunt ut labore et dolore magna '. + 'aliqua.'; + $rnd=explode(' ', + 'a ab ad accusamus adipisci alias aliquam amet animi aperiam '. + 'architecto asperiores aspernatur assumenda at atque aut beatae '. + 'blanditiis cillum commodi consequatur corporis corrupti culpa '. + 'cum cupiditate debitis delectus deleniti deserunt dicta '. + 'dignissimos distinctio dolor ducimus duis ea eaque earum eius '. + 'eligendi enim eos error esse est eum eveniet ex excepteur '. + 'exercitationem expedita explicabo facere facilis fugiat harum '. + 'hic id illum impedit in incidunt ipsa iste itaque iure iusto '. + 'laborum laudantium libero magnam maiores maxime minim minus '. + 'modi molestiae mollitia nam natus necessitatibus nemo neque '. + 'nesciunt nihil nisi nobis non nostrum nulla numquam occaecati '. + 'odio officia omnis optio pariatur perferendis perspiciatis '. + 'placeat porro possimus praesentium proident quae quia quibus '. + 'quo ratione recusandae reiciendis rem repellat reprehenderit '. + 'repudiandae rerum saepe sapiente sequi similique sint soluta '. + 'suscipit tempora tenetur totam ut ullam unde vel veniam vero '. + 'vitae voluptas'); + for ($i=0,$add=$count-(int)$std;$i<$add;$i++) { + shuffle($rnd); + $words=array_slice($rnd,0,mt_rand(3,$max)); + $out.=' '.ucfirst(implode(' ',$words)).'.'; + } + return $out; + } + +} + +if (!function_exists('gzdecode')) { + + /** + * Decode gzip-compressed string + * @param $str string + **/ + function gzdecode($str) { + $fw=Base::instance(); + if (!is_dir($tmp=$fw->get('TEMP'))) + mkdir($tmp,Base::MODE,TRUE); + file_put_contents($file=$tmp.'/'. + $fw->hash($fw->get('ROOT').$fw->get('BASE')).'.'. + $fw->hash(uniqid(NULL,TRUE)).'.gz',$str,LOCK_EX); + ob_start(); + readgzfile($file); + $out=ob_get_clean(); + @unlink($file); + return $out; + } + +} diff --git a/management-interface/lib/web/geo.php b/management-interface/lib/web/geo.php new file mode 100644 index 0000000..c1b915e --- /dev/null +++ b/management-interface/lib/web/geo.php @@ -0,0 +1,101 @@ +getLocation(); + $trn=$ref->getTransitions($now=time(),$now); + $out=array( + 'offset'=>$ref-> + getOffset(new \DateTime('now',new \DateTimeZone('GMT')))/3600, + 'country'=>$loc['country_code'], + 'latitude'=>$loc['latitude'], + 'longitude'=>$loc['longitude'], + 'dst'=>$trn[0]['isdst'] + ); + unset($ref); + return $out; + } + + /** + * Return geolocation data based on specified/auto-detected IP address + * @return array|FALSE + * @param $ip string + **/ + function location($ip=NULL) { + $fw=\Base::instance(); + $web=\Web::instance(); + if (!$ip) + $ip=$fw->get('IP'); + $public=filter_var($ip,FILTER_VALIDATE_IP, + FILTER_FLAG_IPV4|FILTER_FLAG_IPV6| + FILTER_FLAG_NO_RES_RANGE|FILTER_FLAG_NO_PRIV_RANGE); + if (function_exists('geoip_db_avail') && + geoip_db_avail(GEOIP_CITY_EDITION_REV1) && + $out=@geoip_record_by_name($ip)) { + $out['request']=$ip; + $out['region_code']=$out['region']; + $out['region_name']=geoip_region_name_by_code( + $out['country_code'],$out['region']); + unset($out['country_code3'],$out['region'],$out['postal_code']); + return $out; + } + if (($req=$web->request('http://www.geoplugin.net/json.gp'. + ($public?('?ip='.$ip):''))) && + $data=json_decode($req['body'],TRUE)) { + $out=array(); + foreach ($data as $key=>$val) + if (!strpos($key,'currency') && $key!=='geoplugin_status' + && $key!=='geoplugin_region') + $out[$fw->snakecase(substr($key, 10))]=$val; + return $out; + } + return FALSE; + } + + /** + * Return weather data based on specified latitude/longitude + * @return array|FALSE + * @param $latitude float + * @param $longitude float + **/ + function weather($latitude,$longitude) { + $fw=\Base::instance(); + $web=\Web::instance(); + $query=array( + 'lat'=>$latitude, + 'lng'=>$longitude, + 'username'=>$fw->hash($fw->get('IP')) + ); + return ($req=$web->request( + 'http://ws.geonames.org/findNearByWeatherJSON?'. + http_build_query($query))) && + ($data=json_decode($req['body'],TRUE)) && + isset($data['weatherObservation'])? + $data['weatherObservation']: + FALSE; + } + +} diff --git a/management-interface/lib/web/google/staticmap.php b/management-interface/lib/web/google/staticmap.php new file mode 100644 index 0000000..8d8a5fc --- /dev/null +++ b/management-interface/lib/web/google/staticmap.php @@ -0,0 +1,58 @@ +query[]=array($func,$args[0]); + return $this; + } + + /** + * Generate map + * @return string + **/ + function dump() { + $fw=\Base::instance(); + $web=\Web::instance(); + $out=''; + return ($req=$web->request( + self::URL_Static.'?'.array_reduce( + $this->query, + function($out,$item) { + return ($out.=($out?'&':''). + urlencode($item[0]).'='.urlencode($item[1])); + } + ))) && $req['body']?$req['body']:FALSE; + } + +} diff --git a/management-interface/lib/web/openid.php b/management-interface/lib/web/openid.php new file mode 100644 index 0000000..61ce575 --- /dev/null +++ b/management-interface/lib/web/openid.php @@ -0,0 +1,237 @@ +args['identity'])) + $this->args['identity']='http://'.$this->args['identity']; + $url=parse_url($this->args['identity']); + // Remove fragment; reconnect parts + $this->args['identity']=$url['scheme'].'://'. + (isset($url['user'])? + ($url['user']. + (isset($url['pass'])?(':'.$url['pass']):'').'@'):''). + strtolower($url['host']).(isset($url['path'])?$url['path']:'/'). + (isset($url['query'])?('?'.$url['query']):''); + // HTML-based discovery of OpenID provider + $req=\Web::instance()-> + request($this->args['identity'],array('proxy'=>$proxy)); + if (!$req) + return FALSE; + $type=array_values(preg_grep('/Content-Type:/',$req['headers'])); + if ($type && + preg_match('/application\/xrds\+xml|text\/xml/',$type[0]) && + ($sxml=simplexml_load_string($req['body'])) && + ($xrds=json_decode(json_encode($sxml),TRUE)) && + isset($xrds['XRD'])) { + // XRDS document + $svc=$xrds['XRD']['Service']; + if (isset($svc[0])) + $svc=$svc[0]; + if (preg_grep('/http:\/\/specs\.openid\.net\/auth\/2.0\/'. + '(?:server|signon)/',$svc['Type'])) { + $this->args['provider']=$svc['URI']; + if (isset($svc['LocalID'])) + $this->args['localidentity']=$svc['LocalID']; + elseif (isset($svc['CanonicalID'])) + $this->args['localidentity']=$svc['CanonicalID']; + } + $this->args['server']=$svc['URI']; + if (isset($svc['Delegate'])) + $this->args['delegate']=$svc['Delegate']; + } + else { + $len=strlen($req['body']); + $ptr=0; + // Parse document + while ($ptr<$len) + if (preg_match( + '/^/is', + substr($req['body'],$ptr),$parts)) { + if ($parts[1] && + // Process attributes + preg_match_all('/\b(rel|href)\h*=\h*'. + '(?:"(.+?)"|\'(.+?)\')/s',$parts[1],$attr, + PREG_SET_ORDER)) { + $node=array(); + foreach ($attr as $kv) + $node[$kv[1]]=isset($kv[2])?$kv[2]:$kv[3]; + if (isset($node['rel']) && + preg_match('/openid2?\.(\w+)/', + $node['rel'],$var) && + isset($node['href'])) + $this->args[$var[1]]=$node['href']; + + } + $ptr+=strlen($parts[0]); + } + else + $ptr++; + } + // Get OpenID provider's endpoint URL + if (isset($this->args['provider'])) { + // OpenID 2.0 + $this->args['ns']='http://specs.openid.net/auth/2.0'; + if (isset($this->args['localidentity'])) + $this->args['identity']=$this->args['localidentity']; + if (isset($this->args['trust_root'])) + $this->args['realm']=$this->args['trust_root']; + } + elseif (isset($this->args['server'])) { + // OpenID 1.1 + $this->args['ns']='http://openid.net/signon/1.1'; + if (isset($this->args['delegate'])) + $this->args['identity']=$this->args['delegate']; + } + if (isset($this->args['provider'])) { + // OpenID 2.0 + if (empty($this->args['claimed_id'])) + $this->args['claimed_id']=$this->args['identity']; + return $this->args['provider']; + } + elseif (isset($this->args['server'])) + // OpenID 1.1 + return $this->args['server']; + else + return FALSE; + } + + /** + * Initiate OpenID authentication sequence; Return FALSE on failure + * or redirect to OpenID provider URL + * @return bool + * @param $proxy string + * @param $attr array + * @param $reqd string|array + **/ + function auth($proxy=NULL,$attr=array(),array $reqd=NULL) { + $fw=\Base::instance(); + $root=$fw->get('SCHEME').'://'.$fw->get('HOST'); + if (empty($this->args['trust_root'])) + $this->args['trust_root']=$root.$fw->get('BASE').'/'; + if (empty($this->args['return_to'])) + $this->args['return_to']=$root.$_SERVER['REQUEST_URI']; + $this->args['mode']='checkid_setup'; + if ($this->url=$this->discover($proxy)) { + if ($attr) { + $this->args['ns.ax']='http://openid.net/srv/ax/1.0'; + $this->args['ax.mode']='fetch_request'; + foreach ($attr as $key=>$val) + $this->args['ax.type.'.$key]=$val; + $this->args['ax.required']=is_string($reqd)? + $reqd:implode(',',$reqd); + } + $var=array(); + foreach ($this->args as $key=>$val) + $var['openid.'.$key]=$val; + $fw->reroute($this->url.'?'.http_build_query($var)); + } + return FALSE; + } + + /** + * Return TRUE if OpenID verification was successful + * @return bool + * @param $proxy string + **/ + function verified($proxy=NULL) { + preg_match_all('/(?<=^|&)openid\.([^=]+)=([^&]+)/', + $_SERVER['QUERY_STRING'],$matches,PREG_SET_ORDER); + foreach ($matches as $match) + $this->args[$match[1]]=urldecode($match[2]); + if (isset($this->args['mode']) && + $this->args['mode']!='error' && + $this->url=$this->discover($proxy)) { + $this->args['mode']='check_authentication'; + $var=array(); + foreach ($this->args as $key=>$val) + $var['openid.'.$key]=$val; + $req=\Web::instance()->request( + $this->url, + array( + 'method'=>'POST', + 'content'=>http_build_query($var), + 'proxy'=>$proxy + ) + ); + return (bool)preg_match('/is_valid:true/i',$req['body']); + } + return FALSE; + } + + /** + * Return OpenID response fields + * @return array + **/ + function response() { + return $this->args; + } + + /** + * Return TRUE if OpenID request parameter exists + * @return bool + * @param $key string + **/ + function exists($key) { + return isset($this->args[$key]); + } + + /** + * Bind value to OpenID request parameter + * @return string + * @param $key string + * @param $val string + **/ + function set($key,$val) { + return $this->args[$key]=$val; + } + + /** + * Return value of OpenID request parameter + * @return mixed + * @param $key string + **/ + function get($key) { + return isset($this->args[$key])?$this->args[$key]:NULL; + } + + /** + * Remove OpenID request parameter + * @return NULL + * @param $key + **/ + function clear($key) { + unset($this->args[$key]); + } + +} + diff --git a/management-interface/lib/web/pingback.php b/management-interface/lib/web/pingback.php new file mode 100644 index 0000000..897ed67 --- /dev/null +++ b/management-interface/lib/web/pingback.php @@ -0,0 +1,170 @@ +request($url); + $found=FALSE; + if ($req && $req['body']) { + // Look for pingback header + foreach ($req['headers'] as $header) + if (preg_match('/^X-Pingback:\h*(.+)/',$header,$href)) { + $found=$href[1]; + break; + } + if (!$found && + // Scan page for pingback link tag + preg_match('//i',$req['body'],$parts) && + preg_match('/rel\h*=\h*"pingback"/i',$parts[1]) && + preg_match('/href\h*=\h*"\h*(.+?)\h*"/i',$parts[1],$href)) + $found=$href[1]; + } + return $found; + } + + /** + * Load local page contents, parse HTML anchor tags, find permalinks, + * and send XML-RPC calls to corresponding pingback servers + * @return NULL + * @param $source string + **/ + function inspect($source) { + $fw=\Base::instance(); + $web=\Web::instance(); + $parts=parse_url($source); + if (empty($parts['scheme']) || empty($parts['host']) || + $parts['host']==$fw->get('HOST')) { + $req=$web->request($source); + $doc=new \DOMDocument('1.0',$fw->get('ENCODING')); + $doc->stricterrorchecking=FALSE; + $doc->recover=TRUE; + if ($req && @$doc->loadhtml($req['body'])) { + // Parse anchor tags + $links=$doc->getelementsbytagname('a'); + foreach ($links as $link) { + $permalink=$link->getattribute('href'); + // Find pingback-enabled resources + if ($permalink && $found=$this->enabled($permalink)) { + $req=$web->request($found, + array( + 'method'=>'POST', + 'header'=>'Content-Type: application/xml', + 'content'=>xmlrpc_encode_request( + 'pingback.ping', + array($source,$permalink), + array('encoding'=>$fw->get('ENCODING')) + ) + ) + ); + if ($req && $req['body']) + $this->log.=date('r').' '. + $permalink.' [permalink:'.$found.']'.PHP_EOL. + $req['body'].PHP_EOL; + } + } + } + unset($doc); + } + } + + /** + * Receive ping, check if local page is pingback-enabled, verify + * source contents, and return XML-RPC response + * @return string + * @param $func callback + * @param $path string + **/ + function listen($func,$path=NULL) { + $fw=\Base::instance(); + if (PHP_SAPI!='cli') { + header('X-Powered-By: '.$fw->get('PACKAGE')); + header('Content-Type: application/xml; '. + 'charset='.$charset=$fw->get('ENCODING')); + } + if (!$path) + $path=$fw->get('BASE'); + $web=\Web::instance(); + $args=xmlrpc_decode_request($fw->get('BODY'),$method,$charset); + $options=array('encoding'=>$charset); + if ($method=='pingback.ping' && isset($args[0],$args[1])) { + list($source,$permalink)=$args; + $doc=new \DOMDocument('1.0',$fw->get('ENCODING')); + // Check local page if pingback-enabled + $parts=parse_url($permalink); + if ((empty($parts['scheme']) || + $parts['host']==$fw->get('HOST')) && + preg_match('/^'.preg_quote($path,'/').'/'. + ($fw->get('CASELESS')?'i':''),$parts['path']) && + $this->enabled($permalink)) { + // Check source + $parts=parse_url($source); + if ((empty($parts['scheme']) || + $parts['host']==$fw->get('HOST')) && + ($req=$web->request($source)) && + $doc->loadhtml($req['body'])) { + $links=$doc->getelementsbytagname('a'); + foreach ($links as $link) { + if ($link->getattribute('href')==$permalink) { + call_user_func_array($func, + array($source,$req['body'])); + // Success + die(xmlrpc_encode_request(NULL,$source,$options)); + } + } + // No link to local page + die(xmlrpc_encode_request(NULL,0x11,$options)); + } + // Source failure + die(xmlrpc_encode_request(NULL,0x10,$options)); + } + // Doesn't exist (or not pingback-enabled) + die(xmlrpc_encode_request(NULL,0x21,$options)); + } + // Access denied + die(xmlrpc_encode_request(NULL,0x31,$options)); + } + + /** + * Return transaction history + * @return string + **/ + function log() { + return $this->log; + } + + /** + * Instantiate class + * @return object + **/ + function __construct() { + // Suppress errors caused by invalid HTML structures + libxml_use_internal_errors(TRUE); + } + +} diff --git a/management-interface/template/footer.php b/management-interface/template/footer.php index 68f8351..bfae99f 100644 --- a/management-interface/template/footer.php +++ b/management-interface/template/footer.php @@ -1,3 +1,4 @@ +
    diff --git a/management-interface/template/menu.php b/management-interface/template/menu.php new file mode 100644 index 0000000..38b9b5e --- /dev/null +++ b/management-interface/template/menu.php @@ -0,0 +1,44 @@ + + +
    diff --git a/management-interface/template/message.php b/management-interface/template/message.php index 105345d..b018b16 100644 --- a/management-interface/template/message.php +++ b/management-interface/template/message.php @@ -1,5 +1 @@ -
    - -

    - -
    +

    diff --git a/management-interface/template/requestdump.php b/management-interface/template/requestdump.php new file mode 100644 index 0000000..1ed225f --- /dev/null +++ b/management-interface/template/requestdump.php @@ -0,0 +1,5 @@ +

    + +

    diff --git a/management-interface/views/about.htm b/management-interface/views/about.htm index ed15306..e90cdd2 100644 --- a/management-interface/views/about.htm +++ b/management-interface/views/about.htm @@ -1,8 +1,8 @@ -

    - -
    -

    {{ strtoupper(@_module) }}

    -

    -
    - -
    +
    +

    This is the webinterface for the masterserver.

    + +


    +

    This is the public certificate for the FTPS connection: download

    +

    This is the tool to base64 the certificate.cer: download

    +
    +
    diff --git a/management-interface/views/home.htm b/management-interface/views/home.htm index f2cadd0..a6d5443 100644 --- a/management-interface/views/home.htm +++ b/management-interface/views/home.htm @@ -1,10 +1,6 @@ -
    -

    Hello {{ @username }}!

    Status of server is: onlineoffline

    - -
    diff --git a/management-interface/views/login.htm b/management-interface/views/login.htm index d283f45..bfcb593 100644 --- a/management-interface/views/login.htm +++ b/management-interface/views/login.htm @@ -1,4 +1,8 @@ -
    + +
    +

    {{ message }}

    +
    +
    @@ -17,4 +21,3 @@
    -
    diff --git a/management-interface/views/menu.php b/management-interface/views/menu.php deleted file mode 100644 index d010119..0000000 --- a/management-interface/views/menu.php +++ /dev/null @@ -1,43 +0,0 @@ - - diff --git a/management-interface/views/satellites.htm b/management-interface/views/satellites.htm index 24adba1..2d151f7 100644 --- a/management-interface/views/satellites.htm +++ b/management-interface/views/satellites.htm @@ -1,44 +1,138 @@ -
    + + +
    - - -

    List of all satellite public keys

    -
    +

    Edit

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + + If you use a prefix that is already in use, it will be overwritten +
    +
    + + +
    + Fields marked with * are mandatory + +
    + + Reset +
    + + + + +
    +

    New

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + + If you use a prefix that is already in use, it will be overwritten +
    +
    + + +
    + Fields marked with * are mandatory +
    + + +
    + + +
    +
    +
    +

    List of all satellite public keys

    +
    +
    - - - - - - + + + + + + - - + + - + - + -
    - - OrganizationAddressNamePrefixPublic key + + + descasc">Organization + + + + + descasc">Address + + + + + descasc">Name + + + + + descasc">Prefix + + + + Public key
    - + {{ @item.organization }} {{ @item.address }}{{ @item.name }}{{ @item.name }} {{ @item.prefix}} noyes
    - - -

    Please login

    -
    - + +
    + + +
    +
    +
    - +
    + New +
    + + + +

    Please login

    +
    + + diff --git a/management-interface/views/users.htm b/management-interface/views/users.htm index c461072..703f009 100644 --- a/management-interface/views/users.htm +++ b/management-interface/views/users.htm @@ -1,18 +1,17 @@ -

    List of all users

    - +
    - - - - - - - + + + + + + + @@ -29,10 +28,15 @@
    IDUsernameOrganizationFirst nameLast nameEmailLast login#UsernameOrganizationFirst nameLast nameEmailLast login
    +
    +
    + + +
    +
    -

    Please login

    +

    Please login

    -
    -- cgit v1.2.3-55-g7522