You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(35) |
Nov
(38) |
Dec
(112) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(20) |
Feb
(24) |
Mar
(47) |
Apr
(18) |
May
(28) |
Jun
(17) |
Jul
(15) |
Aug
(40) |
Sep
(14) |
Oct
(5) |
Nov
(26) |
Dec
(31) |
2003 |
Jan
(8) |
Feb
(14) |
Mar
(38) |
Apr
(34) |
May
(33) |
Jun
(32) |
Jul
(24) |
Aug
(9) |
Sep
|
Oct
(20) |
Nov
(43) |
Dec
(22) |
2004 |
Jan
(23) |
Feb
(25) |
Mar
(15) |
Apr
(3) |
May
(31) |
Jun
(13) |
Jul
(3) |
Aug
(3) |
Sep
(13) |
Oct
(15) |
Nov
(3) |
Dec
(5) |
2005 |
Jan
|
Feb
|
Mar
(16) |
Apr
(24) |
May
|
Jun
(2) |
Jul
|
Aug
(5) |
Sep
(4) |
Oct
|
Nov
(3) |
Dec
(2) |
2006 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Chris W. <ch...@cw...> - 2004-05-28 13:03:37
|
Hi all, As I announced a few weeks ago I'm giving a three-hour tutorial on OpenInteract2 at YAPC::NA[1]. And I'm taking requests! What would you like or expect to see in such a tutorial? Hope to see some of you there, Chris [1] http://yapc.org/America/ -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Teemu A. <te...@io...> - 2004-05-28 09:08:47
|
> I've removed > the links in the templates to the /NewUser action, but you can still > type it in manually and create a user. You can disable /NewUser by removing the action in action.perl in base_user package, incrementing the version number (in this case, 1.65) in package.conf and reinstalling the package with oi_manage. > OpenInteract::Handler::NewUser.pm in my OI base directory after not > finding a Cornerstone::Handler::NewUser.pm in the action.perl files. Am > I off here? If your website is called Cornerstone, all OpenInteract::* will be mapped as Cornerstone::*, in this case, OpenInteract::Handler::NewUser -> Cornerstone::Handler::NewUser. So, if you want to create your own NewUser handler, create it with a different Handler name, for example OpenInteract::Handler::CreateUser or something, remove the NewUser action, add your own NewUser action and map it to *::CreateUser. > And, what is the "correct" way to disable this (or any other) > functionality? One thing I don't like about OI base packages is that they implement a lot of things that are tied with the core itself. It means that if you want to replace one of them, you have to exactly know what you are doing, i.e. if any stuff from a certain package you are going to replace is used in another one or in the core itself. I worked around this by just disabling actions provided by some base_* packages I don't need or adding Handler security that blocks the use of certain features. Look into sys_security table to know how Handler security works. Basically, SPOPS objects that have security have a number in object_id field. Handlers have 0 (zero). Example of SPOPS object with security: (user 22 may only write the object): sid: 39609 class: Example::SpopsObject object_id: 5931 scope: u scope_id: 22 security_level: 8 Example of a Handler (action) with security: (No one - world - may execute the handler NewUser): sid: 39610 class: Example::Handler::NewUser object_id: 0 scope: w scope_id: world security_level: 1 For handlers to use security, the action.perl must not contain security => no for the action. More info: http://www.openinteract.org/docs/security.shtml It is easier to use the base_user package because it has all the authentication stuff with the sys_user table etc. implemented. base_group has a group system implemented, which is tied with the Handler security itself. Pretty hairy stuff if you want to heavily modify the functionality without getting into modifying the base_* packages themselves (something you don't want to do or you have to maintain and sync the changes in the package as new versions of OpenInteract appear). Just go with the base_* packages and be creative: add a new package, something like cornerstone_user and cornerstone_group that have additional features you want (a new user manager, registration application, password changing etc) and possibly add more fields for users. I for example used an additional table for additional personal user information and linked it with sys_user table. We have heavily modified the OpenInteract system and replaced most of the essential actions provided by base_* packages with more robust alternatives in our Dicole project. You might find it interesting and maybe even useful for your project. It is an extension to OpenInteract and acts as a more abstract layer for creating web based applications: http://www.dicole.fi/docs/dicole_api_overview.html http://www.dicole.fi/docs/introduction.html Currently in development but first version of a groupware created with it will be available in August. -- -------------- Teemu Arina Ionstream Oy / Dicole Komeetankuja 4 A 02210 Espoo FINLAND Tel: +358-(0)50 - 555 7636 http://www.dicole.fi "Discover, collaborate, learn." |
From: Teemu A. <te...@io...> - 2004-05-28 08:09:59
|
> Ahh, OK! This is just the brain-kick I needed. Thanks! > > I did notice the OI "object" being used in the templates, but I couldn't > find it mentioned in any of the docs. I had started going through all of > the modules created as part of the new website, but I hadn't reached the > Template module yet. Now that I know where the OI template variable gets > plugged in, I can get a better grasp on how the system flows. Check this out for documentation about OI object: http://search.cpan.org/~cwinters/OpenInteract-1.60/OpenInteract/Template/Plugin.pm -- -------------- Teemu Arina Ionstream Oy / Dicole Komeetankuja 4 A 02210 Espoo FINLAND Tel: +358-(0)50 - 555 7636 http://www.dicole.fi "Discover, collaborate, learn." |
From: Teemu A. <te...@io...> - 2004-05-28 08:07:54
|
> The entire admin app should be locked down, requiring the user to be > logged in before any page to be displayed. > > Any hints? I remember the login box thing was discussed on the list last year for OI1: http://sourceforge.net/mailarchive/forum.php?thread_id=2939624&forum_id=3223 -- -------------- Teemu Arina Ionstream Oy / Dicole Komeetankuja 4 A 02210 Espoo FINLAND Tel: +358-(0)50 - 555 7636 http://www.dicole.fi "Discover, collaborate, learn." |
From: Timothy M. A. <ti...@ad...> - 2004-05-28 05:21:49
|
Hello (again!) list! Sorry to be such a bother lately, but I think I'm finally getting the handle on this thing. Please correct me if I'm wrong about how things are working here. In the site I'm working on (called Cornerstone), I'd like to have user creation done only by the Superuser or Site Administrators. I've removed the links in the templates to the /NewUser action, but you can still type it in manually and create a user. I've also played around with the "action.conf" file under my application's pkg/base_user-1.64/conf directory, but I can't get the action to unmap. The impression I'm getting from my RTFM action is that the application is defaulting to the OpenInteract::Handler::NewUser.pm in my OI base directory after not finding a Cornerstone::Handler::NewUser.pm in the action.perl files. Am I off here? And, what is the "correct" way to disable this (or any other) functionality? I was thinking I could reimpliment the base_user package without the functionality, but this seems overkill at this point. I could also go into the NewUser.pm file in either my OI installation, or the web app and fiddle with the actual perl code, possibly just having it output nonesense code, but this seems to be kind of a kluge to me. Ideally, I'd like the default "File Not Found" page to be displayed. Any hints? Thanks a ton! /tma |
From: Timothy M. A. <ti...@ad...> - 2004-05-27 22:30:09
|
On Thu, 2004-05-27 at 11:52, Chris Winters wrote: > > ... > > Getting down to work, I tried to remove all of the "boxes" and such from > > the /index.html document and create just a login box. The thing is, I > > can't seem to figure out how to get the user information to display > > anywhere other than in the user info box. I know there's something I'm > > just not grokking here. So, I wanted the template to do something like > > this pseudo-code: > > > > [%- IF user.authenticated -%] > > ( Display boxes ) > > ( Display default welcome page ) > > [%- ELSE -%] > > ( Display Login Form ) > > [%- END -%] > > > > The entire admin app should be locked down, requiring the user to be > > logged in before any page to be displayed. > > Check out the template toolkit plugin at: > > OI1: OpenInteract::Template::Plugin > OI2: OpenInteract2::TT2::Plugin > > The plugin allows you to do something like this in your main template > ('base_main'), using the plugin through the reserved 'OI' name: [SNIP] Ahh, OK! This is just the brain-kick I needed. Thanks! I did notice the OI "object" being used in the templates, but I couldn't find it mentioned in any of the docs. I had started going through all of the modules created as part of the new website, but I hadn't reached the Template module yet. Now that I know where the OI template variable gets plugged in, I can get a better grasp on how the system flows. I'm sure I'll run into other things as I go along, but this will give me a great start. [SNIP] > Hope this helps! Absolutely! Thanks! /tma |
From: Chris W. <ch...@cw...> - 2004-05-27 17:56:04
|
> ... > Getting down to work, I tried to remove all of the "boxes" and such from > the /index.html document and create just a login box. The thing is, I > can't seem to figure out how to get the user information to display > anywhere other than in the user info box. I know there's something I'm > just not grokking here. So, I wanted the template to do something like > this pseudo-code: > > [%- IF user.authenticated -%] > ( Display boxes ) > ( Display default welcome page ) > [%- ELSE -%] > ( Display Login Form ) > [%- END -%] > > The entire admin app should be locked down, requiring the user to be > logged in before any page to be displayed. Check out the template toolkit plugin at: OI1: OpenInteract::Template::Plugin OI2: OpenInteract2::TT2::Plugin The plugin allows you to do something like this in your main template ('base_main'), using the plugin through the reserved 'OI' name: [% IF OI.logged_in %] Hello [% OI.login.full_name %], nice to see you! [% ELSE %] Login now! <form ...> </form> [% END %] You also don't have to use the login box for logging. in. For instance, on my website (http://www.cwinters.com/) I have a separate component called 'my_login_bar', which displays a thin fullscreen bar with your username and a link to edit your info if you're logged in, or a 'login' link if you're not. (It also displays a 'Printable' link for everything...) The template looks like this (apologies for wrapping issues): -------------------- <table width="100%" cellpadding="1" cellspacing="0" border="0"> [% IF OI.logged_in -%] [%- logout_url = OI.make_url( base = '/NoTmpl/Logout/', return = OI.return.url ) -%] [%- edit_url = OI.make_url( base = '/User/show/', user_id = OI.login.id ) -%] <tr valign="middle" bgcolor="#eeeeee"> <td align="left" width="50%"><font size="-1"> You are logged in as <b>[% OI.login.login_name %]</b> (<a href="[% edit_url %]">Edit my info</a>) </font></td> <td align="right" width="40%"><font size="-1"> <a href="[% logout_url %]">Logout</a> </font></td> <td align="right" width="10%"><font size="-1"> <a href="/NoTmpl[% path %]">Printable</a> </font></td> </tr> [% ELSE -%] <tr valign="middle" bgcolor="#cccccc"> <td align="right"><font size="-1"> <b><a href="/login.html">Login</a></b> </font></td> <td align="right"><font size="-1"> <a href="/NoTmpl[% path %]">Printable</a> </font></td> </tr> [% END -%] </table> -------------------- Hope this helps! Chris |
From: Timothy M. A. <ti...@ad...> - 2004-05-27 16:38:57
|
Hello, list! First off, thanks to Andreas and Teemu for the replies. They gave me a good brain-kick. I'm still a bit overwhelmed with the volume of stuff there is to OI, but I'll figure it out eventually. Yesterday, I started playing with the administration site for the project I'm working on and immediately ran into something I can't quite figure out. The design specs have my project broken into two distinct pieces: 1) the general user's site, where they can fiddle with the different settings of their account and other actions; and 2) the administration site, where my company can go in and fiddle with the users. :-) The default site has these actions combined into one site. The main reason for this is financial; we're going to have most of the credit card chargeback processing and the like on an internal web-server, firewalled off from the rest of the world. Getting down to work, I tried to remove all of the "boxes" and such from the /index.html document and create just a login box. The thing is, I can't seem to figure out how to get the user information to display anywhere other than in the user info box. I know there's something I'm just not grokking here. So, I wanted the template to do something like this pseudo-code: [%- IF user.authenticated -%] ( Display boxes ) ( Display default welcome page ) [%- ELSE -%] ( Display Login Form ) [%- END -%] The entire admin app should be locked down, requiring the user to be logged in before any page to be displayed. Any hints? Thanks! /tma |
From: Teemu A. <te...@io...> - 2004-05-26 08:28:10
|
> While searching through the OI docs, I didn't see much on the design > theory. I usually go this route: - plan the business logic and features of the application first - design the database (struct/, conf/spops.perl) according to the plan - design the actions (conf/action.perl) according to the plan - synchronized and separated design of UI and handler code (business logic) I think the tutorials are enough for information about what detailed steps to take when building an OI application. For OI1: http://www.openinteract.org/docs/developer.shtml For OI2: http://www.openinteract.org/docs/oi2-snapshot/OpenInteract2/Manual/Tutorial.html -- Sincerely, Teemu Arina Ionstream Oy / Dicole Komeetankuja 4 A 02210 Espoo FINLAND Tel: +358-(0)50 - 555 7636 http://www.dicole.fi "Discover, Collaborate, Learn." |
From: <And...@Be...> - 2004-05-26 07:21:53
|
Hi Tim, a few months ago I sketched some ideas I had on OI application design = to this group, which you might be able to find in the mailinglist archive. The main points are really, that you should separate your application = logic from the OI handler code as much as makes sense. If you use the = Template Toolkit, you can stuff your business objects into the template and use = the functions there, as you would do from batch jobs. This means, that you should not put much logic into the templates either, but rather use = custom objects which you can stuff into these templates. What we also often use is SPOPS with additional business functionality pulled into the objects. But this also works from batch jobs - it does = not have much to do with OI really - OI only uses SPOPS.=20 Speaking of OI and SPOPS: you should use the build in Security = sparingly, because there is a chance, that you really slow down your system. The approach that we are using is, that we map groups to handler security = to allow a group of users to access an application. But the security on = the acual data is handled by the application - not SPOPS. I hope this helps a little... cheers Andreas Nolte=20 Leitung IT ------------------------------------------------- arvato direct services Olympiastra=DFe 1 26419 Schortens Germany http://www.arvato.com/ and...@be... Telefon +49 (0) 44 21 - 76-84002 Telefax +49 (0) 44 21 - 76-84111 -----Urspr=FCngliche Nachricht----- Von: Timothy M. Adamec [mailto:ti...@ad...]=20 Gesendet: Mittwoch, 26. Mai 2004 07:26 An: ope...@li... Betreff: [Openinteract-help] Where to start? Hello, I've recently discovered and installed OpenInteract for a project I'm working on and I'm overwhelmed with what it can do. I've never used an application framework before, so I'm a little overwhelmed with what OI offers. Typical applications I've developed in the past have gone something = like this: * Design the database * Figure out what kinds of business rules are needed. * Code the business rules layer. * Design the front end using the implemented business rules. * Figure out what kinds of "behind the scenes" processing is needed. * Code the batch processing jobs. * Lather, rinse, repeat. While searching through the OI docs, I didn't see much on the design = theory. For example, I've got a web-based sales application I need to write and = it some heavy logic requirements for commissions. Typically, I'd implement = the business rules as a set of pluggable classes to a generic commission = module and then batch process them at night. Is this something that OI is well suited to? I'm beginning to think that I need to look into coding most of those "off-line" business rules and objects using the SPOPS framework and = then tie any needed functionality into an OI application. Am I on the right = track? And does anybody have examples on how to do this? Thanks a bunch! /tma ------------------------------------------------------- This SF.Net email is sponsored by: Oracle 10g Get certified on the hottest thing ever to hit the market... Oracle = 10g.=20 Take an Oracle 10g class now, and we'll give you the exam FREE. http://ads.osdn.com/?ad_id=3D3149&alloc_id=3D8166&op=3Dclick _______________________________________________ openinteract-help mailing list ope...@li... https://lists.sourceforge.net/lists/listinfo/openinteract-help |
From: Kutter M. <mar...@er...> - 2004-05-26 06:46:28
|
Hi Cris ! LDAP schema... ...now, let's explain. LDAP schemata are similar to table definitions in RDBMS, but more = flexible (I think the Postgres object-relational approach is somewhat more = similar to LDAP than a classic RDBMS like mysql or oracle). LDAP schemata are something like (yup really) perl classes without = methods. They may be combined (i.e. one object may have more than one object = class), but (at least if the LDAP server applies "strict" schema checking) = there must be exactly one "structural" (...hmm, let's say that's "concrete") = class in one object (there can be as many "auxiliary" classes as you like. "Abstract" classes just serve as parents for structural and auxiliary classes and may be added to a object definition automatically - this = depends on the LDAP server implementation).=20 Retrieving LDAP schemata from an LDAP server is not really difficult - = but as you have to retrieve _all_ schemata an object belongs to (e.g. all = its object classes) and iterate over the list to find out which attributes = are required ("MUST") and which are optional ("MAY") this is a bit more = work than just defining the required attributes in the SPOPS configuration. Moreover, the suggested SPOPS configuration addition does not impose = any changes on existing SPOPS systems using LDAP, unless these rely on the = LDAP server throwing an exception when an empty value is stored. If the = proposed "ldap_required_fields" is empty, SPOPS would just ignore undefined = values resp. delete them if they had been set previously.=20 The "skip_undef" switch would check _before_ whether to ignore an = undefined SPOPS attribute at all, ignoring it if appropriate. Maybe for the case mentioned above (relying on LDAP to throw errors on receiving empty attributes) another configuration switch should be incorporated (let's say: "ldap_check_fields"). This would mean perfect compatibility to previous SPOPS versions:=20 If "ldap_check_fields" is not set, "ldap_required_fields" would have no effect, resulting in the momentary behaviour. I already got an implementation up for that (currently a patch against SPOPS-0.85). I will change the "ldap_must_fields" name to "ldap_required_fields" and add the "ldap_check_fields" configuration = flag, if you regard this as useful. Regards, Martin Kutter -----Urspr=FCngliche Nachricht----- Von: Chris Winters [mailto:ch...@cw...] Gesendet: Mittwoch, 26. Mai 2004 03:26 An: Kutter Martin Cc: help Openinteract (E-Mail) Betreff: Re: [Openinteract-help] SPOPS::LDAP bug with MAY attributes On May 24, 2004, at 5:11 AM, Kutter Martin wrote: > There is a little flaw in SPOPS::LDAP when it comes to attributes=20 > which are > defined as "MAY" in the ldap objectclass definition. These attributes = > are > optional, they may be present or not. > > When storing a new LDAP object, SPOPS stores all attributes, = including > undefined ones (unless these are listed in "skip_undef" - more = later). > ... Hi Martin, It would be very easy for someone other than me to become the=20 SPOPS::LDAP expert :-) I don't use LDAP any longer and most of the=20 knowledge that I once had has since evaporated. Anyway, let's see if we can address your items... > If an optional attribute is stored with an undefined value, this=20 > normally > results in an LDAP schema error (something like "value not permitted = by > syntax"). > > Adding all optional attributes to "skip_undef" works well for storing = > new > objects ("insert" calls): they are simply ignored, thus not included, = > which > is exactly what "MAY" means. > > But deleting an optional attribute from an already stored object=20 > ("update" > call) does not work this way: Deleting the attribute means setting it = > to > undef in SPOPS - and as undefined values are skipped, the removal of=20 > the > attribute is not stored in the LDAP directory. > > I would suggest the addition of a config parameter=20 > ("ldap_must_fields") as a > solution. This would seem to make sense, although 'ldap_required_field' might be=20 a better name. > The "save_insert" method should regard this parameter in the opposite = > way of > skip_undef: All attributes that are mentioned in "ldap_must_fields" = are > included in the LDAP::Entry object to save, all other undefined=20 > attributes > are not. > > The "save_update" method should check for undefined attributes and=20 > delete > them from the Net::LDAP object (unless they are mentioned in=20 > skip_undef). > > This solution would remove the need to "abuse" skip_undef for = optional=20 > ldap > attributes (and the side effect of impossible removal). Sure, this seems to make sense and is easier to debug as well. Like to take a shot at coding this up? > Another possible solution would be the retrieval of LDAP schemata for = > SPOPS > objects and automatically not setting resp. deleting "MAY" attributes = > if > these are empty - but this should be harder to implement. I'll take your word for it. Are LDAP schemas as standard as database=20 schemas? Thanks! Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Timothy M. A. <ti...@ad...> - 2004-05-26 05:26:31
|
Hello, I've recently discovered and installed OpenInteract for a project I'm working on and I'm overwhelmed with what it can do. I've never used an application framework before, so I'm a little overwhelmed with what OI offers. Typical applications I've developed in the past have gone something like this: * Design the database * Figure out what kinds of business rules are needed. * Code the business rules layer. * Design the front end using the implemented business rules. * Figure out what kinds of "behind the scenes" processing is needed. * Code the batch processing jobs. * Lather, rinse, repeat. While searching through the OI docs, I didn't see much on the design theory. For example, I've got a web-based sales application I need to write and it some heavy logic requirements for commissions. Typically, I'd implement the business rules as a set of pluggable classes to a generic commission module and then batch process them at night. Is this something that OI is well suited to? I'm beginning to think that I need to look into coding most of those "off-line" business rules and objects using the SPOPS framework and then tie any needed functionality into an OI application. Am I on the right track? And does anybody have examples on how to do this? Thanks a bunch! /tma |
From: Chris W. <ch...@cw...> - 2004-05-26 01:26:00
|
On May 24, 2004, at 5:11 AM, Kutter Martin wrote: > There is a little flaw in SPOPS::LDAP when it comes to attributes > which are > defined as "MAY" in the ldap objectclass definition. These attributes > are > optional, they may be present or not. > > When storing a new LDAP object, SPOPS stores all attributes, including > undefined ones (unless these are listed in "skip_undef" - more later). > ... Hi Martin, It would be very easy for someone other than me to become the SPOPS::LDAP expert :-) I don't use LDAP any longer and most of the knowledge that I once had has since evaporated. Anyway, let's see if we can address your items... > If an optional attribute is stored with an undefined value, this > normally > results in an LDAP schema error (something like "value not permitted by > syntax"). > > Adding all optional attributes to "skip_undef" works well for storing > new > objects ("insert" calls): they are simply ignored, thus not included, > which > is exactly what "MAY" means. > > But deleting an optional attribute from an already stored object > ("update" > call) does not work this way: Deleting the attribute means setting it > to > undef in SPOPS - and as undefined values are skipped, the removal of > the > attribute is not stored in the LDAP directory. > > I would suggest the addition of a config parameter > ("ldap_must_fields") as a > solution. This would seem to make sense, although 'ldap_required_field' might be a better name. > The "save_insert" method should regard this parameter in the opposite > way of > skip_undef: All attributes that are mentioned in "ldap_must_fields" are > included in the LDAP::Entry object to save, all other undefined > attributes > are not. > > The "save_update" method should check for undefined attributes and > delete > them from the Net::LDAP object (unless they are mentioned in > skip_undef). > > This solution would remove the need to "abuse" skip_undef for optional > ldap > attributes (and the side effect of impossible removal). Sure, this seems to make sense and is easier to debug as well. Like to take a shot at coding this up? > Another possible solution would be the retrieval of LDAP schemata for > SPOPS > objects and automatically not setting resp. deleting "MAY" attributes > if > these are empty - but this should be harder to implement. I'll take your word for it. Are LDAP schemas as standard as database schemas? Thanks! Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Kutter M. <mar...@er...> - 2004-05-24 09:11:54
|
Hi * ! There is a little flaw in SPOPS::LDAP when it comes to attributes which are defined as "MAY" in the ldap objectclass definition. These attributes are optional, they may be present or not. When storing a new LDAP object, SPOPS stores all attributes, including undefined ones (unless these are listed in "skip_undef" - more later). If an optional attribute is stored with an undefined value, this normally results in an LDAP schema error (something like "value not permitted by syntax"). Adding all optional attributes to "skip_undef" works well for storing new objects ("insert" calls): they are simply ignored, thus not included, which is exactly what "MAY" means. But deleting an optional attribute from an already stored object ("update" call) does not work this way: Deleting the attribute means setting it to undef in SPOPS - and as undefined values are skipped, the removal of the attribute is not stored in the LDAP directory. I would suggest the addition of a config parameter ("ldap_must_fields") as a solution. The "save_insert" method should regard this parameter in the opposite way of skip_undef: All attributes that are mentioned in "ldap_must_fields" are included in the LDAP::Entry object to save, all other undefined attributes are not. The "save_update" method should check for undefined attributes and delete them from the Net::LDAP object (unless they are mentioned in skip_undef). This solution would remove the need to "abuse" skip_undef for optional ldap attributes (and the side effect of impossible removal). Another possible solution would be the retrieval of LDAP schemata for SPOPS objects and automatically not setting resp. deleting "MAY" attributes if these are empty - but this should be harder to implement. Regards, Martin Kutter |
From: Kutter M. <mar...@er...> - 2004-05-18 13:59:41
|
Hi * ! I'm currently investigating on a larger project using OpenInteract as a frontend to information stored in an LDAP directory. The SPOPS::LDAP has_a and links_to relationships seem pretty interesting, but it looks like they don't cover what LDAP guys normally call "DIT containment", that is objects being leaves of a parent node. There is no 'has_a' field in the parent nor in the child object. A DIT containment relationship between a node and its leaves exists by mere exitance of both. If there is interest in this particular (LDAP-specific) relationship, I would implement it. Regards, Martin Kutter |
From: Chris W. <ch...@cw...> - 2004-05-13 11:41:04
|
At YAPC::NA in June I'll be giving a three-hour tutorial on building applications with OI2 -- it's a working tutorial where we'll actually be building an application as we go, learning bits and pieces about the framework and architecture along the way. [1] Last night I gave the first part of the talk -- building a Hello World application -- to the Pittsburgh Perlmongers. The tutorial shipped with OI2 [2] is probably more useful to read but I thought I'd post the presentation anyway: http://www.openinteract.org/presentations/pgh_pm_oi2.pdf If you have any ideas about what you'd expect or like to see in the long presentation, I'm all ears. Chris [1] http://yapc.org/America/day2.shtml [2] http://www.openinteract.org/docs/oi2-snapshot/OpenInteract2/Manual/ Tutorial.html -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Chris W. <ch...@cw...> - 2004-05-03 19:56:59
|
On May 3, 2004, at 3:26 PM, Lee Revell wrote: > The new bug tracking system is the best I have ever seen. I was able > to > open an issue in seconds; judging from the quick turnaround it is > equally easy to use from the other side. Bugzilla is completely > unusable in > comparison. Their licensing scheme is indeed smart, as I have already > recommended JIRA for internal use at my company. Glad to hear you like it! One of the nifty things about JIRA is that if you're a paying customer you get access to the source code and can implement improvements/customizations fairly easily. It takes a while to learn how some of the libraries that JIRA uses work (I severely dislike the Entity Engine mapping tool) but I've successfully implemented a new workflow. Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: <rlr...@dc...> - 2004-05-03 19:26:28
|
Chris, The new bug tracking system is the best I have ever seen. I was able to open an issue in seconds; judging from the quick turnaround it is equally easy to use from the other side. Bugzilla is completely unusable in comparison. Their licensing scheme is indeed smart, as I have already recommended JIRA for internal use at my company. Thanks, Lee Revell DCANet On Fri, Apr 30, 2004 at 09:24:00AM -0400, Chris Winters wrote: > About a month and a half ago I mentioned there would be some upcoming > infrastructure changes. Here's the first: all SPOPS and OpenInteract > issues should be entered into the JIRA issue tracking system at: > > http://jira.openinteract.org/ > > I'm in the process of moving still-relevant items from the SourceForge > system to JIRA. > > You should find that JIRA is a much nicer system than the SF one. And > it's just as free for us -- while JIRA is a commercial product, they > have a very smart scheme of granting licenses to open source projects. > > Thanks! > > Chris > > -- > Chris Winters > Creating enterprise-capable snack systems since 1988 > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: Oracle 10g > Get certified on the hottest thing ever to hit the market... Oracle 10g. > Take an Oracle 10g class now, and we'll give you the exam FREE. > http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click > _______________________________________________ > openinteract-help mailing list > ope...@li... > https://lists.sourceforge.net/lists/listinfo/openinteract-help |
From: Chris W. <ch...@cw...> - 2004-04-30 13:38:40
|
On their site status page: http://sourceforge.net/docman/display_doc.php?docid=2352&group_id=1 SF notes: ---------- As of 2004-04-28 the CVS services will no longer function with the hostname of cvs.PROJECTNAME.sourceforge.net. You should change your CVS commands to use the host cvs.sourceforge.net and that should resolve any outstanding issues that you may have. This issue came about as a result of upgrading from BIND 8 to BIND 9 which doesn't allow for a wildcard in the middle of a hostname. ---------- This means if you try to update CVS that was checked out from 'cvs.spops.sourceforge.net' or 'cvs.openinteract.sourceforge.net' you'll see something like: Cannot access /cvsroot/spops/CVSROOT No such file or directory There are two ways to fix this: (1) Just check out the code again, probably the easiest way. (2) Modify the 'Root' file in all the CVS directories to refer to 'cvs.sourceforge.net' instead of the old host. Strangely enough, you can use Perl to do this... I have a script to do (2) if anyone is interested. Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Chris W. <ch...@cw...> - 2004-04-30 13:24:04
|
About a month and a half ago I mentioned there would be some upcoming infrastructure changes. Here's the first: all SPOPS and OpenInteract issues should be entered into the JIRA issue tracking system at: http://jira.openinteract.org/ I'm in the process of moving still-relevant items from the SourceForge system to JIRA. You should find that JIRA is a much nicer system than the SF one. And it's just as free for us -- while JIRA is a commercial product, they have a very smart scheme of granting licenses to open source projects. Thanks! Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: <rlr...@dc...> - 2004-04-01 19:17:11
|
I am still having a problem with the _clear methods in SPOPS::LDAP subclasses. The cleared attribute is set to 'undef' rather than being deleted, and calling save() on the object passes the attribute to the LDAP server with a null value. If objectClass has changed to one that does not allow this attribute, the save fails. This is probably harmless under SPOPS::DBI as your table schemas hopefully do not change between fetching and saving the user. Lee On Tue, Mar 02, 2004 at 11:42:28AM -0500, Lee Revell wrote: > I ran some more tests, and it seems that this behavior only occurs for > attributes fetched from the persistent store. Once you use the > automatically generated mutator to change a value then foo_clear works > as expected: > > $user = DCA::User->fetch("rlrevell"); print $user->o > DCANet > > $user = DCA::User->fetch("rlrevell"); $user->o_clear; print $user->o > DCANet > > $user = DCA::User->fetch("rlrevell"); $user->o("Foo"); print $user->o > Foo > > $user = DCA::User->fetch("rlrevell"); $user->o("Foo"); $user->o_clear; print $user->o > <prints nothing> > > Hope this helps, > > Lee > > On Tue, Mar 02, 2004 at 11:03:40AM -0500, Lee Revell wrote: > > On Tue, Mar 02, 2004 at 07:32:01AM -0500, Chris Winters wrote: > > > On Mar 1, 2004, at 6:36 PM, Lee Revell wrote: > > > >I have an SPOPS::LDAP subclass called DCA::User for which the > > > >automatically generated $FIELD_clear() methods do not seem to > > > >work. Here is an example (I have overridden as_string from > > > >SPOPS to produce LDIF output): > > > > > > > >perl -MDCA::Users -e 'my $user = DCA::User->fetch("rlrevell"); > > > >$user->_o_clear; print $user->as_string' > > > > > > A few thoughts: > > > > > > a) that should be '$user->o_clear', but it might be a copy-n-paste typo? > > > > > > > This is actually a typo in the SPOPS documentation (from > > SPOPS::Manual::Object): > > > > Instead call the '_clear' method associated with a fieldname: > > > > $user->_m_name_clear; > > > > This explicitly sets the value to undef. > > > > I have tried it both ways with negative results. > > > > > b) do you have anything else in your ISA that uses AUTOLOAD that might > > > catch this first call to 'o_clear' (or 'foo_clear')? > > > > > > > Not that I can tell. Here is a snippet of my SPOPS config: > > class => 'DCA::User', > > isa => [ qw/ DCA::LDAPConnect SPOPS::LDAP/ ], > > rules_from => [ qw/ DCA::ValidateUser / ], > > code_class => [ qw/ DCA::LDAPUser / ], > > > > DCA::LDAPConnect handles LDAP connection management and > > DCA::ValidateUser is where my rulesets live. Currently there is just > > one method in there that is run as a pre_save_handler and updates > > dependent attributes (like the home directory and GECOS field) when > > primary attributes, like o(rganization), change. > > > > DCA::LDAPUser just contains an as_string method that prints LDIF output. > > > > I have not defined an AUTOLOAD method of my own anywhere. > > > > > c) are you using SPOPS 0.80? > > > > > > > Yes. > > > > > d) do all the tests n t/00_base.t pass (esp. tests 48-50)? > > > > > > > As far as I can tell, yes: > > > > PERL_DL_NONLAZY=1 /local/bin/perl5.8.0 "-MExtUtils::Command::MM" "-e" > > "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t > > t/00_base.....................ok > > t/01_tie......................ok > > t/02_tie_strict...............ok > > etc. > > > > > e) I assume that 'use'ing DCA::Users invokes SPOPS::Initialize? > > > > > > > Yes. All other SPOPS functionality works fine; I can fetch a user, > > update attributes, and save the user fine. It's just the foo_clear > > methods that don't seem to work. > > > > > f) does '$user->{o} = undef' work as expected? > > > > > > > Yes; the resulting object has the o set to undef. The problem is that > > when I then go to call $user->save, it tries to save the user with the o > > attribute set to undef, which causes a schema violation in the case that > > the user is modified to an objectclass that does not allow the attribute > > in question. > > > > The specific problem I am having is that when a user is modified from an > > account type that has dialup access to one that does not, I have a > > dcanethours field that needs to be deleted, as this field specifies the > > number of hours per month a user is allowed to be dialed in. > > > > Thanks for your help; SPOPS has been invaluable to this project. > > > > > Chris > > > > > > -- > > > Chris Winters > > > Creating enterprise-capable snack systems since 1988 > > > |
From: Chris W. <ch...@cw...> - 2004-03-26 17:14:16
|
On Mar 25, 2004, at 2:22 PM, forehead wrote: > ... > here is the question: since we now support "x::y" like name for source > name to process > ( which inside the scence, TT2::Provider do fetch and load the stuff > from template directories > or cache which could be more effective ), why here ( in program not in > template file) load it > from outside ? why not just give the $source as the format 'x::y' > ,just like what we do in > template file inside? This is a good point. I created: OpenInteract2::ContentGenerator::TemplateSource->load_source() so that HTML::Template, Text::Template and other processing engines could take advantage of the 'package::name' template naming syntax. But we're kind of skating around the caching provided by TT here, aren't we? I'll look into it. thanks! Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Chris W. <ch...@cw...> - 2004-03-26 17:12:18
|
On Mar 26, 2004, at 10:15 AM, Vsevolod (Simon) Ilyushchenko wrote: > Maybe I am missing something, but is there a way in SPOPS to retrieve > expressions like MAX(field) etc. I'd like to be able to say something > like > my ($maxValue) = SPOPS::Class->select({select => [MAX(field)]}) > > (ie, keeping the SPOPS way of passing parameters compared to raw SQL > calls). > > It sounds simple, but I can't find a way of doing it. Every SPOPS::DBI implementation also subclasses SPOPS::SQLInterface, so you can do: my $max_row = SPOPS_Class->db_select({ field => [ 'MAX( myfield )' ], table => SPOPS_class->table_name, return => 'single' ); print "Max of 'myfield' is $max_row->[0]\n"; I always put stuff like this in the class implementation so I can just do something like: my $max = SPOPS_Class->find_max_myfield; Of course you can parameterize further, passing in 'myfield' and plugging it into the select; even just creating a find_max() in a parent class of all your SPOPS classes since this isn't tied to any particular class. Later, Chris -- Chris Winters Creating enterprise-capable snack systems since 1988 |
From: Vsevolod (S. I. <si...@cs...> - 2004-03-26 15:15:19
|
Chris, Maybe I am missing something, but is there a way in SPOPS to retrieve=20 expressions like MAX(field) etc. I'd like to be able to say something lik= e my ($maxValue) =3D SPOPS::Class->select({select =3D> [MAX(field)]}) (ie, keeping the SPOPS way of passing parameters compared to raw SQL call= s). It sounds simple, but I can't find a way of doing it. Thanks, Simon --=20 Simon (Vsevolod ILyushchenko) si...@cs... http://www.simonf.com The unknown is honoured, the known is neglected - until all is known. The C=FA Chulaind myth |
From: forehead<for...@4r...> - 2004-03-25 19:21:35
|
hi, openinteract-help there is a point i confuse, in TT2Process.pm, the generate method contains: if ( $source_type eq 'NAME' ) { $template_name = $source; my ( $text, $filename, $modtime ) = OpenInteract2::ContentGenerator::TemplateSource->load_source( $template_name ); $source = \$text; } else { $template_name = '_anonymous_'; } and later use the template object call process method with $source: $template->process( $source, $template_vars, \$html ) here is the question: since we now support "x::y" like name for source name to process ( which inside the scence, TT2::Provider do fetch and load the stuff from template directories or cache which could be more effective ), why here ( in program not in template file) load it from outside ? why not just give the $source as the format 'x::y' ,just like what we do in template file inside? ---------------------- forehead (Chun Sheng) for...@4r... 2004-03-26 |