Changeset 16680 for gsdl


Ignore:
Timestamp:
2008-08-08T12:17:50+12:00 (16 years ago)
Author:
anna
Message:

Improved customization of metadata sets/elements used in the Depositor. Two aspects involved: the front-end user interface (depositoraction.cpp) and back-end GLI format panel. Associated changes include the depositor's macro file, GLI dictionary and GLI help document

Location:
gsdl/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/macros/deposit.dm

    r14738 r16680  
    1616# collector
    1717_globallinks_ {_homelink_}
     18
     19# metadata fields that will be displayed in the step1 page,
     20# this is determined by the depositormetadata macro defined in the collection's collect.cfg
     21_metadataconf_ {var DepositorMDFields = new Array();}
     22
     23# store any existing metadata values
     24_cachedmetadatavalues_ {var CachedMDValues = new Array();}
    1825
    1926#######################################################################
     
    146153
    147154#here goes the "memorization" macros for each form field. 
    148 _di1md.dc.Title_ {_If_("_:cgiargdi1md.dc.Title_" eq  "_cgiargdi1md.dc.Title_",_cgiargdi1md.dc.Title_,)}
    149 _di1md.dc.Creator_ {_If_("_:cgiargdi1md.dc.Creator_" eq  "_cgiargdi1md.dc.Creator_",_cgiargdi1md.dc.Creator_,)}
    150 _di1md.dc.Description_ {_If_("_:cgiargdi1md.dc.Description_" eq  "_cgiargdi1md.dc.Description_",_cgiargdi1md.dc.Description_,)}
     155#_di1md.Title_ {_If_("_:cgiargdi1md.Title_" eq  "_cgiargdi1md.Title_",_cgiargdi1md.Title_,)}
     156#_di1md.Creator_ {_If_("_:cgiargdi1md.Creator_" eq  "_cgiargdi1md.Creator_",_cgiargdi1md.Creator_,)}
     157#_di1md.Description_ {_If_("_:cgiargdi1md.Description_" eq  "_cgiargdi1md.Description_",_cgiargdi1md.Description_,)}
     158#_di1md.Subject_ {_If_("_:cgiargdi1md.Subject_" eq "_cgiargdi1md.Subject_",_cgiargdi1md.Subject,)}
    151159
    152160_step1scriptextra_ {
     161
     162_metadataconf_
     163_cachedmetadatavalues_
     164
     165function loadForm() \{
     166
     167    var formcontainer = document.getElementById('formcontainer');
     168   
     169    if (!formcontainer) \{
     170        return;
     171    \}
     172   
     173    for (i=0; i < DepositorMDFields.length; i++) \{
     174        if (DepositorMDFields[i]==null) \{
     175            continue;
     176        \}
     177        metadataField = DepositorMDFields[i];
     178       
     179        var labelCell = document.createElement("td");
     180        labelCell.innerHTML = metadataField.label + ": ";
     181        labelCell.setAttribute("title", metadataField.tooltip);                         
     182
     183        var cachedValue;
     184        if(CachedMDValues[0] !=null && CachedMDValues[0]["di1md." + metadataField.name])\{
     185            cachedValue = CachedMDValues[0]["di1md." + metadataField.name];
     186        \} else \{
     187            cachedValue = "";
     188        \}
     189       
     190        var inputObj;
     191        if (metadataField.type=="text") \{
     192            inputObj = document.createElement("input");             
     193            inputObj.setAttribute("type","text");           
     194            inputObj.setAttribute("size","74");
     195            inputObj.setAttribute("value", cachedValue);
     196        \}
     197        else if (metadataField.type=="textarea") \{
     198            inputObj = document.createElement("textarea");             
     199            inputObj.setAttribute("rows","5");
     200            inputObj.setAttribute("cols", "40");
     201            inputObj.innerHTML = cachedValue;
     202        \} 
     203        inputObj.setAttribute("name", "di1md."+ metadataField.name);       
     204       
     205        var inputCell = document.createElement("td");
     206        inputCell.appendChild(inputObj);       
     207                               
     208        var entry = document.createElement("tr");   
     209        entry.appendChild(labelCell);
     210        entry.appendChild(inputCell);
     211       
     212        formcontainer.appendChild(entry);
     213    \}
     214\}
    153215
    154216function check\_submit (gotopage) \{
     
    157219  form.submit();
    158220\}
     221
     222if (window.addEventListener) window.addEventListener("load", loadForm, false);
     223else if (window.attachEvent) window.attachEvent("onload", loadForm);
     224
    159225}
    160226
     
    165231<input type=hidden name="e" value="_decodedcompressedoptions_">
    166232<input type=hidden name="p" value="_cgiargp_">
     233
    167234
    168235<center>
     
    178245
    179246<!--input goes here-->
    180 <p><table>
    181 <tr>
    182   <td>_textTitle_:</td>
    183   <td> <input type=text name=di1md.dc.Title value="_di1md.dc.Title_" size=74></td>
    184 </tr>
    185 <tr>
    186   <td>_textCreator_:</td>
    187   <td><input type=text name=di1md.dc.Creator value = "_di1md.dc.Creator_" size=74></td>
    188 </tr>
    189 <tr>
    190   <td>_textDescription_:</td>
    191   <td> <textarea rows=5 cols=40 name=di1md.dc.Description>_di1md.dc.Description_</textarea></td>
    192 
    193 </tr>
    194 </table>
    195 
    196 <!--
    197 <BR>
    198 <BR>
    199 <p>_textDescription_: <textarea rows=5 cols=20 name=di1md.dc.Description>_di1md.dc.Description_</textarea></p>
    200 </ul>
    201 -->
     247<!--dynamic load the metadata elements as configured in the collection's collect.cfg-->
     248<p><table id="formcontainer"></table>
    202249
    203250<div class="divbar">&nbsp;</div>
     
    249296
    250297#here goes the "memorization" macros for each form field. 
    251 #_di1_ {_If_("_:cgiargdi1md.dc.Title_" eq  "_cgiargdi1md.dc.Title_",_cgiargdi1md.dc.Title_,)}
    252 #_di1md.dc.Creator_ {_If_("_:cgiargdi1md.dc.Creator_" eq  "_cgiargdi1md.dc.Creator_",_cgiargdi1md.dc.Creator_,)}
     298#_di1_ {_If_("_:cgiargdi1md.Title_" eq  "_cgiargdi1md.Title_",_cgiargdi1md.Title_,)}
     299#_di1md.Creator_ {_If_("_:cgiargdi1md.Creator_" eq  "_cgiargdi1md.Creator_",_cgiargdi1md.Creator_,)}
    253300
    254301_step3scriptextra_ {
  • gsdl/trunk/runtime-src/src/recpt/depositoraction.cpp

    r16310 r16680  
    362362      args["di1lastpage"] = lastpage_textt;     
    363363    }
     364
     365    // create cached metadata values
     366    text_t cached_metadata_values = "";
     367    cgiargsclass::const_iterator args_here = args.begin();
     368    cgiargsclass::const_iterator args_end = args.end();
     369    while (args_here != args_end) {
     370      text_t args_name = (*args_here).first;
     371      int prefix_len = macro_prefix.size();
     372      text_t args_prefix = substr(args_name.begin(),args_name.begin()+prefix_len+3);
     373
     374      if (args_prefix == (macro_prefix+"md.")) {     
     375    text_t args_val = args[args_name];
     376    text_t args_suffix = substr(args_name.begin()+prefix_len+3,args_name.end());
     377
     378    text_tarray mdvalues;
     379    splitchar (args_val.begin(), args_val.end(), ',', mdvalues);
     380    int numvalues = mdvalues.size();
     381
     382    for (int i = 0; i < numvalues; ++i) {
     383      if (!mdvalues[i].empty()) {         
     384        decode_cgi_arg(mdvalues[i]);
     385
     386        if (cached_metadata_values == "") {
     387          cached_metadata_values = "var CachedMDValues = new Array(\\{";
     388        } else {
     389          cached_metadata_values += ",";
     390        }
     391
     392        cached_metadata_values += "\"" + args_name + "\":\"" + args_val + "\"";
     393      }
     394    }   
     395      }
     396      ++args_here;
     397    }
     398
     399    if (cached_metadata_values != "") {
     400      cached_metadata_values += "\\});";
     401      args["cachedMDValues"] = cached_metadata_values;
     402    }
    364403  }
    365404  return true;
     
    420459  text_t depositorbar = "<table class=wizardbar border=0 cellspacing=4 cellpadding=0><tr>\n";
    421460
    422   if(stepstring == "step") {
     461  if(stepstring == "step") {   
     462    // check configured metadata elements
     463    if (args["metadataconf"] == "var DepositorMDFields = new Array();" || args["metadataconf"] == "") {
     464      text_t cfgfile_name = filename_cat (collecthome, args[macro_prefix + "dirname"], "etc", "collect.cfg");
     465      text_t cfgfile_content;
     466      text_t metadata_str;
     467     
     468      if (read_file (cfgfile_name, cfgfile_content)) {
     469    text_t::const_iterator here = cfgfile_content.begin();
     470    text_t::const_iterator end = cfgfile_content.end();
     471    while (here != end) {
     472      here = findchar (here, end, 'd');
     473      if (here == end) break;
     474      if ((here+17 < end) && (substr (here, here+17) == "depositormetadata")) {
     475        here = findchar (here, end, '"');
     476        if (here == end) break; 
     477        text_t enddelimit = "\"\n";
     478        getdelimitstr (here+1, end, enddelimit, metadata_str);
     479        args["metadataconf"] = "var DepositorMDFields = new Array("+metadata_str+");";     
     480      }
     481      ++here;
     482    }
     483      }
     484
     485      if (metadata_str == "") {
     486    args["metadataconf"] = "var DepositorMDFields = new Array({\"name\":\"dc.Title\",\"label\":\"Title\",\"tooltip\":\"dc.Title: A name given to the resource.\",\"type\":\"text\"}, {\"name\":\"dc.Creator\",\"label\":\"Creator\",\"tooltip\":\"dc.Creator: An entity primarily responsible for making the content of the resource.\",\"type\":\"text\"}, {\"name\":\"dc.Description\",\"label\":\"Description\",\"tooltip\":\"dc.Description: An account of the content of the resource.\",\"type\":\"textarea\"});";
     487      }
     488    }
    423489
    424490    here = depositor_page.begin();
     
    444510      depositorbar += "<td>_icongreyarrow_</td>\n";
    445511
    446     }
     512    }   
    447513
    448514    //the build and preview pages are always last
     
    467533
    468534    depositorbar += "</tr></table>\n";
    469    
     535
     536    // set the javascript so that the metadata form can read the existing values
     537    if (args["cachedMDValues"] != "") {
     538      disp.setmacro("cachedmetadatavalues", "depositor", args["cachedMDValues"]);
     539    }
     540    if (args["metadataconf"] != "") {
     541      disp.setmacro("metadataconf", "depositor", args["metadataconf"]);
     542    }   
    470543  }
    471544 
     
    710783    metadata_file += "        <Description>\n";
    711784
    712 
     785   
    713786    cgiargsclass::const_iterator args_here = args.begin();
    714787    cgiargsclass::const_iterator args_end = args.end();
     
    735808        decode_cgi_arg(mdvalues[i]);
    736809
    737         metadata_file += "            <Metadata mode=\"accumulate\" name=\"";
     810        metadata_file += "            <Metadata mode=\"accumulate\" name=\"";       
    738811        metadata_file += args_suffix;
    739812        metadata_file += "\">";
     
    743816      }
    744817    }
    745 
    746       }
    747 
     818      }       
    748819
    749820      ++args_here;
Note: See TracChangeset for help on using the changeset viewer.