Jump to content

Tell Me - Teach Me - Involve Me


amitamberker

Recommended Posts

Hello Everyone,

Tell me and I forget. Teach me and I remember. Involve me and I learn. - By: Benjamin Franklin -
I would be glad to involve in your projects, works, jobs to learn!Thank you!
Link to comment
Share on other sites

It seems like nobody are interested to involve us (forum members) to accommodate into your projects due to privacy issues and other relevant reasons? But however, I (we) would be glad to involve in your projects to learn.

Link to comment
Share on other sites

I'll tell you what I think is going on. Those who are experienced and are mainly here to help others, wouldn't benefit at all from amateur people like us. We would only slow down their work and what is more, they probably got all the help they need from external sources. On the other hand,I believe that most of the non-experienced people are trying to learn web development because they got "that one idea that will change the internet and make them rich". They wouldn't involve other's in their projects because they don't want to share their "brilliant" idea :)

Link to comment
Share on other sites

I'll tell you what I think is going on. Those who are experienced and are mainly here to help others, wouldn't benefit at all from amateur people like us. We would only slow down their work and what is more, they probably got all the help they need from external sources. On the other hand,I believe that most of the non-experienced people are trying to learn web development because they got "that one idea that will change the internet and make them rich". They wouldn't involve other's in their projects because they don't want to share their "brilliant" idea :)
LOL!
Link to comment
Share on other sites

Also, this is not the type of community where developers collaborate on large projects. That's what things like Google Code are for. This is a forum, where developers (new and experienced) come to have questions answered.
Hi ShadowMage,Yes, I agree that this is a forum where New and Experienced Developers come to have their questions answered. You are making sense BUT they can also accommodate us into their projects (if they are willing too) which would be helpful to learners as well as professionals. But like I said, what I think is due to privacy issues and other relevant reasons they are uncertain to involve members like us into their projects. But however, let’s hope for the best thing to happen! Let’s keep our fingers crossed!
Link to comment
Share on other sites

For me personally, it's not efficient to try and involve the public in my major projects. For a beginner there would be too much work to train you on all of the basics, like the ExtJS library, object-oriented PHP and Javascript, creating new classes and using the ones I've already made, managing the SVN repository, etc. These are skills that a professional developer should have that most beginners lack, and I can't take the time to teach those skills when I need to use that time to develop my applications. The set of people here who would be able to jump into the code and start making the changes or additions that I need is very limited, it just requires a skill set that can really only be gained through experience. And that doesn't even get into the question of whether I want to provide access to all of my code, which eventually I'm going to market and sell, to people that I have never met. When I was starting with PHP I identified things that I knew PHP could do that I wanted to learn, and I designed small applications that used those things. For example, when I was just starting out I wanted to learn how to manage users and logging in, basic form processing and file uploads, using a database, image manipulation, etc. These were things that I knew that PHP could do that I wanted to learn. So, I designed a photo gallery application that specifically used all of the things I wanted to learn and I started to build it. Along the way I learned each of those things because I had to use them. I would recommend something like that, identify skills that you are missing and want to learn and design an application that uses all of them. If you want to learn object-oriented programming principles, then set a requirement for your application that you only use classes instead of global variables and function libraries, for example. That photo gallery is nothing I would distribute today, it's not very efficient and doesn't use the best practices for everything but it was a learning experience to help me pick up skills that I was missing. That is the direction that I would recommend beginners take.

Link to comment
Share on other sites

For me personally, it's not efficient to try and involve the public in my major projects. For a beginner there would be too much work to train you on all of the basics, like the ExtJS library, object-oriented PHP and Javascript, creating new classes and using the ones I've already made, managing the SVN repository, etc. These are skills that a professional developer should have that most beginners lack, and I can't take the time to teach those skills when I need to use that time to develop my applications. The set of people here who would be able to jump into the code and start making the changes or additions that I need is very limited, it just requires a skill set that can really only be gained through experience. And that doesn't even get into the question of whether I want to provide access to all of my code, which eventually I'm going to market and sell, to people that I have never met. When I was starting with PHP I identified things that I knew PHP could do that I wanted to learn, and I designed small applications that used those things. For example, when I was just starting out I wanted to learn how to manage users and logging in, basic form processing and file uploads, using a database, image manipulation, etc. These were things that I knew that PHP could do that I wanted to learn. So, I designed a photo gallery application that specifically used all of the things I wanted to learn and I started to build it. Along the way I learned each of those things because I had to use them. I would recommend something like that, identify skills that you are missing and want to learn and design an application that uses all of them. If you want to learn object-oriented programming principles, then set a requirement for your application that you only use classes instead of global variables and function libraries, for example. That photo gallery is nothing I would distribute today, it's not very efficient and doesn't use the best practices for everything but it was a learning experience to help me pick up skills that I was missing. That is the direction that I would recommend beginners take.
Hi justsomeguy,Well said! Then no need to involve beginners. Perhaps experienced members can get involved who are willing to learn new things?
Link to comment
Share on other sites

My projects aren't open-source, but there are several projects that anyone can work on. You might want to help with phpMyAdmin, for example. http://www.phpmyadmi...age/improve.phphttp://wiki.phpmyadm...nior_developers
Hi justsomeguy,Thanks for your response. I would like to help with HTML / CSS / 2D Gif Animation / SEO / Kinda little bit of Javascript.
Link to comment
Share on other sites

With your knowledge, the most you can do is design pages. If you want to work on web applications you'll need to learn a server-side language and have a much better understanding of Javascript.

Link to comment
Share on other sites

  • 3 weeks later...
With your knowledge, the most you can do is design pages. If you want to work on web applications you'll need to learn a server-side language and have a much better understanding of Javascript.
Hi Ingolme, I can understand your point but I would like to help with HTML / CSS / 2D Gif Animation / SEO / Kinda little bit of Javascript. But however, I do Photoshop based work as well such as Banners, Icons, Buttons, Background Images etc for Web applications. I am offering to help members if members are willing to accept my offering. I think, You, JustSomeGuy and other Expert Members can certainly accept my Offerings but you folks are not willing to accept my offerings.
Link to comment
Share on other sites

I don't have any work that needs doing. Everything I work on is either Javascript using ExtJS, or PHP. I do very little manual work with either HTML or CSS, any markup is generated by ExtJS. Requirements for new images are minimal, restricted to button icons and things like that which don't take a lot of time. I don't use animated gifs and my applications don't require SEO. It's not an unwillingness to accept help, it's simply that I don't require the kind of help that you can offer. When I'm ready to start hiring I'll be hiring people with experience using ExtJS, that's where I need help.

Link to comment
Share on other sites

you can start making templates for wordpress,joomla like CMS, or already famouse forums like phpbbetc. i did not use of any of them yet now but i belive there is option for making the designs from scratch which can certainly help you to learn.

Link to comment
Share on other sites

you can start making templates for wordpress,joomla like CMS, or already famouse forums like phpbbetc. i did not use of any of them yet now but i belive there is option for making the designs from scratch which can certainly help you to learn.
And i'll add to that, you can start selling templates for those CMS in the end.
Link to comment
Share on other sites

I am opening this Topic Again.

Link to comment
Share on other sites

I don't have any work that needs doing. Everything I work on is either Javascript using ExtJS, or PHP. I do very little manual work with either HTML or CSS, any markup is generated by ExtJS. Requirements for new images are minimal, restricted to button icons and things like that which don't take a lot of time. I don't use animated gifs and my applications don't require SEO. It's not an unwillingness to accept help, it's simply that I don't require the kind of help that you can offer. When I'm ready to start hiring I'll be hiring people with experience using ExtJS, that's where I need help.
Hi justsomeguy,Okie. Got your point. But however, I request you to send me some piece (portion) of Javascript using ExtJS, or PHP which you are working on. Let me know what needs to be done in that particular piece (portion) and accordingly I will try to do it. Like Benjamin Franklin once said, "Tell me and I forget. Teach me and I remember. Involve me and I learn."I request you to mentor and involve me in your work.Thank you.
Link to comment
Share on other sites

Unfortunately for us the beginners, it happens to be confusing a bit where to start, where do head and go..what are the steps of learning till we reach an intermediate level and have enough expertise about that and this..More likely learning all that is confusing, it's more like we need a mentor that has started one day from where we were.

Link to comment
Share on other sites

I do not have time to be a mentor to anyone who asks right now. I can send you an example on what I'm working on, but I can't explain how all of it works if you don't already know. That's what I was talking about in post 7. The files in my application are not independent, each of the Javascript files except one depends on other Javascript files. I'm not going to send my entire application to anyone who asks. When I did involve one of my friends, who is basically as competent as I am with regard to programming, it still took several days to explain the application structure and layout enough to get him up to speed to start making changes. And that was with a professional programmer. Essentially, it comes down to this - the reason I am at this forum is to answer people's questions and help them learn. I'm not here to create assignments, create lesson plans, collect and grade assignments, assign projects to people, etc. I am here to answer specific programming questions. I'm not going to hold your hand and teach you, I am going to help you with your own path to learning. You need to set that path for yourself, I'm not going to do that for you. I'm not going to send you several megabytes of the Javascript code that I've been developing for the past 3 years which you won't be able to understand just because you're looking for something to learn. You need to create your own assignments and set your own goals. Like I said, if you have questions during that process then that is what we are here for. This place isn't a place to find jobs, there are other sites out there dedicated to helping freelancers find jobs and several open source projects that you can help with. My application is not one of those. I need to work with people face-to-face who are going to understand how the application works, where I'm trying to go with it, what they need to do, etc. That knowledge comes from several meetings, not me just sending you my code and telling you what I need done to it. It isn't that simple. If you want an example, consider this code:

if ((typeof console) == "undefined" || (typeof console.log) == "undefined"){  console = {    log: function (v) {} // do nothing if undefined  }}Ext.BLANK_IMAGE_URL = "ext/resources/images/default/s.gif";app.lms = function(){  return (  {    lms_name: 'LMS7', // also defined in global.config.php, overridden by custom.js    xtra_copyright: '', // overridden by custom.js    xtra_footer: '', // overridden by custom.js    lms_version: '7', // overridden by custom.js    timestamp: 'n/j/Y g:ia', // see http://www.php.net/manual/en/function.date.php    datestamp: 'n/j/Y',    time: 'g:ia',    news_datestamp: 'l F jS, Y',    view: null,    userdata: null,    lms_opts: null,    uf_list: null,    ul: null,    custom: {},    init: function()    {	  var i, j;	  var ul = app.lms.userlang;	  /************************************************************************	  Import custom items - start	  ************************************************************************/	  Ext.apply(this.custom, app.custom);	  // override defaults	  if (this.custom.lms_name != '') this.lms_name = this.custom.lms_name;	  if (this.custom.xtra_copyright != '') this.xtra_copyright = this.custom.xtra_copyright;	  if (this.custom.xtra_footer != '') this.xtra_footer = this.custom.xtra_footer;	  if (this.custom.lms_version != '') this.lms_version = this.custom.lms_version;	  // apply scope to custom buttons	  for (i = 0; i < this.custom.custom_buttons.length; i++)	  {	    if ((typeof this.custom.custom_buttons[i].menu) != 'undefined')	    {		  for (j = 0; j < this.custom.custom_buttons[i].menu.items.length; j++)		  {		    this.custom.custom_buttons[i].menu.items[j].scope = this;		  }	    }	    else		  this.custom.custom_buttons[i].scope = this;	  }	  // apply scope to custom admin buttons	  for (i = 0; i < this.custom.custom_admin_buttons.length; i++)	  {	    if ((typeof this.custom.custom_admin_buttons[i].menu) != 'undefined')	    {		  for (j = 0; j < this.custom.custom_admin_buttons[i].menu.items.length; j++)		  {		    this.custom.custom_admin_buttons[i].menu.items[j].scope = this;		  }	    }	    else		  this.custom.custom_admin_buttons[i].scope = this;	  }	  /************************************************************************	  Import custom items - end	  ************************************************************************/	  // check for loading mask	  Ext.destroy(Ext.get("loading"));	  Ext.destroy(Ext.get("loading-mask"));	  this.view = new Ext.Viewport({	    id: "lms_viewport",	    layout: "border",	    items: [		  {		    region: "north",		    html: "<table class=\"x-panel-header\" style=\"width: 100%;\"><tr><td class=\"lms-header\" style=\"width: 33%;\">" + this.lms_name + "</td><td style=\"width: 34%;\"><div id=\"title_banner\"></div><div style=\"width: 34%; height:8px;\" id=\"view_notice\"></div></td><td style=\"width: 33%;\"><div class=\"title_logo\"></div></td></tr></table>",		    autoHeight: true,		    id: "lms_main_header",		    bbar: new Ext.Toolbar({			  id: "lms_top_toolbar",			  scope: this,			  height: 26		    })		  },		  {		    region: "center",		    id: "lms_main_win",		    cls: "lms-body",		    layout: "card",		    border: false,		    activeItem: 0,		    items: [{}]		  },		  {		    region: "south",		    id: "lms_main_footer",		    autoHeight: true,		    border: false,		    html: "<h1 class=\"x-panel-header lms-footer\">" + this.lms_name + " " + this.lms_version + " copyright Co, Inc." + (this.xtra_copyright != "" ? " and " + this.xtra_copyright : "") + ".  " + this.lms_name + " was developed by <a href=\"http://www.co.com/\" target=\"_blank\">Co, Inc.</a>" + (this.xtra_footer != "" ? "<br>" + this.xtra_footer : "") + "</h1>"		  }	    ]	  });	  // initialize quick tips	  Ext.QuickTips.init();	  Ext.form.Field.prototype.msgTarget = 'under';	  Ext.Window.prototype.constrainHeader = true;	  Ext.Window.prototype.stateful = false;	  Ext.data.Connection.prototype.timeout = 1000 * 60 * 60; 	  // persist the session (send a ping back every now and then)	  setInterval(function() {	    var now = new Date();	    Ext.Ajax.request({		  url: 'io.php?cache=' + now.valueOf(),		  callback: Ext.emptyFn,		  params: { page_mode: "touch" }	    });	  }, 1000 * 60 * 10);	  // check for included application initialization functions	  try	  {	    this.getuser();	    if (this.userdata.custom_style != undefined && this.userdata.custom_style != "")	    {		  // attach a custom style sheet		  var new_style = document.createElement("link");		  new_style.setAttribute("rel", "stylesheet");		  new_style.setAttribute("type", "text/css");		  new_style.setAttribute("href", this.userdata.custom_style);		  document.getElementsByTagName("head")[0].appendChild(new_style);	    }	  }	  catch (ex)	  {	    // no user info - do nothing	  }	   try	  {	    this.getLanguage();	  }	  catch (ex)	  {	  }	  try	  {	    this.startup();	  }	  catch (ex)	  {	    // no startup - do nothing	  }    },    // get_user_data takes a property name and returns the value from this.userdata    get_user_data: function(name)    {	  var ul = app.lms.userlang;	  if (this.userdata == null)	    return null;	  for (var i in this.userdata)	  {	    if (i == name)		  return this.userdata[i];	  }	  return null;    },    // update_user_data takes an array of properties and applies them to this.userdata    update_user_data: function(data)    {	  var ul = app.lms.userlang;	  this.userdata = Ext.apply(this.userdata, data, this.userdata);	  var tb = Ext.getCmp("lms_top_toolbar");	  tb.items.get(4).getEl().innerHTML = ul.logged_in_as + " " + this.get_user_data("fullname") + " (" + this.get_user_data("username") + ")";    },    // submit_failure is the common callback function when a form submission fails    submit_failure: function(frm, act, mask)    {	  ul = app.lms.userlang;	  if ((typeof mask) != "undefined" && (typeof mask.hide) == "function")	    mask.hide();	  obj = Ext.util.JSON.decode(act.response.responseText);	  if (act.failureType == "server")	  {	    // server error - errors property should contain fields	    if (typeof(obj.errors.reason) != "undefined")	    {		  Ext.Msg.show({		    title: "Warning",		    msg: "Submit failed!" + ' ' + obj.errors.reason,		    buttons: Ext.Msg.OK,		    icon: Ext.Msg.WARNING		  });	    }	    else	    {		  Ext.Msg.show({		    title: "Warning",		    msg: "Submit failed! Please review the form for errors.",		    buttons: Ext.Msg.OK,		    icon: Ext.Msg.WARNING		  });	    }	  }	  else if (act.failureType == "client")	  {	    Ext.Msg.show({		  title: "Warning",		  msg: "Submit failed! Please review the form for errors.",		  buttons: Ext.Msg.OK,		  icon: Ext.Msg.WARNING	    });	  }	  else if (act.failureType == "connect" || act.failureType == "load")	  {	    Ext.Msg.show({		  title: "Warning",		  msg: "The server was not able to be contacted, this may happen during times of high traffic.  Please refresh the page and try again.  Failure type:" + " " + act.failureType,		  buttons: Ext.Msg.OK,		  icon: Ext.Msg.WARNING	    });	  }	  else	  {	    msgtxt = "Submit error!";	    if (typeof(obj.errors.reason) != "undefined")		  msgtxt += " " + obj.errors.reason;	    Ext.Msg.show({		  title: "Warning",		  msg: msgtxt,		  buttons: Ext.Msg.OK,		  icon: Ext.Msg.WARNING	    });	  }    },    get_content_type: function(num)    {	  var ul = app.lms.userlang;	  if ((typeof num) == "string")	    num = parseInt(num, 10);	  switch (num)	  {	    case 1:		  return ul.online_training;	    case 2:		  return ul.offline_class_train;	    case 3:		  return ul.online_test_questionnaire;	    case 4:		  return ul.other_online;	    case 5:		  return ul.lo_training;	  }    },    load_options: function(callback_fn)    {	  var ul = app.lms.userlang;	  Ext.Ajax.request({	    url: 'io.php',	    params: { page_mode: "get_all_options" },	    scope: this,	    callback: function (options, success, response)	    {		  var resp_obj;		  if (success && response.status == 200)		  {		    resp_obj = Ext.util.JSON.decode(response.responseText);		    this.lms_opts = resp_obj.data;		    if (typeof callback_fn == "function")		    {			  callback_fn.call(this);		    }		  }		  else		  {		    Ext.Msg.show({			  title: "Warning",			  msg: "Communication with the server failed.  Please refresh the page." + "  " + response.status + ": " + response.statusText,			  buttons: Ext.Msg.OK,			  icon: Ext.Msg.WARNING		    });		  }	    }	  });    },    // called from the admin user grid    toggle_user_active: function(recid)    {	  var ul = app.lms.userlang;	  var store = Ext.getCmp('user_grid').getStore();	  var rec = store.getById(recid);	  var user = rec.data.id;	  if (rec.data.active == "1")	  {	    //disable the user	    rec.beginEdit();	    rec.set("active", "0");	    rec.commit();	    rec.endEdit();	    var active = 0;	  }	  else	  {	    //enable the user	    rec.beginEdit();	    rec.set("active", "1");	    rec.commit();	    rec.endEdit();	    var active = 1;	  }	  var ajax_con = new Ext.data.Connection({ url: "io.php", method: "post"});	  var load_mask = new Ext.LoadMask(Ext.getCmp('user_grid').body, {msg: ul.updating_txt + '...'});	  load_mask.show();	  ajax_con.request({	    params: {page_mode: "set_user_active", active: active, id: user},	    scope: this,	    callback: function (options, success, response)	    {		  load_mask.hide();		  var resp_obj;		  if (success && response.status == 200)		  {		    // dont need to do anything		  }		  else		  {		    Ext.Msg.show({			  title:"Warning",			  msg: "Communication with the server failed.  Please refresh the page." + "  " + response.status + ": " + response.statusText,			  buttons: Ext.Msg.OK,			  icon: Ext.Msg.WARNING		    });		  }	    }	  });    },    // show a popup box to choose a usergroup from    choose_usergroup: function(callback)    {	  var ul = app.lms.userlang;	  var ug_win = new Ext.Window({	    id: "choose_ug_win",	    layout: "fit",	    title: ul.choose_ug,	    height: 250,	    width: 400,	    modal: true,	    plain: true,	    items: [		  {		    xtype: "masktree",		    id: 'choose_ug_tree',		    autoScroll: true,		    cls: 'ug-tree',		    enableDD: false,		    maskConfig: {msg: ul.loading_ug + "..."},		    loader: new Ext.tree.TreeLoader({			  dataUrl:'io.php',			  baseParams: {page_mode:"get_ug_nodes"}		    }),		    root: new Ext.tree.AsyncTreeNode({			  text: ul.all_ug,			  allowDrag: false,			  expanded: true		    })		  }	    ],	    buttons: [		  {		    text: ul.select_ug,		    handler: function()		    {			  var tree = Ext.getCmp("choose_ug_tree");			  var curnode = tree.getSelectionModel().getSelectedNode();			  var ug_id = 0;			  var ug_title =  ul.all_ug;			  if (curnode != null && !curnode.isRoot)			  {			    ug_id = new String(curnode.id);			    ug_id = parseInt(ug_id.replace(/ug_node_/, ""), 10);			    ug_title = curnode.attributes.info.title;			  }			  ug_win.close();			  if ((typeof callback) == "function")			  {			    callback(ug_id, ug_title);			  }		    },		    scope: this		  }	    ]	  });	  ug_win.show();    },    select_users: function(opts)    {	  var ul = app.lms.userlang;	  var params = opts.params || {};	  var note = opts.note || "";	  var callback = opts.callback || Ext.emptyFn;	  var prompt = opts.prompt || "";	  var userTypes = opts.userTypes || [[1, ul.students], [2, ul.instructs], [3, ul.ug_admins], [4, ul.sub_admins], [5, ul.main_admins]];	  var single = opts.singleSelect || false;	  var dims = this.view.getSize();	  var user_store = new Ext.data.JsonStore({	    id: "user_store",	    url: "io.php",	    baseParams: params,	    root: 'data',	    totalProperty: 'totalCount',	    remoteSort: true,	    reader: new Ext.data.JsonReader({	    }, Ext.data.Record.create([		  'id','username','fname','lname','email','active','date_registered','last_login','last_ip','main_admin','ug_admin','sub_admin','instructor','field1','field2','field3','field4','field5','field6','field7','field8','field9','field10','field11','field12','field13','field14','field15','field16','field17','field18','field19','field20','field21','field22','field23','field24','field25','field26','field27','field28','field29','field30','idle'	    ])),	    fields: [		  "id",		  {name: "username", sortType: Ext.data.SortTypes.asUCString},		  {name: "fname", sortType: Ext.data.SortTypes.asUCString},		  {name: "lname", sortType: Ext.data.SortTypes.asUCString},		  {name: "email", sortType: Ext.data.SortTypes.asUCString},		  "active","date_registered","last_login","last_ip","main_admin","ug_admin","sub_admin","instructor","field1","field2","field3","field4","field5","field6","field7","field8","field9","field10","field11","field12","field13","field14","field15","field16","field17","field18","field19","field20","field21","field22","field23","field24","field25","field26","field27","field28","field29","field30","idle"	    ]	  });	  var user_cols = [	    {header: ul.active, sortable: false, dataIndex: "active", renderer: function(val, meta, rec, row, col, store)		  {		    var retval = "<a href=\"javascript:void(0);\" ";		    if (rec.data.active == "0")			  retval += 'class="x-icon-inactive" title="' + ul.user_inactive + '"';		    else if (rec.data.idle == "1")			  retval += 'class="x-icon-idle" title="' + ul.user_idle + '"';		    else			  retval += 'class="x-icon-active" title="' + ul.user_active + '"';		    retval += "> </a>";		    return retval;		  }, width: 50, fixed: true, menuDisabled: true, resizable: false},	    {header: ul.username, sortable: true, dataIndex: "username"},	    {header: ul.first_name, sortable: true, dataIndex: "fname"},	    {header: ul.last_name, sortable: true, dataIndex: "lname"},	    {header: ul.email_addr, sortable: true, dataIndex: "email"}	  ];	  // set up grid filter options	  var user_filter_where_opts = [	    ['username', ul.username],	    ['fname', ul.first_name],	    ['lname', ul.last_name],	    ['email', ul.email_addr]	  ];	  for (var i = 0; i < this.uf_list.length; i++)	  {	    if (this.uf_list[i].searchable == 1)	    {		  user_filter_where_opts.push([this.uf_list[i].id, this.uf_list[i].description]);		  newcol = {		    header: this.uf_list[i].description,		    sortable: true,		    dataIndex: this.uf_list[i].id		  };		  // add a renderer to show the display value for a dropdown		  if (this.uf_list[i].dropdown == 1)		  {		    var renderer = function( val, meta, record, rowIndex, colIndex, store )		    {			  var uf_idx = 0;			  var idx = colIndex - 5; // to compensate for the first non-user-field fields			  var nr = 0;			  for (var j = 0; j < this.uf_list.length; j++)			  {			    // need to find the index of the user field in the uf_list array			    if (this.uf_list[j].searchable == 1)			    {				  if (nr == idx)				  {				    uf_idx = j;				    break;				  }				  nr++;			    }			  }			  for (var j = 0; j < this.uf_list[uf_idx].drop_options.length; j++)			  {			    if (this.uf_list[uf_idx].drop_options[j][2] == val)				  return this.uf_list[uf_idx].drop_options[j][1];			  }		    }		    newcol.renderer = renderer.createDelegate(this);		  }		  user_cols.push(newcol);	    }	  }	  var user_win = new Ext.Window({	    id: "choose_user_win",	    layout: "anchor",	    title: ul.select_users,	    height: dims.height < 600 ? dims.height - 10 : 600,	    width: dims.width < 1000 ? dims.width - 10 : 1000,	    modal: true,	    plain: true,	    items: [		  {		    xtype: 'grid',		    id: 'select_user_grid',		    anchor: note == '' ? '99% 99%' : '99% 94%',		    stripeRows: true,		    loadMask: {msg: ul.retrieving_users+"..."},		    cm: new Ext.grid.ColumnModel(user_cols),		    sm: new Ext.grid.RowSelectionModel({ singleSelect: single }),		    store: user_store,		    viewConfig: {			  autoFill: true,			  forceFit: true,			  emptyText: ul.no_users_match_search,			  deferEmptyText: false		    },		    tbar: new Ext.Toolbar({			  items: [			    ul.filter_user,			    {				  xtype: 'combo',				  allowBlank: true,				  id: 'select_user_filter_where',				  editable: false,				  triggerAction: 'all',				  forceSelection: true,				  mode: 'local',				  width: 120,				  store: new Ext.data.SimpleStore({				    fields: ['val', 'label'],				    data: user_filter_where_opts				  }),				  displayField: 'label',				  valueField: 'val',				  validateOnBlur: false,				  value: "username"			    },			    ' ',			    {				  xtype: 'combo',				  allowBlank: true,				  id: 'select_user_filter_how',				  editable: false,				  triggerAction: 'all',				  forceSelection: true,				  mode: 'local',				  width: 80,				  store: new Ext.data.SimpleStore({				    fields: ['val', 'label'],				    data: [[1, ul.starts_with], [2, ul.contains], [3, ul.ends_with]]				  }),				  displayField: 'label',				  valueField: 'val',				  validateOnBlur: false,				  value: 1			    },			    ' ',			    {				  xtype: 'textfield',				  allowBlank: true,				  id: 'select_user_filter_what',				  width: 80,				  validateOnBlur: false,				  enableKeyEvents: true			    },			    ' ',			    {				  xtype: 'button',				  id: 'select_btn_use_filter',				  scope: this,				  handler: function()				  {				    var where = Ext.getCmp('select_user_filter_where').getValue();				    var how = Ext.getCmp('select_user_filter_how').getValue();				    var what = Ext.getCmp('select_user_filter_what').getValue();				    Ext.getCmp('select_user_grid').getStore().baseParams = Ext.apply({filter:where, mode:how, term:what, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue()}, params);				    Ext.getCmp('select_user_grid').getStore().load({params:Ext.apply({filter:where, mode:how, term:what, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue(), start:0, limit:this.lms_opts.recs_per_page}, params)});				  },				  text: 'Go'			    },			    '-',			    {				  xtype: 'button',				  id: 'select_btn_clear_filter',				  scope: this,				  handler: function() {				    Ext.getCmp('select_user_grid').getStore().baseParams = Ext.apply({inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue()}, params);				    Ext.getCmp('select_user_grid').getStore().load({params:Ext.apply({start:0, limit:this.lms_opts.recs_per_page}, params)});				  },				  text: ul.clear			    },			    '-',			    {				  xtype: 'button',				  id: 'select_btn_toggle_inactive',				  scope: this,				  toggleHandler: function() {				    Ext.getCmp('select_user_grid').getStore().baseParams = Ext.apply({inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue()}, params);				    Ext.getCmp('select_user_grid').getStore().load({params:Ext.apply({start:0, limit:this.lms_opts.recs_per_page}, params)});				  },				  text: ul.show_inactive,				  enableToggle: true,				  allowDepress: true,				  pressed: false			    },			    '-',				 ul.user_type + ':',			    {				  xtype: 'combo',				  allowBlank: false,				  id: 'select_user_filter_type',				  editable: false,				  triggerAction: 'all',				  forceSelection: true,				  mode: 'local',				  width: 120,				  store: new Ext.data.SimpleStore({				    fields: ['val', 'label'],				    data: userTypes				  }),				  displayField: 'label',				  valueField: 'val',				  validateOnBlur: false,				  value: userTypes[0][0],				  listeners: {				    'select': function (c, r, i)				    {					  Ext.getCmp('select_user_grid').getStore().baseParams = Ext.apply({inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:r.data.val}, params);					  Ext.getCmp('select_user_grid').getStore().load({params:Ext.apply({start:0, limit:this.lms_opts.recs_per_page}, params)});				    },				    scope: this				  }			    }			  ]		    }),		    bbar: new Ext.PagingToolbar({			  pageSize: this.lms_opts.recs_per_page,			  store: user_store,			  displayInfo: true,			  displayMsg: ul.display_users_total,			  emptyMsg: ul.no_users_to_display		    }),		    listeners: {			  'rowdblclick': function()			  {			    if ((typeof callback) == "function")			    {				  if (Ext.getCmp("select_user_grid").getSelectionModel().getCount() == 0)				  {				    Ext.Msg.alert(ul.error, ul.no_users_selected);				    return;				  }				  var sel = Ext.getCmp("select_user_grid").getSelectionModel().getSelections();				  if (prompt != "")				  {				    Ext.Msg.confirm(ul.confirm, prompt, function(				    {					  if (b == 'yes')					    callback.call(this, sel);				    }, this);				  }				  else				  {				    callback.call(this, sel);				  }			    }			  },			  'render': function(p)			  {			    if (this.userdata.ug_admin) // auto-load for UG admin			    {				  var where = Ext.getCmp('select_user_filter_where').getValue();				  var how = Ext.getCmp('select_user_filter_how').getValue();				  var what = Ext.getCmp('select_user_filter_what').getValue();				  Ext.getCmp('select_user_grid').getStore().baseParams = Ext.apply({filter:where, mode:how, term:what, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue()}, params);				  Ext.getCmp('select_user_grid').getStore().load({params:Ext.apply({filter:where, mode:how, term:what, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue(), start:0, limit:this.lms_opts.recs_per_page}, params)});			    }			  },			  scope: this		    },		    buttons: [			  {			    text: ul.select_user,			    handler: function()			    {				  if ((typeof callback) == "function")				  {				    if (Ext.getCmp("select_user_grid").getSelectionModel().getCount() == 0)				    {					  Ext.Msg.alert(ul.error, ul.no_users_selected);					  return;				    }				    var sel = Ext.getCmp("select_user_grid").getSelectionModel().getSelections();				    if (prompt != "")				    {					  Ext.Msg.confirm(ul.confirm, prompt, function(					  {					    if (b == 'yes')						  callback.call(this, sel);					  }, this);				    }				    else				    {					  callback.call(this, sel);				    }				  }			    },			    scope: this			  }		    ]		  },		  {		    xtype: "panel",		    border: false,		    bodyStyle: "background: transparent; text-align: right;",		    anchor: note == "" ? '0% 0%' : '99% 5%',		    html: note		  }	    ]	  });	  user_win.show();	  //user_store.load({params:{start:0, limit:this.lms_opts.recs_per_page, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:1}});	  var key_nav = new Ext.KeyNav("select_user_filter_what", {	    'enter': function()	    {		  var where = Ext.getCmp('select_user_filter_where').getValue();		  var how = Ext.getCmp('select_user_filter_how').getValue();		  var what = Ext.getCmp('select_user_filter_what').getValue();		  Ext.getCmp('select_user_grid').getStore().baseParams = Ext.apply({filter:where, mode:how, term:what, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue()}, params);		  Ext.getCmp('select_user_grid').getStore().load({params:Ext.apply({filter:where, mode:how, term:what, inactive:Ext.getCmp('select_btn_toggle_inactive').pressed, user_type:Ext.getCmp('select_user_filter_type').getValue(), start:0, limit:this.lms_opts.recs_per_page}, params)});	    },	    scope: this	  });    },    // remove all children from a component    remove_children: function(comp)    {	  var ul = app.lms.userlang;	  if ((typeof comp.removeAll) == "function")	    comp.removeAll();	  else if ((typeof comp.items) != "undefined")	  {	    var items = comp.items.getRange();	    for (var i = 0; i < items.length; i++)	    {		  comp.remove(items[i].id);	    }	  }    },    sanitizeForWord: function(str)    {	  return this.removeMSWordChars(this.cleanWordHTML(str));    },    removeMSWordChars: function(str)    {	  var myReplacements = [], myCode, strReplacement;	  myReplacements[8216] = "'";	  myReplacements[8217] = "'";	  myReplacements[8218] = "'";	  myReplacements[8220] = '"';	  myReplacements[8221] = '"';	  myReplacements[8222] = '"';	  myReplacements[8211] = '-';	  myReplacements[8212] = '-';	  myReplacements[8230] = '...';	  myReplacements[710] = '^';	  myReplacements[8249] = '<';	  myReplacements[8250] = '>';	  myReplacements[732] = ' ';	   str = String(str);	  for(c=str.length - 1; c >= 0; c--) {	    var myCode = str.charCodeAt(c);	    if(myReplacements[myCode] != undefined) {		  strReplacement = myReplacements[myCode];		  str = str.substr(0,c) + strReplacement + str.substr(c+1);	    }	  }	  return str;    },    cleanWordHTML: function(str)    {	  str = String(str);	  str = str.replace(/<!--[\s\S]*?-->/gi, '' ) ;	  str = str.replace(/<META[^>]*>/gi, '' ) ;	  str = str.replace(/<LINK[^>]*>/gi, '' ) ;	  str = str.replace(/<STYLE[^>]*>[\s\S]*?<\/STYLE>/gi, '' ) ;	  str = str.replace(/<o:p>[\s\S]*?<\/o:p>/g, "") ;	  str = str.replace(/\s*mso-[^:]+:[^;"]+;?/gi, "" ) ;	  str = str.replace(/\s*MARGIN: 0cm 0cm 0pt\s*;/gi, "" ) ;	  str = str.replace(/\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;	  str = str.replace(/\s*TEXT-INDENT: 0cm\s*;/gi, "" ) ;	  str = str.replace(/\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;	  str = str.replace(/\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;	  str = str.replace(/\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;	  str = str.replace(/\s*tab-stops:[^;"]*;?/gi, "" ) ;	  str = str.replace(/\s*tab-stops:[^"]*/gi, "" ) ;	  str = str.replace(/\s*face="[^"]*"/gi, "" ) ;	  str = str.replace(/\s*face=[^ >]*/gi, "" ) ;	  str = str.replace(/\s*FONT-FAMILY:[^;"]*;?/gi, "" ) ;	  str = str.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;	  // to accomodate ExtJS HTML editor, replace text-align style attributes of divs	  str = str.replace(/<div[\s]* style="(text-align:[\s]*[^;"]*">/gi, '<div x-style="$1">');	  // remove style attributes	  str = str.replace(/<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;	  // switch divs back	  str = str.replace(/<div[\s]* x-style="(text-align:[\s]*[^;"]*">/gi, '<div style="$1">');	  str = str.replace(/\s*style="\s*"/gi, '' ) ;	  str = str.replace(/<SPAN\s*[^>]*>\s* \s*<\/SPAN>/gi, ' ' ) ;	  str = str.replace(/<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;	  str = str.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;	  str = str.replace(/<\\?\?xml[^>]*>/gi, "") ;	  str = str.replace(/<\/?\w+:[^>]*>/gi, "") ;	  str = str.replace(/<H\d>\s*<\/H\d>/gi, '' ) ;	  str = str.replace(/<H1([^>]*)>/gi, '' ) ;	  str = str.replace(/<H2([^>]*)>/gi, '' ) ;	  str = str.replace(/<H3([^>]*)>/gi, '' ) ;	  str = str.replace(/<H4([^>]*)>/gi, '' ) ;	  str = str.replace(/<H5([^>]*)>/gi, '' ) ;	  str = str.replace(/<H6([^>]*)>/gi, '' ) ;	  str = str.replace(/<\/H\d>/gi, '<br>' ) ; //remove this to take out breaks where Heading tags were	  str = str.replace(/<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;	  str = str.replace(/<FONT[^>]*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;	  str = str.replace(/<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;	  str = str.replace(/<FONT[^>]*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;	  str = str.replace(/<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;	  str = str.replace(/<FONT[^>]*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;	  str = str.replace(/<(U|I|STRIKE|B|P)> <\/\1>/gi, ' ' ) ;	  str = str.replace(/<(U|I|STRIKE|B|P)> <\/\1>/gi, ' ' ) ;	  str = str.replace(/<(U|I|STRIKE|B|P)> <\/\1>/gi, ' ' ) ;	  str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/gi, '' ) ;	  str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/gi, '' ) ;	  str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/gi, '' ) ;	  str = str.replace(/<(U|I|STRIKE|B|P)> <\/\1>/gi, ' ' ) ;	  str = str.replace(/<(U|I|STRIKE|B|P)> <\/\1>/gi, ' ' ) ;	  str = str.replace(/<(U|I|STRIKE|B|P)> <\/\1>/gi, ' ' ) ;	  str = str.replace(/<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;	  str = str.replace(/<FONT[^>]*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;	  str = str.replace( /size\s*=\s*([\d]{1})/gi, '' ) ;	  return str ;    }  });}();

That's the main initialization file for one of the applications I'm working on. That file is small, it's only 34KB. The main administrator file for that application is 1.5MB. All of the Javascript for that application for all users is nearly 4MB. It also contains around 1.5MB of PHP code. How long do you think it's going to take for 1) me to explain the application and 2) you to understand the code, so that you can make changes like this request from a client:

International User Group Administrators :Currently, user group administrators share the same permissions across all business units and departments. Since international units tend to be autonomous, they usually require sub-admin privileges with the ability to create local content, create new groups and many other functions. Giving an autonomous unit sub-admin privileges is a risk since they could inadvertently globally change the LMS for all users. The solution is to “add” sub-admin privileges at the user group level so they can manage their business units as autonomous administrators with the ability for the home office to override these permissions if necessary.Specifically, we will create a user group control panel tab to set permissions at the user group level. User group administrators could have either expanded or reduced permissions from the current preset global settings. The current global setting will also change to an Allow/Never list.
You need to take charge of your own education, you can't expect a group of volunteers to sacrifice their time and money to help you learn how to program. Set goals for yourself that you want to achieve, create a plan to achieve those, and ask for help when you get stuck. Eventually you will be able to contribute to open source projects or maybe start your own project.
Link to comment
Share on other sites

Hi justsomeguy,WoW! WoW!... whew... Kinda I am fainting now. That looks so scary but Thank You for the:- Information- Clarification- Justification- Inputs- Support- Feedback and- SuggestionNow I understood what you mean. But again, thank you!

Link to comment
Share on other sites

Well, that seems quite professional and may also be beyond most of our knowledge.. I just felt confused as I've seen that :D ..But would you mind if you point us forward.. more like where to start how to know that we've reached the level of expertise of step 1, then give us step two and how do we reach the level of expertise of it.. And so on.. that will be very or too too helpful man.. we'd probably follow everything if you just lead us righteously and maybe after pointing us forward put some website examples for us and tell us to challenge ourselves creating that design and look..What do you think?

Link to comment
Share on other sites

I believe that if we spent all this time asking "How to be a pro in programming" , in actual practicing, we'd be much more experienced developers by now :P

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...