![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
using System;
2
3 using System.Runtime.InteropServices;
4
5 using System.Web.UI;
6
7 using System.Web.UI.WebControls;
8
9 using System.Web.UI.WebControls.WebParts;
10
11 using System.Xml.Serialization;using Microsoft.SharePoint;
12
13 using Microsoft.SharePoint.WebControls;
14
15 using Microsoft.SharePoint.WebPartPages;
16
17 using System.Data;
18
19 using System.Xml;
20
21 using System.Xml.Xsl;
22
23 using Microsoft.Office.Server;
24
25 using Microsoft.Office.Server.Audience;
26
27 using System.Collections;
28
29 using System.Web;
30
31 namespace TargetedLinks
32
33 {
34
35 [Guid("06255a6e-ca36-4daa-8860-147d80cfa688")]
36
37 public class TargetedLinks : System.Web.UI.WebControls.WebParts.WebPart
38
39 {
40
41 #region List Name
42
43 private string _strSiteUrl;
44
45 [Personalizable(PersonalizationScope.User), WebBrowsable(true),
46
47 WebDisplayName("List Name"), WebDescription("List Name Input")]
48
49 public string SiteUrl
50
51 {
52
53 get { return _strSiteUrl; }
54
55 set { _strSiteUrl = value; }
56
57 }
58
59 #endregion
60
61 #region displayXML
62
63 #region Private Variables
64
65 bool displayXML = false;
66
67 #endregion
68
69 #region Properties
70
71 /// <summary>
72
73 /// Whether to scan subfolders or not
74
75 /// </summary>
76
77 [WebBrowsable(true), Personalizable(true), WebDisplayName("Display XML source"), WebDescription(" Xml Source will appear in a a textarea")]
78
79 public bool DisplayXML
80
81 {
82
83 get { return displayXML; }
84
85 set { displayXML = value; }
86
87 }
88
89 #endregion
90
91 #endregion
92
93 #region link image
94
95 private string _imgsrc="";
96
97 [Personalizable(PersonalizationScope.User), WebBrowsable(true),
98
99 WebDisplayName("Link image"), WebDescription("image src")]
100
101 public string StrImageSrc
102
103 {
104
105 get { return _imgsrc; }
106
107 set { _imgsrc = value; }
108
109 }
110
111 #endregion
112
113 #region xslt
114
115 private string _xsltpath;
116
117 [Personalizable(PersonalizationScope.User), WebBrowsable(true),
118
119 WebDisplayName("XSLT Path"), WebDescription("XSLT Path")]
120
121 public string StrXSLT
122
123 {
124
125 get { return _xsltpath; }
126
127 set { _xsltpath = value; }
128
129 }
130
131 #endregion
132
133 public TargetedLinks()
134
135 {
136
137 }
138
139 #region GetUserAudiencesNamesArray
140
141 public static string[] GetUserAudiencesNamesArray()
142
143 {
144
145 ServerContext context = ServerContext.Current;
146
147 SPWeb web = SPControl.GetContextWeb(HttpContext.Current);
148
149 AudienceManager manaer = new AudienceManager(context);
150
151 ArrayList arrList = manaer.GetUserAudienceIDs(HttpContext.Current.User.Identity.Name, true, web);
152
153 string[] names = new string[arrList.Count];
154
155 for (int i = 0; i < arrList.Count; i++)
156
157 {
158
159 names[i] = ((AudienceNameID)arrList[i]).AudienceName;
160
161 }
162
163 return names;
164
165 }
166
167 #endregion
168
169 protected override void RenderContents(HtmlTextWriter writer)
170
171 {
172
173 if (!String.IsNullOrEmpty(SiteUrl))
174
175 {
176
177 SPSite site = new SPSite(SPContext.Current.Site.Url);
178
179 SPList olist = site.RootWeb.Lists[SiteUrl];
180
181 #region SPSiteDataQuery
182
183 SPSiteDataQuery q = new SPSiteDataQuery();
184
185 q.Lists = "<Lists><List ID=" + olist.ID.ToString() + "/></Lists>";
186
187 #region Query
188
189 string _strQuery = "";
190
191 string _strFirst = "<Where>";
192
193 string _queryorder = "";
194
195 #region Get UserInfo
196
197 //string account = this.Page.User.Identity.Name;
198
199 //SPUser sUser = w.CurrentUser;
200
201 for (int i = 0; i < GetUserAudiencesNamesArray().Length; i++)
202
203 {
204
205 _strFirst += "<Or>";
206
207 if (i > 0)
208
209 {
210
211 _strQuery += "<Contains><FieldRef Name='Target_x0020_Audiences' /><Value Type='TargetTo'>" + GetUserAudiencesNamesArray()[i].ToString() + "</Value></Contains></Or>";
212
213 }
214
215 else
216
217 {
218
219 _strQuery += "<Contains><FieldRef Name='Target_x0020_Audiences' /><Value Type='TargetTo'>" + GetUserAudiencesNamesArray()[i].ToString() + "</Value></Contains>";
220
221 }
222
223 }
224
225 _strQuery = _strFirst + _strQuery;
226
227 _strQuery += "<IsNull><FieldRef Name='Target_x0020_Audiences' /></IsNull></Or>";
228
229 _strQuery += "</Where><OrderBy><FieldRef Name='ID' Ascending='False' /></OrderBy>";
230
231 #endregion
232
233 _strQuery += _queryorder;
234
235 q.Query = _strQuery;
236
237 #endregion
238
239 q.Webs = "<Webs Scope='SiteCollection' />";
240
241 q.ViewFields = "<FieldRef Name='URL' /><FieldRef Name='ID' /><FieldRef Name='Title' />";
242
243 DataTable dt = null;
244
245 SPWeb w = site.OpenWeb();
246
247 dt = w.GetSiteData(q);
248
249 DataSet ds = new DataSet("rows");
250
251 ds.Tables.Add(dt);
252
253 w = null;
254
255 #region xml dom
256
257 XmlDocument doc = new XmlDocument();
258
259 doc.LoadXml(ds.GetXml());
260
261 if (!String.IsNullOrEmpty(StrXSLT))
262
263 {
264
265 System.Xml.Xsl.XslCompiledTransform xslt = new System.Xml.Xsl.XslCompiledTransform();
266
267 xslt.Load(Page.Server.MapPath(StrXSLT));
268
269 XsltArgumentList arglist = new XsltArgumentList();
270
271 arglist.AddParam("ImageSrc", "", StrImageSrc);
272
273 xslt.Transform(doc, arglist, writer);
274
275 }
276
277 else
278
279 {
280
281 writer.Write("please input the webpart property:XSLT Path");
282
283 }
284
285 #endregion
286
287 #endregion
288
289 #region output xml
290
291 if (DisplayXML)
292
293 {
294
295 writer.Write(String.Format("<textarea style='height:100px;width:80%;text-align:center;'>{0}</textarea>", UtilityLibrary.XMLUtil.ConvertXMLToString(doc)));
296
297 }
298
299 #endregion
300
301 }
302
303 else
304
305 {
306
307 writer.Write("please input the webpart property:List Name");
308
309 }
310
311 }
312
313 protected override void CreateChildControls()
314
315 {
316
317 base.CreateChildControls();
318
319 // TODO: add custom rendering code here.
320
321 // Label label = new Label();
322
323 // label.Text = "Hello World";
324
325 // this.Controls.Add(label);
326
327 }
328
329 }
330
331 }
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="xml" indent="yes"/> <xsl:param name="ImageSrc" select="Blue" /> <xsl:template match="/"> <link rel="stylesheet" type="text/css" href="/wpresources/QuickLink_Sources/stylesheet.css"/> <ul id="ul_quicklink"> <xsl:for-each select="rows/Table1"> <li> <xsl:choose> <xsl:when test="string-length($ImageSrc)>0"> <xsl:attribute name="style"> list-style-image:url(<xsl:value-of select="$ImageSrc"/>); </xsl:attribute> </xsl:when> </xsl:choose> <xsl:choose> <xsl:when test="contains(URL,',')"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="substring-before(URL,',')"/> </xsl:attribute> <xsl:attribute name="target"> <xsl:text>_blank</xsl:text> </xsl:attribute> <xsl:value-of select="substring-after(URL,',')"/> </xsl:element> </xsl:when> </xsl:choose> </li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet>