<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Community Support for OpenDocMan (Deprecated) - OpenDocMan Feature Requests]]></title>
		<link>https://forum.opendocman.com/</link>
		<description><![CDATA[Community Support for OpenDocMan (Deprecated) - https://forum.opendocman.com]]></description>
		<pubDate>Thu, 04 Jun 2026 20:11:23 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[New Discourse Site for Support]]></title>
			<link>https://forum.opendocman.com/thread-1044.html</link>
			<pubDate>Sat, 01 Feb 2020 16:07:27 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=1">adminla</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-1044.html</guid>
			<description><![CDATA[<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Hello,</span></span></span></span></span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">We are moving our support discussions to our new Discourse site at <a href="https://discourse.opendocman.com/" target="_blank" rel="noopener" class="mycode_url"><span style="color: #49657d;" class="mycode_color"><span style="color: #333333;" class="mycode_color">https://discourse.opendocman.com/</span></span></a> . Please visit there if you have a questions and/or comment about OpenDocMan. This forum site will remain for archival purposes only.</span></span></span></span></span></span></span>]]></description>
			<content:encoded><![CDATA[<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">Hello,</span></span></span></span></span></span></span><br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Source Sans Pro;" class="mycode_font"><span style="font-size: small;" class="mycode_size"><span style="font-family: Tahoma, Verdana, Arial, sans-serif;" class="mycode_font">We are moving our support discussions to our new Discourse site at <a href="https://discourse.opendocman.com/" target="_blank" rel="noopener" class="mycode_url"><span style="color: #49657d;" class="mycode_color"><span style="color: #333333;" class="mycode_color">https://discourse.opendocman.com/</span></span></a> . Please visit there if you have a questions and/or comment about OpenDocMan. This forum site will remain for archival purposes only.</span></span></span></span></span></span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Multiple selection for Department box]]></title>
			<link>https://forum.opendocman.com/thread-1033.html</link>
			<pubDate>Wed, 31 Jul 2019 02:52:21 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2603">phoutsavong</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-1033.html</guid>
			<description><![CDATA[Hi all,<br />
<br />
How can i make a multiple selection for the department box when adding a new document?<br />
<br />
Thank you,]]></description>
			<content:encoded><![CDATA[Hi all,<br />
<br />
How can i make a multiple selection for the department box when adding a new document?<br />
<br />
Thank you,]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Original file names instead of .dat files]]></title>
			<link>https://forum.opendocman.com/thread-1028.html</link>
			<pubDate>Wed, 10 Apr 2019 14:13:30 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2573">Kidbooo</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-1028.html</guid>
			<description><![CDATA[Hello everyone,,<br />
Use the original filename in the filesystem instead of renaming it to fileID.dat<br />
<br />
Proposed solution would be to name the files "fileID-fileName" which would prevent files from having duplicate file names.]]></description>
			<content:encoded><![CDATA[Hello everyone,,<br />
Use the original filename in the filesystem instead of renaming it to fileID.dat<br />
<br />
Proposed solution would be to name the files "fileID-fileName" which would prevent files from having duplicate file names.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Looking for A Document Management System with alerts]]></title>
			<link>https://forum.opendocman.com/thread-1027.html</link>
			<pubDate>Fri, 22 Mar 2019 03:11:43 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2573">Kidbooo</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-1027.html</guid>
			<description><![CDATA[Hello everyone,,<br />
Our engineering department is looking for something that they can upload specs to and have it notify our suppliers (upwards of 20 different people) when a new spec has been uploaded. Weve looked at Arena and e-room also Alfresco, and those are much more of an overkill than what we need. Also they would prefer it to be local and not cloud based, any ideas would be greatly appreciated! =D]]></description>
			<content:encoded><![CDATA[Hello everyone,,<br />
Our engineering department is looking for something that they can upload specs to and have it notify our suppliers (upwards of 20 different people) when a new spec has been uploaded. Weve looked at Arena and e-room also Alfresco, and those are much more of an overkill than what we need. Also they would prefer it to be local and not cloud based, any ideas would be greatly appreciated! =D]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[MP3 And MP4 Auto Play Ability]]></title>
			<link>https://forum.opendocman.com/thread-1026.html</link>
			<pubDate>Wed, 20 Mar 2019 11:37:21 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2572">phendee</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-1026.html</guid>
			<description><![CDATA[It would be good to have an auto play of MP3 &amp; MP4 file formats without having to download to personal computers.  When user clicks "View", then "View in new window, Click Here" a window opens and the Media begins to play.  This could be good for PDF, JPEG, TIFF, (any image format) and others.  Users could not edit anything in this window.  They could only View or Play the file.]]></description>
			<content:encoded><![CDATA[It would be good to have an auto play of MP3 &amp; MP4 file formats without having to download to personal computers.  When user clicks "View", then "View in new window, Click Here" a window opens and the Media begins to play.  This could be good for PDF, JPEG, TIFF, (any image format) and others.  Users could not edit anything in this window.  They could only View or Play the file.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How do I submit feature request code?]]></title>
			<link>https://forum.opendocman.com/thread-991.html</link>
			<pubDate>Thu, 01 Jun 2017 01:59:52 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2403">mer</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-991.html</guid>
			<description><![CDATA[Greetings Team,<br />
<br />
Newbie to GitHub (used bitbucket for one project a while back) and want to make sure I'm doing things right and don't muck up the whole process. I have read the CONTRIBUTING.md and reviewed the Git branching model at http://nvie.com/posts/a-successful-git-branching-model/ and (think) I understand the issue fix submittal and documentation update submittal process, but not sure on the feature update.<br />
<br />
I have developed a dynamic files list which allows the admin root user the ability to select which data fields, calculated fields and udf fields to include in the file output, and in what order to arrange the selected columns. This has been referenced in issues 8, 114, 154, 234 and 252, and is #13 on the top ideas list.<br />
<br />
I believe the process should be to clone the develop branch, initiate a fork of that clone, make my edits to that fork, commit those changes, sync the repo, publish the local changes, then submit a pull request.<br />
<br />
Where I'm lost is naming this branch. Is there different naming convention for feature additions? Should I pick a random/newest/oldest existing issue? Or create a new issue referencing all the others even though I don't think of this as an bug (issue) but new functionality. Other?<br />
<br />
Thanks in advance for the initial hand-holding...]]></description>
			<content:encoded><![CDATA[Greetings Team,<br />
<br />
Newbie to GitHub (used bitbucket for one project a while back) and want to make sure I'm doing things right and don't muck up the whole process. I have read the CONTRIBUTING.md and reviewed the Git branching model at http://nvie.com/posts/a-successful-git-branching-model/ and (think) I understand the issue fix submittal and documentation update submittal process, but not sure on the feature update.<br />
<br />
I have developed a dynamic files list which allows the admin root user the ability to select which data fields, calculated fields and udf fields to include in the file output, and in what order to arrange the selected columns. This has been referenced in issues 8, 114, 154, 234 and 252, and is #13 on the top ideas list.<br />
<br />
I believe the process should be to clone the develop branch, initiate a fork of that clone, make my edits to that fork, commit those changes, sync the repo, publish the local changes, then submit a pull request.<br />
<br />
Where I'm lost is naming this branch. Is there different naming convention for feature additions? Should I pick a random/newest/oldest existing issue? Or create a new issue referencing all the others even though I don't think of this as an bug (issue) but new functionality. Other?<br />
<br />
Thanks in advance for the initial hand-holding...]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to find secondary items of UDF sub-selection list?]]></title>
			<link>https://forum.opendocman.com/thread-950.html</link>
			<pubDate>Wed, 20 Jul 2016 10:55:22 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2027">Elias.Jadige</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-950.html</guid>
			<description><![CDATA[I created a sub-selection list as UDF and as primary items I defined "A" item and "B" item. As secondary items of "A", I defined "1" item "2" item. I uploaded two files, one is "A 1" and another is "A 2". I don't know how to find the file "A 1" because I dont know what to write in the searching filter. I can find both files selecting the filter as my sub-selection list created and writing "A" in the filter and as result I get both files "A 1" and "A 2" but as result I want ONLY "A 1". I tried to write "A.1", "A-1", "A/1" but all missed. <br />
<br />
Greetings, Elias.]]></description>
			<content:encoded><![CDATA[I created a sub-selection list as UDF and as primary items I defined "A" item and "B" item. As secondary items of "A", I defined "1" item "2" item. I uploaded two files, one is "A 1" and another is "A 2". I don't know how to find the file "A 1" because I dont know what to write in the searching filter. I can find both files selecting the filter as my sub-selection list created and writing "A" in the filter and as result I get both files "A 1" and "A 2" but as result I want ONLY "A 1". I tried to write "A.1", "A-1", "A/1" but all missed. <br />
<br />
Greetings, Elias.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Request folder per user in Document Directory]]></title>
			<link>https://forum.opendocman.com/thread-936.html</link>
			<pubDate>Mon, 04 Apr 2016 23:12:33 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2213">keyshix</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-936.html</guid>
			<description><![CDATA[Can you add features of Seperating users folder in Document Directory.<br />
For Example I have a user1<br />
he has a user1 Folder in Document Directory where all his / her documents will be uploaded. Same goes for all the users they will have different folders in the document directory. This is just for file sorting and cleanliness of the documents. Thank you.]]></description>
			<content:encoded><![CDATA[Can you add features of Seperating users folder in Document Directory.<br />
For Example I have a user1<br />
he has a user1 Folder in Document Directory where all his / her documents will be uploaded. Same goes for all the users they will have different folders in the document directory. This is just for file sorting and cleanliness of the documents. Thank you.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Multilingual Interface?]]></title>
			<link>https://forum.opendocman.com/thread-935.html</link>
			<pubDate>Mon, 04 Apr 2016 08:11:09 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2212">mawni</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-935.html</guid>
			<description><![CDATA[Hello all, I am changing the code to have the language as a user preference, when the user is created you select the language, then whenever he/she login, the opendocman will be on his/her language. <br />
did any one try doing do before, or I am the first one. <br />
<br />
as I will add language variable to every singe echo in the application as a global variable.]]></description>
			<content:encoded><![CDATA[Hello all, I am changing the code to have the language as a user preference, when the user is created you select the language, then whenever he/she login, the opendocman will be on his/her language. <br />
did any one try doing do before, or I am the first one. <br />
<br />
as I will add language variable to every singe echo in the application as a global variable.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Sub Category Creation]]></title>
			<link>https://forum.opendocman.com/thread-918.html</link>
			<pubDate>Wed, 13 Jan 2016 04:17:17 -0500</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=2171">AtE2016</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-918.html</guid>
			<description><![CDATA[Hi<br />
<br />
Is it possible to create sub categories on this or not. As I can't seem to find where to create them. I am only allowed to create main categories. <br />
<br />
Thanks<br />
<br />
Nigel]]></description>
			<content:encoded><![CDATA[Hi<br />
<br />
Is it possible to create sub categories on this or not. As I can't seem to find where to create them. I am only allowed to create main categories. <br />
<br />
Thanks<br />
<br />
Nigel]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[user in multiple departments]]></title>
			<link>https://forum.opendocman.com/thread-805.html</link>
			<pubDate>Thu, 09 Apr 2015 17:14:35 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=1977">sticcino</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-805.html</guid>
			<description><![CDATA[Hi,<br />
<br />
can docman support a user in multiple departments.<br />
<br />
example:<br />
we have a board of directors, people on finance committee, people on membership committees, etc<br />
<br />
if the user is a member of the board and membership committee, I need him to see the docs for both of those areas.<br />
<br />
so in the user management page, you should be able to assign the user to multiple departments.<br />
when listing the documents -- list the documents for the departments the user is a member of only.<br />
 <br />
currently docman doesn't support a user in multiple departments, is this something easily implemented.<br />
<br />
<br />
<br />
thanks,<br />
Johnny]]></description>
			<content:encoded><![CDATA[Hi,<br />
<br />
can docman support a user in multiple departments.<br />
<br />
example:<br />
we have a board of directors, people on finance committee, people on membership committees, etc<br />
<br />
if the user is a member of the board and membership committee, I need him to see the docs for both of those areas.<br />
<br />
so in the user management page, you should be able to assign the user to multiple departments.<br />
when listing the documents -- list the documents for the departments the user is a member of only.<br />
 <br />
currently docman doesn't support a user in multiple departments, is this something easily implemented.<br />
<br />
<br />
<br />
thanks,<br />
Johnny]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[I'd like a tester or two please... I added LDAP support]]></title>
			<link>https://forum.opendocman.com/thread-801.html</link>
			<pubDate>Thu, 26 Mar 2015 14:21:34 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=1972">HyTronix</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-801.html</guid>
			<description><![CDATA[Hi All,<br />
<br />
<br />
I posted to the devs mailing list, but then looking through the archives it looks like it's been dead a while.<br />
<br />
Anyway, I wrote "users from LDAP" support.  It works fine here, but obviously I'd like to get someone else to test it.<br />
<br />
Here's what I posted to the devs list:<br />
<br />
Hi Devs,<br />
<br />
I just wrote in support for getting user accounts from LDAP.  Basically, if this option is enabled, it will check LDAP for the user who is being logged in.  If the username and password match, it'll then check the opendocman database to see if the user already exists there.  If it does, it synchronizes the password field with the LDAP password.  If not, it adds a new user with defaults.  All of this is against version 1.3.2.<br />
<br />
To test this out, you need the following in config.php:<br />
<br />
-----8&lt;-----<br />
&#36;GLOBALS['CONFIG']['ldap_enable'] = TRUE;<br />
&#36;GLOBALS['CONFIG']['ldap_host'] = 'my.ldaphost.com';<br />
&#36;GLOBALS['CONFIG']['ldap_port'] = '389';<br />
<br />
&#36;GLOBALS['CONFIG']['base_dn'] = "ou=People,dc=mydomain,dc=com";<br />
&#36;GLOBALS['CONFIG']['searchfilter'] = "(&amp;(uid=%uid))";<br />
&#36;GLOBALS['CONFIG']['bind_dn'] = "cn=Manager,dc=mydomain,dc=com";<br />
&#36;GLOBALS['CONFIG']['bind_pw'] = "managers_password";<br />
-----8&lt;-----<br />
<br />
...and then patch index.php with this patch:<br />
<br />
-----8&lt;-----<br />
--- index.php    2015-03-26 13:42:01.781054000 -0400<br />
+++ index.php-orig    2015-03-26 13:49:07.721054000 -0400<br />
@@ -78,15 +78,6 @@<br />
    &#36;frmuser = &#36;_POST['frmuser'];<br />
    &#36;frmpass = &#36;_POST['frmpass'];<br />
<br />
-    // JEPH - Check for LDAP users enabled<br />
-    if(&#36;GLOBALS['CONFIG']['ldap_enable']) {<br />
-    require 'ldap-users.inc';<br />
-    &#36;ldap_success = ldap_login(&#36;frmuser, &#36;frmpass);<br />
-    if(!empty(&#36;ldap_success)) {<br />
-        add_or_modify(&#36;frmuser, &#36;frmpass);<br />
-    }<br />
-    }<br />
-   <br />
    // check login and md5()<br />
    // connect and execute query<br />
    &#36;query = "<br />
@@ -134,11 +125,11 @@<br />
<br />
    // if row exists - login/pass is correct<br />
    if (count(&#36;result) == 1)<br />
-    {  <br />
+    {       <br />
        // register the user's ID<br />
        &#36;id = &#36;result[0]['id'];<br />
-        &#36;username = &#36;result[0]['username'];<br />
-        &#36;password = &#36;result[0]['password'];<br />
+        &#36;username = &#36;result['username'];<br />
+        &#36;password = &#36;result['password'];<br />
<br />
        // initiate a session<br />
        &#36;_SESSION['uid'] = &#36;id;<br />
-----8&lt;-----<br />
<br />
...and add my routines to ldap-users.inc (all of this attached) but in case this list strips attachments, test follows:<br />
<br />
-----8&lt;-----<br />
&lt;?php<br />
   // ldap-users.inc<br />
   //<br />
   // Authenticate users against LDAP<br />
   // John E.P. Hynes/HyTronix [03/25/2015]<br />
   //<br />
   // Takes username/password and tries to bind.<br />
   // Return user name on success, FALSE on failure.<br />
<br />
function ldap_login(&#36;user, &#36;pass) {<br />
   &#36;ldap_host = &#36;GLOBALS['CONFIG']['ldap_host'];<br />
   &#36;ldap_port = &#36;GLOBALS['CONFIG']['ldap_port'];<br />
   &#36;base_dn = &#36;GLOBALS['CONFIG']['base_dn'];<br />
   &#36;searchfilter = &#36;GLOBALS['CONFIG']['searchfilter'];<br />
   &#36;bind_dn = &#36;GLOBALS['CONFIG']['bind_dn'];<br />
   &#36;bind_pw = &#36;GLOBALS['CONFIG']['bind_pw'];<br />
<br />
   &#36;ldap_conn = ldap_connect(&#36;ldap_host, &#36;ldap_port)<br />
       or error_log("ldap_connect() failed.");<br />
<br />
   ldap_set_option(&#36;ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);<br />
   ldap_set_option(&#36;ldap_conn, LDAP_OPT_REFERRALS, 0);<br />
<br />
   &#36;bind = ldap_bind(&#36;ldap_conn, &#36;bind_dn, &#36;bind_pw)<br />
       or error_log("ldap_bind() failed.");<br />
<br />
   &#36;match_count = 1;<br />
   &#36;this_filter = str_replace("%uid", &#36;user, &#36;searchfilter, &#36;match_count);<br />
   if(empty(&#36;this_filter)) {<br />
       error_log("Error in searchfilter with str_replace(), got &#36;this_filter");<br />
       return FALSE;<br />
   }<br />
  <br />
   &#36;attribute = array("uid");<br />
   &#36;search_results = @ldap_search(&#36;ldap_conn, &#36;base_dn, &#36;this_filter, &#36;attribute, 0, 2);<br />
  <br />
   if (!&#36;search_results) {<br />
       error_log("Something went wrong in ldap_search.");<br />
   }<br />
<br />
   if (ldap_count_entries(&#36;ldap_conn, &#36;search_results) != 1) {<br />
       error_log("ldap_search() returned &#36;search_results in error.");<br />
       return FALSE;<br />
   }<br />
<br />
   &#36;user_entry = ldap_first_entry(&#36;ldap_conn, &#36;search_results);<br />
   &#36;this_dn = ldap_get_dn(&#36;ldap_conn, &#36;user_entry);<br />
<br />
   &#36;user_bind = ldap_bind(&#36;ldap_conn, &#36;this_dn, &#36;pass);<br />
   if (!&#36;user_bind) {<br />
       return FALSE;<br />
   }<br />
<br />
   ldap_close(&#36;ldap_conn);<br />
<br />
   return &#36;user;<br />
}<br />
<br />
function add_or_modify(&#36;username, &#36;password) {<br />
   // Check to make sure user does not already exist<br />
   &#36;pdo = &#36;GLOBALS['pdo'];<br />
   &#36;query = "SELECT COUNT(*) FROM {&#36;GLOBALS['CONFIG']['db_prefix']}user WHERE username = '&#36;username'";<br />
   if (&#36;count = &#36;pdo-&gt;query(&#36;query)) {<br />
       if (&#36;count-&gt;fetchColumn() == 1) {<br />
           update_password(&#36;username, &#36;password);<br />
           return;<br />
       } elseif (&#36;count-&gt;fetchColumn() == 0) {<br />
           create_user(&#36;username, &#36;password);<br />
           return;<br />
       }<br />
       else {<br />
           error_log("Database error - username not unique.");<br />
       }<br />
   }<br />
  <br />
   return;<br />
}<br />
<br />
function update_password(&#36;username, &#36;password) {<br />
   &#36;pdo = &#36;GLOBALS['pdo'];<br />
   &#36;query = "UPDATE {&#36;GLOBALS['CONFIG']['db_prefix']}user<br />
               SET password=md5(:password) WHERE username=:username";<br />
   &#36;stmt = &#36;pdo-&gt;prepare(&#36;query);<br />
   &#36;stmt-&gt;execute(array(':username' =&gt; &#36;username, ':password' =&gt; &#36;password));<br />
<br />
   return;<br />
}<br />
<br />
function create_user(&#36;username, &#36;password) {<br />
   &#36;pdo = &#36;GLOBALS['pdo'];<br />
   &#36;department = 1;<br />
   &#36;phonenumber = "000-000-0000";<br />
   &#36;email = "";<br />
   &#36;lastname = "";<br />
   &#36;firstname = "";<br />
   &#36;can_add = 0;<br />
   &#36;can_checkin = 0;<br />
<br />
   &#36;query = "INSERT INTO {&#36;GLOBALS['CONFIG']['db_prefix']}user<br />
       (username, password, department, phone, Email,last_name, first_name, can_add, can_checkin)<br />
       VALUES(<br />
           :username,<br />
           md5(:password),<br />
           :department,<br />
           :phonenumber,<br />
           :email,<br />
           :lastname,<br />
           :firstname,<br />
           :can_add,<br />
           :can_checkin<br />
       )";<br />
<br />
   &#36;stmt = &#36;pdo-&gt;prepare(&#36;query);<br />
   &#36;stmt-&gt;execute(array(<br />
       ':username' =&gt; &#36;username,<br />
       ':password' =&gt; &#36;password,<br />
       ':department' =&gt; &#36;department,<br />
       ':phonenumber' =&gt; &#36;phonenumber,<br />
       ':email' =&gt; &#36;email,<br />
       ':lastname' =&gt; &#36;lastname,<br />
       ':firstname' =&gt; &#36;firstname,<br />
       ':can_add' =&gt; &#36;can_add,<br />
       ':can_checkin' =&gt; &#36;can_checkin<br />
       ));<br />
<br />
   &#36;user_id = &#36;pdo-&gt;lastInsertId();;<br />
   &#36;admin = 0;<br />
   &#36;query = "INSERT INTO {&#36;GLOBALS['CONFIG']['db_prefix']}admin (id, admin) VALUES(:user_id, :admin)";<br />
   &#36;stmt = &#36;pdo-&gt;prepare(&#36;query);<br />
   &#36;stmt-&gt;execute(array(':user_id' =&gt; &#36;user_id, ':admin' =&gt; &#36;admin));<br />
<br />
   return;<br />
}<br />
<br />
?&gt;<br />
-----8&lt;-----<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.opendocman.com/images/attachtypes/php.gif" title="PHP File" border="0" alt=".php" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=61" target="_blank" title="">opendocman-1.3.2-ldap-options.config.php</a> (Size: 435 bytes / Downloads: 3)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.opendocman.com/images/attachtypes/txt.gif" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=62" target="_blank" title="">opendocman-1.3.2-ldap.patch.txt</a> (Size: 962 bytes / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.opendocman.com/images/attachtypes/txt.gif" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=63" target="_blank" title="">ldap-users.inc.txt</a> (Size: 3.5 KB / Downloads: 3)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Hi All,<br />
<br />
<br />
I posted to the devs mailing list, but then looking through the archives it looks like it's been dead a while.<br />
<br />
Anyway, I wrote "users from LDAP" support.  It works fine here, but obviously I'd like to get someone else to test it.<br />
<br />
Here's what I posted to the devs list:<br />
<br />
Hi Devs,<br />
<br />
I just wrote in support for getting user accounts from LDAP.  Basically, if this option is enabled, it will check LDAP for the user who is being logged in.  If the username and password match, it'll then check the opendocman database to see if the user already exists there.  If it does, it synchronizes the password field with the LDAP password.  If not, it adds a new user with defaults.  All of this is against version 1.3.2.<br />
<br />
To test this out, you need the following in config.php:<br />
<br />
-----8&lt;-----<br />
&#36;GLOBALS['CONFIG']['ldap_enable'] = TRUE;<br />
&#36;GLOBALS['CONFIG']['ldap_host'] = 'my.ldaphost.com';<br />
&#36;GLOBALS['CONFIG']['ldap_port'] = '389';<br />
<br />
&#36;GLOBALS['CONFIG']['base_dn'] = "ou=People,dc=mydomain,dc=com";<br />
&#36;GLOBALS['CONFIG']['searchfilter'] = "(&amp;(uid=%uid))";<br />
&#36;GLOBALS['CONFIG']['bind_dn'] = "cn=Manager,dc=mydomain,dc=com";<br />
&#36;GLOBALS['CONFIG']['bind_pw'] = "managers_password";<br />
-----8&lt;-----<br />
<br />
...and then patch index.php with this patch:<br />
<br />
-----8&lt;-----<br />
--- index.php    2015-03-26 13:42:01.781054000 -0400<br />
+++ index.php-orig    2015-03-26 13:49:07.721054000 -0400<br />
@@ -78,15 +78,6 @@<br />
    &#36;frmuser = &#36;_POST['frmuser'];<br />
    &#36;frmpass = &#36;_POST['frmpass'];<br />
<br />
-    // JEPH - Check for LDAP users enabled<br />
-    if(&#36;GLOBALS['CONFIG']['ldap_enable']) {<br />
-    require 'ldap-users.inc';<br />
-    &#36;ldap_success = ldap_login(&#36;frmuser, &#36;frmpass);<br />
-    if(!empty(&#36;ldap_success)) {<br />
-        add_or_modify(&#36;frmuser, &#36;frmpass);<br />
-    }<br />
-    }<br />
-   <br />
    // check login and md5()<br />
    // connect and execute query<br />
    &#36;query = "<br />
@@ -134,11 +125,11 @@<br />
<br />
    // if row exists - login/pass is correct<br />
    if (count(&#36;result) == 1)<br />
-    {  <br />
+    {       <br />
        // register the user's ID<br />
        &#36;id = &#36;result[0]['id'];<br />
-        &#36;username = &#36;result[0]['username'];<br />
-        &#36;password = &#36;result[0]['password'];<br />
+        &#36;username = &#36;result['username'];<br />
+        &#36;password = &#36;result['password'];<br />
<br />
        // initiate a session<br />
        &#36;_SESSION['uid'] = &#36;id;<br />
-----8&lt;-----<br />
<br />
...and add my routines to ldap-users.inc (all of this attached) but in case this list strips attachments, test follows:<br />
<br />
-----8&lt;-----<br />
&lt;?php<br />
   // ldap-users.inc<br />
   //<br />
   // Authenticate users against LDAP<br />
   // John E.P. Hynes/HyTronix [03/25/2015]<br />
   //<br />
   // Takes username/password and tries to bind.<br />
   // Return user name on success, FALSE on failure.<br />
<br />
function ldap_login(&#36;user, &#36;pass) {<br />
   &#36;ldap_host = &#36;GLOBALS['CONFIG']['ldap_host'];<br />
   &#36;ldap_port = &#36;GLOBALS['CONFIG']['ldap_port'];<br />
   &#36;base_dn = &#36;GLOBALS['CONFIG']['base_dn'];<br />
   &#36;searchfilter = &#36;GLOBALS['CONFIG']['searchfilter'];<br />
   &#36;bind_dn = &#36;GLOBALS['CONFIG']['bind_dn'];<br />
   &#36;bind_pw = &#36;GLOBALS['CONFIG']['bind_pw'];<br />
<br />
   &#36;ldap_conn = ldap_connect(&#36;ldap_host, &#36;ldap_port)<br />
       or error_log("ldap_connect() failed.");<br />
<br />
   ldap_set_option(&#36;ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);<br />
   ldap_set_option(&#36;ldap_conn, LDAP_OPT_REFERRALS, 0);<br />
<br />
   &#36;bind = ldap_bind(&#36;ldap_conn, &#36;bind_dn, &#36;bind_pw)<br />
       or error_log("ldap_bind() failed.");<br />
<br />
   &#36;match_count = 1;<br />
   &#36;this_filter = str_replace("%uid", &#36;user, &#36;searchfilter, &#36;match_count);<br />
   if(empty(&#36;this_filter)) {<br />
       error_log("Error in searchfilter with str_replace(), got &#36;this_filter");<br />
       return FALSE;<br />
   }<br />
  <br />
   &#36;attribute = array("uid");<br />
   &#36;search_results = @ldap_search(&#36;ldap_conn, &#36;base_dn, &#36;this_filter, &#36;attribute, 0, 2);<br />
  <br />
   if (!&#36;search_results) {<br />
       error_log("Something went wrong in ldap_search.");<br />
   }<br />
<br />
   if (ldap_count_entries(&#36;ldap_conn, &#36;search_results) != 1) {<br />
       error_log("ldap_search() returned &#36;search_results in error.");<br />
       return FALSE;<br />
   }<br />
<br />
   &#36;user_entry = ldap_first_entry(&#36;ldap_conn, &#36;search_results);<br />
   &#36;this_dn = ldap_get_dn(&#36;ldap_conn, &#36;user_entry);<br />
<br />
   &#36;user_bind = ldap_bind(&#36;ldap_conn, &#36;this_dn, &#36;pass);<br />
   if (!&#36;user_bind) {<br />
       return FALSE;<br />
   }<br />
<br />
   ldap_close(&#36;ldap_conn);<br />
<br />
   return &#36;user;<br />
}<br />
<br />
function add_or_modify(&#36;username, &#36;password) {<br />
   // Check to make sure user does not already exist<br />
   &#36;pdo = &#36;GLOBALS['pdo'];<br />
   &#36;query = "SELECT COUNT(*) FROM {&#36;GLOBALS['CONFIG']['db_prefix']}user WHERE username = '&#36;username'";<br />
   if (&#36;count = &#36;pdo-&gt;query(&#36;query)) {<br />
       if (&#36;count-&gt;fetchColumn() == 1) {<br />
           update_password(&#36;username, &#36;password);<br />
           return;<br />
       } elseif (&#36;count-&gt;fetchColumn() == 0) {<br />
           create_user(&#36;username, &#36;password);<br />
           return;<br />
       }<br />
       else {<br />
           error_log("Database error - username not unique.");<br />
       }<br />
   }<br />
  <br />
   return;<br />
}<br />
<br />
function update_password(&#36;username, &#36;password) {<br />
   &#36;pdo = &#36;GLOBALS['pdo'];<br />
   &#36;query = "UPDATE {&#36;GLOBALS['CONFIG']['db_prefix']}user<br />
               SET password=md5(:password) WHERE username=:username";<br />
   &#36;stmt = &#36;pdo-&gt;prepare(&#36;query);<br />
   &#36;stmt-&gt;execute(array(':username' =&gt; &#36;username, ':password' =&gt; &#36;password));<br />
<br />
   return;<br />
}<br />
<br />
function create_user(&#36;username, &#36;password) {<br />
   &#36;pdo = &#36;GLOBALS['pdo'];<br />
   &#36;department = 1;<br />
   &#36;phonenumber = "000-000-0000";<br />
   &#36;email = "";<br />
   &#36;lastname = "";<br />
   &#36;firstname = "";<br />
   &#36;can_add = 0;<br />
   &#36;can_checkin = 0;<br />
<br />
   &#36;query = "INSERT INTO {&#36;GLOBALS['CONFIG']['db_prefix']}user<br />
       (username, password, department, phone, Email,last_name, first_name, can_add, can_checkin)<br />
       VALUES(<br />
           :username,<br />
           md5(:password),<br />
           :department,<br />
           :phonenumber,<br />
           :email,<br />
           :lastname,<br />
           :firstname,<br />
           :can_add,<br />
           :can_checkin<br />
       )";<br />
<br />
   &#36;stmt = &#36;pdo-&gt;prepare(&#36;query);<br />
   &#36;stmt-&gt;execute(array(<br />
       ':username' =&gt; &#36;username,<br />
       ':password' =&gt; &#36;password,<br />
       ':department' =&gt; &#36;department,<br />
       ':phonenumber' =&gt; &#36;phonenumber,<br />
       ':email' =&gt; &#36;email,<br />
       ':lastname' =&gt; &#36;lastname,<br />
       ':firstname' =&gt; &#36;firstname,<br />
       ':can_add' =&gt; &#36;can_add,<br />
       ':can_checkin' =&gt; &#36;can_checkin<br />
       ));<br />
<br />
   &#36;user_id = &#36;pdo-&gt;lastInsertId();;<br />
   &#36;admin = 0;<br />
   &#36;query = "INSERT INTO {&#36;GLOBALS['CONFIG']['db_prefix']}admin (id, admin) VALUES(:user_id, :admin)";<br />
   &#36;stmt = &#36;pdo-&gt;prepare(&#36;query);<br />
   &#36;stmt-&gt;execute(array(':user_id' =&gt; &#36;user_id, ':admin' =&gt; &#36;admin));<br />
<br />
   return;<br />
}<br />
<br />
?&gt;<br />
-----8&lt;-----<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.opendocman.com/images/attachtypes/php.gif" title="PHP File" border="0" alt=".php" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=61" target="_blank" title="">opendocman-1.3.2-ldap-options.config.php</a> (Size: 435 bytes / Downloads: 3)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.opendocman.com/images/attachtypes/txt.gif" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=62" target="_blank" title="">opendocman-1.3.2-ldap.patch.txt</a> (Size: 962 bytes / Downloads: 4)
<!-- end: postbit_attachments_attachment --><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.opendocman.com/images/attachtypes/txt.gif" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=63" target="_blank" title="">ldap-users.inc.txt</a> (Size: 3.5 KB / Downloads: 3)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Additional User Defined Field Types Types]]></title>
			<link>https://forum.opendocman.com/thread-798.html</link>
			<pubDate>Sat, 21 Mar 2015 02:40:26 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=1967">Wraith</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-798.html</guid>
			<description><![CDATA[Hi<br />
<br />
First time user of OpenDocMan. So far pretty good <img src="https://forum.opendocman.com/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
My first suggestion for improvement is increasing the number of allowable user defined field types. Extending from "Select List", "Radio Button" etc. to include "Date" or "Number", for examples, would be great in sorting and searching without having to enter date in a format similar to YYYY.MM.DD to allow sort by date.]]></description>
			<content:encoded><![CDATA[Hi<br />
<br />
First time user of OpenDocMan. So far pretty good <img src="https://forum.opendocman.com/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
My first suggestion for improvement is increasing the number of allowable user defined field types. Extending from "Select List", "Radio Button" etc. to include "Date" or "Number", for examples, would be great in sorting and searching without having to enter date in a format similar to YYYY.MM.DD to allow sort by date.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Multiply requests]]></title>
			<link>https://forum.opendocman.com/thread-690.html</link>
			<pubDate>Thu, 17 Apr 2014 05:22:40 -0400</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.opendocman.com/member.php?action=profile&uid=1732">Killertjuh</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.opendocman.com/thread-690.html</guid>
			<description><![CDATA[Dear,<br />
<br />
I like this program but i miss 2 things.<br />
<br />
+ Online change documents( only txt file ore something with copy/past picture function)<br />
+ search text within a txt/pdf file.]]></description>
			<content:encoded><![CDATA[Dear,<br />
<br />
I like this program but i miss 2 things.<br />
<br />
+ Online change documents( only txt file ore something with copy/past picture function)<br />
+ search text within a txt/pdf file.]]></content:encoded>
		</item>
	</channel>
</rss>