Repository navigation
Expand file tree
/
Copy pathuQuery-Media.cs
More file actions
162 lines (143 loc) · 3.93 KB
/
Copy pathuQuery-Media.cs
File metadata and controls
162 lines (143 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
using System;
using System.Collections.Generic;
using umbraco.cms.businesslogic.media;
namespace uComponents.Core
{
/// <summary>
/// uQuery sub-class for Media
/// </summary>
public static partial class uQuery
{
/// <summary>
/// Get a collection of media items from an XPath expression (note XML source is currently a flat structure)
/// </summary>
/// <param name="xPath">XPath expression</param>
/// <returns>collection or empty collection</returns>
public static List<Media> GetMediaByXPath(string xPath)
{
var media = new List<Media>();
var xmlDocument = uQuery.GetPublishedXml(UmbracoObjectType.Media);
var xPathNavigator = xmlDocument.CreateNavigator();
var xPathNodeIterator = xPathNavigator.Select(xPath);
while (xPathNodeIterator.MoveNext())
{
var mediaItem = uQuery.GetMedia(xPathNodeIterator.Current.Evaluate("string(@id)").ToString());
if (mediaItem != null)
{
media.Add(mediaItem);
}
}
return media;
}
/// <summary>
/// Get collection of media objects from the supplied CSV of IDs
/// </summary>
/// <param name="csv">string csv of IDs</param>
/// <returns>collection or emtpy collection</returns>
public static List<Media> GetMediaByCsv(string csv)
{
var media = new List<Media>();
var ids = uQuery.GetCsvIds(csv);
if (ids != null)
{
foreach (string id in ids)
{
var mediaItem = uQuery.GetMedia(id);
if (mediaItem != null)
{
media.Add(mediaItem);
}
}
}
return media;
}
/// <summary>
/// Gets the media by XML.
/// </summary>
/// <param name="xml">The XML.</param>
/// <returns></returns>
public static List<Media> GetMediaByXml(string xml)
{
var media = new List<Media>();
var ids = uQuery.GetXmlIds(xml);
if (ids != null)
{
foreach (int id in ids)
{
var mediaItem = uQuery.GetMedia(id);
if (mediaItem != null)
{
media.Add(mediaItem);
}
}
}
return media;
}
/// <summary>
/// Get Media by name
/// </summary>
/// <param name="name">name of node to look for</param>
/// <returns>list of nodes, or empty list</returns>
public static List<Media> GetMediaByName(string name)
{
return uQuery.GetMediaByXPath(string.Concat("descendant::*[@nodeName='", name, "']"));
}
/// <summary>
/// Get Media by media type alias
/// </summary>
/// <param name="mediaTypeAlias">The media type alias</param>
/// <returns>list of media, or empty list</returns>
public static List<Media> GetMediaByType(string mediaTypeAlias)
{
// Both XML schema versions have this attribute
return uQuery.GetMediaByXPath(string.Concat("descendant::*[@nodeTypeAlias='", mediaTypeAlias, "']"));
}
// public static Media GetCurrentMedia() { }
/// <summary>
/// Get media item from an ID
/// </summary>
/// <param name="mediaId">string ID of media item to get</param>
/// <returns>media or null</returns>
public static Media GetMedia(string mediaId)
{
int id;
Media mediaItem = null;
if (int.TryParse(mediaId, out id))
{
mediaItem = uQuery.GetMedia(id);
}
return mediaItem;
}
/// <summary>
/// Get media item from an ID
/// </summary>
/// <param name="id">ID of media item to get</param>
/// <returns>Media or null</returns>
public static Media GetMedia(int id)
{
// suppress error if media with supplied id doesn't exist
try
{
return new Media(id);
}
catch
{
return null;
}
}
/// <summary>
/// Extension method on Media collection to return key value pairs of: media.Id / media.Text
/// </summary>
/// <param name="media">generic list of Media objects</param>
/// <returns>a collection of mediaIDs and their text fields</returns>
public static Dictionary<int, string> ToNameIds(this List<Media> media)
{
var dictionary = new Dictionary<int, string>();
foreach (var mediaItem in media)
{
dictionary.Add(mediaItem.Id, mediaItem.Text);
}
return dictionary;
}
}
}